@@ -30,77 +30,101 @@ func Test_Proxy_RequestsForwarding(t *testing.T) {
30
30
queryEmpty = `{"status":"success","data":{"resultType":"vector","result":[]}}`
31
31
)
32
32
33
+ type mockedBackend struct {
34
+ pathPrefix string
35
+ handler http.HandlerFunc
36
+ }
37
+
33
38
tests := map [string ]struct {
34
- backends []http.HandlerFunc
35
- backendsPathPrefix string
39
+ backends []mockedBackend
36
40
preferredBackendIdx int
37
41
expectedStatus int
38
42
expectedRes string
39
43
}{
40
44
"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 )} ,
43
47
},
44
48
expectedStatus : 200 ,
45
49
expectedRes : querySingleMetric1 ,
46
50
},
47
51
"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 , "" )} ,
50
54
},
51
55
expectedStatus : 500 ,
52
56
expectedRes : "" ,
53
57
},
54
58
"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
+ },
58
77
},
59
78
preferredBackendIdx : 0 ,
60
79
expectedStatus : 200 ,
61
80
expectedRes : querySingleMetric1 ,
62
81
},
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
+ },
67
92
},
68
- backendsPathPrefix : "/api/prom" ,
69
93
preferredBackendIdx : 0 ,
70
94
expectedStatus : 200 ,
71
95
expectedRes : querySingleMetric1 ,
72
96
},
73
97
"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 )} ,
77
101
},
78
102
preferredBackendIdx : 0 ,
79
103
expectedStatus : 400 ,
80
104
expectedRes : "" ,
81
105
},
82
106
"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 )} ,
86
110
},
87
111
preferredBackendIdx : 0 ,
88
112
expectedStatus : 200 ,
89
113
expectedRes : querySingleMetric1 ,
90
114
},
91
115
"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 , "" )} ,
95
119
},
96
120
preferredBackendIdx : 0 ,
97
121
expectedStatus : 200 ,
98
122
expectedRes : querySingleMetric1 ,
99
123
},
100
124
"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 , "" )} ,
104
128
},
105
129
preferredBackendIdx : 0 ,
106
130
expectedStatus : 500 ,
@@ -114,10 +138,10 @@ func Test_Proxy_RequestsForwarding(t *testing.T) {
114
138
115
139
// Start backend servers.
116
140
for _ , b := range testData .backends {
117
- s := httptest .NewServer (b )
141
+ s := httptest .NewServer (b . handler )
118
142
defer s .Close ()
119
143
120
- backendURLs = append (backendURLs , s .URL + testData . backendsPathPrefix )
144
+ backendURLs = append (backendURLs , s .URL + b . pathPrefix )
121
145
}
122
146
123
147
// Start the proxy.
0 commit comments