9 "github.com/go-kit/kit/log"
10 "github.com/go-kit/kit/metrics/teststat"
13 func TestCounter(t *testing.T) {
14 prefix, name := "abc.", "def"
15 label, value := "label", "value" // ignored for Graphite
16 regex := `^` + prefix + name + ` ([0-9\.]+) [0-9]+$`
17 g := New(prefix, log.NewNopLogger())
18 counter := g.NewCounter(name).With(label, value)
19 valuef := teststat.SumLines(g, regex)
20 if err := teststat.TestCounter(counter, valuef); err != nil {
25 func TestGauge(t *testing.T) {
26 prefix, name := "ghi.", "jkl"
27 label, value := "xyz", "abc" // ignored for Graphite
28 regex := `^` + prefix + name + ` ([0-9\.]+) [0-9]+$`
29 g := New(prefix, log.NewNopLogger())
30 gauge := g.NewGauge(name).With(label, value)
31 valuef := teststat.LastLine(g, regex)
32 if err := teststat.TestGauge(gauge, valuef); err != nil {
37 func TestHistogram(t *testing.T) {
38 // The histogram test is actually like 4 gauge tests.
39 prefix, name := "graphite.", "histogram_test"
40 label, value := "abc", "def" // ignored for Graphite
41 re50 := regexp.MustCompile(prefix + name + `.p50 ([0-9\.]+) [0-9]+`)
42 re90 := regexp.MustCompile(prefix + name + `.p90 ([0-9\.]+) [0-9]+`)
43 re95 := regexp.MustCompile(prefix + name + `.p95 ([0-9\.]+) [0-9]+`)
44 re99 := regexp.MustCompile(prefix + name + `.p99 ([0-9\.]+) [0-9]+`)
45 g := New(prefix, log.NewNopLogger())
46 histogram := g.NewHistogram(name, 50).With(label, value)
47 quantiles := func() (float64, float64, float64, float64) {
50 match50 := re50.FindStringSubmatch(buf.String())
51 p50, _ := strconv.ParseFloat(match50[1], 64)
52 match90 := re90.FindStringSubmatch(buf.String())
53 p90, _ := strconv.ParseFloat(match90[1], 64)
54 match95 := re95.FindStringSubmatch(buf.String())
55 p95, _ := strconv.ParseFloat(match95[1], 64)
56 match99 := re99.FindStringSubmatch(buf.String())
57 p99, _ := strconv.ParseFloat(match99[1], 64)
58 return p50, p90, p95, p99
60 if err := teststat.TestHistogram(histogram, quantiles, 0.01); err != nil {