Skip to content

Commit 2d09e52

Browse files
committed
Add tests for http parsing
1 parent 3e3a11e commit 2d09e52

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed

pkg/loghttp/patterns_test.go

+122
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package loghttp
2+
3+
import (
4+
"net/http"
5+
"testing"
6+
"time"
7+
8+
"github.com/stretchr/testify/assert"
9+
"github.com/stretchr/testify/require"
10+
11+
"github.com/grafana/loki/v3/pkg/logproto"
12+
)
13+
14+
func TestParsePatternsQuery(t *testing.T) {
15+
t.Parallel()
16+
17+
tests := []struct {
18+
name string
19+
path string
20+
want *logproto.QueryPatternsRequest
21+
wantErr bool
22+
}{
23+
{
24+
name: "should correctly parse valid params",
25+
path: "/loki/api/v1/patterns?query={}&start=100000000000&end=3600000000000&step=5s",
26+
want: &logproto.QueryPatternsRequest{
27+
Query: "{}",
28+
Start: time.Unix(100, 0),
29+
End: time.Unix(3600, 0),
30+
Step: (5 * time.Second).Milliseconds(),
31+
},
32+
},
33+
{
34+
name: "should default empty step param to sensible step for the range",
35+
path: "/loki/api/v1/patterns?query={}&start=100000000000&end=3600000000000",
36+
want: &logproto.QueryPatternsRequest{
37+
Query: "{}",
38+
Start: time.Unix(100, 0),
39+
End: time.Unix(3600, 0),
40+
Step: (14 * time.Second).Milliseconds(),
41+
},
42+
},
43+
{
44+
name: "should default start to zero for empty start param",
45+
path: "/loki/api/v1/patterns?query={}&end=3600000000000",
46+
want: &logproto.QueryPatternsRequest{
47+
Query: "{}",
48+
Start: time.Unix(0, 0),
49+
End: time.Unix(3600, 0),
50+
Step: (14 * time.Second).Milliseconds(),
51+
},
52+
},
53+
{
54+
name: "should accept step with no units as seconds",
55+
path: "/loki/api/v1/patterns?query={}&start=100000000000&end=3600000000000&step=10",
56+
want: &logproto.QueryPatternsRequest{
57+
Query: "{}",
58+
Start: time.Unix(100, 0),
59+
End: time.Unix(3600, 0),
60+
Step: (10 * time.Second).Milliseconds(),
61+
},
62+
},
63+
{
64+
name: "should accept step as string duration in seconds",
65+
path: "/loki/api/v1/patterns?query={}&start=100000000000&end=3600000000000&step=15s",
66+
want: &logproto.QueryPatternsRequest{
67+
Query: "{}",
68+
Start: time.Unix(100, 0),
69+
End: time.Unix(3600, 0),
70+
Step: (15 * time.Second).Milliseconds(),
71+
},
72+
},
73+
{
74+
name: "should correctly parse long duration for step",
75+
path: "/loki/api/v1/patterns?query={}&start=100000000000&end=3600000000000&step=10h",
76+
want: &logproto.QueryPatternsRequest{
77+
Query: "{}",
78+
Start: time.Unix(100, 0),
79+
End: time.Unix(3600, 0),
80+
Step: (10 * time.Hour).Milliseconds(),
81+
},
82+
},
83+
{
84+
name: "should reject negative step value",
85+
path: "/loki/api/v1/patterns?query={}&start=100000000000&end=3600000000000&step=-5s",
86+
want: nil,
87+
wantErr: true,
88+
},
89+
{
90+
name: "should reject very small step for big range",
91+
path: "/loki/api/v1/patterns?query={}&start=100000000000&end=3600000000000&step=50ms",
92+
want: nil,
93+
wantErr: true,
94+
},
95+
{
96+
name: "should accept very small step for small range",
97+
path: "/loki/api/v1/patterns?query={}&start=100000000000&end=110000000000&step=50ms",
98+
want: &logproto.QueryPatternsRequest{
99+
Query: "{}",
100+
Start: time.Unix(100, 0),
101+
End: time.Unix(110, 0),
102+
Step: (50 * time.Millisecond).Milliseconds(),
103+
},
104+
},
105+
}
106+
for _, tt := range tests {
107+
t.Run(tt.name, func(t *testing.T) {
108+
req, err := http.NewRequest(http.MethodGet, tt.path, nil)
109+
require.NoError(t, err)
110+
err = req.ParseForm()
111+
require.NoError(t, err)
112+
113+
got, err := ParsePatternsQuery(req)
114+
if tt.wantErr {
115+
require.Error(t, err)
116+
} else {
117+
require.NoError(t, err)
118+
}
119+
assert.Equalf(t, tt.want, got, "Incorrect response from input path: %s", tt.path)
120+
})
121+
}
122+
}

0 commit comments

Comments
 (0)