@@ -96,10 +96,14 @@ func TestRBACExtractor_ProcessRoleBinding_ServiceAccount(t *testing.T) {
9696 access := extractor .getAccess ()
9797 require .Len (t , access , 2 , "expected 2 config access entries (one per pod in namespace)" )
9898
99+ expectedRoleAlias := KubernetesAlias (clusterName , "Role" , "default" , "pod-reader" )
100+
99101 // Check that access entries point to pods, not the role
100102 for _ , a := range access {
101103 assert .Equal (t , ConfigTypePrefix + "Pod" , a .ConfigExternalID .ConfigType )
102104 assert .Equal (t , []string {expectedUserAlias }, a .ExternalUserAliases )
105+ assert .Equal (t , []string {expectedRoleAlias }, a .ExternalRoleAliases )
106+ assert .NotEmpty (t , a .ID , "access ID should be set" )
103107 }
104108}
105109
@@ -136,6 +140,12 @@ func TestRBACExtractor_ProcessRoleBinding_User(t *testing.T) {
136140 // Should have ConfigAccess for the pod and service (cluster-wide)
137141 access := extractor .getAccess ()
138142 assert .Len (t , access , 2 , "expected 2 config access entries (pod + service)" )
143+
144+ expectedRoleAlias := KubernetesAlias (clusterName , "ClusterRole" , "" , "cluster-admin" )
145+ for _ , a := range access {
146+ assert .Equal (t , []string {expectedRoleAlias }, a .ExternalRoleAliases )
147+ assert .NotEmpty (t , a .ID , "access ID should be set" )
148+ }
139149}
140150
141151func TestRBACExtractor_ProcessRoleBinding_Group (t * testing.T ) {
@@ -171,6 +181,10 @@ func TestRBACExtractor_ProcessRoleBinding_Group(t *testing.T) {
171181 require .Len (t , access , 1 , "expected 1 config access entry" )
172182 assert .Empty (t , access [0 ].ExternalUserAliases )
173183 assert .Equal (t , []string {expectedGroupAlias }, access [0 ].ExternalGroupAliases )
184+
185+ expectedRoleAlias := KubernetesAlias (clusterName , "ClusterRole" , "" , "view" )
186+ assert .Equal (t , []string {expectedRoleAlias }, access [0 ].ExternalRoleAliases )
187+ assert .NotEmpty (t , access [0 ].ID , "access ID should be set" )
174188}
175189
176190func TestRBACExtractor_ProcessRoleBinding_MixedSubjects (t * testing.T ) {
@@ -203,6 +217,12 @@ func TestRBACExtractor_ProcessRoleBinding_MixedSubjects(t *testing.T) {
203217 // Each subject gets one ConfigAccess entry for the pod
204218 access := extractor .getAccess ()
205219 assert .Len (t , access , 3 , "expected 3 config access entries (one per subject, all pointing to same pod)" )
220+
221+ expectedRoleAlias := KubernetesAlias (clusterName , "ClusterRole" , "" , "edit" )
222+ for _ , a := range access {
223+ assert .Equal (t , []string {expectedRoleAlias }, a .ExternalRoleAliases )
224+ assert .NotEmpty (t , a .ID , "access ID should be set" )
225+ }
206226}
207227
208228func TestRBACExtractor_Deduplication (t * testing.T ) {
@@ -286,6 +306,10 @@ func TestRBACExtractor_CRDResourceResolution(t *testing.T) {
286306 require .Len (t , access , 1 , "expected 1 config access entry for the canary instance" )
287307 assert .Equal (t , ConfigTypePrefix + "Canary" , access [0 ].ConfigExternalID .ConfigType )
288308 assert .Equal (t , KubernetesAlias (clusterName , "Canary" , "default" , "my-canary" ), access [0 ].ConfigExternalID .ExternalID )
309+
310+ expectedRoleAlias := KubernetesAlias (clusterName , "ClusterRole" , "" , "canary-admin" )
311+ assert .Equal (t , []string {expectedRoleAlias }, access [0 ].ExternalRoleAliases )
312+ assert .NotEmpty (t , access [0 ].ID , "access ID should be set" )
289313}
290314
291315// Helper types and functions
0 commit comments