@@ -3,6 +3,7 @@ package ruler
3
3
import (
4
4
"context"
5
5
"encoding/json"
6
+ "errors"
6
7
io "io"
7
8
"io/ioutil"
8
9
"net/http"
@@ -170,7 +171,44 @@ func TestRuler_Create(t *testing.T) {
170
171
defer rcleanup ()
171
172
defer services .StopAndAwaitTerminated (context .Background (), r ) //nolint:errcheck
172
173
173
- rules := `name: test
174
+ tc := []struct {
175
+ name string
176
+ input string
177
+ output string
178
+ err error
179
+ status int
180
+ }{
181
+ {
182
+ name : "with an empty payload" ,
183
+ input : "" ,
184
+ status : 400 ,
185
+ err : errors .New ("invalid rules config: rule group name must not be empty\n " ),
186
+ },
187
+ {
188
+ name : "with no rule group name" ,
189
+ input : `
190
+ interval: 15s
191
+ rules:
192
+ - record: up_rule
193
+ expr: up
194
+ ` ,
195
+ status : 400 ,
196
+ err : errors .New ("invalid rules config: rule group name must not be empty\n " ),
197
+ },
198
+ {
199
+ name : "with no rules" ,
200
+ input : `
201
+ name: rg_name
202
+ interval: 15s
203
+ ` ,
204
+ status : 400 ,
205
+ err : errors .New ("invalid rules config: rule group 'rg_name' has no rules\n " ),
206
+ },
207
+ {
208
+ name : "with a a valid rules file" ,
209
+ status : 202 ,
210
+ input : `
211
+ name: test
174
212
interval: 15s
175
213
rules:
176
214
- record: up_rule
@@ -182,26 +220,36 @@ rules:
182
220
test: test
183
221
labels:
184
222
test: test
185
- `
186
-
187
- router := mux .NewRouter ()
188
- router .Path ("/api/v1/rules/{namespace}" ).Methods ("POST" ).HandlerFunc (r .CreateRuleGroup )
189
- router .Path ("/api/v1/rules/{namespace}/{groupName}" ).Methods ("GET" ).HandlerFunc (r .GetRuleGroup )
190
-
191
- // POST
192
- req := requestFor (t , http .MethodPost , "https://localhost:8080/api/v1/rules/namespace" , strings .NewReader (rules ), "user1" )
193
- w := httptest .NewRecorder ()
194
-
195
- router .ServeHTTP (w , req )
196
- require .Equal (t , 202 , w .Code )
197
-
198
- // GET
199
- req = requestFor (t , http .MethodGet , "https://localhost:8080/api/v1/rules/namespace/test" , nil , "user1" )
200
- w = httptest .NewRecorder ()
201
-
202
- router .ServeHTTP (w , req )
203
- require .Equal (t , 200 , w .Code )
204
- require .Equal (t , "name: test\n interval: 15s\n rules:\n - record: up_rule\n expr: up{}\n - alert: up_alert\n expr: sum(up{}) > 1\n for: 30s\n labels:\n test: test\n annotations:\n test: test\n " , w .Body .String ())
223
+ ` ,
224
+ output : "name: test\n interval: 15s\n rules:\n - record: up_rule\n expr: up{}\n - alert: up_alert\n expr: sum(up{}) > 1\n for: 30s\n labels:\n test: test\n annotations:\n test: test\n " ,
225
+ },
226
+ }
227
+
228
+ for _ , tt := range tc {
229
+ t .Run (tt .name , func (t * testing.T ) {
230
+ router := mux .NewRouter ()
231
+ router .Path ("/api/v1/rules/{namespace}" ).Methods ("POST" ).HandlerFunc (r .CreateRuleGroup )
232
+ router .Path ("/api/v1/rules/{namespace}/{groupName}" ).Methods ("GET" ).HandlerFunc (r .GetRuleGroup )
233
+ // POST
234
+ req := requestFor (t , http .MethodPost , "https://localhost:8080/api/v1/rules/namespace" , strings .NewReader (tt .input ), "user1" )
235
+ w := httptest .NewRecorder ()
236
+
237
+ router .ServeHTTP (w , req )
238
+ require .Equal (t , tt .status , w .Code )
239
+
240
+ if tt .err == nil {
241
+ // GET
242
+ req = requestFor (t , http .MethodGet , "https://localhost:8080/api/v1/rules/namespace/test" , nil , "user1" )
243
+ w = httptest .NewRecorder ()
244
+
245
+ router .ServeHTTP (w , req )
246
+ require .Equal (t , 200 , w .Code )
247
+ require .Equal (t , tt .output , w .Body .String ())
248
+ } else {
249
+ require .EqualError (t , tt .err , w .Body .String ())
250
+ }
251
+ })
252
+ }
205
253
}
206
254
207
255
func TestRuler_DeleteNamespace (t * testing.T ) {
0 commit comments