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