forked from mkobetic/go-dogstatsd
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdogstatsd_test.go
113 lines (98 loc) · 3.04 KB
/
dogstatsd_test.go
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// Copyright 2013 Ooyala, Inc.
package dogstatsd
import (
"net"
"reflect"
"testing"
)
var dogstatsdTests = []struct {
GlobalNamespace string
GlobalTags []string
Method string
Metric string
Value interface{}
Tags []string
Rate float64
Expected string
}{
{"", nil, "Gauge", "test.gauge", 1.0, nil, 1.0, "test.gauge:1.000000|g"},
{"", nil, "Gauge", "test.gauge", 1.0, nil, 0.999999, "test.gauge:1.000000|g|@0.999999"},
{"", nil, "Gauge", "test.gauge", 1.0, []string{"tagA"}, 1.0, "test.gauge:1.000000|g|#tagA"},
{"", nil, "Gauge", "test.gauge", 1.0, []string{"tagA", "tagB"}, 1.0, "test.gauge:1.000000|g|#tagA,tagB"},
{"", nil, "Gauge", "test.gauge", 1.0, []string{"tagA"}, 0.999999, "test.gauge:1.000000|g|@0.999999|#tagA"},
{"", nil, "Count", "test.count", int64(1), []string{"tagA"}, 1.0, "test.count:1|c|#tagA"},
{"", nil, "Count", "test.count", int64(-1), []string{"tagA"}, 1.0, "test.count:-1|c|#tagA"},
{"", nil, "Histogram", "test.histogram", 2.3, []string{"tagA"}, 1.0, "test.histogram:2.300000|h|#tagA"},
{"", nil, "Set", "test.set", "uuid", []string{"tagA"}, 1.0, "test.set:uuid|s|#tagA"},
{"flubber.", nil, "Set", "test.set", "uuid", []string{"tagA"}, 1.0, "flubber.test.set:uuid|s|#tagA"},
{"", []string{"tagC"}, "Set", "test.set", "uuid", []string{"tagA"}, 1.0, "test.set:uuid|s|#tagC,tagA"},
}
func TestClient(t *testing.T) {
addr := "localhost:1201"
server := newServer(t, addr)
defer server.Close()
client, err := New(addr)
if err != nil {
t.Fatal(err)
}
defer client.Close()
for _, tt := range dogstatsdTests {
client.Namespace = tt.GlobalNamespace
client.Tags = tt.GlobalTags
method := reflect.ValueOf(client).MethodByName(tt.Method)
e := method.Call([]reflect.Value{
reflect.ValueOf(tt.Metric),
reflect.ValueOf(tt.Value),
reflect.ValueOf(tt.Tags),
reflect.ValueOf(tt.Rate)})[0]
errInter := e.Interface()
if errInter != nil {
t.Fatal(errInter.(error))
}
message := serverRead(t, server)
if message != tt.Expected {
t.Errorf("Expected: %s. Actual: %s", tt.Expected, message)
}
}
}
func TestEvent(t *testing.T) {
addr := "localhost:1201"
server := newServer(t, addr)
defer server.Close()
client := newClient(t, addr)
err := client.Event("title", "text", []string{"tag1", "tag2"})
if err != nil {
t.Fatal(err)
}
message := serverRead(t, server)
expected := "_e{5,4}:title|text|#tag1,tag2"
if message != expected {
t.Errorf("Expected: %s. Actual: %s", expected, message)
}
}
func serverRead(t *testing.T, server *net.UDPConn) string {
bytes := make([]byte, 1024)
n, _, err := server.ReadFrom(bytes)
if err != nil {
t.Fatal(err)
}
return string(bytes[:n])
}
func newClient(t *testing.T, addr string) *Client {
client, err := New(addr)
if err != nil {
t.Fatal(err)
}
return client
}
func newServer(t *testing.T, addr string) *net.UDPConn {
udpAddr, err := net.ResolveUDPAddr("udp", addr)
if err != nil {
t.Fatal(err)
}
server, err := net.ListenUDP("udp", udpAddr)
if err != nil {
t.Fatal(err)
}
return server
}