You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2014/10/10 21:24:06 UTC
git commit: AMBARI-7736. Write tests for RestMetricsPropertyProvider
(aonishuk)
Repository: ambari
Updated Branches:
refs/heads/trunk 9a57ede5d -> 61248e6ae
AMBARI-7736. Write tests for RestMetricsPropertyProvider (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/61248e6a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/61248e6a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/61248e6a
Branch: refs/heads/trunk
Commit: 61248e6aee9b78ccb1bb603772eeb1bcb7cf6891
Parents: 9a57ede
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Fri Oct 10 22:23:57 2014 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Fri Oct 10 22:23:57 2014 +0300
----------------------------------------------------------------------
.../internal/StackDefinedPropertyProvider.java | 2 +-
.../ambari/server/state/stack/Metric.java | 39 +-
.../RestMetricsPropertyProviderTest.java | 391 +++++++++++++++++++
3 files changed, 416 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/61248e6a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java
index 4ecc2f0..db86758 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProvider.java
@@ -226,7 +226,7 @@ public class StackDefinedPropertyProvider implements PropertyProvider {
* @return the converted Map required for JMX or Ganglia execution.
* Format: <metric name, property info>
*/
- private Map<String, PropertyInfo> getPropertyInfo(MetricDefinition def) {
+ public static Map<String, PropertyInfo> getPropertyInfo(MetricDefinition def) {
Map<String, PropertyInfo> defs = new HashMap<String, PropertyInfo>();
for (Entry<String, Metric> entry : def.getMetrics().entrySet()) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/61248e6a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/Metric.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/Metric.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/Metric.java
index 403ea80..c82a70a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/Metric.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/Metric.java
@@ -18,20 +18,29 @@
package org.apache.ambari.server.state.stack;
public class Metric {
- private String metric = null;
- private boolean pointInTime = false;
- private boolean temporal = false;
+ private String metric = null;
+ private boolean pointInTime = false;
+ private boolean temporal = false;
+
+ public Metric() {
+ }
+
+ public Metric(String metric, boolean pointInTime, boolean temporal) {
+ this.metric = metric;
+ this.pointInTime = pointInTime;
+ this.temporal = temporal;
+ }
+
+ public String getName() {
+ return metric;
+ }
+
+ public boolean isPointInTime() {
+ return pointInTime;
+ }
+
+ public boolean isTemporal() {
+ return temporal;
+ }
- public String getName() {
- return metric;
- }
-
- public boolean isPointInTime() {
- return pointInTime;
- }
-
- public boolean isTemporal() {
- return temporal;
- }
-
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/61248e6a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
new file mode 100644
index 0000000..a735236
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
@@ -0,0 +1,391 @@
+/**
+ * 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.metrics;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import org.apache.ambari.server.controller.internal.PropertyInfo;
+import org.apache.ambari.server.controller.internal.ResourceImpl;
+import org.apache.ambari.server.controller.internal.StackDefinedPropertyProvider;
+import org.apache.ambari.server.controller.jmx.JMXHostProvider;
+import org.apache.ambari.server.controller.jmx.TestStreamProvider;
+import org.apache.ambari.server.controller.spi.Request;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.SystemException;
+import org.apache.ambari.server.controller.spi.TemporalInfo;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.stack.Metric;
+import org.apache.ambari.server.state.stack.MetricDefinition;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.util.*;
+
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+
+
+/**
+ * Rest metrics property provider tests.
+ */
+public class RestMetricsPropertyProviderTest {
+
+ public static final String WRAPPED_METRICS_KEY = "WRAPPED_METRICS_KEY";
+ protected static final String HOST_COMPONENT_HOST_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "host_name");
+ protected static final String HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "component_name");
+ protected static final String HOST_COMPONENT_STATE_PROPERTY_ID = PropertyHelper.getPropertyId("HostRoles", "state");
+ protected static final Map<String, String> metricsProperties = new HashMap<String, String>();
+ protected static final Map<String, Metric> componentMetrics = new HashMap<String, Metric>();
+ public static final int NUMBER_OF_RESOURCES = 400;
+ private static Injector injector;
+ private static Clusters clusters;
+ private static Cluster c1;
+
+ {
+ metricsProperties.put("default_port", "8745");
+ metricsProperties.put("port_config_type", "storm-site");
+ metricsProperties.put("port_property_name", "storm.port");
+ metricsProperties.put("protocol", "http");
+ componentMetrics.put("metrics/api/cluster/summary/tasks.total", new Metric("/api/cluster/summary##tasks.total", false, false));
+ componentMetrics.put("metrics/api/cluster/summary/slots.total", new Metric("/api/cluster/summary##slots.total", false, false));
+ componentMetrics.put("metrics/api/cluster/summary/slots.free", new Metric("/api/cluster/summary##slots.free", false, false));
+ componentMetrics.put("metrics/api/cluster/summary/supervisors", new Metric("/api/cluster/summary##supervisors", false, false));
+ componentMetrics.put("metrics/api/cluster/summary/executors.total", new Metric("/api/cluster/summary##executors.total", false, false));
+ componentMetrics.put("metrics/api/cluster/summary/slots.used", new Metric("/api/cluster/summary##slots.used", false, false));
+ componentMetrics.put("metrics/api/cluster/summary/topologies", new Metric("/api/cluster/summary##topologies", false, false));
+ componentMetrics.put("metrics/api/cluster/summary/nimbus.uptime", new Metric("/api/cluster/summary##nimbus.uptime", false, false));
+ }
+
+
+ @BeforeClass
+ public static void setup() throws Exception {
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.getInstance(GuiceJpaInitializer.class);
+ clusters = injector.getInstance(Clusters.class);
+ clusters.addCluster("c1");
+ c1 = clusters.getCluster("c1");
+ c1.setDesiredStackVersion(new StackId("HDP-2.1.1"));
+ }
+
+ @Test
+ public void testPopulateResources() throws Exception {
+ MetricDefinition metricDefinition = createNiceMock(MetricDefinition.class);
+ expect(metricDefinition.getMetrics()).andReturn(componentMetrics);
+ expect(metricDefinition.getType()).andReturn("org.apache.ambari.server.controller.metrics.RestMetricsPropertyProvider");
+ expect(metricDefinition.getProperties()).andReturn(metricsProperties);
+ replay(metricDefinition);
+
+ Map<String, PropertyInfo> metrics = StackDefinedPropertyProvider.getPropertyInfo(metricDefinition);
+ HashMap<String, Map<String, PropertyInfo>> componentMetrics = new HashMap<String, Map<String, PropertyInfo>>();
+ componentMetrics.put(WRAPPED_METRICS_KEY, metrics);
+ TestStreamProvider streamProvider = new TestStreamProvider();
+ TestMetricsHostProvider metricsHostProvider = new TestMetricsHostProvider();
+
+ RestMetricsPropertyProvider restMetricsPropertyProvider = new RestMetricsPropertyProvider(
+ injector,
+ metricDefinition.getProperties(),
+ componentMetrics,
+ streamProvider,
+ metricsHostProvider,
+ PropertyHelper.getPropertyId("HostRoles", "cluster_name"),
+ PropertyHelper.getPropertyId("HostRoles", "host_name"),
+ PropertyHelper.getPropertyId("HostRoles", "component_name"),
+ PropertyHelper.getPropertyId("HostRoles", "state"),
+ "STORM_REST_API");
+
+
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty("HostRoles/cluster_name", "c1");
+ resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal");
+ resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "STORM_REST_API");
+ resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+
+ // request with an empty set should get all supported properties
+ Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet());
+
+ Assert.assertEquals(1, restMetricsPropertyProvider.populateResources(Collections.singleton(resource), request, null).size());
+
+ //STORM_REST_API
+ Assert.assertEquals(28.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "tasks.total")));
+ Assert.assertEquals(8.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "slots.total")));
+ Assert.assertEquals(5.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "slots.free")));
+ Assert.assertEquals(2.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "supervisors")));
+ Assert.assertEquals(28.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "executors.total")));
+ Assert.assertEquals(3.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "slots.used")));
+ Assert.assertEquals(1.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "topologies")));
+ Assert.assertEquals(4637.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "nimbus.uptime")));
+
+
+ }
+
+ @Test
+ public void testPopulateResources_singleProperty() throws Exception {
+ MetricDefinition metricDefinition = createNiceMock(MetricDefinition.class);
+ expect(metricDefinition.getMetrics()).andReturn(componentMetrics);
+ expect(metricDefinition.getType()).andReturn("org.apache.ambari.server.controller.metrics.RestMetricsPropertyProvider");
+ expect(metricDefinition.getProperties()).andReturn(metricsProperties);
+ replay(metricDefinition);
+ Map<String, PropertyInfo> metrics = StackDefinedPropertyProvider.getPropertyInfo(metricDefinition);
+ HashMap<String, Map<String, PropertyInfo>> componentMetrics = new HashMap<String, Map<String, PropertyInfo>>();
+ componentMetrics.put(WRAPPED_METRICS_KEY, metrics);
+ TestStreamProvider streamProvider = new TestStreamProvider();
+ TestMetricsHostProvider metricsHostProvider = new TestMetricsHostProvider();
+
+ RestMetricsPropertyProvider restMetricsPropertyProvider = new RestMetricsPropertyProvider(
+ injector,
+ metricDefinition.getProperties(),
+ componentMetrics,
+ streamProvider,
+ metricsHostProvider,
+ PropertyHelper.getPropertyId("HostRoles", "cluster_name"),
+ PropertyHelper.getPropertyId("HostRoles", "host_name"),
+ PropertyHelper.getPropertyId("HostRoles", "component_name"),
+ PropertyHelper.getPropertyId("HostRoles", "state"),
+ "STORM_REST_API");
+
+
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty("HostRoles/cluster_name", "c1");
+ resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal");
+ resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "STORM_REST_API");
+ resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+
+ // request with an empty set should get all supported properties
+ Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet());
+
+ Assert.assertEquals(1, restMetricsPropertyProvider.populateResources(Collections.singleton(resource), request, null).size());
+
+ Assert.assertEquals(28.0, resource.getPropertyValue("metrics/api/cluster/summary/tasks.total"));
+ Assert.assertNull(resource.getPropertyValue("metrics/api/cluster/summary/taskstotal"));
+ }
+
+ @Test
+ public void testPopulateResources_category() throws Exception {
+ MetricDefinition metricDefinition = createNiceMock(MetricDefinition.class);
+ expect(metricDefinition.getMetrics()).andReturn(componentMetrics);
+ expect(metricDefinition.getType()).andReturn("org.apache.ambari.server.controller.metrics.RestMetricsPropertyProvider");
+ expect(metricDefinition.getProperties()).andReturn(metricsProperties);
+ replay(metricDefinition);
+ Map<String, PropertyInfo> metrics = StackDefinedPropertyProvider.getPropertyInfo(metricDefinition);
+ HashMap<String, Map<String, PropertyInfo>> componentMetrics = new HashMap<String, Map<String, PropertyInfo>>();
+ componentMetrics.put(WRAPPED_METRICS_KEY, metrics);
+ TestStreamProvider streamProvider = new TestStreamProvider();
+ TestMetricsHostProvider metricsHostProvider = new TestMetricsHostProvider();
+
+ RestMetricsPropertyProvider restMetricsPropertyProvider = new RestMetricsPropertyProvider(
+ injector,
+ metricDefinition.getProperties(),
+ componentMetrics,
+ streamProvider,
+ metricsHostProvider,
+ PropertyHelper.getPropertyId("HostRoles", "cluster_name"),
+ PropertyHelper.getPropertyId("HostRoles", "host_name"),
+ PropertyHelper.getPropertyId("HostRoles", "component_name"),
+ PropertyHelper.getPropertyId("HostRoles", "state"),
+ "STORM_REST_API");
+
+
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty("HostRoles/cluster_name", "c1");
+ resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal");
+ resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "STORM_REST_API");
+ resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+
+ // request with an empty set should get all supported properties
+ // only ask for one property
+ Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, TemporalInfo>();
+ Request request = PropertyHelper.getReadRequest(Collections.singleton("metrics/api/cluster"), temporalInfoMap);
+
+ Assert.assertEquals(1, restMetricsPropertyProvider.populateResources(Collections.singleton(resource), request, null).size());
+
+ // see test/resources/hdfs_namenode_jmx.json for values
+ Assert.assertEquals(28.0, resource.getPropertyValue("metrics/api/cluster/summary/tasks.total"));
+ Assert.assertEquals(2.0, resource.getPropertyValue("metrics/api/cluster/summary/supervisors"));
+ Assert.assertNull(resource.getPropertyValue("metrics/api/cluster/summary/taskstotal"));
+ }
+
+ @Test
+ public void testPopulateResourcesUnhealthyResource() throws Exception {
+ MetricDefinition metricDefinition = createNiceMock(MetricDefinition.class);
+ expect(metricDefinition.getMetrics()).andReturn(componentMetrics);
+ expect(metricDefinition.getType()).andReturn("org.apache.ambari.server.controller.metrics.RestMetricsPropertyProvider");
+ expect(metricDefinition.getProperties()).andReturn(metricsProperties);
+ replay(metricDefinition);
+ Map<String, PropertyInfo> metrics = StackDefinedPropertyProvider.getPropertyInfo(metricDefinition);
+ HashMap<String, Map<String, PropertyInfo>> componentMetrics = new HashMap<String, Map<String, PropertyInfo>>();
+ componentMetrics.put(WRAPPED_METRICS_KEY, metrics);
+ TestStreamProvider streamProvider = new TestStreamProvider();
+ TestMetricsHostProvider metricsHostProvider = new TestMetricsHostProvider();
+
+ RestMetricsPropertyProvider restMetricsPropertyProvider = new RestMetricsPropertyProvider(
+ injector,
+ metricDefinition.getProperties(),
+ componentMetrics,
+ streamProvider,
+ metricsHostProvider,
+ PropertyHelper.getPropertyId("HostRoles", "cluster_name"),
+ PropertyHelper.getPropertyId("HostRoles", "host_name"),
+ PropertyHelper.getPropertyId("HostRoles", "component_name"),
+ PropertyHelper.getPropertyId("HostRoles", "state"),
+ "STORM_REST_API");
+
+
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty("HostRoles/cluster_name", "c1");
+ resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal");
+ resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "STORM_REST_API");
+ resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "INSTALLED");
+
+ // request with an empty set should get all supported properties
+ Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet());
+
+ Assert.assertEquals(1, restMetricsPropertyProvider.populateResources(Collections.singleton(resource), request, null).size());
+
+ // Assert that the stream provider was never called.
+ Assert.assertNull(streamProvider.getLastSpec());
+ }
+
+ @Test
+ public void testPopulateResourcesMany() throws Exception {
+ MetricDefinition metricDefinition = createNiceMock(MetricDefinition.class);
+ expect(metricDefinition.getMetrics()).andReturn(componentMetrics);
+ expect(metricDefinition.getType()).andReturn("org.apache.ambari.server.controller.metrics.RestMetricsPropertyProvider");
+ expect(metricDefinition.getProperties()).andReturn(metricsProperties);
+ replay(metricDefinition);
+ Map<String, PropertyInfo> metrics = StackDefinedPropertyProvider.getPropertyInfo(metricDefinition);
+ HashMap<String, Map<String, PropertyInfo>> componentMetrics = new HashMap<String, Map<String, PropertyInfo>>();
+ componentMetrics.put(WRAPPED_METRICS_KEY, metrics);
+ TestStreamProvider streamProvider = new TestStreamProvider();
+ TestMetricsHostProvider metricsHostProvider = new TestMetricsHostProvider();
+
+ Set<Resource> resources = new HashSet<Resource>();
+
+ RestMetricsPropertyProvider restMetricsPropertyProvider = new RestMetricsPropertyProvider(
+ injector,
+ metricDefinition.getProperties(),
+ componentMetrics,
+ streamProvider,
+ metricsHostProvider,
+ PropertyHelper.getPropertyId("HostRoles", "cluster_name"),
+ PropertyHelper.getPropertyId("HostRoles", "host_name"),
+ PropertyHelper.getPropertyId("HostRoles", "component_name"),
+ PropertyHelper.getPropertyId("HostRoles", "state"),
+ "STORM_REST_API");
+
+ for (int i = 0; i < NUMBER_OF_RESOURCES; ++i) {
+ // strom_rest_api
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty("HostRoles/cluster_name", "c1");
+ resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal");
+ resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "STORM_REST_API");
+ resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
+ resource.setProperty("unique_id", i);
+
+ resources.add(resource);
+ }
+
+ // request with an empty set should get all supported properties
+ Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet());
+
+ Set<Resource> resourceSet = restMetricsPropertyProvider.populateResources(resources, request, null);
+
+ Assert.assertEquals(NUMBER_OF_RESOURCES, resourceSet.size());
+
+ for (Resource resource : resourceSet) {
+ Assert.assertEquals(28.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "tasks.total")));
+ Assert.assertEquals(8.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "slots.total")));
+ Assert.assertEquals(5.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "slots.free")));
+ Assert.assertEquals(2.0, resource.getPropertyValue(PropertyHelper.getPropertyId("metrics/api/cluster/summary", "supervisors")));
+ }
+ }
+
+ @Test
+ public void testPopulateResourcesTimeout() throws Exception {
+ MetricDefinition metricDefinition = createNiceMock(MetricDefinition.class);
+ expect(metricDefinition.getMetrics()).andReturn(componentMetrics);
+ expect(metricDefinition.getType()).andReturn("org.apache.ambari.server.controller.metrics.RestMetricsPropertyProvider");
+ expect(metricDefinition.getProperties()).andReturn(metricsProperties);
+ replay(metricDefinition);
+ Map<String, PropertyInfo> metrics = StackDefinedPropertyProvider.getPropertyInfo(metricDefinition);
+ HashMap<String, Map<String, PropertyInfo>> componentMetrics = new HashMap<String, Map<String, PropertyInfo>>();
+ componentMetrics.put(WRAPPED_METRICS_KEY, metrics);
+ TestStreamProvider streamProvider = new TestStreamProvider(100L);
+ TestMetricsHostProvider metricsHostProvider = new TestMetricsHostProvider();
+
+ Set<Resource> resources = new HashSet<Resource>();
+
+ RestMetricsPropertyProvider restMetricsPropertyProvider = new RestMetricsPropertyProvider(
+ injector,
+ metricDefinition.getProperties(),
+ componentMetrics,
+ streamProvider,
+ metricsHostProvider,
+ PropertyHelper.getPropertyId("HostRoles", "cluster_name"),
+ PropertyHelper.getPropertyId("HostRoles", "host_name"),
+ PropertyHelper.getPropertyId("HostRoles", "component_name"),
+ PropertyHelper.getPropertyId("HostRoles", "state"),
+ "STORM_REST_API");
+
+ // set the provider timeout to 50 millis
+ restMetricsPropertyProvider.setPopulateTimeout(50L);
+
+ Resource resource = new ResourceImpl(Resource.Type.HostComponent);
+
+ resource.setProperty("HostRoles/cluster_name", "c1");
+ resource.setProperty(HOST_COMPONENT_HOST_NAME_PROPERTY_ID, "domu-12-31-39-0e-34-e1.compute-1.internal");
+ resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, "STORM_REST_API");
+
+ resources.add(resource);
+
+ // request with an empty set should get all supported properties
+ Request request = PropertyHelper.getReadRequest(Collections.<String>emptySet());
+
+ Set<Resource> resourceSet = restMetricsPropertyProvider.populateResources(resources, request, null);
+
+ // make sure that the thread running the stream provider has completed
+ Thread.sleep(150L);
+
+ Assert.assertEquals(0, resourceSet.size());
+
+ // assert that properties never get set on the resource
+ Assert.assertNull(resource.getPropertyValue("metrics/api/cluster/summary/tasks.total"));
+ Assert.assertNull(resource.getPropertyValue("metrics/api/cluster/summary/supervisors"));
+ }
+
+ public static class TestMetricsHostProvider implements MetricsHostProvider {
+
+ @Override
+ public String getHostName(String clusterName, String componentName) {
+ return null;
+ }
+ }
+
+}