aboutsummaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/github.com/rcrowley/go-metrics/registry_test.go
blob: 9ba0a02054fc8c9777ccf8d6cb84bb5279befc17 (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
package metrics

import "testing"

func BenchmarkRegistry(b *testing.B) {
    r := NewRegistry()
    r.Register("foo", NewCounter())
    b.ResetTimer()
    for i := 0; i < b.N; i++ {
        r.Each(func(string, interface{}) {})
    }
}

func TestRegistry(t *testing.T) {
    r := NewRegistry()
    r.Register("foo", NewCounter())
    i := 0
    r.Each(func(name string, iface interface{}) {
        i++
        if "foo" != name {
            t.Fatal(name)
        }
        if _, ok := iface.(Counter); !ok {
            t.Fatal(iface)
        }
    })
    if 1 != i {
        t.Fatal(i)
    }
    r.Unregister("foo")
    i = 0
    r.Each(func(string, interface{}) { i++ })
    if 0 != i {
        t.Fatal(i)
    }
}

func TestRegistryDuplicate(t *testing.T) {
    r := NewRegistry()
    if err := r.Register("foo", NewCounter()); nil != err {
        t.Fatal(err)
    }
    if err := r.Register("foo", NewGauge()); nil == err {
        t.Fatal(err)
    }
    i := 0
    r.Each(func(name string, iface interface{}) {
        i++
        if _, ok := iface.(Counter); !ok {
            t.Fatal(iface)
        }
    })
    if 1 != i {
        t.Fatal(i)
    }
}

func TestRegistryGet(t *testing.T) {
    r := NewRegistry()
    r.Register("foo", NewCounter())
    if count := r.Get("foo").(Counter).Count(); 0 != count {
        t.Fatal(count)
    }
    r.Get("foo").(Counter).Inc(1)
    if count := r.Get("foo").(Counter).Count(); 1 != count {
        t.Fatal(count)
    }
}

func TestRegistryGetOrRegister(t *testing.T) {
    r := NewRegistry()

    // First metric wins with GetOrRegister
    _ = r.GetOrRegister("foo", NewCounter())
    m := r.GetOrRegister("foo", NewGauge())
    if _, ok := m.(Counter); !ok {
        t.Fatal(m)
    }

    i := 0
    r.Each(func(name string, iface interface{}) {
        i++
        if name != "foo" {
            t.Fatal(name)
        }
        if _, ok := iface.(Counter); !ok {
            t.Fatal(iface)
        }
    })
    if i != 1 {
        t.Fatal(i)
    }
}

func TestRegistryGetOrRegisterWithLazyInstantiation(t *testing.T) {
    r := NewRegistry()

    // First metric wins with GetOrRegister
    _ = r.GetOrRegister("foo", NewCounter)
    m := r.GetOrRegister("foo", NewGauge)
    if _, ok := m.(Counter); !ok {
        t.Fatal(m)
    }

    i := 0
    r.Each(func(name string, iface interface{}) {
        i++
        if name != "foo" {
            t.Fatal(name)
        }
        if _, ok := iface.(Counter); !ok {
            t.Fatal(iface)
        }
    })
    if i != 1 {
        t.Fatal(i)
    }
}