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) } }