@@ -214,14 +214,202 @@ subjects:
214214			},
215215		},
216216	}
217+ 
218+ 	expectedSingleNamespaceMissingRules  =  []ScopedPolicyRules {
219+ 		{
220+ 			Namespace : "" ,
221+ 			MissingRules : []rbacv1.PolicyRule {
222+ 				{
223+ 					Verbs :           []string {"list" , "watch" },
224+ 					APIGroups :       []string {"" },
225+ 					Resources :       []string {"services" },
226+ 					ResourceNames :   []string (nil ),
227+ 					NonResourceURLs : []string (nil )},
228+ 				{
229+ 					Verbs :           []string {"list" , "watch" },
230+ 					APIGroups :       []string {"rbac.authorization.k8s.io" },
231+ 					Resources :       []string {"rolebindings" },
232+ 					ResourceNames :   []string (nil ),
233+ 					NonResourceURLs : []string (nil )},
234+ 				{
235+ 					Verbs :           []string {"list" , "watch" },
236+ 					APIGroups :       []string {"rbac.authorization.k8s.io" },
237+ 					Resources :       []string {"roles" },
238+ 					ResourceNames :   []string (nil ),
239+ 					NonResourceURLs : []string (nil )},
240+ 				{
241+ 					Verbs :           []string {"update" },
242+ 					APIGroups :       []string {"" },
243+ 					Resources :       []string {"clusterextensions/finalizers" },
244+ 					ResourceNames :   []string {"test-cluster-extension" },
245+ 					NonResourceURLs : []string (nil ),
246+ 				},
247+ 			},
248+ 		},
249+ 		{
250+ 			Namespace : "test-namespace" ,
251+ 			MissingRules : []rbacv1.PolicyRule {
252+ 				{
253+ 					Verbs :     []string {"create" },
254+ 					APIGroups : []string {"*" },
255+ 					Resources : []string {"certificates" }},
256+ 				{
257+ 					Verbs :     []string {"create" },
258+ 					APIGroups : []string {"" },
259+ 					Resources : []string {"services" }},
260+ 				{
261+ 					Verbs :     []string {"create" },
262+ 					APIGroups : []string {"rbac.authorization.k8s.io" },
263+ 					Resources : []string {"rolebindings" }},
264+ 				{
265+ 					Verbs :     []string {"create" },
266+ 					APIGroups : []string {"rbac.authorization.k8s.io" },
267+ 					Resources : []string {"roles" }},
268+ 				{
269+ 					Verbs :         []string {"delete" , "get" , "patch" , "update" },
270+ 					APIGroups :     []string {"" },
271+ 					Resources :     []string {"services" },
272+ 					ResourceNames : []string {"test-service" }},
273+ 				{
274+ 					Verbs :         []string {"delete" , "get" , "patch" , "update" },
275+ 					APIGroups :     []string {"rbac.authorization.k8s.io" },
276+ 					Resources :     []string {"rolebindings" },
277+ 					ResourceNames : []string {"test-extension-binding" }},
278+ 				{
279+ 					Verbs :         []string {"delete" , "get" , "patch" , "update" },
280+ 					APIGroups :     []string {"rbac.authorization.k8s.io" },
281+ 					Resources :     []string {"roles" },
282+ 					ResourceNames : []string {"test-extension-role" }},
283+ 				{
284+ 					Verbs :     []string {"watch" },
285+ 					APIGroups : []string {"*" },
286+ 					Resources : []string {"serviceaccounts" },
287+ 				},
288+ 			},
289+ 		},
290+ 	}
291+ 
292+ 	expectedMultiNamespaceMissingRules  =  []ScopedPolicyRules {
293+ 		{
294+ 			Namespace : "" ,
295+ 			MissingRules : []rbacv1.PolicyRule {
296+ 				{
297+ 					Verbs :           []string {"list" , "watch" },
298+ 					APIGroups :       []string {"" },
299+ 					Resources :       []string {"services" },
300+ 					ResourceNames :   []string (nil ),
301+ 					NonResourceURLs : []string (nil )},
302+ 				{
303+ 					Verbs :           []string {"list" , "watch" },
304+ 					APIGroups :       []string {"rbac.authorization.k8s.io" },
305+ 					Resources :       []string {"rolebindings" },
306+ 					ResourceNames :   []string (nil ),
307+ 					NonResourceURLs : []string (nil )},
308+ 				{
309+ 					Verbs :           []string {"list" , "watch" },
310+ 					APIGroups :       []string {"rbac.authorization.k8s.io" },
311+ 					Resources :       []string {"roles" },
312+ 					ResourceNames :   []string (nil ),
313+ 					NonResourceURLs : []string (nil )},
314+ 				{
315+ 					Verbs :           []string {"update" },
316+ 					APIGroups :       []string {"" },
317+ 					Resources :       []string {"clusterextensions/finalizers" },
318+ 					ResourceNames :   []string {"test-cluster-extension" },
319+ 					NonResourceURLs : []string (nil ),
320+ 				},
321+ 			},
322+ 		},
323+ 		{
324+ 			Namespace : "a-test-namespace" ,
325+ 			MissingRules : []rbacv1.PolicyRule {
326+ 				{
327+ 					Verbs :     []string {"create" },
328+ 					APIGroups : []string {"*" },
329+ 					Resources : []string {"certificates" }},
330+ 				{
331+ 					Verbs :     []string {"create" },
332+ 					APIGroups : []string {"" },
333+ 					Resources : []string {"services" }},
334+ 				{
335+ 					Verbs :     []string {"create" },
336+ 					APIGroups : []string {"rbac.authorization.k8s.io" },
337+ 					Resources : []string {"rolebindings" }},
338+ 				{
339+ 					Verbs :     []string {"create" },
340+ 					APIGroups : []string {"rbac.authorization.k8s.io" },
341+ 					Resources : []string {"roles" }},
342+ 				{
343+ 					Verbs :         []string {"delete" , "get" , "patch" , "update" },
344+ 					APIGroups :     []string {"" },
345+ 					Resources :     []string {"services" },
346+ 					ResourceNames : []string {"test-service" }},
347+ 				{
348+ 					Verbs :         []string {"delete" , "get" , "patch" , "update" },
349+ 					APIGroups :     []string {"rbac.authorization.k8s.io" },
350+ 					Resources :     []string {"rolebindings" },
351+ 					ResourceNames : []string {"test-extension-binding" }},
352+ 				{
353+ 					Verbs :         []string {"delete" , "get" , "patch" , "update" },
354+ 					APIGroups :     []string {"rbac.authorization.k8s.io" },
355+ 					Resources :     []string {"roles" },
356+ 					ResourceNames : []string {"test-extension-role" }},
357+ 				{
358+ 					Verbs :     []string {"watch" },
359+ 					APIGroups : []string {"*" },
360+ 					Resources : []string {"serviceaccounts" },
361+ 				},
362+ 			},
363+ 		},
364+ 		{
365+ 			Namespace : "test-namespace" ,
366+ 			MissingRules : []rbacv1.PolicyRule {
367+ 				{
368+ 					Verbs :     []string {"create" },
369+ 					APIGroups : []string {"*" },
370+ 					Resources : []string {"certificates" }},
371+ 				{
372+ 					Verbs :     []string {"create" },
373+ 					APIGroups : []string {"" },
374+ 					Resources : []string {"services" }},
375+ 				{
376+ 					Verbs :     []string {"create" },
377+ 					APIGroups : []string {"rbac.authorization.k8s.io" },
378+ 					Resources : []string {"rolebindings" }},
379+ 				{
380+ 					Verbs :     []string {"create" },
381+ 					APIGroups : []string {"rbac.authorization.k8s.io" },
382+ 					Resources : []string {"roles" }},
383+ 				{
384+ 					Verbs :         []string {"delete" , "get" , "patch" , "update" },
385+ 					APIGroups :     []string {"" },
386+ 					Resources :     []string {"services" },
387+ 					ResourceNames : []string {"test-service" }},
388+ 				{
389+ 					Verbs :         []string {"delete" , "get" , "patch" , "update" },
390+ 					APIGroups :     []string {"rbac.authorization.k8s.io" },
391+ 					Resources :     []string {"rolebindings" },
392+ 					ResourceNames : []string {"test-extension-binding" }},
393+ 				{
394+ 					Verbs :         []string {"delete" , "get" , "patch" , "update" },
395+ 					APIGroups :     []string {"rbac.authorization.k8s.io" },
396+ 					Resources :     []string {"roles" },
397+ 					ResourceNames : []string {"test-extension-role" }},
398+ 				{
399+ 					Verbs :     []string {"watch" },
400+ 					APIGroups : []string {"*" },
401+ 					Resources : []string {"serviceaccounts" },
402+ 				},
403+ 			},
404+ 		},
405+ 	}
217406)
218407
219408func  setupFakeClient (role  client.Object ) client.Client  {
220409	s  :=  runtime .NewScheme ()
221410	_  =  corev1 .AddToScheme (s )
222411	_  =  rbacv1 .AddToScheme (s )
223412	restMapper  :=  testrestmapper .TestOnlyStaticRESTMapper (s )
224- 	// restMapper := meta.NewDefaultRESTMapper(nil) 
225413	fakeClientBuilder  :=  fake .NewClientBuilder ().WithObjects (append (objects , role )... ).WithRESTMapper (restMapper )
226414	return  fakeClientBuilder .Build ()
227415}
@@ -236,23 +424,23 @@ func TestPreAuthorize_Success(t *testing.T) {
236424	})
237425}
238426
239- func  TestPreAuthorize_Failure (t  * testing.T ) {
240- 	t .Run ("preauthorize fails with  missing rbac rules" , func (t  * testing.T ) {
427+ func  TestPreAuthorize_MissingRBAC (t  * testing.T ) {
428+ 	t .Run ("preauthorize fails and finds  missing rbac rules" , func (t  * testing.T ) {
241429		fakeClient  :=  setupFakeClient (limitedClusterRole )
242430		preAuth  :=  NewRBACPreAuthorizer (fakeClient )
243431		missingRules , err  :=  preAuth .PreAuthorize (context .TODO (), & exampleClusterExtension , strings .NewReader (testManifest ))
244- 		require .Error (t , err )
245- 		require .NotEqual (t , [] ScopedPolicyRules {} , missingRules )
432+ 		require .NoError (t , err )
433+ 		require .Equal (t , expectedSingleNamespaceMissingRules , missingRules )
246434	})
247435}
248436
249- func  TestPreAuthorizeMultiNamespace_Failure (t  * testing.T ) {
250- 	t .Run ("preauthorize fails with  missing rbac rules in multiple namespaces" , func (t  * testing.T ) {
437+ func  TestPreAuthorizeMultiNamespace_MissingRBAC (t  * testing.T ) {
438+ 	t .Run ("preauthorize fails and finds  missing rbac rules in multiple namespaces" , func (t  * testing.T ) {
251439		fakeClient  :=  setupFakeClient (limitedClusterRole )
252440		preAuth  :=  NewRBACPreAuthorizer (fakeClient )
253441		missingRules , err  :=  preAuth .PreAuthorize (context .TODO (), & exampleClusterExtension , strings .NewReader (testManifestMultiNamespace ))
254- 		require .Error (t , err )
255- 		require .NotEqual (t , [] ScopedPolicyRules {} , missingRules )
442+ 		require .NoError (t , err )
443+ 		require .Equal (t , expectedMultiNamespaceMissingRules , missingRules )
256444	})
257445}
258446
0 commit comments