Skip to content

Commit 924445b

Browse files
committed
Added a query-tee test covering backends with different path prefixes
Signed-off-by: Marco Pracucci <[email protected]>
1 parent 0b19c53 commit 924445b

File tree

1 file changed

+52
-28
lines changed

1 file changed

+52
-28
lines changed

cmd/query-tee/proxy_test.go

Lines changed: 52 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -30,77 +30,101 @@ func Test_Proxy_RequestsForwarding(t *testing.T) {
3030
queryEmpty = `{"status":"success","data":{"resultType":"vector","result":[]}}`
3131
)
3232

33+
type mockedBackend struct {
34+
pathPrefix string
35+
handler http.HandlerFunc
36+
}
37+
3338
tests := map[string]struct {
34-
backends []http.HandlerFunc
35-
backendsPathPrefix string
39+
backends []mockedBackend
3640
preferredBackendIdx int
3741
expectedStatus int
3842
expectedRes string
3943
}{
4044
"one backend returning 2xx": {
41-
backends: []http.HandlerFunc{
42-
mockQueryResponse("/api/v1/query", 200, querySingleMetric1),
45+
backends: []mockedBackend{
46+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 200, querySingleMetric1)},
4347
},
4448
expectedStatus: 200,
4549
expectedRes: querySingleMetric1,
4650
},
4751
"one backend returning 5xx": {
48-
backends: []http.HandlerFunc{
49-
mockQueryResponse("/api/v1/query", 500, ""),
52+
backends: []mockedBackend{
53+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 500, "")},
5054
},
5155
expectedStatus: 500,
5256
expectedRes: "",
5357
},
5458
"two backends without path prefix": {
55-
backends: []http.HandlerFunc{
56-
mockQueryResponse("/api/v1/query", 200, querySingleMetric1),
57-
mockQueryResponse("/api/v1/query", 200, querySingleMetric2),
59+
backends: []mockedBackend{
60+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 200, querySingleMetric1)},
61+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 200, querySingleMetric2)},
62+
},
63+
preferredBackendIdx: 0,
64+
expectedStatus: 200,
65+
expectedRes: querySingleMetric1,
66+
},
67+
"two backends with the same path prefix": {
68+
backends: []mockedBackend{
69+
mockedBackend{
70+
pathPrefix: "/api/prom",
71+
handler: mockQueryResponse("/api/prom/api/v1/query", 200, querySingleMetric1),
72+
},
73+
mockedBackend{
74+
pathPrefix: "/api/prom",
75+
handler: mockQueryResponse("/api/prom/api/v1/query", 200, querySingleMetric2),
76+
},
5877
},
5978
preferredBackendIdx: 0,
6079
expectedStatus: 200,
6180
expectedRes: querySingleMetric1,
6281
},
63-
"two backends with path prefix": {
64-
backends: []http.HandlerFunc{
65-
mockQueryResponse("/api/prom/api/v1/query", 200, querySingleMetric1),
66-
mockQueryResponse("/api/prom/api/v1/query", 200, querySingleMetric2),
82+
"two backends with different path prefix": {
83+
backends: []mockedBackend{
84+
mockedBackend{
85+
pathPrefix: "/prefix-1",
86+
handler: mockQueryResponse("/prefix-1/api/v1/query", 200, querySingleMetric1),
87+
},
88+
mockedBackend{
89+
pathPrefix: "/prefix-2",
90+
handler: mockQueryResponse("/prefix-2/api/v1/query", 200, querySingleMetric2),
91+
},
6792
},
68-
backendsPathPrefix: "/api/prom",
6993
preferredBackendIdx: 0,
7094
expectedStatus: 200,
7195
expectedRes: querySingleMetric1,
7296
},
7397
"preferred backend returns 4xx": {
74-
backends: []http.HandlerFunc{
75-
mockQueryResponse("/api/v1/query", 400, ""),
76-
mockQueryResponse("/api/v1/query", 200, querySingleMetric1),
98+
backends: []mockedBackend{
99+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 400, "")},
100+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 200, querySingleMetric1)},
77101
},
78102
preferredBackendIdx: 0,
79103
expectedStatus: 400,
80104
expectedRes: "",
81105
},
82106
"preferred backend returns 5xx": {
83-
backends: []http.HandlerFunc{
84-
mockQueryResponse("/api/v1/query", 500, ""),
85-
mockQueryResponse("/api/v1/query", 200, querySingleMetric1),
107+
backends: []mockedBackend{
108+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 500, "")},
109+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 200, querySingleMetric1)},
86110
},
87111
preferredBackendIdx: 0,
88112
expectedStatus: 200,
89113
expectedRes: querySingleMetric1,
90114
},
91115
"non-preferred backend returns 5xx": {
92-
backends: []http.HandlerFunc{
93-
mockQueryResponse("/api/v1/query", 200, querySingleMetric1),
94-
mockQueryResponse("/api/v1/query", 500, ""),
116+
backends: []mockedBackend{
117+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 200, querySingleMetric1)},
118+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 500, "")},
95119
},
96120
preferredBackendIdx: 0,
97121
expectedStatus: 200,
98122
expectedRes: querySingleMetric1,
99123
},
100124
"all backends returns 5xx": {
101-
backends: []http.HandlerFunc{
102-
mockQueryResponse("/api/v1/query", 500, ""),
103-
mockQueryResponse("/api/v1/query", 500, ""),
125+
backends: []mockedBackend{
126+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 500, "")},
127+
mockedBackend{handler: mockQueryResponse("/api/v1/query", 500, "")},
104128
},
105129
preferredBackendIdx: 0,
106130
expectedStatus: 500,
@@ -114,10 +138,10 @@ func Test_Proxy_RequestsForwarding(t *testing.T) {
114138

115139
// Start backend servers.
116140
for _, b := range testData.backends {
117-
s := httptest.NewServer(b)
141+
s := httptest.NewServer(b.handler)
118142
defer s.Close()
119143

120-
backendURLs = append(backendURLs, s.URL+testData.backendsPathPrefix)
144+
backendURLs = append(backendURLs, s.URL+b.pathPrefix)
121145
}
122146

123147
// Start the proxy.

0 commit comments

Comments
 (0)