@@ -10,6 +10,7 @@ import (
10
10
"github.com/stretchr/testify/require"
11
11
corev1 "k8s.io/api/core/v1"
12
12
rbacv1 "k8s.io/api/rbac/v1"
13
+ v1 "k8s.io/api/rbac/v1"
13
14
"k8s.io/apimachinery/pkg/api/meta/testrestmapper"
14
15
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
16
"k8s.io/apimachinery/pkg/runtime"
@@ -214,6 +215,195 @@ subjects:
214
215
},
215
216
},
216
217
}
218
+
219
+ expectedSingleNamespaceMissingRules = []ScopedPolicyRules {
220
+ {
221
+ Namespace : "" ,
222
+ MissingRules : []v1.PolicyRule {
223
+ {
224
+ Verbs : []string {"list" , "watch" },
225
+ APIGroups : []string {"" },
226
+ Resources : []string {"services" },
227
+ ResourceNames : []string (nil ),
228
+ NonResourceURLs : []string (nil )},
229
+ {
230
+ Verbs : []string {"list" , "watch" },
231
+ APIGroups : []string {"rbac.authorization.k8s.io" },
232
+ Resources : []string {"rolebindings" },
233
+ ResourceNames : []string (nil ),
234
+ NonResourceURLs : []string (nil )},
235
+ {
236
+ Verbs : []string {"list" , "watch" },
237
+ APIGroups : []string {"rbac.authorization.k8s.io" },
238
+ Resources : []string {"roles" },
239
+ ResourceNames : []string (nil ),
240
+ NonResourceURLs : []string (nil )},
241
+ {
242
+ Verbs : []string {"update" },
243
+ APIGroups : []string {"" },
244
+ Resources : []string {"clusterextensions/finalizers" },
245
+ ResourceNames : []string {"test-cluster-extension" },
246
+ NonResourceURLs : []string (nil ),
247
+ },
248
+ },
249
+ },
250
+ {
251
+ Namespace : "test-namespace" ,
252
+ MissingRules : []v1.PolicyRule {
253
+ {
254
+ Verbs : []string {"create" },
255
+ APIGroups : []string {"*" },
256
+ Resources : []string {"certificates" }},
257
+ {
258
+ Verbs : []string {"create" },
259
+ APIGroups : []string {"" },
260
+ Resources : []string {"services" }},
261
+ {
262
+ Verbs : []string {"create" },
263
+ APIGroups : []string {"rbac.authorization.k8s.io" },
264
+ Resources : []string {"rolebindings" }},
265
+ {
266
+ Verbs : []string {"create" },
267
+ APIGroups : []string {"rbac.authorization.k8s.io" },
268
+ Resources : []string {"roles" }},
269
+ {
270
+ Verbs : []string {"delete" , "get" , "patch" , "update" },
271
+ APIGroups : []string {"" },
272
+ Resources : []string {"services" },
273
+ ResourceNames : []string {"test-service" }},
274
+ {
275
+ Verbs : []string {"delete" , "get" , "patch" , "update" },
276
+ APIGroups : []string {"rbac.authorization.k8s.io" },
277
+ Resources : []string {"rolebindings" },
278
+ ResourceNames : []string {"test-extension-binding" }},
279
+ {
280
+ Verbs : []string {"delete" , "get" , "patch" , "update" },
281
+ APIGroups : []string {"rbac.authorization.k8s.io" },
282
+ Resources : []string {"roles" },
283
+ ResourceNames : []string {"test-extension-role" }},
284
+ {
285
+ Verbs : []string {"watch" },
286
+ APIGroups : []string {"*" },
287
+ Resources : []string {"serviceaccounts" },
288
+ },
289
+ },
290
+ },
291
+ }
292
+
293
+ expectedMultiNamespaceMissingRules = []ScopedPolicyRules {
294
+ {
295
+ Namespace : "" ,
296
+ MissingRules : []v1.PolicyRule {
297
+ {
298
+ Verbs : []string {"list" , "watch" },
299
+ APIGroups : []string {"" },
300
+ Resources : []string {"services" },
301
+ ResourceNames : []string (nil ),
302
+ NonResourceURLs : []string (nil )},
303
+ {
304
+ Verbs : []string {"list" , "watch" },
305
+ APIGroups : []string {"rbac.authorization.k8s.io" },
306
+ Resources : []string {"rolebindings" },
307
+ ResourceNames : []string (nil ),
308
+ NonResourceURLs : []string (nil )},
309
+ {
310
+ Verbs : []string {"list" , "watch" },
311
+ APIGroups : []string {"rbac.authorization.k8s.io" },
312
+ Resources : []string {"roles" },
313
+ ResourceNames : []string (nil ),
314
+ NonResourceURLs : []string (nil )},
315
+ {
316
+ Verbs : []string {"update" },
317
+ APIGroups : []string {"" },
318
+ Resources : []string {"clusterextensions/finalizers" },
319
+ ResourceNames : []string {"test-cluster-extension" },
320
+ NonResourceURLs : []string (nil ),
321
+ },
322
+ },
323
+ },
324
+ {
325
+ Namespace : "a-test-namespace" ,
326
+ MissingRules : []v1.PolicyRule {
327
+ {
328
+ Verbs : []string {"create" },
329
+ APIGroups : []string {"*" },
330
+ Resources : []string {"certificates" }},
331
+ {
332
+ Verbs : []string {"create" },
333
+ APIGroups : []string {"" },
334
+ Resources : []string {"services" }},
335
+ {
336
+ Verbs : []string {"create" },
337
+ APIGroups : []string {"rbac.authorization.k8s.io" },
338
+ Resources : []string {"rolebindings" }},
339
+ {
340
+ Verbs : []string {"create" },
341
+ APIGroups : []string {"rbac.authorization.k8s.io" },
342
+ Resources : []string {"roles" }},
343
+ {
344
+ Verbs : []string {"delete" , "get" , "patch" , "update" },
345
+ APIGroups : []string {"" },
346
+ Resources : []string {"services" },
347
+ ResourceNames : []string {"test-service" }},
348
+ {
349
+ Verbs : []string {"delete" , "get" , "patch" , "update" },
350
+ APIGroups : []string {"rbac.authorization.k8s.io" },
351
+ Resources : []string {"rolebindings" },
352
+ ResourceNames : []string {"test-extension-binding" }},
353
+ {
354
+ Verbs : []string {"delete" , "get" , "patch" , "update" },
355
+ APIGroups : []string {"rbac.authorization.k8s.io" },
356
+ Resources : []string {"roles" },
357
+ ResourceNames : []string {"test-extension-role" }},
358
+ {
359
+ Verbs : []string {"watch" },
360
+ APIGroups : []string {"*" },
361
+ Resources : []string {"serviceaccounts" },
362
+ },
363
+ },
364
+ },
365
+ {
366
+ Namespace : "test-namespace" ,
367
+ MissingRules : []v1.PolicyRule {
368
+ {
369
+ Verbs : []string {"create" },
370
+ APIGroups : []string {"*" },
371
+ Resources : []string {"certificates" }},
372
+ {
373
+ Verbs : []string {"create" },
374
+ APIGroups : []string {"" },
375
+ Resources : []string {"services" }},
376
+ {
377
+ Verbs : []string {"create" },
378
+ APIGroups : []string {"rbac.authorization.k8s.io" },
379
+ Resources : []string {"rolebindings" }},
380
+ {
381
+ Verbs : []string {"create" },
382
+ APIGroups : []string {"rbac.authorization.k8s.io" },
383
+ Resources : []string {"roles" }},
384
+ {
385
+ Verbs : []string {"delete" , "get" , "patch" , "update" },
386
+ APIGroups : []string {"" },
387
+ Resources : []string {"services" },
388
+ ResourceNames : []string {"test-service" }},
389
+ {
390
+ Verbs : []string {"delete" , "get" , "patch" , "update" },
391
+ APIGroups : []string {"rbac.authorization.k8s.io" },
392
+ Resources : []string {"rolebindings" },
393
+ ResourceNames : []string {"test-extension-binding" }},
394
+ {
395
+ Verbs : []string {"delete" , "get" , "patch" , "update" },
396
+ APIGroups : []string {"rbac.authorization.k8s.io" },
397
+ Resources : []string {"roles" },
398
+ ResourceNames : []string {"test-extension-role" }},
399
+ {
400
+ Verbs : []string {"watch" },
401
+ APIGroups : []string {"*" },
402
+ Resources : []string {"serviceaccounts" },
403
+ },
404
+ },
405
+ },
406
+ }
217
407
)
218
408
219
409
func setupFakeClient (role client.Object ) client.Client {
@@ -236,23 +426,23 @@ func TestPreAuthorize_Success(t *testing.T) {
236
426
})
237
427
}
238
428
239
- func TestPreAuthorize_Failure (t * testing.T ) {
240
- t .Run ("preauthorize fails with missing rbac rules" , func (t * testing.T ) {
429
+ func TestPreAuthorize_MissingRBAC (t * testing.T ) {
430
+ t .Run ("preauthorize fails and finds missing rbac rules" , func (t * testing.T ) {
241
431
fakeClient := setupFakeClient (limitedClusterRole )
242
432
preAuth := NewRBACPreAuthorizer (fakeClient )
243
433
missingRules , err := preAuth .PreAuthorize (context .TODO (), & exampleClusterExtension , strings .NewReader (testManifest ))
244
- require .Error (t , err )
245
- require .NotEqual (t , [] ScopedPolicyRules {} , missingRules )
434
+ require .NoError (t , err )
435
+ require .Equal (t , expectedSingleNamespaceMissingRules , missingRules )
246
436
})
247
437
}
248
438
249
- func TestPreAuthorizeMultiNamespace_Failure (t * testing.T ) {
250
- t .Run ("preauthorize fails with missing rbac rules in multiple namespaces" , func (t * testing.T ) {
439
+ func TestPreAuthorizeMultiNamespace_MissingRBAC (t * testing.T ) {
440
+ t .Run ("preauthorize fails and finds missing rbac rules in multiple namespaces" , func (t * testing.T ) {
251
441
fakeClient := setupFakeClient (limitedClusterRole )
252
442
preAuth := NewRBACPreAuthorizer (fakeClient )
253
443
missingRules , err := preAuth .PreAuthorize (context .TODO (), & exampleClusterExtension , strings .NewReader (testManifestMultiNamespace ))
254
- require .Error (t , err )
255
- require .NotEqual (t , [] ScopedPolicyRules {} , missingRules )
444
+ require .NoError (t , err )
445
+ require .Equal (t , expectedMultiNamespaceMissingRules , missingRules )
256
446
})
257
447
}
258
448
0 commit comments