summaryrefslogtreecommitdiffstats
path: root/container-disc/src/test
diff options
context:
space:
mode:
authorOlli Virtanen <olli.virtanen@oath.com>2018-06-01 12:09:03 +0200
committerOlli Virtanen <olli.virtanen@oath.com>2018-06-01 12:09:03 +0200
commite5d6ee5899daca0644df14ef143678d43cd5b231 (patch)
tree3dcd83ec0f44f704e405fea5dd773a677198d0b2 /container-disc/src/test
parent5c57852b26126d72b080fb6e0893dc3d633c28c1 (diff)
JVM Garbage collection metrics
Diffstat (limited to 'container-disc/src/test')
-rw-r--r--container-disc/src/test/java/com/yahoo/container/jdisc/metric/GarbageCollectionMetricsTest.java60
-rw-r--r--container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java5
2 files changed, 64 insertions, 1 deletions
diff --git a/container-disc/src/test/java/com/yahoo/container/jdisc/metric/GarbageCollectionMetricsTest.java b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/GarbageCollectionMetricsTest.java
new file mode 100644
index 00000000000..76ad430f4b9
--- /dev/null
+++ b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/GarbageCollectionMetricsTest.java
@@ -0,0 +1,60 @@
+package com.yahoo.container.jdisc.metric;
+
+import com.yahoo.jdisc.Metric;
+import org.junit.Test;
+
+import java.lang.management.ManagementFactory;
+import java.time.Clock;
+import java.util.LinkedList;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+/**
+ * @author ollivir
+ */
+public class GarbageCollectionMetricsTest {
+ @Test
+ public void gc_metrics_reported_at_intervals() {
+ Clock clock = mock(Clock.class);
+ Metric metric = mock(Metric.class);
+ int base = ManagementFactory.getGarbageCollectorMXBeans().size();
+
+ long iv = GarbageCollectionMetrics.REPORTING_INTERVAL;
+ when(clock.millis()).thenReturn(10L);
+ GarbageCollectionMetrics garbageCollectionMetrics = new GarbageCollectionMetrics(clock);
+ assertThat(garbageCollectionMetrics.getGcStatistics().keySet().size(), is(base));
+
+ when(clock.millis()).thenReturn(iv);
+ garbageCollectionMetrics.emitMetrics(metric);
+ assertWindowLengths(garbageCollectionMetrics, 2);
+
+ when(clock.millis()).thenReturn(10L + iv);
+ garbageCollectionMetrics.emitMetrics(metric);
+ assertWindowLengths(garbageCollectionMetrics, 3);
+
+ when(clock.millis()).thenReturn(20L + iv);
+ garbageCollectionMetrics.emitMetrics(metric);
+ assertWindowLengths(garbageCollectionMetrics, 3);
+
+ when(clock.millis()).thenReturn(20L + iv + iv);
+ garbageCollectionMetrics.emitMetrics(metric);
+ assertWindowLengths(garbageCollectionMetrics, 2);
+
+ verify(metric, times(base * 4 * 2)).set(anyString(), any(), any());
+ }
+
+ private static void assertWindowLengths(GarbageCollectionMetrics gcm, int count) {
+ for(LinkedList<GarbageCollectionMetrics.GcStats> window: gcm.getGcStatistics().values()) {
+ assertThat(window.size(), is(count));
+ }
+ }
+}
diff --git a/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java
index f10af7593a4..e9e04eab3b4 100644
--- a/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java
+++ b/container-disc/src/test/java/com/yahoo/container/jdisc/metric/MetricUpdaterTest.java
@@ -5,6 +5,7 @@ import com.yahoo.jdisc.Metric;
import com.yahoo.jdisc.statistics.ContainerWatchdogMetrics;
import org.junit.Test;
+import java.lang.management.ManagementFactory;
import java.time.Duration;
import static org.mockito.Matchers.any;
@@ -20,11 +21,13 @@ public class MetricUpdaterTest {
@Test
public void metrics_are_updated_in_scheduler_cycle() throws InterruptedException {
+ int gcCount = ManagementFactory.getGarbageCollectorMXBeans().size();
+
Metric metric = mock(Metric.class);
ContainerWatchdogMetrics containerWatchdogMetrics = mock(ContainerWatchdogMetrics.class);
new MetricUpdater(new MockScheduler(), metric, containerWatchdogMetrics);
verify(containerWatchdogMetrics, times(1)).emitMetrics(any());
- verify(metric, times(8)).set(anyString(), any(), any());
+ verify(metric, times(8 + 2 * gcCount)).set(anyString(), any(), any());
}
private static class MockScheduler implements MetricUpdater.Scheduler {