Refactor Declarative validation test file for role and clusterrole to be more clearner

This commit is contained in:
pranshul gupta
2026-01-28 22:57:05 +05:30
parent d21b249b19
commit 8afc18ddcc
2 changed files with 32 additions and 77 deletions

View File

@@ -47,15 +47,15 @@ func testDeclarativeValidateForDeclarative(t *testing.T, apiVersion string) {
input: mkValidClusterRole(),
},
"invalid ClusterRole missing verbs": {
input: mkValidClusterRole(tweakVerbs(0, nil)),
input: mkValidClusterRole(tweakVerbs(nil)),
expectedErrs: field.ErrorList{
field.Required(field.NewPath("rules").Index(0).Child("verbs"), ""),
},
},
"invalid ClusterRole missing resources": {
input: mkValidClusterRole(tweakResources(0, nil)),
"invalid ClusterRole empty verbs": {
input: mkValidClusterRole(tweakVerbs([]string{})),
expectedErrs: field.ErrorList{
field.Required(field.NewPath("rules").Index(0).Child("resources"), ""),
field.Required(field.NewPath("rules").Index(0).Child("verbs"), ""),
},
},
// TODO: Add more test cases
@@ -83,21 +83,23 @@ func testValidateUpdateForDeclarative(t *testing.T, apiVersion string) {
update rbac.ClusterRole
expectedErrs field.ErrorList
}{
"valid update adding resources": {
old: mkValidClusterRole(tweakResourceVersion("1")),
update: mkValidClusterRole(tweakResourceVersion("2"), tweakAddResource(0, "services")),
"valid update": {
old: mkValidClusterRole(),
update: mkValidClusterRole(),
},
"invalid update clearing resources": {
old: mkValidClusterRole(tweakResourceVersion("1")),
update: mkValidClusterRole(tweakResourceVersion("2"), tweakResources(0, []string{})),
"invalid update clearing verbs": {
old: mkValidClusterRole(),
update: mkValidClusterRole(tweakVerbs([]string{})),
expectedErrs: field.ErrorList{
field.Required(field.NewPath("rules").Index(0).Child("resources"), ""),
field.Required(field.NewPath("rules").Index(0).Child("verbs"), ""),
},
},
// TODO: Add more test cases
}
for k, tc := range testCases {
t.Run(k, func(t *testing.T) {
tc.old.ResourceVersion = "1"
tc.update.ResourceVersion = "2"
apitesting.VerifyUpdateValidationEquivalence(t, ctx, &tc.update, &tc.old, Strategy.ValidateUpdate, tc.expectedErrs)
})
}
@@ -121,32 +123,10 @@ func mkValidClusterRole(tweaks ...func(*rbac.ClusterRole)) rbac.ClusterRole {
return cr
}
func tweakResourceVersion(rv string) func(*rbac.ClusterRole) {
func tweakVerbs(verbs []string) func(*rbac.ClusterRole) {
return func(cr *rbac.ClusterRole) {
cr.ResourceVersion = rv
}
}
func tweakVerbs(ruleIndex int, verbs []string) func(*rbac.ClusterRole) {
return func(cr *rbac.ClusterRole) {
if len(cr.Rules) > ruleIndex {
cr.Rules[ruleIndex].Verbs = verbs
}
}
}
func tweakResources(ruleIndex int, resources []string) func(*rbac.ClusterRole) {
return func(cr *rbac.ClusterRole) {
if len(cr.Rules) > ruleIndex {
cr.Rules[ruleIndex].Resources = resources
}
}
}
func tweakAddResource(ruleIndex int, resource string) func(*rbac.ClusterRole) {
return func(cr *rbac.ClusterRole) {
if len(cr.Rules) > ruleIndex {
cr.Rules[ruleIndex].Resources = append(cr.Rules[ruleIndex].Resources, resource)
if len(cr.Rules) > 0 {
cr.Rules[0].Verbs = verbs
}
}
}

View File

@@ -53,17 +53,18 @@ func testDeclarativeValidateForDeclarative(t *testing.T, apiVersion string) {
input: mkValidRole(),
},
"invalid Role missing verbs": {
input: mkValidRole(tweakRoleVerbs(0, nil)),
input: mkValidRole(tweakVerbs(nil)),
expectedErrs: field.ErrorList{
field.Required(field.NewPath("rules").Index(0).Child("verbs"), ""),
},
},
"invalid Role missing resources": {
input: mkValidRole(tweakRoleResources(0, nil)),
"invalid Role empty verbs": {
input: mkValidRole(tweakVerbs([]string{})),
expectedErrs: field.ErrorList{
field.Required(field.NewPath("rules").Index(0).Child("resources"), ""),
field.Required(field.NewPath("rules").Index(0).Child("verbs"), ""),
},
},
// TODO: Add more test cases
}
for name, tc := range testCases {
@@ -94,28 +95,24 @@ func testValidateUpdateForDeclarative(t *testing.T, apiVersion string) {
old, update rbac.Role
expectedErrs field.ErrorList
}{
"valid update adding resources": {
old: mkValidRole(tweakRoleResourceVersion("1")),
update: mkValidRole(tweakRoleResourceVersion("2"), tweakRoleAddResource(0, "services")),
"valid update": {
old: mkValidRole(),
update: mkValidRole(),
},
"invalid update clearing verbs": {
old: mkValidRole(tweakRoleResourceVersion("1")),
update: mkValidRole(tweakRoleResourceVersion("2"), tweakRoleVerbs(0, []string{})),
old: mkValidRole(),
update: mkValidRole(tweakVerbs([]string{})),
expectedErrs: field.ErrorList{
field.Required(field.NewPath("rules").Index(0).Child("verbs"), ""),
},
},
"invalid update clearing resources": {
old: mkValidRole(tweakRoleResourceVersion("1")),
update: mkValidRole(tweakRoleResourceVersion("2"), tweakRoleResources(0, []string{})),
expectedErrs: field.ErrorList{
field.Required(field.NewPath("rules").Index(0).Child("resources"), ""),
},
},
// TODO: Add more test cases
}
for name, tc := range testCases {
t.Run(name, func(t *testing.T) {
tc.old.ResourceVersion = "1"
tc.update.ResourceVersion = "2"
apitesting.VerifyUpdateValidationEquivalence(t, ctx, &tc.update, &tc.old, Strategy.ValidateUpdate, tc.expectedErrs)
})
}
@@ -140,32 +137,10 @@ func mkValidRole(tweaks ...func(*rbac.Role)) rbac.Role {
return r
}
func tweakRoleResourceVersion(rv string) func(*rbac.Role) {
func tweakVerbs(verbs []string) func(*rbac.Role) {
return func(r *rbac.Role) {
r.ResourceVersion = rv
}
}
func tweakRoleVerbs(ruleIndex int, verbs []string) func(*rbac.Role) {
return func(r *rbac.Role) {
if len(r.Rules) > ruleIndex {
r.Rules[ruleIndex].Verbs = verbs
}
}
}
func tweakRoleResources(ruleIndex int, resources []string) func(*rbac.Role) {
return func(r *rbac.Role) {
if len(r.Rules) > ruleIndex {
r.Rules[ruleIndex].Resources = resources
}
}
}
func tweakRoleAddResource(ruleIndex int, resource string) func(*rbac.Role) {
return func(r *rbac.Role) {
if len(r.Rules) > ruleIndex {
r.Rules[ruleIndex].Resources = append(r.Rules[ruleIndex].Resources, resource)
if len(r.Rules) > 0 {
r.Rules[0].Verbs = verbs
}
}
}