summaryrefslogtreecommitdiffstats
path: root/statistics/src/test/java/com/yahoo/statistics/CounterGroupTestCase.java
blob: 91a19605286eede5b638d2c151b69bcf405a8a56 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.statistics;


import java.util.Arrays;
import java.util.logging.Handler;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

import com.yahoo.container.StatisticsConfig;

/**
 * Test set for groups of counters.
 *
 * @author  <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
 */
public class CounterGroupTestCase extends junit.framework.TestCase {
    private volatile boolean gotRecord = false;

    private class CounterGroupHandler extends Handler {
        // This is for testing CounterProxy
        @Override
        public void publish(LogRecord record) {
            com.yahoo.log.event.CountGroup msg = (com.yahoo.log.event.CountGroup) record.getParameters()[0];
            assertEquals("test", msg.getValue("name"));
            String values = msg.getValue("values");
            assertFalse("Unexpected value for a.", values.indexOf("a=500") == -1);
            assertFalse("Unexpected value for b.", values.indexOf("b=1") == -1);
            assertFalse("Unexpected value for c.", values.indexOf("c=0") == -1);
            gotRecord = true;

        }

        @Override
        public void flush() {
        }

        @Override
        public void close() throws SecurityException {
        }
    }

    public void testBasic() {
        Logger logger = Logger.getLogger(CounterGroup.class.getName());
        boolean initUseParentHandlers = logger.getUseParentHandlers();
        Handler logChecker = new CounterGroupHandler();
        logger.setUseParentHandlers(false);
        CounterGroup c = new CounterGroup("test", Statistics.nullImplementation, false);
        Counter n;
        c.increment("a");
        c.increment("b");
        c.increment("a", 499);
        n = c.getCounter("a");
        assertEquals(500, n.get());
        n = c.getCounter("b");
        assertEquals(1, n.get());
        n = c.getCounter("c");
        assertEquals(0, n.get());
        logger.addHandler(logChecker);
        c.run();
        assertFalse("The logging handler did not really run.", gotRecord == false);
        // cleanup:
        logger.removeHandler(logChecker);
        logger.setUseParentHandlers(initUseParentHandlers);
    }

    public void testObjectContracts() {
        CounterGroup c = new CounterGroup("test", Statistics.nullImplementation, false);
        CounterGroup c2 = new CounterGroup("test", Statistics.nullImplementation, false);
        c2.increment("nalle");
        assertEquals(c, c2);
        assertEquals(c.hashCode(), c2.hashCode());
        c2 = new CounterGroup("nalle", Statistics.nullImplementation, false);
        assertFalse("Different names should lead to different hashcodes",
                c.hashCode() == c2.hashCode());
        assertFalse("Different names should lead to equals() return false",
                c.equals(c2));
    }

    public void testConfigStuff() {
        Logger logger = Logger.getLogger(CounterGroup.class.getName());
        boolean initUseParentHandlers = logger.getUseParentHandlers();
        logger.setUseParentHandlers(false);
        MockStatistics m = new MockStatistics();
        final String joppe = "joppe";
        StatisticsConfig config = new StatisticsConfig(
                new StatisticsConfig.Builder().counterresets(Arrays
                        .asList(new StatisticsConfig.Counterresets.Builder[] {
                                new StatisticsConfig.Counterresets.Builder().name(joppe) })));
        m.config = config;
        CounterGroup c = new CounterGroup("nalle", m);
        CounterGroup c2 = new CounterGroup(joppe, m);
        final String bamse = "bamse";
        c.increment(bamse);
        c2.increment(bamse);
        assertEquals(1L, c.getCounter(bamse).get());
        assertEquals(1L, c2.getCounter(bamse).get());
        c2.increment(bamse);
        assertEquals(1L, c.getCounter(bamse).get());
        assertEquals(2L, c2.getCounter(bamse).get());
        c.run();
        c2.run();
        assertEquals(1L, c.getCounter(bamse).get());
        assertEquals(0L, c2.getCounter(bamse).get());
        logger.setUseParentHandlers(initUseParentHandlers);
    }

    public class MockStatistics implements Statistics {
        public StatisticsConfig config = null;
        public int registerCount = 0;

        @Override
        public void register(Handle h) {
            registerCount += 1;
        }

        @Override
        public void remove(String name) {
        }

        @Override
        public StatisticsConfig getConfig() {
            return config;
        }

        @Override
        public int purge() {
            return 0;
        }
    }

}