collector_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package prometheus
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. "github.com/ethereum/go-ethereum/metrics"
  7. )
  8. func TestMain(m *testing.M) {
  9. metrics.Enabled = true
  10. os.Exit(m.Run())
  11. }
  12. func TestCollector(t *testing.T) {
  13. c := newCollector()
  14. counter := metrics.NewCounter()
  15. counter.Inc(12345)
  16. c.addCounter("test/counter", counter)
  17. gauge := metrics.NewGauge()
  18. gauge.Update(23456)
  19. c.addGauge("test/gauge", gauge)
  20. gaugeFloat64 := metrics.NewGaugeFloat64()
  21. gaugeFloat64.Update(34567.89)
  22. c.addGaugeFloat64("test/gauge_float64", gaugeFloat64)
  23. histogram := metrics.NewHistogram(&metrics.NilSample{})
  24. c.addHistogram("test/histogram", histogram)
  25. meter := metrics.NewMeter()
  26. defer meter.Stop()
  27. meter.Mark(9999999)
  28. c.addMeter("test/meter", meter)
  29. timer := metrics.NewTimer()
  30. defer timer.Stop()
  31. timer.Update(20 * time.Millisecond)
  32. timer.Update(21 * time.Millisecond)
  33. timer.Update(22 * time.Millisecond)
  34. timer.Update(120 * time.Millisecond)
  35. timer.Update(23 * time.Millisecond)
  36. timer.Update(24 * time.Millisecond)
  37. c.addTimer("test/timer", timer)
  38. resettingTimer := metrics.NewResettingTimer()
  39. resettingTimer.Update(10 * time.Millisecond)
  40. resettingTimer.Update(11 * time.Millisecond)
  41. resettingTimer.Update(12 * time.Millisecond)
  42. resettingTimer.Update(120 * time.Millisecond)
  43. resettingTimer.Update(13 * time.Millisecond)
  44. resettingTimer.Update(14 * time.Millisecond)
  45. c.addResettingTimer("test/resetting_timer", resettingTimer.Snapshot())
  46. emptyResettingTimer := metrics.NewResettingTimer().Snapshot()
  47. c.addResettingTimer("test/empty_resetting_timer", emptyResettingTimer)
  48. const expectedOutput = `# TYPE test_counter gauge
  49. test_counter 12345
  50. # TYPE test_gauge gauge
  51. test_gauge 23456
  52. # TYPE test_gauge_float64 gauge
  53. test_gauge_float64 34567.89
  54. # TYPE test_histogram_count counter
  55. test_histogram_count 0
  56. # TYPE test_histogram summary
  57. test_histogram {quantile="0.5"} 0
  58. test_histogram {quantile="0.75"} 0
  59. test_histogram {quantile="0.95"} 0
  60. test_histogram {quantile="0.99"} 0
  61. test_histogram {quantile="0.999"} 0
  62. test_histogram {quantile="0.9999"} 0
  63. # TYPE test_meter gauge
  64. test_meter 9999999
  65. # TYPE test_timer_count counter
  66. test_timer_count 6
  67. # TYPE test_timer summary
  68. test_timer {quantile="0.5"} 2.25e+07
  69. test_timer {quantile="0.75"} 4.8e+07
  70. test_timer {quantile="0.95"} 1.2e+08
  71. test_timer {quantile="0.99"} 1.2e+08
  72. test_timer {quantile="0.999"} 1.2e+08
  73. test_timer {quantile="0.9999"} 1.2e+08
  74. # TYPE test_resetting_timer_count counter
  75. test_resetting_timer_count 6
  76. # TYPE test_resetting_timer summary
  77. test_resetting_timer {quantile="0.50"} 12000000
  78. test_resetting_timer {quantile="0.95"} 120000000
  79. test_resetting_timer {quantile="0.99"} 120000000
  80. `
  81. exp := c.buff.String()
  82. if exp != expectedOutput {
  83. t.Log("Expected Output:\n", expectedOutput)
  84. t.Log("Actual Output:\n", exp)
  85. t.Fatal("unexpected collector output")
  86. }
  87. }