// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.clustercontroller.utils.util; import org.junit.jupiter.api.Test; import java.util.Map; import java.util.TreeMap; import static org.junit.jupiter.api.Assertions.assertEquals; public class MetricReporterTest { static class MetricReporterMock implements MetricReporter { final StringBuilder sb = new StringBuilder(); @Override public void set(String s, Number number, Context context) { sb.append("set(").append(s).append(", ").append(number).append(")\n"); } @Override public void add(String s, Number number, Context context) { sb.append("add(").append(s).append(", ").append(number).append(")\n"); } @Override public Context createContext(Map stringMap) { sb.append("createContext("); for (String s : stringMap.keySet()) { sb.append(" ").append(s).append("=").append(stringMap.get(s)); } sb.append(" )\n"); return new Context() {}; } } @Test void testNoMetricReporter() { NoMetricReporter reporter = new NoMetricReporter(); reporter.add("foo", 3, null); reporter.set("foo", 3, null); reporter.createContext(null); } @Test void testPrefix() { MetricReporterMock mock = new MetricReporterMock(); ComponentMetricReporter c = new ComponentMetricReporter(mock, "prefix"); c.addDimension("urk", "fy"); c.add("foo", 2); c.set("bar", 1); assertEquals( "createContext( )\n" + "createContext( urk=fy )\n" + "add(prefixfoo, 2)\n" + "set(prefixbar, 1)\n", mock.sb.toString()); } @Test void testWithContext() { MetricReporterMock mock = new MetricReporterMock(); ComponentMetricReporter c = new ComponentMetricReporter(mock, "prefix"); c.addDimension("urk", "fy"); Map myContext = new TreeMap<>(); myContext.put("myvar", 3); c.add("foo", 2, c.createContext(myContext)); c.set("bar", 1, c.createContext(myContext)); assertEquals( "createContext( )\n" + "createContext( urk=fy )\n" + "createContext( myvar=3 urk=fy )\n" + "add(prefixfoo, 2)\n" + "createContext( myvar=3 urk=fy )\n" + "set(prefixbar, 1)\n", mock.sb.toString()); } @Test void testDefaultContext() { MetricReporterMock mock = new MetricReporterMock(); ComponentMetricReporter c = new ComponentMetricReporter(mock, "prefix"); c.addDimension("urk", "fy"); c.add("foo", 2, c.createContext(null)); assertEquals( "createContext( )\n" + "createContext( urk=fy )\n" + "add(prefixfoo, 2)\n", mock.sb.toString()); } @Test void testContextOverlap() { MetricReporterMock mock = new MetricReporterMock(); ComponentMetricReporter c = new ComponentMetricReporter(mock, "prefix"); c.addDimension("urk", "fy"); Map myContext = new TreeMap<>(); myContext.put("urk", "yes"); c.add("foo", 2, c.createContext(myContext)); assertEquals( "createContext( )\n" + "createContext( urk=fy )\n" + "createContext( urk=yes )\n" + "add(prefixfoo, 2)\n", mock.sb.toString()); } }