fix healthmgr unit tests (#3018)
* addBUILDforhealthmgr
* fixhealthmgrunit
diff --git a/heron/healthmgr/tests/java/BUILD b/heron/healthmgr/tests/java/BUILD
new file mode 100644
index 0000000..af6b53e
--- /dev/null
+++ b/heron/healthmgr/tests/java/BUILD
@@ -0,0 +1,86 @@
+test_deps_files = \
+ heron_java_proto_files() + [
+ "//heron/api/src/java:api-java-low-level",
+ "//heron/api/src/java:classification",
+ "//heron/common/src/java:basics-java",
+ "//heron/common/src/java:config-java",
+ "//heron/common/src/java:network-java",
+ "//heron/common/src/java:utils-java",
+ "//heron/healthmgr/src/java:healthmgr-java",
+ "//heron/packing/src/java:roundrobin-packing",
+ "//heron/scheduler-core/src/java:scheduler-java",
+ "//heron/spi/src/java:common-spi-java",
+ "//heron/spi/src/java:metricsmgr-spi-java",
+ "//heron/spi/src/java:packing-spi-java",
+ "//heron/spi/src/java:statemgr-spi-java",
+ "//heron/spi/src/java:utils-spi-java",
+ "//third_party/java:jackson",
+ "//third_party/java:junit4",
+ "//third_party/java:mockito",
+ "//third_party/java:powermock",
+ "@aopalliance_aopalliance//jar",
+ "@com_fasterxml_jackson_jaxrs_jackson_jaxrs_base//jar",
+ "@com_fasterxml_jackson_jaxrs_jackson_jaxrs_json_provider//jar",
+ "@com_fasterxml_jackson_module_jackson_module_jaxb_annotations//jar",
+ "@com_google_guava_guava//jar",
+ "@com_google_inject_extensions_guice_assistedinject//jar",
+ "@com_google_inject_guice//jar",
+ "@com_jayway_jsonpath//jar",
+ "@com_microsoft_dhalion//jar",
+ "@commons_cli_commons_cli//jar",
+ "@it_unimi_dsi_fastutil//jar",
+ "@javax_annotation_javax_annotation_api//jar",
+ "@javax_inject_javax_inject//jar",
+ "@javax_ws_rs_javax_ws_rs_api//jar",
+ "@net_minidev_json_smart//jar",
+ "@org_apache_commons_commons_math3//jar",
+ "@org_glassfish_hk2_hk2_api//jar",
+ "@org_glassfish_hk2_hk2_locator//jar",
+ "@org_glassfish_hk2_hk2_utils//jar",
+ "@org_glassfish_jersey_bundles_repackaged_jersey_guava//jar",
+ "@org_glassfish_jersey_core_jersey_client//jar",
+ "@org_glassfish_jersey_core_jersey_common//jar",
+ "@org_glassfish_jersey_ext_jersey_entity_filtering//jar",
+ "@org_glassfish_jersey_media_jersey_media_json_jackson//jar",
+ "@org_roaringbitmap//jar",
+ "@org_yaml_snakeyaml//jar",
+ "@tech_tablesaw//jar",
+ ]
+
+java_library(
+ name = "healthmgr-tests",
+ srcs = glob(["**/*.java"]) + ["//heron/healthmgr/src/java:healthmgr-main"],
+ deps = test_deps_files,
+)
+
+java_tests(
+ test_classes = [
+ "org.apache.heron.healthmgr.HealthManagerTest",
+ "org.apache.heron.healthmgr.HealthPolicyConfigReaderTest",
+
+ "org.apache.heron.healthmgr.common.PackingPlanProviderTest",
+
+ "org.apache.heron.healthmgr.detectors.BackPressureDetectorTest",
+ "org.apache.heron.healthmgr.detectors.GrowingWaitQueueDetectorTest",
+ "org.apache.heron.healthmgr.detectors.LargeWaitQueueDetectorTest",
+ "org.apache.heron.healthmgr.detectors.ProcessingRateSkewDetectorTest",
+ "org.apache.heron.healthmgr.detectors.WaitQueueSkewDetectorTest",
+
+ "org.apache.heron.healthmgr.diagnosers.DataSkewDiagnoserTest",
+ "org.apache.heron.healthmgr.diagnosers.SlowInstanceDiagnoserTest",
+ "org.apache.heron.healthmgr.diagnosers.UnderProvisioningDiagnoserTest",
+
+ "org.apache.heron.healthmgr.resolvers.ScaleUpResolverTest",
+
+ "org.apache.heron.healthmgr.sensors.BackPressureSensorTest",
+ "org.apache.heron.healthmgr.sensors.BufferSizeSensorTest",
+ "org.apache.heron.healthmgr.sensors.ExecuteCountSensorTest",
+ "org.apache.heron.healthmgr.sensors.MetricsCacheMetricsProviderTest",
+# "org.apache.heron.healthmgr.sensors.TrackerMetricsProviderTest",
+ ],
+ runtime_deps = [
+ ":healthmgr-tests",
+ ],
+ data = ["//heron/config/src/yaml:test-config-internals-yaml"],
+ size = "small",
+)
diff --git a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/HealthManagerTest.java b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/HealthManagerTest.java
index 40e36f8..5d20845 100644
--- a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/HealthManagerTest.java
+++ b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/HealthManagerTest.java
@@ -68,8 +68,9 @@
.build();
when(adaptor.getSchedulerLocation(anyString())).thenReturn(schedulerLocation);
+ HealthManagerMetrics publishingMetrics = mock(HealthManagerMetrics.class);
AbstractModule baseModule = HealthManager
- .buildBaseModule("127.0.0.1", TrackerMetricsProvider.class.getName());
+ .buildBaseModule("127.0.0.1", TrackerMetricsProvider.class.getName(), publishingMetrics);
HealthManager healthManager = new HealthManager(config, baseModule);
diff --git a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/common/TopologyProviderTest.java b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/common/TopologyProviderTest.java
deleted file mode 100644
index 4b373ba..0000000
--- a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/common/TopologyProviderTest.java
+++ /dev/null
@@ -1,108 +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.heron.healthmgr.common;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import com.microsoft.dhalion.events.EventManager;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import org.apache.heron.api.Config;
-import org.apache.heron.api.generated.TopologyAPI.Topology;
-import org.apache.heron.common.utils.topology.TopologyTests;
-import org.apache.heron.healthmgr.common.HealthManagerEvents.TopologyUpdate;
-import org.apache.heron.proto.system.PhysicalPlans;
-import org.apache.heron.spi.statemgr.SchedulerStateManagerAdaptor;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-public class TopologyProviderTest {
- private String topology = "topology";
- private EventManager eventManager = new EventManager();
-
- @Test
- public void fetchesAndCachesPackingFromStateMgr() {
- SchedulerStateManagerAdaptor adaptor = getMockSchedulerStateManagerAdaptor();
- TopologyProvider provider = new TopologyProvider(adaptor, eventManager, topology);
- Assert.assertEquals(2, provider.get().getBoltsCount());
-
- // once fetched it is cached
- provider.get();
- verify(adaptor, times(1)).getPhysicalPlan(topology);
- }
-
- @Test
- public void refreshesPackingPlanOnUpdate() {
- SchedulerStateManagerAdaptor adaptor = getMockSchedulerStateManagerAdaptor();
-
- TopologyProvider provider = new TopologyProvider(adaptor, eventManager, topology);
- Assert.assertEquals(2, provider.get().getBoltsCount());
-
- // once fetched it is cached
- provider.onEvent(new TopologyUpdate(null, null));
- provider.get();
- verify(adaptor, times(2)).getPhysicalPlan(topology);
- }
-
- private SchedulerStateManagerAdaptor getMockSchedulerStateManagerAdaptor() {
- Topology testTopology
- = TopologyTests.createTopology(topology, new Config(), getSpouts(), getBolts());
- PhysicalPlans.PhysicalPlan plan =
- PhysicalPlans.PhysicalPlan.newBuilder().setTopology(testTopology).build();
- SchedulerStateManagerAdaptor adaptor = mock(SchedulerStateManagerAdaptor.class);
- when(adaptor.getPhysicalPlan(topology)).thenReturn(plan);
- return adaptor;
- }
-
- @Test
- public void providesBoltNames() {
- SchedulerStateManagerAdaptor adaptor = getMockSchedulerStateManagerAdaptor();
- TopologyProvider topologyProvider = new TopologyProvider(adaptor, eventManager, topology);
-
- Map<String, Integer> bolts = getBolts();
- assertEquals(2, bolts.size());
- String[] boltNames = topologyProvider.getBoltNames();
- assertEquals(bolts.size(), boltNames.length);
- for (String boltName : boltNames) {
- bolts.remove(boltName);
- }
- assertEquals(0, bolts.size());
- }
-
- private Map<String, Integer> getBolts() {
- Map<String, Integer> bolts = new HashMap<>();
- bolts.put("bolt-1", 1);
- bolts.put("bolt-2", 1);
- return bolts;
- }
-
- private Map<String, Integer> getSpouts() {
- Map<String, Integer> spouts = new HashMap<>();
- spouts.put("spout", 1);
- return spouts;
- }
-}
diff --git a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/detectors/BackPressureDetectorTest.java b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/detectors/BackPressureDetectorTest.java
index 4160fa0..06c47f7 100644
--- a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/detectors/BackPressureDetectorTest.java
+++ b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/detectors/BackPressureDetectorTest.java
@@ -19,6 +19,7 @@
package org.apache.heron.healthmgr.detectors;
+import java.io.IOException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collection;
@@ -32,6 +33,7 @@
import org.junit.Before;
import org.junit.Test;
+import org.apache.heron.healthmgr.HealthManagerMetrics;
import org.apache.heron.healthmgr.HealthPolicyConfig;
import static org.apache.heron.healthmgr.detectors.BackPressureDetector.CONF_NOISE_FILTER;
@@ -49,7 +51,7 @@
now = Instant.now();
}
@Test
- public void testConfigAndFilter() {
+ public void testConfigAndFilter() throws IOException {
HealthPolicyConfig config = mock(HealthPolicyConfig.class);
when(config.getConfig(CONF_NOISE_FILTER, 20)).thenReturn(50);
@@ -65,7 +67,8 @@
metrics.add(measurement2);
metrics.add(measurement3);
- BackPressureDetector detector = new BackPressureDetector(config);
+ HealthManagerMetrics publishingMetrics = mock(HealthManagerMetrics.class);
+ BackPressureDetector detector = new BackPressureDetector(config, publishingMetrics);
PoliciesExecutor.ExecutionContext context = mock(PoliciesExecutor.ExecutionContext.class);
when(context.checkpoint()).thenReturn(now);
detector.initialize(context);
@@ -92,7 +95,7 @@
metrics.add(measurement1);
metrics.add(measurement2);
- detector = new BackPressureDetector(config);
+ detector = new BackPressureDetector(config, publishingMetrics);
detector.initialize(context);
symptoms = detector.detect(metrics);
diff --git a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/diagnosers/SlowInstanceDiagnoserTest.java b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/diagnosers/SlowInstanceDiagnoserTest.java
index fb5bfb0..029fe92 100644
--- a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/diagnosers/SlowInstanceDiagnoserTest.java
+++ b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/diagnosers/SlowInstanceDiagnoserTest.java
@@ -19,6 +19,7 @@
package org.apache.heron.healthmgr.diagnosers;
+import java.io.IOException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
@@ -35,6 +36,7 @@
import org.junit.Before;
import org.junit.Test;
+import org.apache.heron.healthmgr.HealthManagerMetrics;
import org.apache.heron.healthmgr.sensors.BaseSensor;
import static org.apache.heron.healthmgr.detectors.BaseDetector.SymptomType.SYMPTOM_COMP_BACK_PRESSURE;
@@ -55,14 +57,15 @@
private ExecutionContext context;
@Before
- public void initTestData() {
+ public void initTestData() throws IOException {
now = Instant.now();
measurements = new ArrayList<>();
context = mock(ExecutionContext.class);
when(context.checkpoint()).thenReturn(now);
- diagnoser = new SlowInstanceDiagnoser();
+ HealthManagerMetrics publishingMetrics = mock(HealthManagerMetrics.class);
+ diagnoser = new SlowInstanceDiagnoser(publishingMetrics);
diagnoser.initialize(context);
}
diff --git a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/resolvers/ScaleUpResolverTest.java b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/resolvers/ScaleUpResolverTest.java
index 0c36e91..e9846c9 100644
--- a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/resolvers/ScaleUpResolverTest.java
+++ b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/resolvers/ScaleUpResolverTest.java
@@ -21,6 +21,7 @@
import java.time.Instant;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -40,9 +41,11 @@
import org.apache.heron.api.generated.TopologyAPI;
import org.apache.heron.common.utils.topology.TopologyTests;
import org.apache.heron.healthmgr.common.PackingPlanProvider;
-import org.apache.heron.healthmgr.common.TopologyProvider;
+import org.apache.heron.healthmgr.common.PhysicalPlanProvider;
+import org.apache.heron.healthmgr.HealthManagerMetrics;
import org.apache.heron.packing.roundrobin.RoundRobinPacking;
import org.apache.heron.proto.scheduler.Scheduler.UpdateTopologyRequest;
+import org.apache.heron.proto.system.PhysicalPlans.PhysicalPlan;
import org.apache.heron.scheduler.client.ISchedulerClient;
import org.apache.heron.spi.common.Config;
import org.apache.heron.spi.common.Key;
@@ -103,7 +106,7 @@
@Test
public void testBuildPackingPlan() {
TopologyAPI.Topology topology = createTestTopology();
- TopologyProvider topologyProvider = createTopologyProvider(topology);
+ PhysicalPlanProvider topologyProvider = createPhysicalPlanProvider(topology);
Config config = createConfig(topology);
PackingPlan currentPlan = createPacking(topology, config);
@@ -139,10 +142,12 @@
.build();
}
- private TopologyProvider createTopologyProvider(TopologyAPI.Topology topology) {
- TopologyProvider topologyProvider = mock(TopologyProvider.class);
- when(topologyProvider.get()).thenReturn(topology);
- return topologyProvider;
+ private PhysicalPlanProvider createPhysicalPlanProvider(TopologyAPI.Topology topology) {
+ PhysicalPlan pp = PhysicalPlan.newBuilder().setTopology(topology).build();
+
+ PhysicalPlanProvider physicalPlanProvider = mock(PhysicalPlanProvider.class);
+ when(physicalPlanProvider.get()).thenReturn(pp);
+ return physicalPlanProvider;
}
private TopologyAPI.Topology createTestTopology() {
diff --git a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/BackPressureSensorTest.java b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/BackPressureSensorTest.java
index ddc429f..15da5a4 100644
--- a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/BackPressureSensorTest.java
+++ b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/BackPressureSensorTest.java
@@ -19,7 +19,9 @@
package org.apache.heron.healthmgr.sensors;
+import java.io.IOException;
import java.time.Instant;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -32,8 +34,9 @@
import org.junit.Test;
import org.mockito.Mockito;
+import org.apache.heron.healthmgr.HealthManagerMetrics;
import org.apache.heron.healthmgr.common.PackingPlanProvider;
-import org.apache.heron.healthmgr.common.TopologyProvider;
+import org.apache.heron.healthmgr.common.PhysicalPlanProvider;
import static org.apache.heron.healthmgr.sensors.BaseSensor.DEFAULT_METRIC_DURATION;
import static org.apache.heron.healthmgr.sensors.BaseSensor.MetricName.METRIC_BACK_PRESSURE;
@@ -45,9 +48,10 @@
public class BackPressureSensorTest {
@Test
- public void providesBackPressureMetricForBolts() {
- TopologyProvider topologyProvider = mock(TopologyProvider.class);
- when(topologyProvider.getBoltNames()).thenReturn(new String[]{"bolt-1", "bolt-2"});
+ public void providesBackPressureMetricForBolts() throws IOException {
+ PhysicalPlanProvider topologyProvider = mock(PhysicalPlanProvider.class);
+ when(topologyProvider.getBoltNames()).thenReturn(
+ Arrays.asList(new String[]{"bolt-1", "bolt-2"}));
String[] boltIds = new String[]{"container_1_bolt-1_1",
"container_2_bolt-2_22",
@@ -70,8 +74,10 @@
}
+ HealthManagerMetrics publishingMetrics = mock(HealthManagerMetrics.class);
BackPressureSensor backPressureSensor =
- new BackPressureSensor(packingPlanProvider, topologyProvider, null, metricsProvider);
+ new BackPressureSensor(
+ packingPlanProvider, topologyProvider, null, metricsProvider, publishingMetrics);
ExecutionContext context = mock(ExecutionContext.class);
when(context.checkpoint()).thenReturn(Instant.now());
diff --git a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/BufferSizeSensorTest.java b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/BufferSizeSensorTest.java
index e68ec27..f19621c 100644
--- a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/BufferSizeSensorTest.java
+++ b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/BufferSizeSensorTest.java
@@ -20,6 +20,7 @@
package org.apache.heron.healthmgr.sensors;
import java.time.Instant;
+import java.util.Arrays;
import java.util.Collection;
import com.microsoft.dhalion.api.MetricsProvider;
@@ -30,7 +31,7 @@
import org.junit.Test;
import org.apache.heron.healthmgr.common.PackingPlanProvider;
-import org.apache.heron.healthmgr.common.TopologyProvider;
+import org.apache.heron.healthmgr.common.PhysicalPlanProvider;
import org.apache.heron.healthmgr.sensors.BaseSensor.MetricName;
import static org.apache.heron.healthmgr.sensors.BaseSensor.MetricName.METRIC_WAIT_Q_SIZE;
@@ -41,8 +42,9 @@
public class BufferSizeSensorTest {
@Test
public void providesBufferSizeMetricForBolts() {
- TopologyProvider topologyProvider = mock(TopologyProvider.class);
- when(topologyProvider.getBoltNames()).thenReturn(new String[]{"bolt-1", "bolt-2"});
+ PhysicalPlanProvider topologyProvider = mock(PhysicalPlanProvider.class);
+ when(topologyProvider.getBoltNames()).thenReturn(
+ Arrays.asList(new String[]{"bolt-1", "bolt-2"}));
String[] boltIds = new String[]{"container_1_bolt-1_1",
"container_2_bolt-2_22",
diff --git a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/ExecuteCountSensorTest.java b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/ExecuteCountSensorTest.java
index 811717f..77dfbc6 100644
--- a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/ExecuteCountSensorTest.java
+++ b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/sensors/ExecuteCountSensorTest.java
@@ -32,7 +32,7 @@
import org.junit.Test;
-import org.apache.heron.healthmgr.common.TopologyProvider;
+import org.apache.heron.healthmgr.common.PhysicalPlanProvider;
import static org.apache.heron.healthmgr.sensors.BaseSensor.DEFAULT_METRIC_DURATION;
import static org.apache.heron.healthmgr.sensors.BaseSensor.MetricName.METRIC_EXE_COUNT;
@@ -47,8 +47,9 @@
public void providesBoltExecutionCountMetrics() {
Instant now = Instant.now();
String metric = METRIC_EXE_COUNT.text();
- TopologyProvider topologyProvider = mock(TopologyProvider.class);
- when(topologyProvider.getBoltNames()).thenReturn(new String[]{"bolt-1", "bolt-2"});
+ PhysicalPlanProvider topologyProvider = mock(PhysicalPlanProvider.class);
+ when(topologyProvider.getBoltNames()).thenReturn(
+ Arrays.asList(new String[]{"bolt-1", "bolt-2"}));
MetricsProvider metricsProvider = mock(MetricsProvider.class);