Prechádzať zdrojové kódy

AMBARI-841. Fix comparison predicates in case where resource does not have property value. (Tom Beerbower via mahadev)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/branches/AMBARI-666@1396479 13f79535-47bb-0310-9956-ffa450edef68
Mahadev Konar 12 rokov pred
rodič
commit
01101f9ee7

+ 3 - 0
AMBARI-666-CHANGES.txt

@@ -12,6 +12,9 @@ AMBARI-666 branch (unreleased changes)
 
   NEW FEATURES
 
+  AMBARI-841. Fix comparison predicates in case where resource does not have
+  property value. (Tom Beerbower via mahadev)
+
   AMBARI-833. Add missing Path annotation to rest services for
   put/post/delete. (John Speidel via mahadev)
 

+ 2 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/EqualsPredicate.java

@@ -33,7 +33,8 @@ public class EqualsPredicate extends ComparisonPredicate {
 
   @Override
   public boolean evaluate(Resource resource) {
-    return getValue().compareTo(resource.getPropertyValue(getPropertyId())) == 0;
+    String propertyValue = resource.getPropertyValue(getPropertyId());
+    return propertyValue == null ? false : getValue().compareTo(propertyValue) == 0;
   }
 
   @Override

+ 2 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/GreaterEqualsPredicate.java

@@ -32,7 +32,8 @@ public class GreaterEqualsPredicate extends ComparisonPredicate {
 
   @Override
   public boolean evaluate(Resource resource) {
-    return getValue().compareTo(resource.getPropertyValue(getPropertyId())) <= 0;
+    String propertyValue = resource.getPropertyValue(getPropertyId());
+    return propertyValue == null ? false : getValue().compareTo(resource.getPropertyValue(getPropertyId())) <= 0;
   }
 
   @Override

+ 2 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/GreaterPredicate.java

@@ -31,7 +31,8 @@ public class GreaterPredicate extends ComparisonPredicate {
 
   @Override
   public boolean evaluate(Resource resource) {
-    return getValue().compareTo(resource.getPropertyValue(getPropertyId())) < 0;
+    String propertyValue = resource.getPropertyValue(getPropertyId());
+    return propertyValue == null ? false : getValue().compareTo(resource.getPropertyValue(getPropertyId())) < 0;
   }
 
   @Override

+ 2 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/LessEqualsPredicate.java

@@ -32,7 +32,8 @@ public class LessEqualsPredicate extends ComparisonPredicate {
 
   @Override
   public boolean evaluate(Resource resource) {
-    return getValue().compareTo(resource.getPropertyValue(getPropertyId())) >= 0;
+    String propertyValue = resource.getPropertyValue(getPropertyId());
+    return propertyValue == null ? false : getValue().compareTo(resource.getPropertyValue(getPropertyId())) >= 0;
   }
 
   @Override

+ 2 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/LessPredicate.java

@@ -31,7 +31,8 @@ public class LessPredicate extends ComparisonPredicate {
 
   @Override
   public boolean evaluate(Resource resource) {
-    return getValue().compareTo(resource.getPropertyValue(getPropertyId())) > 0;
+    String propertyValue = resource.getPropertyValue(getPropertyId());
+    return propertyValue == null ? false : getValue().compareTo(resource.getPropertyValue(getPropertyId())) > 0;
   }
 
   @Override

+ 6 - 0
ambari-server/src/test/java/org/apache/ambari/server/controller/predicate/EqualsPredicateTest.java

@@ -41,6 +41,12 @@ public class EqualsPredicateTest {
 
     resource.setProperty(propertyId, "bar");
     Assert.assertTrue(predicate.evaluate(resource));
+
+
+    propertyId = new PropertyIdImpl("fun", "category1", false);
+    predicate = new EqualsPredicate(propertyId, "bar");
+
+    Assert.assertFalse(predicate.evaluate(resource));
   }
 
   @Test