package graphite import ( "bytes" "regexp" "strconv" "testing" "github.com/go-kit/kit/log" "github.com/go-kit/kit/metrics/teststat" ) func TestCounter(t *testing.T) { prefix, name := "abc.", "def" label, value := "label", "value" // ignored for Graphite regex := `^` + prefix + name + ` ([0-9\.]+) [0-9]+$` g := New(prefix, log.NewNopLogger()) counter := g.NewCounter(name).With(label, value) valuef := teststat.SumLines(g, regex) if err := teststat.TestCounter(counter, valuef); err != nil { t.Fatal(err) } } func TestGauge(t *testing.T) { prefix, name := "ghi.", "jkl" label, value := "xyz", "abc" // ignored for Graphite regex := `^` + prefix + name + ` ([0-9\.]+) [0-9]+$` g := New(prefix, log.NewNopLogger()) gauge := g.NewGauge(name).With(label, value) valuef := teststat.LastLine(g, regex) if err := teststat.TestGauge(gauge, valuef); err != nil { t.Fatal(err) } } func TestHistogram(t *testing.T) { // The histogram test is actually like 4 gauge tests. prefix, name := "graphite.", "histogram_test" label, value := "abc", "def" // ignored for Graphite re50 := regexp.MustCompile(prefix + name + `.p50 ([0-9\.]+) [0-9]+`) re90 := regexp.MustCompile(prefix + name + `.p90 ([0-9\.]+) [0-9]+`) re95 := regexp.MustCompile(prefix + name + `.p95 ([0-9\.]+) [0-9]+`) re99 := regexp.MustCompile(prefix + name + `.p99 ([0-9\.]+) [0-9]+`) g := New(prefix, log.NewNopLogger()) histogram := g.NewHistogram(name, 50).With(label, value) quantiles := func() (float64, float64, float64, float64) { var buf bytes.Buffer g.WriteTo(&buf) match50 := re50.FindStringSubmatch(buf.String()) p50, _ := strconv.ParseFloat(match50[1], 64) match90 := re90.FindStringSubmatch(buf.String()) p90, _ := strconv.ParseFloat(match90[1], 64) match95 := re95.FindStringSubmatch(buf.String()) p95, _ := strconv.ParseFloat(match95[1], 64) match99 := re99.FindStringSubmatch(buf.String()) p99, _ := strconv.ParseFloat(match99[1], 64) return p50, p90, p95, p99 } if err := teststat.TestHistogram(histogram, quantiles, 0.01); err != nil { t.Fatal(err) } }