github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/metrics/registry_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:40</date> 10 //</624450099715510272> 11 12 package metrics 13 14 import ( 15 "testing" 16 ) 17 18 func BenchmarkRegistry(b *testing.B) { 19 r := NewRegistry() 20 r.Register("foo", NewCounter()) 21 b.ResetTimer() 22 for i := 0; i < b.N; i++ { 23 r.Each(func(string, interface{}) {}) 24 } 25 } 26 27 func TestRegistry(t *testing.T) { 28 r := NewRegistry() 29 r.Register("foo", NewCounter()) 30 i := 0 31 r.Each(func(name string, iface interface{}) { 32 i++ 33 if "foo" != name { 34 t.Fatal(name) 35 } 36 if _, ok := iface.(Counter); !ok { 37 t.Fatal(iface) 38 } 39 }) 40 if 1 != i { 41 t.Fatal(i) 42 } 43 r.Unregister("foo") 44 i = 0 45 r.Each(func(string, interface{}) { i++ }) 46 if 0 != i { 47 t.Fatal(i) 48 } 49 } 50 51 func TestRegistryDuplicate(t *testing.T) { 52 r := NewRegistry() 53 if err := r.Register("foo", NewCounter()); nil != err { 54 t.Fatal(err) 55 } 56 if err := r.Register("foo", NewGauge()); nil == err { 57 t.Fatal(err) 58 } 59 i := 0 60 r.Each(func(name string, iface interface{}) { 61 i++ 62 if _, ok := iface.(Counter); !ok { 63 t.Fatal(iface) 64 } 65 }) 66 if 1 != i { 67 t.Fatal(i) 68 } 69 } 70 71 func TestRegistryGet(t *testing.T) { 72 r := NewRegistry() 73 r.Register("foo", NewCounter()) 74 if count := r.Get("foo").(Counter).Count(); 0 != count { 75 t.Fatal(count) 76 } 77 r.Get("foo").(Counter).Inc(1) 78 if count := r.Get("foo").(Counter).Count(); 1 != count { 79 t.Fatal(count) 80 } 81 } 82 83 func TestRegistryGetOrRegister(t *testing.T) { 84 r := NewRegistry() 85 86 //第一个指标用getorregister获胜 87 _ = r.GetOrRegister("foo", NewCounter()) 88 m := r.GetOrRegister("foo", NewGauge()) 89 if _, ok := m.(Counter); !ok { 90 t.Fatal(m) 91 } 92 93 i := 0 94 r.Each(func(name string, iface interface{}) { 95 i++ 96 if name != "foo" { 97 t.Fatal(name) 98 } 99 if _, ok := iface.(Counter); !ok { 100 t.Fatal(iface) 101 } 102 }) 103 if i != 1 { 104 t.Fatal(i) 105 } 106 } 107 108 func TestRegistryGetOrRegisterWithLazyInstantiation(t *testing.T) { 109 r := NewRegistry() 110 111 //第一个指标用getorregister获胜 112 _ = r.GetOrRegister("foo", NewCounter) 113 m := r.GetOrRegister("foo", NewGauge) 114 if _, ok := m.(Counter); !ok { 115 t.Fatal(m) 116 } 117 118 i := 0 119 r.Each(func(name string, iface interface{}) { 120 i++ 121 if name != "foo" { 122 t.Fatal(name) 123 } 124 if _, ok := iface.(Counter); !ok { 125 t.Fatal(iface) 126 } 127 }) 128 if i != 1 { 129 t.Fatal(i) 130 } 131 } 132 133 func TestRegistryUnregister(t *testing.T) { 134 l := len(arbiter.meters) 135 r := NewRegistry() 136 r.Register("foo", NewCounter()) 137 r.Register("bar", NewMeter()) 138 r.Register("baz", NewTimer()) 139 if len(arbiter.meters) != l+2 { 140 t.Errorf("arbiter.meters: %d != %d\n", l+2, len(arbiter.meters)) 141 } 142 r.Unregister("foo") 143 r.Unregister("bar") 144 r.Unregister("baz") 145 if len(arbiter.meters) != l { 146 t.Errorf("arbiter.meters: %d != %d\n", l+2, len(arbiter.meters)) 147 } 148 } 149 150 func TestPrefixedChildRegistryGetOrRegister(t *testing.T) { 151 r := NewRegistry() 152 pr := NewPrefixedChildRegistry(r, "prefix.") 153 154 _ = pr.GetOrRegister("foo", NewCounter()) 155 156 i := 0 157 r.Each(func(name string, m interface{}) { 158 i++ 159 if name != "prefix.foo" { 160 t.Fatal(name) 161 } 162 }) 163 if i != 1 { 164 t.Fatal(i) 165 } 166 } 167 168 func TestPrefixedRegistryGetOrRegister(t *testing.T) { 169 r := NewPrefixedRegistry("prefix.") 170 171 _ = r.GetOrRegister("foo", NewCounter()) 172 173 i := 0 174 r.Each(func(name string, m interface{}) { 175 i++ 176 if name != "prefix.foo" { 177 t.Fatal(name) 178 } 179 }) 180 if i != 1 { 181 t.Fatal(i) 182 } 183 } 184 185 func TestPrefixedRegistryRegister(t *testing.T) { 186 r := NewPrefixedRegistry("prefix.") 187 err := r.Register("foo", NewCounter()) 188 c := NewCounter() 189 Register("bar", c) 190 if err != nil { 191 t.Fatal(err.Error()) 192 } 193 194 i := 0 195 r.Each(func(name string, m interface{}) { 196 i++ 197 if name != "prefix.foo" { 198 t.Fatal(name) 199 } 200 }) 201 if i != 1 { 202 t.Fatal(i) 203 } 204 } 205 206 func TestPrefixedRegistryUnregister(t *testing.T) { 207 r := NewPrefixedRegistry("prefix.") 208 209 _ = r.Register("foo", NewCounter()) 210 211 i := 0 212 r.Each(func(name string, m interface{}) { 213 i++ 214 if name != "prefix.foo" { 215 t.Fatal(name) 216 } 217 }) 218 if i != 1 { 219 t.Fatal(i) 220 } 221 222 r.Unregister("foo") 223 224 i = 0 225 r.Each(func(name string, m interface{}) { 226 i++ 227 }) 228 229 if i != 0 { 230 t.Fatal(i) 231 } 232 } 233 234 func TestPrefixedRegistryGet(t *testing.T) { 235 pr := NewPrefixedRegistry("prefix.") 236 name := "foo" 237 pr.Register(name, NewCounter()) 238 239 fooCounter := pr.Get(name) 240 if fooCounter == nil { 241 t.Fatal(name) 242 } 243 } 244 245 func TestPrefixedChildRegistryGet(t *testing.T) { 246 r := NewRegistry() 247 pr := NewPrefixedChildRegistry(r, "prefix.") 248 name := "foo" 249 pr.Register(name, NewCounter()) 250 fooCounter := pr.Get(name) 251 if fooCounter == nil { 252 t.Fatal(name) 253 } 254 } 255 256 func TestChildPrefixedRegistryRegister(t *testing.T) { 257 r := NewPrefixedChildRegistry(DefaultRegistry, "prefix.") 258 err := r.Register("foo", NewCounter()) 259 c := NewCounter() 260 Register("bar", c) 261 if err != nil { 262 t.Fatal(err.Error()) 263 } 264 265 i := 0 266 r.Each(func(name string, m interface{}) { 267 i++ 268 if name != "prefix.foo" { 269 t.Fatal(name) 270 } 271 }) 272 if i != 1 { 273 t.Fatal(i) 274 } 275 } 276 277 func TestChildPrefixedRegistryOfChildRegister(t *testing.T) { 278 r := NewPrefixedChildRegistry(NewRegistry(), "prefix.") 279 r2 := NewPrefixedChildRegistry(r, "prefix2.") 280 err := r.Register("foo2", NewCounter()) 281 if err != nil { 282 t.Fatal(err.Error()) 283 } 284 err = r2.Register("baz", NewCounter()) 285 c := NewCounter() 286 Register("bars", c) 287 288 i := 0 289 r2.Each(func(name string, m interface{}) { 290 i++ 291 if name != "prefix.prefix2.baz" { 292 //致命的(名字) 293 } 294 }) 295 if i != 1 { 296 t.Fatal(i) 297 } 298 } 299 300 func TestWalkRegistries(t *testing.T) { 301 r := NewPrefixedChildRegistry(NewRegistry(), "prefix.") 302 r2 := NewPrefixedChildRegistry(r, "prefix2.") 303 err := r.Register("foo2", NewCounter()) 304 if err != nil { 305 t.Fatal(err.Error()) 306 } 307 err = r2.Register("baz", NewCounter()) 308 c := NewCounter() 309 Register("bars", c) 310 311 _, prefix := findPrefix(r2, "") 312 if "prefix.prefix2." != prefix { 313 t.Fatal(prefix) 314 } 315 316 } 317