Repository: knox
Updated Branches:
  refs/heads/master 64a762f53 -> c7da8f6b7


KNOX-1198 - Support Ambari service discovery mappings override/augmentation 
with external config


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

Branch: refs/heads/master
Commit: c7da8f6b7d9d9296e453df2ab296f9fce4e76dfb
Parents: 64a762f
Author: Phil Zampino <pzamp...@apache.org>
Authored: Thu Mar 1 16:01:55 2018 -0500
Committer: Phil Zampino <pzamp...@apache.org>
Committed: Fri Mar 2 11:27:43 2018 -0500

----------------------------------------------------------------------
 .../discovery/ambari/AmbariCluster.java         |  14 +--
 .../ambari/AmbariDynamicServiceURLCreator.java  |  12 +-
 .../ambari/AmbariServiceDiscovery.java          |  43 +++++--
 .../ambari/ServiceURLPropertyConfig.java        |  50 +++++++-
 .../AmbariDynamicServiceURLCreatorTest.java     |  82 ++++++++++--
 .../ambari/AmbariServiceDiscoveryTest.java      | 126 +++++++++++++++++++
 6 files changed, 295 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/knox/blob/c7da8f6b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariCluster.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariCluster.java
 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariCluster.java
index 35a1206..e93992c 100644
--- 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariCluster.java
+++ 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariCluster.java
@@ -47,19 +47,15 @@ class AmbariCluster implements ServiceDiscovery.Cluster {
                 zooKeeperHAConfigMappings.setProperty(name, 
defaults.getProperty(name));
             }
 
-            // Attempt to apply overriding or additional mappings
+            // Attempt to apply overriding or additional mappings from 
external source
             String overridesPath = 
System.getProperty(ZK_CONFIG_MAPPING_SYSTEM_PROPERTY);
             if (overridesPath != null) {
                 Properties overrides = new Properties();
-                InputStream in = new FileInputStream(overridesPath);
-                try {
+                try (InputStream in = new FileInputStream(overridesPath)) {
                     overrides.load(in);
-                } finally {
-                    in.close();
-                }
-
-                for (String name : overrides.stringPropertyNames()) {
-                    zooKeeperHAConfigMappings.setProperty(name, 
overrides.getProperty(name));
+                    for (String name : overrides.stringPropertyNames()) {
+                        zooKeeperHAConfigMappings.setProperty(name, 
overrides.getProperty(name));
+                    }
                 }
             }
         } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/knox/blob/c7da8f6b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
index ceb7b50..96d462b 100644
--- 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
+++ 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreator.java
@@ -40,23 +40,23 @@ class AmbariDynamicServiceURLCreator implements 
ServiceURLCreator {
     AmbariDynamicServiceURLCreator(AmbariCluster cluster) {
         this.cluster = cluster;
 
+        // Load the default internal configuration
+        config = new ServiceURLPropertyConfig();
+
+        // Attempt to apply overriding or additional mappings from external 
source
         String mappingConfiguration = 
System.getProperty(MAPPING_CONFIG_OVERRIDE_PROPERTY);
         if (mappingConfiguration != null) {
             File mappingConfigFile = new File(mappingConfiguration);
             if (mappingConfigFile.exists()) {
                 try {
-                    config = new ServiceURLPropertyConfig(mappingConfigFile);
+                    ServiceURLPropertyConfig overrides = new 
ServiceURLPropertyConfig(mappingConfigFile);
                     
log.loadedComponentConfigMappings(mappingConfigFile.getAbsolutePath());
+                    config.setAll(overrides); // Apply overrides/additions
                 } catch (Exception e) {
                     
log.failedToLoadComponentConfigMappings(mappingConfigFile.getAbsolutePath(), e);
                 }
             }
         }
-
-        // If there is no valid override configured, fall-back to the internal 
mapping configuration
-        if (config == null) {
-            config = new ServiceURLPropertyConfig();
-        }
     }
 
     AmbariDynamicServiceURLCreator(AmbariCluster cluster, File 
mappingConfiguration) throws IOException {

http://git-wip-us.apache.org/repos/asf/knox/blob/c7da8f6b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariServiceDiscovery.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariServiceDiscovery.java
 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariServiceDiscovery.java
index 6a6a888..80009cc 100644
--- 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariServiceDiscovery.java
+++ 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariServiceDiscovery.java
@@ -16,6 +16,8 @@
  */
 package org.apache.knox.gateway.topology.discovery.ambari;
 
+import java.io.FileInputStream;
+import java.io.InputStream;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -45,6 +47,9 @@ class AmbariServiceDiscovery implements ServiceDiscovery {
 
     static final String AMBARI_SERVICECONFIGS_URI = 
AmbariClientCommon.AMBARI_SERVICECONFIGS_URI;
 
+    static final String COMPONENT_CONFIG_MAPPING_SYSTEM_PROPERTY =
+                                                  
"org.apache.knox.gateway.topology.discovery.ambari.component.mapping";
+
     private static final String COMPONENT_CONFIG_MAPPING_FILE =
                                                         
"ambari-service-discovery-component-config-mapping.properties";
 
@@ -56,15 +61,7 @@ class AmbariServiceDiscovery implements ServiceDiscovery {
     // Map of component names to service configuration types
     private static Map<String, String> componentServiceConfigs = new 
HashMap<>();
     static {
-        try {
-            Properties configMapping = new Properties();
-            
configMapping.load(AmbariServiceDiscovery.class.getClassLoader().getResourceAsStream(COMPONENT_CONFIG_MAPPING_FILE));
-            for (String componentName : configMapping.stringPropertyNames()) {
-                componentServiceConfigs.put(componentName, 
configMapping.getProperty(componentName));
-            }
-        } catch (Exception e) {
-            
log.failedToLoadServiceDiscoveryURLDefConfiguration(COMPONENT_CONFIG_MAPPING_FILE,
 e);
-        }
+        initializeComponentConfigMappings();
     }
 
     @GatewayService
@@ -78,6 +75,34 @@ class AmbariServiceDiscovery implements ServiceDiscovery {
 
     private boolean isInitialized = false;
 
+    //
+    static void initializeComponentConfigMappings(){
+        try {
+            componentServiceConfigs.clear();
+
+            Properties configMapping = new Properties();
+            
configMapping.load(AmbariServiceDiscovery.class.getClassLoader().getResourceAsStream(COMPONENT_CONFIG_MAPPING_FILE));
+            for (String componentName : configMapping.stringPropertyNames()) {
+                componentServiceConfigs.put(componentName, 
configMapping.getProperty(componentName));
+            }
+
+            // Attempt to apply overriding or additional mappings from 
external source
+            String overridesPath = 
System.getProperty(COMPONENT_CONFIG_MAPPING_SYSTEM_PROPERTY);
+            if (overridesPath != null) {
+                Properties overrides = new Properties();
+                try (InputStream in = new FileInputStream(overridesPath)) {
+                    overrides.load(in);
+                    for (String name : overrides.stringPropertyNames()) {
+                        componentServiceConfigs.put(name, 
overrides.getProperty(name));
+                    }
+                }
+            }
+        } catch (Exception e) {
+            
log.failedToLoadServiceDiscoveryURLDefConfiguration(COMPONENT_CONFIG_MAPPING_FILE,
 e);
+        }
+    }
+
+
     AmbariServiceDiscovery() {
     }
 

http://git-wip-us.apache.org/repos/asf/knox/blob/c7da8f6b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/ServiceURLPropertyConfig.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/ServiceURLPropertyConfig.java
 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/ServiceURLPropertyConfig.java
index 9f3da3d..58096e9 100644
--- 
a/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/ServiceURLPropertyConfig.java
+++ 
b/gateway-discovery-ambari/src/main/java/org/apache/knox/gateway/topology/discovery/ambari/ServiceURLPropertyConfig.java
@@ -131,8 +131,56 @@ class ServiceURLPropertyConfig {
         return urlPatterns.get(service);
     }
 
+
+    void setAll(ServiceURLPropertyConfig overrides) {
+        if (overrides != null) {
+            // URL patterns
+            if (overrides.urlPatterns != null) {
+                for (String service : overrides.urlPatterns.keySet()) {
+                    URLPattern overridePattern = 
overrides.urlPatterns.get(service);
+                    if (this.urlPatterns.containsKey(service)) {
+                        this.urlPatterns.replace(service, overridePattern);
+                    } else {
+                        this.urlPatterns.put(service, overridePattern);
+                    }
+                }
+            }
+
+            // Properties
+            for (String service : overrides.properties.keySet()) {
+                Map<String, Property> serviceProperties = 
overrides.properties.get(service);
+                if (serviceProperties != null) {
+                    // Remove the original property set for this service
+                    Map<String, Property> existingServiceProps = 
this.properties.get(service);
+                    if (existingServiceProps != null) {
+                        existingServiceProps.clear();
+                    }
+
+                    // Add the override properties
+                    for (String propertyName : serviceProperties.keySet()) {
+                        setConfigProperty(service, propertyName, 
serviceProperties.get(propertyName));
+                    }
+                }
+            }
+        }
+    }
+
+    void setConfigProperty(String service, String name, Property value) {
+        Map<String, Property> serviceProperties = properties.get(service);
+        if (serviceProperties == null) {
+            serviceProperties = new HashMap<>();
+            properties.put(service, serviceProperties);
+        }
+        serviceProperties.put(name, value);
+    }
+
     Property getConfigProperty(String service, String property) {
-        return properties.get(service).get(property);
+        Property result = null;
+        Map<String, Property> serviceProperties = properties.get(service);
+        if (serviceProperties != null) {
+            result = serviceProperties.get(property);
+        }
+        return result;
     }
 
     static class URLPattern {

http://git-wip-us.apache.org/repos/asf/knox/blob/c7da8f6b/gateway-discovery-ambari/src/test/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreatorTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/test/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreatorTest.java
 
b/gateway-discovery-ambari/src/test/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreatorTest.java
index 23a5f5a..9f4ea59 100644
--- 
a/gateway-discovery-ambari/src/test/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreatorTest.java
+++ 
b/gateway-discovery-ambari/src/test/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariDynamicServiceURLCreatorTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.knox.gateway.topology.discovery.ambari;
 
+import org.apache.commons.io.FileUtils;
 import org.easymock.EasyMock;
 import org.junit.Test;
 
@@ -312,11 +313,28 @@ public class AmbariDynamicServiceURLCreatorTest {
     }
 
     @Test
+    public void testOozieURLFromInternalMappingWithExternalOverrides() throws 
Exception {
+        File tmpFile = 
File.createTempFile("knox-discovery-external-url-mapping", ".xml");
+        
System.setProperty(AmbariDynamicServiceURLCreator.MAPPING_CONFIG_OVERRIDE_PROPERTY,
 tmpFile.getAbsolutePath());
+        try {
+            FileUtils.writeStringToFile(tmpFile, 
OOZIE_OVERRIDE_MAPPING_FILE_CONTENTS, 
java.nio.charset.Charset.forName("utf-8"));
+            testOozieURL(null, "OOZIE", "http://host3:2222/OVERRIDE";);
+        } finally {
+            
System.clearProperty(AmbariDynamicServiceURLCreator.MAPPING_CONFIG_OVERRIDE_PROPERTY);
+            FileUtils.deleteQuietly(tmpFile);
+        }
+    }
+
+    @Test
     public void testOozieUIURLFromInternalMapping() throws Exception {
         testOozieURL(null, "OOZIEUI");
     }
 
     private void testOozieURL(Object mappingConfiguration, String serviceName) 
throws Exception {
+        testOozieURL(mappingConfiguration, serviceName, null);
+    }
+
+    private void testOozieURL(Object mappingConfiguration, String serviceName, 
String altExpectation) throws Exception {
         final String URL = "http://host3:2222";;
 
         AmbariComponent oozieServer = 
EasyMock.createNiceMock(AmbariComponent.class);
@@ -333,7 +351,7 @@ public class AmbariDynamicServiceURLCreatorTest {
         assertNotNull(urls);
         assertFalse(urls.isEmpty());
         String url = urls.get(0);
-        assertEquals(URL, url);
+        assertEquals((altExpectation != null ? altExpectation : URL), url);
     }
 
     @Test
@@ -1209,6 +1227,42 @@ public class AmbariDynamicServiceURLCreatorTest {
         assertEquals("http://{HOST}:{PORT}/{PATH}";, urls.get(0));
     }
 
+    @Test
+    public void testExtensionServiceURLFromOverride() throws Exception {
+        File tmpFile = 
File.createTempFile("knox-discovery-url-mapping-extension", ".xml");
+        
System.setProperty(AmbariDynamicServiceURLCreator.MAPPING_CONFIG_OVERRIDE_PROPERTY,
 tmpFile.getAbsolutePath());
+        try {
+            FileUtils.writeStringToFile(tmpFile, 
CUSTOM_AUGMENT_MAPPING_FILE_CONTENTS, 
java.nio.charset.Charset.forName("utf-8"));
+
+            final String[] HOSTNAMES = {"host2", "host4"};
+
+            // The extension service URL mapping leverages the HBase master 
config properties for convenience
+            final String HBASE_MASTER_PORT_PROPERTY = "hbase.master.info.port";
+
+            AmbariComponent hbaseMaster = 
EasyMock.createNiceMock(AmbariComponent.class);
+            Map<String, String> hbaseMasterConfig = new HashMap<>();
+            hbaseMasterConfig.put(HBASE_MASTER_PORT_PROPERTY, "60080");
+            
EasyMock.expect(hbaseMaster.getConfigProperties()).andReturn(hbaseMasterConfig).anyTimes();
+            
EasyMock.expect(hbaseMaster.getConfigProperty(HBASE_MASTER_PORT_PROPERTY))
+                
.andReturn(hbaseMasterConfig.get(HBASE_MASTER_PORT_PROPERTY)).anyTimes();
+            List<String> hbaseMasterHosts = Arrays.asList(HOSTNAMES);
+            
EasyMock.expect(hbaseMaster.getHostNames()).andReturn(hbaseMasterHosts).anyTimes();
+            EasyMock.replay(hbaseMaster);
+
+            AmbariCluster cluster = 
EasyMock.createNiceMock(AmbariCluster.class);
+            
EasyMock.expect(cluster.getComponent("HBASE_MASTER")).andReturn(hbaseMaster).anyTimes();
+            EasyMock.replay(cluster);
+
+            // Run the test
+            AmbariDynamicServiceURLCreator builder = newURLCreator(cluster, 
null);
+            List<String> urls = builder.create("DISCOVERYTEST", null);
+            validateServiceURLs(urls, HOSTNAMES, "http", "1234", 
"discoveryTest");
+        } finally {
+            
System.clearProperty(AmbariDynamicServiceURLCreator.MAPPING_CONFIG_OVERRIDE_PROPERTY);
+            FileUtils.deleteQuietly(tmpFile);
+        }
+    }
+
 
     /**
      * Convenience method for creating AmbariDynamicServiceURLCreator 
instances from different mapping configuration
@@ -1415,18 +1469,32 @@ public class AmbariDynamicServiceURLCreatorTest {
             "</service-discovery-url-mappings>\n";
 
 
-    private static final String OVERRIDE_MAPPING_FILE_CONTENTS =
+    private static final String OOZIE_OVERRIDE_MAPPING_FILE_CONTENTS =
             "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
             "<service-discovery-url-mappings>\n" +
-            "  <service name=\"WEBHDFS\">\n" +
-            "    
<url-pattern>http://{WEBHDFS_ADDRESS}/webhdfs/OVERRIDE</url-pattern>\n" +
+            "  <service name=\"OOZIE\">\n" +
+            "    <url-pattern>{OOZIE_URL}/OVERRIDE</url-pattern>\n" +
             "    <properties>\n" +
-            "      <property name=\"WEBHDFS_ADDRESS\">\n" +
-            "        <service-config 
name=\"HDFS\">hdfs-site</service-config>\n" +
-            "        
<config-property>dfs.namenode.http-address</config-property>\n" +
+            "      <property name=\"OOZIE_URL\">\n" +
+            "        <component>OOZIE_SERVER</component>\n" +
+            "        <config-property>oozie.base.url</config-property>\n" +
             "      </property>\n" +
             "    </properties>\n" +
             "  </service>\n" +
             "</service-discovery-url-mappings>\n";
 
+    private static final String CUSTOM_AUGMENT_MAPPING_FILE_CONTENTS =
+            "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
+            "<service-discovery-url-mappings>\n" +
+            "  <service name=\"DISCOVERYTEST\">\n" +
+            "    
<url-pattern>http://{HOST}:1234/discoveryTest</url-pattern>\n" +
+            "    <properties>\n" +
+            "      <property name=\"HOST\">\n" +
+            "        <component>HBASE_MASTER</component>\n" +
+            "        <hostname/>\n" +
+            "      </property>\n" +
+            "    </properties>\n" +
+            "  </service>\n" +
+            "</service-discovery-url-mappings>\n";
 }
+

http://git-wip-us.apache.org/repos/asf/knox/blob/c7da8f6b/gateway-discovery-ambari/src/test/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariServiceDiscoveryTest.java
----------------------------------------------------------------------
diff --git 
a/gateway-discovery-ambari/src/test/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariServiceDiscoveryTest.java
 
b/gateway-discovery-ambari/src/test/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariServiceDiscoveryTest.java
index 05fc4eb..c93e8cf 100644
--- 
a/gateway-discovery-ambari/src/test/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariServiceDiscoveryTest.java
+++ 
b/gateway-discovery-ambari/src/test/java/org/apache/knox/gateway/topology/discovery/ambari/AmbariServiceDiscoveryTest.java
@@ -18,14 +18,18 @@ package org.apache.knox.gateway.topology.discovery.ambari;
 
 import net.minidev.json.JSONObject;
 import net.minidev.json.JSONValue;
+import org.apache.commons.io.FileUtils;
 import org.apache.knox.gateway.topology.discovery.ServiceDiscovery;
 import org.apache.knox.gateway.topology.discovery.ServiceDiscoveryConfig;
 import org.easymock.EasyMock;
 import org.junit.Test;
 
+import java.io.File;
+import java.io.FileOutputStream;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertEquals;
@@ -85,6 +89,73 @@ public class AmbariServiceDiscoveryTest {
     }
 
 
+    @Test
+    public void testClusterDiscoveryWithExternalComponentConfigAugmentation() 
throws Exception {
+        final String discoveryAddress = "http://ambarihost:8080";;
+        final String clusterName = "myCluster";
+
+        // Create component config mapping override
+        Properties compConfOverrideProps = new Properties();
+        compConfOverrideProps.setProperty("DISCOVERY_TEST", "test-site");
+        File compConfOverrides = 
File.createTempFile(getClass().getName()+"component-conf-overrides", 
".properties");
+        compConfOverrideProps.store(new FileOutputStream(compConfOverrides), 
"Test Config Overrides");
+        
System.setProperty(AmbariServiceDiscovery.COMPONENT_CONFIG_MAPPING_SYSTEM_PROPERTY,
+                           compConfOverrides.getAbsolutePath());
+
+        // Create URL mapping override
+        final String URL_MAPPING_OVERRIDES =
+                "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
+                "<service-discovery-url-mappings>\n" +
+                "  <service name=\"DISCOVERYTEST\">\n" +
+                "    
<url-pattern>{TEST_ADDRESS}/discoveryTest</url-pattern>\n" +
+                "    <properties>\n" +
+                "      <property name=\"TEST_ADDRESS\">\n" +
+                "        <component>DISCOVERY_TEST</component>\n" +
+                "        
<config-property>discovery.test.base.url</config-property>\n" +
+                "      </property>\n" +
+                "    </properties>\n" +
+                "  </service>\n" +
+                "</service-discovery-url-mappings>\n";
+
+        File urlMappingOverrides = 
File.createTempFile(getClass().getName()+"_url-overrides", ".xml");
+        FileUtils.writeStringToFile(urlMappingOverrides,
+                                    URL_MAPPING_OVERRIDES,
+                                    java.nio.charset.Charset.forName("utf-8"));
+        
System.setProperty(AmbariDynamicServiceURLCreator.MAPPING_CONFIG_OVERRIDE_PROPERTY,
+                           urlMappingOverrides.getAbsolutePath());
+
+        // Re-initialize the component config mappings to include the extension
+        AmbariServiceDiscovery.initializeComponentConfigMappings();
+
+        ServiceDiscovery sd = new TestAmbariServiceDiscovery(clusterName);
+
+        ServiceDiscoveryConfig sdc = 
EasyMock.createNiceMock(ServiceDiscoveryConfig.class);
+        
EasyMock.expect(sdc.getAddress()).andReturn(discoveryAddress).anyTimes();
+        EasyMock.expect(sdc.getUser()).andReturn(null).anyTimes();
+        EasyMock.replay(sdc);
+
+        try {
+            ServiceDiscovery.Cluster cluster = sd.discover(sdc, clusterName);
+            assertNotNull(cluster);
+            assertEquals(clusterName, cluster.getName());
+            
assertTrue(AmbariCluster.class.isAssignableFrom(cluster.getClass()));
+            assertEquals(7, ((AmbariCluster) cluster).getComponents().size());
+
+            List<String> discTestURLs = 
cluster.getServiceURLs("DISCOVERYTEST");
+            assertNotNull(discTestURLs);
+            assertEquals(1, discTestURLs.size());
+            assertEquals("http://c6402.ambari.apache.org:11999/discoveryTest";, 
discTestURLs.get(0));
+        } finally {
+            
System.clearProperty(AmbariDynamicServiceURLCreator.MAPPING_CONFIG_OVERRIDE_PROPERTY);
+            
System.clearProperty(AmbariServiceDiscovery.COMPONENT_CONFIG_MAPPING_SYSTEM_PROPERTY);
+            FileUtils.deleteQuietly(compConfOverrides);
+
+            // Re-initialize the component config mappings without the 
extension
+            AmbariServiceDiscovery.initializeComponentConfigMappings();
+        }
+    }
+
+
     private static void printServiceURLs(ServiceDiscovery.Cluster cluster) {
         final String[] services = new String[]{"NAMENODE",
                                                "JOBTRACKER",
@@ -478,6 +549,36 @@ public class AmbariServiceDiscoveryTest {
     "      ]\n" +
     "    },\n" +
     "    {\n" +
+    "      \"href\" : 
\"http://c6401.ambari.apache.org:8080/api/v1/clusters/"+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"/services/DISCOVERYTEST\",\n";
 +
+    "      \"ServiceInfo\" : {\n" +
+    "        \"cluster_name\" : 
\""+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"\",\n" +
+    "        \"service_name\" : \"DISCOVERYTEST\"\n" +
+    "      },\n" +
+    "      \"components\" : [\n" +
+    "        {\n" +
+    "          \"href\" : 
\"http://c6401.ambari.apache.org:8080/api/v1/clusters/"+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"/services/DISCOVERYTEST/components/DISCOVERY_TEST\",\n";
 +
+    "          \"ServiceComponentInfo\" : {\n" +
+    "            \"cluster_name\" : 
\""+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"\",\n" +
+    "            \"component_name\" : \"DISCOVERY_TEST\",\n" +
+    "            \"service_name\" : \"DISCOVERYTEST\"\n" +
+    "          },\n" +
+    "          \"host_components\" : [\n" +
+    "            {\n" +
+    "              \"href\" : 
\"http://c6401.ambari.apache.org:8080/api/v1/clusters/"+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"/hosts/c6402.ambari.apache.org/host_components/DISCOVERY_TEST\",\n";
 +
+    "              \"HostRoles\" : {\n" +
+    "                \"cluster_name\" : 
\""+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"\",\n" +
+    "                \"component_name\" : \"DISCOVERY_TEST\",\n" +
+    "                \"host_name\" : \"c6402.ambari.apache.org\",\n" +
+    "                \"public_host_name\" : \"c6402.ambari.apache.org\",\n" +
+    "                \"service_name\" : \"DISCOVERYTEST\",\n" +
+    "                \"stack_id\" : \"HDP-2.6\"\n" +
+    "              }\n" +
+    "            }\n" +
+    "          ]\n" +
+    "        }\n" +
+    "      ]\n" +
+    "    },\n" +
+    "    {\n" +
     "      \"href\" : 
\"http://c6401.ambari.apache.org:8080/api/v1/clusters/"+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"/services/ZOOKEEPER\",\n";
 +
     "      \"ServiceInfo\" : {\n" +
     "        \"cluster_name\" : 
\""+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"\",\n" +
@@ -796,6 +897,30 @@ public class AmbariServiceDiscoveryTest {
     "      \"user\" : \"admin\"\n" +
     "    },\n" +
     "    {\n" +
+    "      \"href\" : 
\"http://c6401.ambari.apache.org:8080/api/v1/clusters/"+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"/configurations/service_config_versions?service_name=DISCOVERYTEST&service_config_version=3\",\n";
 +
+    "      \"cluster_name\" : 
\""+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"\",\n" +
+    "      \"configurations\" : [\n" +
+    "        {\n" +
+    "          \"Config\" : {\n" +
+    "            \"cluster_name\" : 
\""+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"\",\n" +
+    "            \"stack_id\" : \"HDP-2.6\"\n" +
+    "          },\n" +
+    "          \"type\" : \"test-site\",\n" +
+    "          \"tag\" : \"version1502131137103\",\n" +
+    "          \"version\" : 3,\n" +
+    "          \"properties\" : {\n" +
+    "            \"discovery.test.base.url\" : 
\"http://c6402.ambari.apache.org:11999\",\n"; +
+    "          },\n" +
+    "          \"properties_attributes\" : { }\n" +
+    "        }\n" +
+    "      ],\n" +
+    "      \"is_current\" : true,\n" +
+    "      \"service_config_version\" : 3,\n" +
+    "      \"service_name\" : \"DISCOVERYTEST\",\n" +
+    "      \"stack_id\" : \"HDP-2.6\",\n" +
+    "      \"user\" : \"admin\"\n" +
+    "    },\n" +
+    "    {\n" +
     "      \"href\" : 
\"http://c6401.ambari.apache.org:8080/api/v1/clusters/"+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"/configurations/service_config_versions?service_name=TEZ&service_config_version=1\",\n";
 +
     "      \"cluster_name\" : 
\""+TestAmbariServiceDiscovery.CLUSTER_PLACEHOLDER+"\",\n" +
     "      \"configurations\" : [\n" +
@@ -867,4 +992,5 @@ public class AmbariServiceDiscoveryTest {
     "  ]\n" +
     "}";
 
+
 }

Reply via email to