diff options
Diffstat (limited to 'metrics-proxy/src/test/java/ai')
4 files changed, 138 insertions, 10 deletions
diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/DownService.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/DownService.java index 7b76c2fbd37..ccd1351f2d5 100644 --- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/DownService.java +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/DownService.java @@ -2,7 +2,6 @@ package ai.vespa.metricsproxy.service; import ai.vespa.metricsproxy.metric.HealthMetric; -import ai.vespa.metricsproxy.metric.Metrics; /** * @author gjoranv @@ -18,7 +17,7 @@ public class DownService extends VespaService { } @Override - public void consumeMetrics(MetricsParser.Consumer consumer) { + public void consumeMetrics(MetricsParser.Collector consumer) { } @Override diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/DummyService.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/DummyService.java index b7b41f4a4f8..b4607bd4376 100644 --- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/DummyService.java +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/DummyService.java @@ -20,10 +20,10 @@ public class DummyService extends VespaService { } @Override - public void consumeMetrics(MetricsParser.Consumer consumer) { + public void consumeMetrics(MetricsParser.Collector consumer) { long timestamp = System.currentTimeMillis() / 1000; - consumer.consume(new Metric(MetricId.toMetricId(METRIC_1), 5 * num + 1, timestamp)); - consumer.consume(new Metric(MetricId.toMetricId(METRIC_2), 1.3 * num + 1.05, timestamp)); + consumer.accept(new Metric(MetricId.toMetricId(METRIC_1), 5 * num + 1, timestamp)); + consumer.accept(new Metric(MetricId.toMetricId(METRIC_2), 1.3 * num + 1.05, timestamp)); } } diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MetricsFetcherTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MetricsFetcherTest.java index 5d4512276d4..a252543ca1d 100644 --- a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MetricsFetcherTest.java +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MetricsFetcherTest.java @@ -21,18 +21,18 @@ public class MetricsFetcherTest { private static final int port = 9; //port number is not used in this test - private static class MetricsConsumer implements MetricsParser.Consumer { + private static class MetricsCollector implements MetricsParser.Collector { Metrics metrics = new Metrics(); @Override - public void consume(Metric metric) { + public void accept(Metric metric) { metrics.add(metric); } } Metrics fetch(String data) throws IOException { RemoteMetricsFetcher fetcher = new RemoteMetricsFetcher(new DummyService(0, "dummy/id/0"), port); - MetricsConsumer consumer = new MetricsConsumer(); - fetcher.createMetrics(data, consumer, 0); - return consumer.metrics; + MetricsCollector collector = new MetricsCollector(); + fetcher.createMetrics(data, collector, 0); + return collector.metrics; } @Test diff --git a/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MetricsParserTest.java b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MetricsParserTest.java new file mode 100644 index 00000000000..17dc9e643f0 --- /dev/null +++ b/metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MetricsParserTest.java @@ -0,0 +1,129 @@ +package ai.vespa.metricsproxy.service; + +import ai.vespa.metricsproxy.metric.Metric; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +/** + * @author gjoranv + */ +public class MetricsParserTest { + + private static class MetricsCollector implements MetricsParser.Collector { + List<Metric> metrics = new ArrayList<>(); + + @Override + public void accept(Metric metric) { + metrics.add(metric); + } + } + + @Test + public void different_dimension_values_are_not_treated_as_equal() throws Exception { + var collector = new MetricsCollector(); + MetricsParser.parse(metricsJsonDistinctButDuplicateDimensionDalues(), collector); + assertEquals(2, collector.metrics.size()); + assertNotEquals("Dimensions should not be equal", + collector.metrics.get(0).getDimensions(), + collector.metrics.get(1).getDimensions()); + } + + @Test + public void different_swapped_dimension_values_are_not_treated_as_equal() throws Exception { + var collector = new MetricsCollector(); + MetricsParser.parse(metricsJsonDistinctButDuplicateSwappedDimensionDalues(), collector); + assertEquals(2, collector.metrics.size()); + assertNotEquals("Dimensions should not be equal", + collector.metrics.get(0).getDimensions(), + collector.metrics.get(1).getDimensions()); + } + + // The duplicate dimension values for 'cluster' and 'clusterid' exposed a bug in a previously used hashing algo for dimensions. + private String metricsJsonDistinctButDuplicateDimensionDalues() { + return """ + { + "time": 1671035366573, + "status": { + "code": "up" + }, + "metrics": { + "snapshot": { + "from": 1671035306.562, + "to": 1671035366.562 + }, + "values": [ + { + "name": "cluster-controller.resource_usage.nodes_above_limit", + "values": { + "last": 1.0 + }, + "dimensions": { + "controller-index": "0", + "cluster": "CLUSTER-1", + "clusterid": "CLUSTER-1" + } + }, + { + "name": "cluster-controller.resource_usage.nodes_above_limit", + "values": { + "last": 2.0 + }, + "dimensions": { + "controller-index": "0", + "cluster": "CLUSTER-2", + "clusterid": "CLUSTER-2" + } + } + ] + } + } + """; + } + // The duplicate dimension values for 'cluster' and 'clusterid' exposed a bug in a previously used hashing algo for dimensions. + private String metricsJsonDistinctButDuplicateSwappedDimensionDalues() { + return """ + { + "time": 1671035366573, + "status": { + "code": "up" + }, + "metrics": { + "snapshot": { + "from": 1671035306.562, + "to": 1671035366.562 + }, + "values": [ + { + "name": "cluster-controller.resource_usage.nodes_above_limit", + "values": { + "last": 1.0 + }, + "dimensions": { + "controller-index": "0", + "cluster": "CLUSTER-1", + "clusterid": "CLUSTER-2" + } + }, + { + "name": "cluster-controller.resource_usage.nodes_above_limit", + "values": { + "last": 2.0 + }, + "dimensions": { + "controller-index": "0", + "cluster": "CLUSTER-2", + "clusterid": "CLUSTER-1" + } + } + ] + } + } + """; + } + +} |