-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpromql_test.go
119 lines (117 loc) · 2.09 KB
/
promql_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
114
115
116
117
118
119
package vtm
import (
"fmt"
"reflect"
"testing"
)
func TestBuild(t *testing.T) {
tests := []struct {
name string
pb *PromQLBuilder
expected string
err error
}{
{
name: "basic case",
pb: &PromQLBuilder{
metricName: "metric",
},
expected: "metric",
err: nil,
},
{
name: "with labels",
pb: &PromQLBuilder{
metricName: "metric",
labels: []Label{
{
Name: "label1",
Matcher: "=",
Value: "value1",
},
{
Name: "label2",
Matcher: "!=",
Value: "value2",
},
},
},
expected: `metric{label1="value1",label2!="value2"}`,
err: nil,
},
{
name: "with window",
pb: &PromQLBuilder{
metricName: "metric",
window: "5m",
},
expected: "metric[5m]",
err: nil,
},
{
name: "with compare",
pb: &PromQLBuilder{
metricName: "metric",
compOps: []Compare{
{
Op: ">",
Value: 10,
},
{
Op: "<",
Value: 20,
},
},
},
expected: " metric>10 and metric<20",
err: nil,
},
{
name: "with function",
pb: &PromQLBuilder{
metricName: "metric",
funcName: "sum",
},
expected: "sum(metric)",
err: nil,
},
{
name: "with offset",
pb: &PromQLBuilder{
metricName: "metric",
offset: "5m",
},
expected: "metric offset 5m",
err: nil,
},
{
name: "with aggregation",
pb: &PromQLBuilder{
metricName: "metric",
agg: Aggregation{
Op: "sum",
By: []string{"label1", "label2"},
AggWay: "by",
},
},
expected: "sum(metric) by (label1,label2)",
err: nil,
},
{
name: "with missing metric name",
pb: &PromQLBuilder{},
err: fmt.Errorf("metric name is required"),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result, err := tt.pb.Build()
if !reflect.DeepEqual(err, tt.err) {
t.Errorf("got error %v, want %v", err, tt.err)
}
if !reflect.DeepEqual(result, tt.expected) {
t.Errorf("got %v, want %v", result, tt.expected)
}
})
}
}