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