-
Notifications
You must be signed in to change notification settings - Fork 1
/
parse_test.go
111 lines (106 loc) · 2.4 KB
/
parse_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
package main
import "testing"
func TestParseMetric(t *testing.T) {
var testCases = []struct {
s string
m *Metric
}{
{"", nil},
{"test", nil},
{"te/st", nil},
{"test:", nil},
{"test:X", nil},
{"test:1", nil},
{"test:1.", nil},
{"test:1.X", nil},
{"test:1.5", nil},
{"test:1.5X", nil},
{"test:1.5|", nil},
{"test:1.5|X", nil},
{"test:1.5|c|", nil},
{"test:1.5|c|X", nil},
{"test:1.5|c|@", nil},
{"test:1.5|c|@X", nil},
{"test:1.5|c|@0", nil},
{"test:1.5|c|@0X", nil},
{"test:1.5|c|@0.", nil},
{"test:1.5|c|@0.X", nil},
{"test:1.5|c|@0.1X", nil},
{"te/st:1.5|c|@0.1", nil},
{"te\\st:1.5|c|@0.1", nil},
{"te\nst:1.5|c|@0.1", nil},
{"te\"st:1.5|c|@0.1", nil},
{"1.5|c|@0.1", nil},
{":1.5|c|@0.1", nil},
{"test:|c|@0.1", nil},
{"test:1.5||@0.1", nil},
{"test:1.5||", nil},
{"test:1.5|c|@0", nil},
{"test:1.5|c", &Metric{"test", Counter, 1.5, 1.0}},
{"test:1.5|c|@0.1", &Metric{"test", Counter, 1.5, 0.1}},
{"test:1.5|g", &Metric{"test", Gauge, 1.5, 1.0}},
{"test:1.5|a", &Metric{"test", Averager, 1.5, 1.0}},
{"test:1.5|ms", &Metric{"test", Timer, 1.5, 1.0}},
{"test:1.5|ac", &Metric{"test", Accumulator, 1.5, 1.0}},
{"test:1.5|x", nil},
{"test:1.5|xy", nil},
{"test:1.5|xyz", nil},
}
for _, tc := range testCases {
m, err := ParseMetric([]byte(tc.s))
if tc.m == nil {
if m != nil {
t.Error("Parsing should have failed:", tc.s)
t.Error("Returned:", *m)
} else if err == nil {
t.Error("nil error:", tc.s)
}
} else {
if m == nil {
t.Error("Parsing shouldn't have failed:", tc.s)
t.Error("Error:", err)
t.Error("Expected:", *tc.m)
} else if err != nil {
t.Error("Non-nil error:", tc.s)
t.Error("Error:", err)
} else if *tc.m != *m {
t.Error("Incorrect result:", tc.s)
t.Error("Expected:", *tc.m)
t.Error("Returned:", *m)
}
}
if t.Failed() {
return
}
}
}
func TestCheckMetricName(t *testing.T) {
var testCases = []struct {
s string
ok bool
}{
{"", false},
{"te/st", false},
{"te\\st", false},
{"te\nst", false},
{"te:st", false},
{"te\"st", false},
{"test", true},
}
for _, tc := range testCases {
err := CheckMetricName(tc.s)
if tc.ok {
if err != nil {
t.Error("Should have been accepted:", tc.s)
t.Error("Error:", err)
}
} else {
if err == nil {
t.Error("Shouldn't have been accepted:", tc.s)
}
}
if t.Failed() {
return
}
}
}