aboutsummaryrefslogtreecommitdiffstats
path: root/metrics-proxy/src/test/java/ai
diff options
context:
space:
mode:
Diffstat (limited to 'metrics-proxy/src/test/java/ai')
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/DownService.java3
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/DummyService.java6
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MetricsFetcherTest.java10
-rw-r--r--metrics-proxy/src/test/java/ai/vespa/metricsproxy/service/MetricsParserTest.java129
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"
+ }
+ }
+ ]
+ }
+ }
+ """;
+ }
+
+}