/gauge_test.go

http://github.com/rcrowley/go-metrics · Go · 87 lines · 77 code · 9 blank · 1 comment · 13 complexity · f3c18f0cca51e3609b6af18c2776d4fd MD5 · raw file

  1. package metrics
  2. import (
  3. "fmt"
  4. "math/rand"
  5. "sync"
  6. "testing"
  7. "time"
  8. )
  9. func BenchmarkGuage(b *testing.B) {
  10. g := NewGauge()
  11. b.ResetTimer()
  12. for i := 0; i < b.N; i++ {
  13. g.Update(int64(i))
  14. }
  15. }
  16. // exercise race detector
  17. func TestGaugeConcurrency(t *testing.T) {
  18. rand.Seed(time.Now().Unix())
  19. g := NewGauge()
  20. wg := &sync.WaitGroup{}
  21. reps := 100
  22. for i := 0; i < reps; i++ {
  23. wg.Add(1)
  24. go func(g Gauge, wg *sync.WaitGroup) {
  25. g.Update(rand.Int63())
  26. wg.Done()
  27. }(g, wg)
  28. }
  29. wg.Wait()
  30. }
  31. func TestGauge(t *testing.T) {
  32. g := NewGauge()
  33. g.Update(int64(47))
  34. if v := g.Value(); 47 != v {
  35. t.Errorf("g.Value(): 47 != %v\n", v)
  36. }
  37. }
  38. func TestGaugeSnapshot(t *testing.T) {
  39. g := NewGauge()
  40. g.Update(int64(47))
  41. snapshot := g.Snapshot()
  42. g.Update(int64(0))
  43. if v := snapshot.Value(); 47 != v {
  44. t.Errorf("g.Value(): 47 != %v\n", v)
  45. }
  46. }
  47. func TestGetOrRegisterGauge(t *testing.T) {
  48. r := NewRegistry()
  49. NewRegisteredGauge("foo", r).Update(47)
  50. if g := GetOrRegisterGauge("foo", r); 47 != g.Value() {
  51. t.Fatal(g)
  52. }
  53. }
  54. func TestFunctionalGauge(t *testing.T) {
  55. var counter int64
  56. fg := NewFunctionalGauge(func() int64 {
  57. counter++
  58. return counter
  59. })
  60. fg.Value()
  61. fg.Value()
  62. if counter != 2 {
  63. t.Error("counter != 2")
  64. }
  65. }
  66. func TestGetOrRegisterFunctionalGauge(t *testing.T) {
  67. r := NewRegistry()
  68. NewRegisteredFunctionalGauge("foo", r, func() int64 { return 47 })
  69. if g := GetOrRegisterGauge("foo", r); 47 != g.Value() {
  70. t.Fatal(g)
  71. }
  72. }
  73. func ExampleGetOrRegisterGauge() {
  74. m := "server.bytes_sent"
  75. g := GetOrRegisterGauge(m, nil)
  76. g.Update(47)
  77. fmt.Println(g.Value()) // Output: 47
  78. }