registry_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package metrics
  2. import "testing"
  3. func BenchmarkRegistry(b *testing.B) {
  4. r := NewRegistry()
  5. r.Register("foo", NewCounter())
  6. b.ResetTimer()
  7. for i := 0; i < b.N; i++ {
  8. r.Each(func(string, interface{}) {})
  9. }
  10. }
  11. func TestRegistry(t *testing.T) {
  12. r := NewRegistry()
  13. r.Register("foo", NewCounter())
  14. i := 0
  15. r.Each(func(name string, iface interface{}) {
  16. i++
  17. if "foo" != name {
  18. t.Fatal(name)
  19. }
  20. if _, ok := iface.(Counter); !ok {
  21. t.Fatal(iface)
  22. }
  23. })
  24. if 1 != i {
  25. t.Fatal(i)
  26. }
  27. r.Unregister("foo")
  28. i = 0
  29. r.Each(func(string, interface{}) { i++ })
  30. if 0 != i {
  31. t.Fatal(i)
  32. }
  33. }
  34. func TestRegistryGet(t *testing.T) {
  35. r := NewRegistry()
  36. r.Register("foo", NewCounter())
  37. if count := r.Get("foo").(Counter).Count(); 0 != count {
  38. t.Fatal(count)
  39. }
  40. r.Get("foo").(Counter).Inc(1)
  41. if count := r.Get("foo").(Counter).Count(); 1 != count {
  42. t.Fatal(count)
  43. }
  44. }
  45. func TestRegistryGetOrRegister(t *testing.T) {
  46. r := NewRegistry()
  47. // First metric wins with GetOrRegister
  48. _ = r.GetOrRegister("foo", NewCounter())
  49. m := r.GetOrRegister("foo", NewGauge())
  50. if _, ok := m.(Counter); !ok {
  51. t.Fatal(m)
  52. }
  53. i := 0
  54. r.Each(func(name string, iface interface{}) {
  55. i++
  56. if name != "foo" {
  57. t.Fatal(name)
  58. }
  59. if _, ok := iface.(Counter); !ok {
  60. t.Fatal(iface)
  61. }
  62. })
  63. if i != 1 {
  64. t.Fatal(i)
  65. }
  66. }
  67. func TestRegistryGetOrRegisterWithLazyInstantiation(t *testing.T) {
  68. r := NewRegistry()
  69. // First metric wins with GetOrRegister
  70. _ = r.GetOrRegister("foo", NewCounter)
  71. m := r.GetOrRegister("foo", NewGauge)
  72. if _, ok := m.(Counter); !ok {
  73. t.Fatal(m)
  74. }
  75. i := 0
  76. r.Each(func(name string, iface interface{}) {
  77. i++
  78. if name != "foo" {
  79. t.Fatal(name)
  80. }
  81. if _, ok := iface.(Counter); !ok {
  82. t.Fatal(iface)
  83. }
  84. })
  85. if i != 1 {
  86. t.Fatal(i)
  87. }
  88. }