aboutsummaryrefslogtreecommitdiffstats
path: root/simplemetrics/src/test/java/com/yahoo/metrics/simple/DimensionsCacheTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'simplemetrics/src/test/java/com/yahoo/metrics/simple/DimensionsCacheTest.java')
-rw-r--r--simplemetrics/src/test/java/com/yahoo/metrics/simple/DimensionsCacheTest.java110
1 files changed, 110 insertions, 0 deletions
diff --git a/simplemetrics/src/test/java/com/yahoo/metrics/simple/DimensionsCacheTest.java b/simplemetrics/src/test/java/com/yahoo/metrics/simple/DimensionsCacheTest.java
new file mode 100644
index 00000000000..8c24baae560
--- /dev/null
+++ b/simplemetrics/src/test/java/com/yahoo/metrics/simple/DimensionsCacheTest.java
@@ -0,0 +1,110 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.metrics.simple;
+
+import static org.junit.Assert.*;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.TreeMap;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.yahoo.metrics.simple.UntypedMetric.AssumedType;
+
+/**
+ * Functional test for point persistence layer.
+ *
+ * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ */
+public class DimensionsCacheTest {
+ private static final int POINTS_TO_KEEP = 3;
+ DimensionCache cache;
+
+ @Before
+ public void setUp() throws Exception {
+ cache = new DimensionCache(POINTS_TO_KEEP);
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ cache = null;
+ }
+
+ @Test
+ public final void smokeTest() {
+ String metricName = "testMetric";
+ Bucket first = new Bucket();
+ for (int i = 0; i < 4; ++i) {
+ populateSingleValue(metricName, first, i);
+ }
+ cache.updateDimensionPersistence(null, first);
+ Bucket second = new Bucket();
+ final int newest = 42;
+ populateSingleValue(metricName, second, newest);
+ cache.updateDimensionPersistence(first, second);
+ assertEquals(POINTS_TO_KEEP, second.getValuesForMetric(metricName).size());
+ boolean newestFound = false;
+ for (Entry<Point, UntypedMetric> x : second.getValuesForMetric(metricName)) {
+ if (x.getValue().getLast() == newest) {
+ newestFound = true;
+ }
+ }
+ assertTrue("Did not keep newest measurement when padding points.", newestFound);
+ }
+
+ @Test
+ public final void testNoBoomWithEmptyBuckets() {
+ Bucket check = new Bucket();
+ cache.updateDimensionPersistence(null, new Bucket());
+ cache.updateDimensionPersistence(null, new Bucket());
+ cache.updateDimensionPersistence(new Bucket(), check);
+ assertEquals(0, check.entrySet().size());
+ }
+
+ @Test
+ public final void testUpdateWithNullThenDataThenData() {
+ Bucket first = new Bucket();
+ populateDimensionLessValue("one", first, 2);
+ cache.updateDimensionPersistence(null, first);
+ Bucket second = new Bucket();
+ populateDimensionLessValue("other", second, 3);
+ cache.updateDimensionPersistence(first, second);
+ Collection<String> names = second.getAllMetricNames();
+ assertEquals(2, names.size());
+ assertTrue(names.contains("one"));
+ assertTrue(names.contains("other"));
+ }
+
+ @Test
+ public final void testUpdateWithNullThenDataThenNoDataThenData() {
+ Bucket first = new Bucket();
+ Bucket second = new Bucket();
+ populateDimensionLessValue("first", first, 1.0d);
+ populateDimensionLessValue("second", second, 2.0d);
+ cache.updateDimensionPersistence(null, first);
+ cache.updateDimensionPersistence(first, new Bucket());
+ cache.updateDimensionPersistence(new Bucket(), second);
+ assertEquals(2, second.entrySet().size());
+ assertTrue(second.getAllMetricNames().contains("first"));
+ assertTrue(second.getAllMetricNames().contains("second"));
+ }
+
+ private void populateDimensionLessValue(String metricName, Bucket bucket, double x) {
+ Identifier id = new Identifier(metricName, null);
+ Sample wrappedX = new Sample(new Measurement(Double.valueOf(x)), id, AssumedType.GAUGE);
+ bucket.put(wrappedX);
+ }
+
+ private void populateSingleValue(String metricName, Bucket bucket, int i) {
+ Map<String, Integer> m = new TreeMap<>();
+ m.put(String.valueOf(i), Integer.valueOf(i));
+ Point p = new Point(m);
+ Identifier id = new Identifier(metricName, p);
+ Sample x = new Sample(new Measurement(Double.valueOf(i)), id, AssumedType.GAUGE);
+ bucket.put(x);
+ }
+
+}