Codebase list golang-github-go-kit-kit / e9da08e metrics / graphite / graphite_test.go
e9da08e

Tree @e9da08e (Download .tar.gz)

graphite_test.go @e9da08eraw · history · blame

package graphite

import (
	"bytes"
	"fmt"
	"strings"
	"testing"

	"github.com/go-kit/kit/metrics"
	"github.com/go-kit/kit/metrics/teststat"
)

func TestHistogramQuantiles(t *testing.T) {
	prefix := "prefix"
	e := NewEmitter(nil, prefix)
	var (
		name      = "test_histogram_quantiles"
		quantiles = []int{50, 90, 95, 99}
		h         = e.NewHistogram(name, 0, 100, 3, quantiles...).With(metrics.Field{Key: "ignored", Value: "field"})
	)
	const seed, mean, stdev int64 = 424242, 50, 10
	teststat.PopulateNormalHistogram(t, h, seed, mean, stdev)

	// flush the current metrics into a buffer to examine
	var b bytes.Buffer
	e.(*emitter).flush(&b)
	teststat.AssertGraphiteNormalHistogram(t, prefix, name, mean, stdev, quantiles, b.String())
}

func TestCounter(t *testing.T) {
	var (
		prefix = "prefix"
		name   = "m"
		value  = 123
		e      = NewEmitter(nil, prefix)
		b      bytes.Buffer
	)
	e.NewCounter(name).With(metrics.Field{Key: "ignored", Value: "field"}).Add(uint64(value))
	e.(*emitter).flush(&b)
	want := fmt.Sprintf("%s.%s.count %d", prefix, name, value)
	payload := b.String()
	if !strings.HasPrefix(payload, want) {
		t.Errorf("counter %s want\n%s, have\n%s", name, want, payload)
	}
}

func TestGauge(t *testing.T) {
	var (
		prefix = "prefix"
		name   = "xyz"
		value  = 54321
		delta  = 12345
		e      = NewEmitter(nil, prefix)
		b      bytes.Buffer
		g      = e.NewGauge(name).With(metrics.Field{Key: "ignored", Value: "field"})
	)

	g.Set(float64(value))
	g.Add(float64(delta))

	e.(*emitter).flush(&b)
	payload := b.String()

	want := fmt.Sprintf("%s.%s %d", prefix, name, value+delta)
	if !strings.HasPrefix(payload, want) {
		t.Errorf("gauge %s want\n%s, have\n%s", name, want, payload)
	}
}

func TestInvalidQuantile(t *testing.T) {
	e := NewEmitter(nil, "")
	defer func() {
		if err := recover(); err == nil {
			t.Errorf("expected panic, got none")
		} else {
			t.Logf("got expected panic: %v", err)
		}
	}()
	e.NewHistogram("foo", 0.0, 100.0, 3, 50, 90, 95, 99, 101)
}