cloudflare/pint

Public

mirrored from https://github.com/cloudflare/pintAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v0.28.1

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

internal/parser/utils/aggregation_test.go

154lines · modecode

1package utils_test
2
3import (
4 "testing"
5
6 "github.com/stretchr/testify/require"
7
8 "github.com/cloudflare/pint/internal/parser"
9 "github.com/cloudflare/pint/internal/parser/utils"
10)
11
12func TestHasOuterAggregation(t *testing.T) {
13 type testCaseT struct {
14 expr string
15 output []string
16 }
17
18 testCases := []testCaseT{
19 {
20 expr: "foo",
21 },
22 {
23 expr: "sum(foo)",
24 output: []string{"sum(foo)"},
25 },
26 {
27 expr: "sum(foo) by(job)",
28 output: []string{"sum by(job) (foo)"},
29 },
30 {
31 expr: "sum(foo) without(job)",
32 output: []string{"sum without(job) (foo)"},
33 },
34 {
35 expr: "1 + sum(foo)",
36 output: []string{"sum(foo)"},
37 },
38 {
39 expr: "vector(0) or sum(foo)",
40 output: []string{"sum(foo)"},
41 },
42 {
43 expr: "sum(foo) or vector(0)",
44 output: []string{"sum(foo)"},
45 },
46 {
47 expr: "sum(foo) + sum(bar)",
48 output: []string{"sum(foo)", "sum(bar)"},
49 },
50 {
51 expr: "foo / on(bbb) sum(bar)",
52 },
53 {
54 expr: "sum(foo) / on(bbb) sum(bar)",
55 output: []string{"sum(foo)"},
56 },
57 {
58 expr: "sum(foo) OR sum(bar) by(job)",
59 output: []string{"sum(foo)", "sum by(job) (bar)"},
60 },
61 {
62 expr: "foo OR sum(foo) OR sum(bar) by(job)",
63 output: []string{"sum(foo)", "sum by(job) (bar)"},
64 },
65 {
66 expr: "1 + sum(foo) by(job) + sum(foo) by(notjob)",
67 output: []string{"sum by(job) (foo)", "sum by(notjob) (foo)"},
68 },
69 {
70 expr: "sum(foo) by (job) > count(bar)",
71 output: []string{"sum by(job) (foo)"},
72 },
73 {
74 expr: "sum(foo) by (job) > count(foo) / 2 or sum(bar) by (job) > count(bar)",
75 output: []string{"sum by(job) (foo)", "sum by(job) (bar)"},
76 },
77 {
78 expr: "(foo unless on(instance, version, package) bar) and on(instance) (sum(enabled) by(instance) > 0)",
79 output: []string{},
80 },
81 {
82 expr: "count(build_info) by (instance, version) != ignoring(bar) group_left(package) count(foo) by (instance, version, package)",
83 output: []string{"count by(instance, version, package) (build_info)"},
84 },
85 {
86 expr: "sum(foo) without() != on() group_left(instance) sum(vector(0))",
87 output: []string{"sum without() (foo)"},
88 },
89 {
90 expr: "sum(foo) != on() group_right(instance) sum(vector(0))",
91 output: []string{"sum by(instance) (vector(0))"},
92 },
93 {
94 expr: "min(foo) by(bar) and max by(bar) (foo)",
95 output: []string{"min by(bar) (foo)"},
96 },
97 {
98 expr: "max(foo)",
99 output: []string{"max(foo)"},
100 },
101 {
102 expr: "avg(foo) by(bar)",
103 output: []string{"avg by(bar) (foo)"},
104 },
105 {
106 expr: "group(foo)",
107 output: []string{"group(foo)"},
108 },
109 {
110 expr: "stddev(foo)",
111 output: []string{"stddev(foo)"},
112 },
113 {
114 expr: "(stdvar(foo))",
115 output: []string{"stdvar(foo)"},
116 },
117 {
118 expr: `(1 - count_values("job", foo))`,
119 output: []string{`count_values("job", foo)`},
120 },
121 {
122 expr: "(topk(5, foo))",
123 },
124 {
125 expr: "(bottomk(5, foo))",
126 },
127 {
128 expr: "(quantile(0.9, foo))",
129 output: []string{"quantile(0.9, foo)"},
130 },
131 }
132
133 for _, tc := range testCases {
134 t.Run(tc.expr, func(t *testing.T) {
135 n, err := parser.DecodeExpr(tc.expr)
136 if err != nil {
137 t.Error(err)
138 t.FailNow()
139 }
140 aggs := utils.HasOuterAggregation(n)
141 if len(aggs) == 0 {
142 if len(tc.output) > 0 {
143 t.Errorf("HasOuterAggregation() returned nil, expected %s", tc.output)
144 }
145 } else {
146 output := []string{}
147 for _, a := range aggs {
148 output = append(output, a.String())
149 }
150 require.Equal(t, tc.output, output, "HasOuterAggregation() returned wrong output")
151 }
152 })
153 }
154}
155