Repository: ambari
Updated Branches:
  refs/heads/trunk 15b12bc71 -> 3d3af0bce


AMBARI-13951. Service install will fail if the property-type attribute of any 
service config property has a value in a stack not known to ambari-server 
(Sebastian Toader via alejandro)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/3d3af0bc
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/3d3af0bc
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/3d3af0bc

Branch: refs/heads/trunk
Commit: 3d3af0bce733a13b81c6c3752648e110f976c441
Parents: 15b12bc
Author: Alejandro Fernandez <afernan...@hortonworks.com>
Authored: Thu Nov 19 17:29:24 2015 -0800
Committer: Alejandro Fernandez <afernan...@hortonworks.com>
Committed: Thu Nov 19 17:29:28 2015 -0800

----------------------------------------------------------------------
 .../ambari/server/state/PropertyInfo.java       | 11 +++++
 .../ambari/server/state/PropertyInfoTest.java   | 42 +++++++++++++++++++-
 2 files changed, 51 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/3d3af0bc/ambari-server/src/main/java/org/apache/ambari/server/state/PropertyInfo.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/PropertyInfo.java 
b/ambari-server/src/main/java/org/apache/ambari/server/state/PropertyInfo.java
index bc90a8c..53837db 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/PropertyInfo.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/PropertyInfo.java
@@ -19,9 +19,12 @@
 package org.apache.ambari.server.state;
 
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
 import org.apache.ambari.server.controller.StackConfigurationResponse;
 import org.w3c.dom.Element;
 
+import javax.xml.bind.Unmarshaller;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAnyElement;
@@ -72,6 +75,14 @@ public class PropertyInfo {
   private Set<PropertyDependencyInfo> dependedByProperties =
     new HashSet<PropertyDependencyInfo>();
 
+  //This method is called after all the properties (except IDREF) are 
unmarshalled for this object,
+  //but before this object is set to the parent object.
+  void afterUnmarshal(Unmarshaller unmarshaller, Object parent) {
+    // Iterate through propertyTypes and remove any unrecognized property types
+    // that may be introduced with custom service definitions
+    propertyTypes.remove(null);
+  }
+
   public PropertyInfo() {
 
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/3d3af0bc/ambari-server/src/test/java/org/apache/ambari/server/state/PropertyInfoTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/state/PropertyInfoTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/state/PropertyInfoTest.java
index 31cf80b..b11c5d8 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/state/PropertyInfoTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/state/PropertyInfoTest.java
@@ -17,22 +17,27 @@
  */
 package org.apache.ambari.server.state;
 
-import org.apache.ambari.server.state.stack.StackMetainfoXml;
+import com.google.common.collect.Sets;
 import org.junit.Test;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
 import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
+import javax.xml.transform.stream.StreamSource;
+import java.io.ByteArrayInputStream;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import static org.easymock.EasyMock.createNiceMock;
 import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 public class PropertyInfoTest {
 
@@ -89,4 +94,37 @@ public class PropertyInfoTest {
     assertEquals("value1", attributes.get("foo"));
     assertEquals("value2", attributes.get("bar"));
   }
+
+  @Test
+  public void testUnknownPropertyType() throws Exception {
+    // Given
+    String xml =
+      "<property>\n"+
+      "  <name>prop_name</name>\n" +
+      "  <value>prop_val</value>\n" +
+      "  <property-type>PASSWORD USER UNRECOGNIZED_TYPE</property-type>\n" +
+      "  <description>test description</description>\n" +
+      "</property>";
+
+
+    // When
+    PropertyInfo propertyInfo = propertyInfoFrom(xml);
+
+    // Then
+    Set<PropertyInfo.PropertyType> expectedPropertyTypes = 
Sets.newHashSet(PropertyInfo.PropertyType.PASSWORD, 
PropertyInfo.PropertyType.USER);
+
+    assertEquals(expectedPropertyTypes, propertyInfo.getPropertyTypes());
+  }
+
+  public static PropertyInfo propertyInfoFrom(String xml) throws JAXBException 
{
+    JAXBContext jaxbCtx = JAXBContext.newInstance(PropertyInfo.class);
+    Unmarshaller unmarshaller = jaxbCtx.createUnmarshaller();
+
+    return unmarshaller.unmarshal(
+      new StreamSource(
+        new ByteArrayInputStream(xml.getBytes())
+      )
+      , PropertyInfo.class
+    ).getValue();
+  }
 }
\ No newline at end of file

Reply via email to