1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
package metrics
import (
"bytes"
"io/ioutil"
"regexp"
"strings"
"testing"
"time"
)
func TestSeen(t *testing.T) {
buf := new(bytes.Buffer)
d := NewStatsD(buf, 0)
d.Seen("gorets", 2)
d.Seen("gorets", 40)
d.Seen("gorets", 800)
d.Seen("gorets", 1600)
time.Sleep(30 * time.Millisecond)
want := "gorets:2|cgorets:40|cgorets:800|cgorets:1600|c"
if got := buf.String(); got != want {
t.Errorf("Got %q, want %q", got, want)
}
}
func TestTook(t *testing.T) {
start := time.Now()
buf := new(bytes.Buffer)
d := NewStatsD(buf, 0)
d.Took("nglork", start)
d.Took("nglork", start)
time.Sleep(30 * time.Millisecond)
want := regexp.MustCompile(`^glork:[0-9]+|msglork:[0-9]+|ms$`)
if got := buf.String(); !want.MatchString(got) {
t.Errorf("Got %q, want match %q", got, want)
}
}
func TestKeyPrefix(t *testing.T) {
start := time.Now()
buf := new(bytes.Buffer)
d := NewStatsD(buf, 0)
d.KeyPrefix("group.")
d.Seen("count", 99)
d.Took("time", start)
time.Sleep(30 * time.Millisecond)
want := regexp.MustCompile(`^group\.count:99|cgroup\.time:[0-9]+|ms$`)
if got := buf.String(); !want.MatchString(got) {
t.Errorf("Got %q, want match %q", got, want)
}
}
func TestBatch(t *testing.T) {
buf := new(bytes.Buffer)
message := "counter:5|c"
messagesInPacket := StatsDPackMax / (len(message) + 1)
packet := message + strings.Repeat("\n"+message, messagesInPacket-1)
d := NewStatsD(buf, 50*time.Millisecond)
for i := 0; i < 2*messagesInPacket; i++ {
d.Seen("counter", 5)
}
time.Sleep(100 * time.Millisecond)
if got, want := buf.String(), strings.Repeat(packet, 2); got != want {
t.Errorf("Got:\n%q\nWant:\n%q", got, want)
}
}
func BenchmarkSeen(b *testing.B) {
d := NewStatsD(ioutil.Discard, time.Millisecond)
b.ReportAllocs()
for i := 0; i < b.N; i++ {
d.Seen("bench.key", i)
}
}
func BenchmarkTook(b *testing.B) {
start := time.Now()
d := NewStatsD(ioutil.Discard, time.Millisecond)
b.ReportAllocs()
for i := 0; i < b.N; i++ {
d.Took("bench.key", start)
}
}
|