registry_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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 TestRegistryDuplicate(t *testing.T) {
  35. r := NewRegistry()
  36. if err := r.Register("foo", NewCounter()); nil != err {
  37. t.Fatal(err)
  38. }
  39. if err := r.Register("foo", NewGauge()); nil == err {
  40. t.Fatal(err)
  41. }
  42. i := 0
  43. r.Each(func(name string, iface interface{}) {
  44. i++
  45. if _, ok := iface.(Counter); !ok {
  46. t.Fatal(iface)
  47. }
  48. })
  49. if 1 != i {
  50. t.Fatal(i)
  51. }
  52. }
  53. func TestRegistryGet(t *testing.T) {
  54. r := NewRegistry()
  55. r.Register("foo", NewCounter())
  56. if count := r.Get("foo").(Counter).Count(); 0 != count {
  57. t.Fatal(count)
  58. }
  59. r.Get("foo").(Counter).Inc(1)
  60. if count := r.Get("foo").(Counter).Count(); 1 != count {
  61. t.Fatal(count)
  62. }
  63. }
  64. func TestRegistryGetOrRegister(t *testing.T) {
  65. r := NewRegistry()
  66. // First metric wins with GetOrRegister
  67. _ = r.GetOrRegister("foo", NewCounter())
  68. m := r.GetOrRegister("foo", NewGauge())
  69. if _, ok := m.(Counter); !ok {
  70. t.Fatal(m)
  71. }
  72. i := 0
  73. r.Each(func(name string, iface interface{}) {
  74. i++
  75. if name != "foo" {
  76. t.Fatal(name)
  77. }
  78. if _, ok := iface.(Counter); !ok {
  79. t.Fatal(iface)
  80. }
  81. })
  82. if i != 1 {
  83. t.Fatal(i)
  84. }
  85. }
  86. func TestRegistryGetOrRegisterWithLazyInstantiation(t *testing.T) {
  87. r := NewRegistry()
  88. // First metric wins with GetOrRegister
  89. _ = r.GetOrRegister("foo", NewCounter)
  90. m := r.GetOrRegister("foo", NewGauge)
  91. if _, ok := m.(Counter); !ok {
  92. t.Fatal(m)
  93. }
  94. i := 0
  95. r.Each(func(name string, iface interface{}) {
  96. i++
  97. if name != "foo" {
  98. t.Fatal(name)
  99. }
  100. if _, ok := iface.(Counter); !ok {
  101. t.Fatal(iface)
  102. }
  103. })
  104. if i != 1 {
  105. t.Fatal(i)
  106. }
  107. }