306 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			306 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | 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) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestRegistryUnregister(t *testing.T) { | ||
|  | 	l := len(arbiter.meters) | ||
|  | 	r := NewRegistry() | ||
|  | 	r.Register("foo", NewCounter()) | ||
|  | 	r.Register("bar", NewMeter()) | ||
|  | 	r.Register("baz", NewTimer()) | ||
|  | 	if len(arbiter.meters) != l+2 { | ||
|  | 		t.Errorf("arbiter.meters: %d != %d\n", l+2, len(arbiter.meters)) | ||
|  | 	} | ||
|  | 	r.Unregister("foo") | ||
|  | 	r.Unregister("bar") | ||
|  | 	r.Unregister("baz") | ||
|  | 	if len(arbiter.meters) != l { | ||
|  | 		t.Errorf("arbiter.meters: %d != %d\n", l+2, len(arbiter.meters)) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestPrefixedChildRegistryGetOrRegister(t *testing.T) { | ||
|  | 	r := NewRegistry() | ||
|  | 	pr := NewPrefixedChildRegistry(r, "prefix.") | ||
|  | 
 | ||
|  | 	_ = pr.GetOrRegister("foo", NewCounter()) | ||
|  | 
 | ||
|  | 	i := 0 | ||
|  | 	r.Each(func(name string, m interface{}) { | ||
|  | 		i++ | ||
|  | 		if name != "prefix.foo" { | ||
|  | 			t.Fatal(name) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 	if i != 1 { | ||
|  | 		t.Fatal(i) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestPrefixedRegistryGetOrRegister(t *testing.T) { | ||
|  | 	r := NewPrefixedRegistry("prefix.") | ||
|  | 
 | ||
|  | 	_ = r.GetOrRegister("foo", NewCounter()) | ||
|  | 
 | ||
|  | 	i := 0 | ||
|  | 	r.Each(func(name string, m interface{}) { | ||
|  | 		i++ | ||
|  | 		if name != "prefix.foo" { | ||
|  | 			t.Fatal(name) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 	if i != 1 { | ||
|  | 		t.Fatal(i) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestPrefixedRegistryRegister(t *testing.T) { | ||
|  | 	r := NewPrefixedRegistry("prefix.") | ||
|  | 	err := r.Register("foo", NewCounter()) | ||
|  | 	c := NewCounter() | ||
|  | 	Register("bar", c) | ||
|  | 	if err != nil { | ||
|  | 		t.Fatal(err.Error()) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	i := 0 | ||
|  | 	r.Each(func(name string, m interface{}) { | ||
|  | 		i++ | ||
|  | 		if name != "prefix.foo" { | ||
|  | 			t.Fatal(name) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 	if i != 1 { | ||
|  | 		t.Fatal(i) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestPrefixedRegistryUnregister(t *testing.T) { | ||
|  | 	r := NewPrefixedRegistry("prefix.") | ||
|  | 
 | ||
|  | 	_ = r.Register("foo", NewCounter()) | ||
|  | 
 | ||
|  | 	i := 0 | ||
|  | 	r.Each(func(name string, m interface{}) { | ||
|  | 		i++ | ||
|  | 		if name != "prefix.foo" { | ||
|  | 			t.Fatal(name) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 	if i != 1 { | ||
|  | 		t.Fatal(i) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	r.Unregister("foo") | ||
|  | 
 | ||
|  | 	i = 0 | ||
|  | 	r.Each(func(name string, m interface{}) { | ||
|  | 		i++ | ||
|  | 	}) | ||
|  | 
 | ||
|  | 	if i != 0 { | ||
|  | 		t.Fatal(i) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestPrefixedRegistryGet(t *testing.T) { | ||
|  | 	pr := NewPrefixedRegistry("prefix.") | ||
|  | 	name := "foo" | ||
|  | 	pr.Register(name, NewCounter()) | ||
|  | 
 | ||
|  | 	fooCounter := pr.Get(name) | ||
|  | 	if fooCounter == nil { | ||
|  | 		t.Fatal(name) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestPrefixedChildRegistryGet(t *testing.T) { | ||
|  | 	r := NewRegistry() | ||
|  | 	pr := NewPrefixedChildRegistry(r, "prefix.") | ||
|  | 	name := "foo" | ||
|  | 	pr.Register(name, NewCounter()) | ||
|  | 	fooCounter := pr.Get(name) | ||
|  | 	if fooCounter == nil { | ||
|  | 		t.Fatal(name) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestChildPrefixedRegistryRegister(t *testing.T) { | ||
|  | 	r := NewPrefixedChildRegistry(DefaultRegistry, "prefix.") | ||
|  | 	err := r.Register("foo", NewCounter()) | ||
|  | 	c := NewCounter() | ||
|  | 	Register("bar", c) | ||
|  | 	if err != nil { | ||
|  | 		t.Fatal(err.Error()) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	i := 0 | ||
|  | 	r.Each(func(name string, m interface{}) { | ||
|  | 		i++ | ||
|  | 		if name != "prefix.foo" { | ||
|  | 			t.Fatal(name) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 	if i != 1 { | ||
|  | 		t.Fatal(i) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestChildPrefixedRegistryOfChildRegister(t *testing.T) { | ||
|  | 	r := NewPrefixedChildRegistry(NewRegistry(), "prefix.") | ||
|  | 	r2 := NewPrefixedChildRegistry(r, "prefix2.") | ||
|  | 	err := r.Register("foo2", NewCounter()) | ||
|  | 	if err != nil { | ||
|  | 		t.Fatal(err.Error()) | ||
|  | 	} | ||
|  | 	err = r2.Register("baz", NewCounter()) | ||
|  | 	c := NewCounter() | ||
|  | 	Register("bars", c) | ||
|  | 
 | ||
|  | 	i := 0 | ||
|  | 	r2.Each(func(name string, m interface{}) { | ||
|  | 		i++ | ||
|  | 		if name != "prefix.prefix2.baz" { | ||
|  | 			//t.Fatal(name) | ||
|  | 		} | ||
|  | 	}) | ||
|  | 	if i != 1 { | ||
|  | 		t.Fatal(i) | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func TestWalkRegistries(t *testing.T) { | ||
|  | 	r := NewPrefixedChildRegistry(NewRegistry(), "prefix.") | ||
|  | 	r2 := NewPrefixedChildRegistry(r, "prefix2.") | ||
|  | 	err := r.Register("foo2", NewCounter()) | ||
|  | 	if err != nil { | ||
|  | 		t.Fatal(err.Error()) | ||
|  | 	} | ||
|  | 	err = r2.Register("baz", NewCounter()) | ||
|  | 	c := NewCounter() | ||
|  | 	Register("bars", c) | ||
|  | 
 | ||
|  | 	_, prefix := findPrefix(r2, "") | ||
|  | 	if "prefix.prefix2." != prefix { | ||
|  | 		t.Fatal(prefix) | ||
|  | 	} | ||
|  | 
 | ||
|  | } |