github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/rcrowley/go-metrics/registry_test.go (about) 1 package metrics 2 3 import "testing" 4 5 func BenchmarkRegistry(b *testing.B) { 6 r := NewRegistry() 7 r.Register("foo", NewCounter()) 8 b.ResetTimer() 9 for i := 0; i < b.N; i++ { 10 r.Each(func(string, interface{}) {}) 11 } 12 } 13 14 func TestRegistry(t *testing.T) { 15 r := NewRegistry() 16 r.Register("foo", NewCounter()) 17 i := 0 18 r.Each(func(name string, iface interface{}) { 19 i++ 20 if "foo" != name { 21 t.Fatal(name) 22 } 23 if _, ok := iface.(Counter); !ok { 24 t.Fatal(iface) 25 } 26 }) 27 if 1 != i { 28 t.Fatal(i) 29 } 30 r.Unregister("foo") 31 i = 0 32 r.Each(func(string, interface{}) { i++ }) 33 if 0 != i { 34 t.Fatal(i) 35 } 36 } 37 38 func TestRegistryDuplicate(t *testing.T) { 39 r := NewRegistry() 40 if err := r.Register("foo", NewCounter()); nil != err { 41 t.Fatal(err) 42 } 43 if err := r.Register("foo", NewGauge()); nil == err { 44 t.Fatal(err) 45 } 46 i := 0 47 r.Each(func(name string, iface interface{}) { 48 i++ 49 if _, ok := iface.(Counter); !ok { 50 t.Fatal(iface) 51 } 52 }) 53 if 1 != i { 54 t.Fatal(i) 55 } 56 } 57 58 func TestRegistryGet(t *testing.T) { 59 r := NewRegistry() 60 r.Register("foo", NewCounter()) 61 if count := r.Get("foo").(Counter).Count(); 0 != count { 62 t.Fatal(count) 63 } 64 r.Get("foo").(Counter).Inc(1) 65 if count := r.Get("foo").(Counter).Count(); 1 != count { 66 t.Fatal(count) 67 } 68 } 69 70 func TestRegistryGetOrRegister(t *testing.T) { 71 r := NewRegistry() 72 73 // First metric wins with GetOrRegister 74 _ = r.GetOrRegister("foo", NewCounter()) 75 m := r.GetOrRegister("foo", NewGauge()) 76 if _, ok := m.(Counter); !ok { 77 t.Fatal(m) 78 } 79 80 i := 0 81 r.Each(func(name string, iface interface{}) { 82 i++ 83 if name != "foo" { 84 t.Fatal(name) 85 } 86 if _, ok := iface.(Counter); !ok { 87 t.Fatal(iface) 88 } 89 }) 90 if i != 1 { 91 t.Fatal(i) 92 } 93 } 94 95 func TestRegistryGetOrRegisterWithLazyInstantiation(t *testing.T) { 96 r := NewRegistry() 97 98 // First metric wins with GetOrRegister 99 _ = r.GetOrRegister("foo", NewCounter) 100 m := r.GetOrRegister("foo", NewGauge) 101 if _, ok := m.(Counter); !ok { 102 t.Fatal(m) 103 } 104 105 i := 0 106 r.Each(func(name string, iface interface{}) { 107 i++ 108 if name != "foo" { 109 t.Fatal(name) 110 } 111 if _, ok := iface.(Counter); !ok { 112 t.Fatal(iface) 113 } 114 }) 115 if i != 1 { 116 t.Fatal(i) 117 } 118 } 119 120 func TestPrefixedChildRegistryGetOrRegister(t *testing.T) { 121 r := NewRegistry() 122 pr := NewPrefixedChildRegistry(r, "prefix.") 123 124 _ = pr.GetOrRegister("foo", NewCounter) 125 126 r.Each(func(name string, m interface{}) { 127 if name != "prefix.foo" { 128 t.Fatal(name) 129 } 130 }) 131 } 132 133 func TestPrefixedRegistryGetOrRegister(t *testing.T) { 134 r := NewPrefixedRegistry("prefix.") 135 136 _ = r.GetOrRegister("foo", NewCounter) 137 138 r.Each(func(name string, m interface{}) { 139 if name != "prefix.foo" { 140 t.Fatal(name) 141 } 142 }) 143 } 144 145 func TestPrefixedRegistryRegister(t *testing.T) { 146 r := NewPrefixedRegistry("prefix.") 147 148 _ = r.Register("foo", NewCounter) 149 150 r.Each(func(name string, m interface{}) { 151 if name != "prefix.foo" { 152 t.Fatal(name) 153 } 154 }) 155 } 156 157 func TestPrefixedRegistryUnregister(t *testing.T) { 158 r := NewPrefixedRegistry("prefix.") 159 160 _ = r.Register("foo", NewCounter) 161 162 r.Each(func(name string, m interface{}) { 163 if name != "prefix.foo" { 164 t.Fatal(name) 165 } 166 }) 167 168 r.Unregister("foo") 169 170 i := 0 171 r.Each(func(name string, m interface{}) { 172 i++ 173 }) 174 175 if i != 0 { 176 t.Fatal(i) 177 } 178 }