package multi import ( "fmt" "testing" "github.com/go-kit/kit/metrics" ) func TestMultiCounter(t *testing.T) { c1 := &mockCounter{} c2 := &mockCounter{} c3 := &mockCounter{} mc := NewCounter(c1, c2, c3) mc.Add(123) mc.Add(456) want := "[123 456]" for i, m := range []fmt.Stringer{c1, c2, c3} { if have := m.String(); want != have { t.Errorf("c%d: want %q, have %q", i+1, want, have) } } } func TestMultiGauge(t *testing.T) { g1 := &mockGauge{} g2 := &mockGauge{} g3 := &mockGauge{} mg := NewGauge(g1, g2, g3) mg.Set(9) mg.Set(8) mg.Set(7) mg.Add(3) want := "[9 8 7 10]" for i, m := range []fmt.Stringer{g1, g2, g3} { if have := m.String(); want != have { t.Errorf("g%d: want %q, have %q", i+1, want, have) } } } func TestMultiHistogram(t *testing.T) { h1 := &mockHistogram{} h2 := &mockHistogram{} h3 := &mockHistogram{} mh := NewHistogram(h1, h2, h3) mh.Observe(1) mh.Observe(2) mh.Observe(4) mh.Observe(8) want := "[1 2 4 8]" for i, m := range []fmt.Stringer{h1, h2, h3} { if have := m.String(); want != have { t.Errorf("g%d: want %q, have %q", i+1, want, have) } } } type mockCounter struct { obs []float64 } func (c *mockCounter) Add(delta float64) { c.obs = append(c.obs, delta) } func (c *mockCounter) With(...string) metrics.Counter { return c } func (c *mockCounter) String() string { return fmt.Sprintf("%v", c.obs) } type mockGauge struct { obs []float64 } func (g *mockGauge) Set(value float64) { g.obs = append(g.obs, value) } func (g *mockGauge) With(...string) metrics.Gauge { return g } func (g *mockGauge) String() string { return fmt.Sprintf("%v", g.obs) } func (g *mockGauge) Add(delta float64) { var value float64 if len(g.obs) > 0 { value = g.obs[len(g.obs)-1] + delta } else { value = delta } g.obs = append(g.obs, value) } type mockHistogram struct { obs []float64 } func (h *mockHistogram) Observe(value float64) { h.obs = append(h.obs, value) } func (h *mockHistogram) With(...string) metrics.Histogram { return h } func (h *mockHistogram) String() string { return fmt.Sprintf("%v", h.obs) }