Bladeren bron

AMBARI-844. Mock JMX provider for manual tests. (Tom Beerbower via mahadev)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/branches/AMBARI-666@1396481 13f79535-47bb-0310-9956-ffa450edef68
Mahadev Konar 12 jaren geleden
bovenliggende
commit
947a9d5acc
18 gewijzigde bestanden met toevoegingen van 261 en 145 verwijderingen
  1. 2 0
      AMBARI-666-CHANGES.txt
  2. 2 13
      ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java
  3. 27 2
      ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterControllerImpl.java
  4. 1 1
      ambari-server/src/main/java/org/apache/ambari/server/controller/jdbc/JDBCProviderModule.java
  5. 2 2
      ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java
  6. 1 1
      ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/GreaterEqualsPredicate.java
  7. 1 1
      ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/GreaterPredicate.java
  8. 1 1
      ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/LessEqualsPredicate.java
  9. 1 1
      ambari-server/src/main/java/org/apache/ambari/server/controller/predicate/LessPredicate.java
  10. 28 7
      ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
  11. 72 0
      ambari-server/src/test/java/org/apache/ambari/server/controller/internal/TestProviderModule.java
  12. 1 1
      ambari-server/src/test/java/org/apache/ambari/server/controller/jdbc/JDBCPropertyProviderTest.java
  13. 41 0
      ambari-server/src/test/java/org/apache/ambari/server/controller/jdbc/TestJDBCResourceProvider.java
  14. 0 56
      ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXHelperTest.java
  15. 3 52
      ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java
  16. 17 7
      ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/TestHostMappingProvider.java
  17. 61 0
      ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/TestStreamProvider.java
  18. BIN
      ambari-server/src/test/resources/data.db

+ 2 - 0
AMBARI-666-CHANGES.txt

@@ -12,6 +12,8 @@ AMBARI-666 branch (unreleased changes)
 
   NEW FEATURES
 
+  AMBARI-844. Mock JMX provider for manual tests. (Tom Beerbower via mahadev)
+
   AMBARI-841. Fix comparison predicates in case where resource does not have
   property value. (Tom Beerbower via mahadev)
 

+ 2 - 13
ambari-server/src/main/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProvider.java

@@ -25,6 +25,7 @@ import org.apache.ambari.server.controller.spi.PropertyProvider;
 import org.apache.ambari.server.controller.spi.Request;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.utilities.PredicateHelper;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -119,7 +120,7 @@ public class GangliaPropertyProvider implements PropertyProvider {
     String component = resource.getPropertyValue(new PropertyIdImpl("component_name", "HostRoles", false));
 
     // ---- TODO : HACK to fix host name that's been made all lower case... Ganglia doesn't like!!
-    host = hackHostName(host);
+    host = PropertyHelper.fixHostName(host);
     // -----
 
     String cluster = COMPONENT_MAP.get(component);
@@ -160,17 +161,5 @@ public class GangliaPropertyProvider implements PropertyProvider {
     stringBuilder.append("]");
     return stringBuilder.toString();
   }
-
-  private String hackHostName(String host) {
-    int first_dash = host.indexOf('-');
-    int first_dot = host.indexOf('.');
-    String segment1 = host.substring(0, first_dash);
-    if (segment1.equals("domu")) {
-      segment1 = "domU";
-    }
-    String segment2 = host.substring(first_dash, first_dot).toUpperCase();
-    host = segment1 + segment2 + host.substring(first_dot);
-    return host;
-  }
 }
 

+ 27 - 2
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterControllerImpl.java

@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.controller.internal;
 
+import org.apache.ambari.server.controller.spi.PropertyId;
 import org.apache.ambari.server.controller.spi.ProviderModule;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.controller.spi.ClusterController;
@@ -27,9 +28,11 @@ import org.apache.ambari.server.controller.spi.Request;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.ResourceProvider;
 import org.apache.ambari.server.controller.spi.Schema;
+import org.apache.ambari.server.controller.utilities.PredicateHelper;
 
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.NoSuchElementException;
@@ -115,12 +118,34 @@ public class ClusterControllerImpl implements ClusterController {
     Set<Resource> keepers = resources;
 
     for (PropertyProvider propertyProvider : resourceProviders.get(type).getPropertyProviders()) {
-      //TODO : only call the provider if it provides properties that we need ...
-      keepers = propertyProvider.populateResources(keepers, request, predicate);
+      if (providesRequestProperties(propertyProvider, request, predicate)) {
+        keepers = propertyProvider.populateResources(keepers, request, predicate);
+      }
     }
     return keepers;
   }
 
+  /**
+   * Indicates whether or not the given property provider can service the given request.
+   *
+   * @param provider   the property provider
+   * @param request    the request
+   * @param predicate  the predicate
+   *
+   * @return true if the given provider can service the request
+   */
+  private boolean providesRequestProperties(PropertyProvider provider, Request request, Predicate predicate) {
+    Set<PropertyId> requestPropertyIds = new HashSet<PropertyId>(request.getPropertyIds());
+
+    if (requestPropertyIds.size() == 0) {
+      return true;
+    }
+    requestPropertyIds.addAll(PredicateHelper.getPropertyIds(predicate));
+    requestPropertyIds.retainAll(provider.getPropertyIds());
+
+    return !requestPropertyIds.isEmpty();
+  }
+
   private Map<Resource.Type, ResourceProvider> getResourceSchemas() {
     Map<Resource.Type, ResourceProvider> resourceProviders = new HashMap<Resource.Type, ResourceProvider>();
 

+ 1 - 1
ambari-server/src/main/java/org/apache/ambari/server/controller/jdbc/JDBCProviderModule.java

@@ -29,7 +29,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 /**
- *
+ * Module to plug in the JDBC resource provider.
  */
 public class JDBCProviderModule implements ProviderModule {
 

+ 2 - 2
ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXPropertyProvider.java

@@ -126,11 +126,11 @@ public class JMXPropertyProvider implements PropertyProvider {
       return true;
     }
 
-    Set<PropertyId> ids = PropertyHelper.getRequestPropertyIds(this, request, predicate);
+    Set<PropertyId> ids = PropertyHelper.getRequestPropertyIds(getPropertyIds(), request, predicate);
 
     Map<String, String> hosts = mappingProvider.getHostMap();
 
-    String hostName = hosts.get(resource.getPropertyValue(HOST_COMPONENT_HOST_NAME_PROPERTY_ID));
+    String hostName = hosts.get(PropertyHelper.fixHostName(resource.getPropertyValue(HOST_COMPONENT_HOST_NAME_PROPERTY_ID)));
     String port = JMX_PORTS.get(resource.getPropertyValue(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID));
 
     if (hostName == null || port == null) {

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

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

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

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

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

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

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

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

+ 28 - 7
ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java

@@ -24,6 +24,7 @@ import org.apache.ambari.server.controller.spi.PropertyId;
 import org.apache.ambari.server.controller.spi.PropertyProvider;
 import org.apache.ambari.server.controller.spi.Request;
 import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.ResourceProvider;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.type.TypeReference;
 
@@ -81,20 +82,20 @@ public class PropertyHelper {
   }
 
   /**
-   * Get the set of property id required to satisfy the given request for the given property
-   * provider and predicate.
+   * Get the set of property ids required to satisfy the given request.
    *
-   * @param provider   the property provider
-   * @param request    the request
-   * @param predicate  the predicate
+   * @param providerPropertyIds  the provider property ids
+   * @param request              the request
+   * @param predicate            the predicate
    *
    * @return the set of property ids needed to satisfy the request
    */
-  public static Set<PropertyId> getRequestPropertyIds(PropertyProvider provider,
+  public static Set<PropertyId> getRequestPropertyIds(Set<PropertyId> providerPropertyIds,
                                                       Request request,
                                                       Predicate predicate) {
     Set<PropertyId> requestPropertyIds  = new HashSet<PropertyId>(request.getPropertyIds());
-    Set<PropertyId> providerPropertyIds = new HashSet<PropertyId>(provider.getPropertyIds());
+
+    providerPropertyIds = new HashSet<PropertyId>(providerPropertyIds);
 
     if (requestPropertyIds == null || requestPropertyIds.isEmpty()) {
       return providerPropertyIds;
@@ -107,6 +108,26 @@ public class PropertyHelper {
     return requestPropertyIds;
   }
 
+  /**
+   * For some reason the host names are stored all lower case.  Attempt to undo that with
+   * this hack.
+   *
+   * @param host  the host name to be fixed
+   *
+   * @return the fixed host name
+   */
+  public static String fixHostName(String host) {
+    int first_dash = host.indexOf('-');
+    int first_dot = host.indexOf('.');
+    String segment1 = host.substring(0, first_dash);
+    if (segment1.equals("domu")) {
+      segment1 = "domU";
+    }
+    String segment2 = host.substring(first_dash, first_dot).toUpperCase();
+    host = segment1 + segment2 + host.substring(first_dot);
+    return host;
+  }
+
   /**
    * Factory method to create a create request from the given set of property maps.
    * Each map contains the properties to be used to create a resource.  Multiple maps in the

+ 72 - 0
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/TestProviderModule.java

@@ -0,0 +1,72 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.controller.internal;
+
+import org.apache.ambari.server.controller.jdbc.TestJDBCResourceProvider;
+import org.apache.ambari.server.controller.jmx.JMXPropertyProvider;
+import org.apache.ambari.server.controller.jmx.TestHostMappingProvider;
+import org.apache.ambari.server.controller.jmx.TestStreamProvider;
+import org.apache.ambari.server.controller.spi.PropertyId;
+import org.apache.ambari.server.controller.spi.PropertyProvider;
+import org.apache.ambari.server.controller.spi.ProviderModule;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.ResourceProvider;
+import org.apache.ambari.server.controller.utilities.DBHelper;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Module to plug in the JDBC resource provider.
+ */
+public class TestProviderModule implements ProviderModule {
+
+  private static final Map<Resource.Type, List<PropertyProvider>> propertyProviders = new HashMap<Resource.Type, List<PropertyProvider>>();
+
+  static {
+
+    Set< PropertyId > propertyIds           = PropertyHelper.getPropertyIds(Resource.Type.HostComponent, "JMX");
+    TestStreamProvider streamProvider       = new TestStreamProvider();
+    TestHostMappingProvider mappingProvider = new TestHostMappingProvider();
+
+    PropertyProvider propertyProvider = new JMXPropertyProvider(propertyIds,
+        streamProvider,
+        mappingProvider);
+
+    propertyProviders.put(Resource.Type.HostComponent, Collections.singletonList(propertyProvider));
+  }
+
+  @Override
+  public ResourceProvider getResourceProvider(Resource.Type type) {
+
+    List<PropertyProvider> providers = propertyProviders.get(type);
+
+
+    return new TestJDBCResourceProvider(
+        DBHelper.CONNECTION_FACTORY,
+        type,
+        providers == null ? Collections.<PropertyProvider>emptyList() : providers,
+        PropertyHelper.getPropertyIds(type, "DB"),
+        PropertyHelper.getKeyPropertyIds(type));
+  }
+}

+ 1 - 1
ambari-server/src/test/java/org/apache/ambari/server/controller/jdbc/JDBCManagementControllerTest.java → ambari-server/src/test/java/org/apache/ambari/server/controller/jdbc/JDBCPropertyProviderTest.java

@@ -23,7 +23,7 @@ import static org.easymock.EasyMock.createNiceMock;
 /**
 *
 */
-public class JDBCManagementControllerTest {
+public class JDBCPropertyProviderTest {
 
 //  @Test
 //  public void testCreateClusters() throws Exception {

+ 41 - 0
ambari-server/src/test/java/org/apache/ambari/server/controller/jdbc/TestJDBCResourceProvider.java

@@ -0,0 +1,41 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.controller.jdbc;
+
+import org.apache.ambari.server.controller.spi.PropertyId;
+import org.apache.ambari.server.controller.spi.PropertyProvider;
+import org.apache.ambari.server.controller.spi.Resource;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ *
+ */
+public class TestJDBCResourceProvider extends JDBCResourceProvider{
+  public TestJDBCResourceProvider(ConnectionFactory connectionFactory, Resource.Type type, List<PropertyProvider> propertyProviders, Set<PropertyId> propertyIds, Map<Resource.Type, PropertyId> keyPropertyIds) {
+    super(connectionFactory, type, propertyProviders, propertyIds, keyPropertyIds);
+  }
+
+  @Override
+  public List<PropertyProvider> getPropertyProviders() {
+    return super.getPropertyProviders();
+  }
+}

+ 0 - 56
ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXHelperTest.java

@@ -1,56 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.server.controller.jmx;
-
-import org.codehaus.jackson.map.ObjectMapper;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-
-/**
- *
- */
-public class JMXHelperTest {
-
-  @Ignore
-  @Test
-  public void testGetJMXMetrics() throws Exception {
-
-    String target = "ec2-107-22-86-120.compute-1.amazonaws.com:50070";
-
-    JMXMetrics result;
-    String s = "http://" + target + "/jmx?qry=" + (null == null ? "Hadoop:*" : null);
-    try {
-      URLConnection connection = new URL(s).openConnection();
-
-      connection.setDoOutput(true);
-
-      result = new ObjectMapper().readValue(connection.getInputStream(),
-          JMXMetrics.class);
-
-    } catch (IOException e) {
-      throw new IllegalStateException("Can't get metric " + ".", e);
-    }
-    JMXMetrics metrics = result;
-
-    //TODO : assertions
-  }
-}

+ 3 - 52
ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java

@@ -24,15 +24,10 @@ import org.apache.ambari.server.controller.spi.PropertyProvider;
 import org.apache.ambari.server.controller.spi.Request;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.controller.utilities.StreamProvider;
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Set;
 
 /**
@@ -40,24 +35,7 @@ import java.util.Set;
  */
 public class JMXPropertyProviderTest {
 
-  private static Map<String, String> HOST_MAPPING = new HashMap<String, String>();
-
-  static {
-    HOST_MAPPING.put("domU-12-31-39-0E-34-E1.compute-1.internal", "ec2-50-17-129-192.compute-1.amazonaws.com");
-    HOST_MAPPING.put("ip-10-190-186-15.ec2.internal",             "ec2-23-21-8-226.compute-1.amazonaws.com");
-    HOST_MAPPING.put("domU-12-31-39-14-EE-B3.compute-1.internal", "ec2-23-23-71-42.compute-1.amazonaws.com");
-    HOST_MAPPING.put("ip-10-110-157-51.ec2.internal",             "ec2-107-22-121-67.compute-1.amazonaws.com");
-  }
-
-  private static Map<String, String> FILE_MAPPING = new HashMap<String, String>();
-
-  static {
-    FILE_MAPPING.put("http://ec2-23-21-8-226.compute-1.amazonaws.com:50070/jmx?qry=Hadoop:*", "hdfs_namenode_jmx.json");
-    FILE_MAPPING.put("http://ec2-23-23-71-42.compute-1.amazonaws.com:50075/jmx?qry=Hadoop:*", "hdfs_datanode_jmx.json");
-    FILE_MAPPING.put("http://ec2-23-23-71-42.compute-1.amazonaws.com:50030/jmx?qry=Hadoop:*", "mapreduce_jobtracker_jmx.json");
-  }
-
-  @Test
+    @Test
   public void testGetResources() throws Exception {
 
     Set< PropertyId >       propertyIds     = PropertyHelper.getPropertyIds(Resource.Type.HostComponent, "JMX");
@@ -71,7 +49,7 @@ public class JMXPropertyProviderTest {
     // namenode
     Resource resource = new ResourceImpl(Resource.Type.HostComponent);
 
-    resource.setProperty(JMXPropertyProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "ip-10-190-186-15.ec2.internal");
+    resource.setProperty(JMXPropertyProvider.HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domU-12-31-39-0E-34-E1.compute-1.internal");
     resource.setProperty(JMXPropertyProvider.HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "NAMENODE");
 
     // request with an empty set should get all supported properties
@@ -79,7 +57,7 @@ public class JMXPropertyProviderTest {
 
     Assert.assertEquals(1, propertyProvider.populateResources(Collections.singleton(resource), request, null).size());
 
-    Assert.assertEquals(JMXPropertyProvider.getSpec("ec2-23-21-8-226.compute-1.amazonaws.com:50070"), streamProvider.getLastSpec());
+    Assert.assertEquals(JMXPropertyProvider.getSpec("ec2-50-17-129-192.compute-1.amazonaws.com:50070"), streamProvider.getLastSpec());
 
     // see test/resources/hdfs_namenode_jmx.json for values
     Assert.assertEquals("1084287",  resource.getPropertyValue(PropertyHelper.getPropertyId("ReceivedBytes", "rpc")));
@@ -124,31 +102,4 @@ public class JMXPropertyProviderTest {
     Assert.assertEquals("59", resource.getPropertyValue(PropertyHelper.getPropertyId("threadsWaiting", "jvm")));
     Assert.assertNull(resource.getPropertyValue(PropertyHelper.getPropertyId("gcCount", "jvm")));
   }
-
-
-  public static class TestStreamProvider implements StreamProvider {
-    private String lastSpec;
-
-    @Override
-    public InputStream readFrom(String spec) throws IOException {
-      lastSpec = spec;
-      String filename = FILE_MAPPING.get(spec);
-      if (filename == null) {
-        throw new IOException("Can't find JMX source for " + spec);
-      }
-      InputStream resourceAsStream = ClassLoader.getSystemResourceAsStream(filename);
-      return resourceAsStream;
-    }
-
-    public String getLastSpec() {
-      return lastSpec;
-    }
-  }
-
-  public static class TestHostMappingProvider implements HostMappingProvider {
-    @Override
-    public Map<String, String> getHostMap() {
-      return HOST_MAPPING;
-    }
-  }
 }

+ 17 - 7
ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXHelper.java → ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/TestHostMappingProvider.java

@@ -18,15 +18,25 @@
 
 package org.apache.ambari.server.controller.jmx;
 
-import org.codehaus.jackson.map.ObjectMapper;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  *
  */
-public class JMXHelper {
+public class TestHostMappingProvider implements HostMappingProvider {
+
+  private static Map<String, String> HOST_MAPPING = new HashMap<String, String>();
+
+  static {
+    HOST_MAPPING.put("domU-12-31-39-0E-34-E1.compute-1.internal", "ec2-50-17-129-192.compute-1.amazonaws.com");
+    HOST_MAPPING.put("ip-10-190-186-15.ec2.internal",             "ec2-23-21-8-226.compute-1.amazonaws.com");
+    HOST_MAPPING.put("domU-12-31-39-14-EE-B3.compute-1.internal", "ec2-23-23-71-42.compute-1.amazonaws.com");
+    HOST_MAPPING.put("ip-10-110-157-51.ec2.internal",             "ec2-107-22-121-67.compute-1.amazonaws.com");
+  }
 
-}
+  @Override
+  public Map<String, String> getHostMap() {
+    return HOST_MAPPING;
+  }
+}

+ 61 - 0
ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/TestStreamProvider.java

@@ -0,0 +1,61 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.controller.jmx;
+
+import org.apache.ambari.server.controller.utilities.StreamProvider;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+public class TestStreamProvider implements StreamProvider {
+
+  protected static Map<String, String> FILE_MAPPING = new HashMap<String, String>();
+
+  static {
+    FILE_MAPPING.put("50070", "hdfs_namenode_jmx.json");
+    FILE_MAPPING.put("50075", "hdfs_datanode_jmx.json");
+    FILE_MAPPING.put("50030", "mapreduce_jobtracker_jmx.json");
+    FILE_MAPPING.put("50060", "mapreduce_tasktracker_jmx.json");
+  }
+
+  private String lastSpec;
+
+  @Override
+  public InputStream readFrom(String spec) throws IOException {
+    lastSpec = spec;
+    String filename = FILE_MAPPING.get(getPort(spec));
+    if (filename == null) {
+      throw new IOException("Can't find JMX source for " + spec);
+    }
+    return ClassLoader.getSystemResourceAsStream(filename);
+  }
+
+  public String getLastSpec() {
+    return lastSpec;
+  }
+
+  private String getPort(String spec) {
+    int n = spec.indexOf(":", 5);
+    return spec.substring(n + 1, n + 6);
+  }
+
+
+}

BIN
ambari-server/src/test/resources/data.db