Improve PodSecurityPolicy group validate error message on out-of-range group IDs

This commit is contained in:
Lennart Espe 2018-03-07 21:41:27 +01:00
parent 5364f7beb8
commit ba1ef7a6c4
No known key found for this signature in database
GPG Key ID: F47C6BF353259AB2
3 changed files with 18 additions and 14 deletions

View File

@ -70,7 +70,7 @@ func (s *mustRunAs) Validate(_ *api.Pod, groups []int64) field.ErrorList {
for _, group := range groups { for _, group := range groups {
if !s.isGroupValid(group) { if !s.isGroupValid(group) {
detail := fmt.Sprintf("%d is not an allowed group", group) detail := fmt.Sprintf("group %d must be in the ranges: %v", group, s.ranges)
allErrs = append(allErrs, field.Invalid(field.NewPath(s.field), groups, detail)) allErrs = append(allErrs, field.Invalid(field.NewPath(s.field), groups, detail))
} }
} }

View File

@ -17,8 +17,10 @@ limitations under the License.
package group package group
import ( import (
"k8s.io/kubernetes/pkg/apis/extensions" "strings"
"testing" "testing"
"k8s.io/kubernetes/pkg/apis/extensions"
) )
func TestMustRunAsOptions(t *testing.T) { func TestMustRunAsOptions(t *testing.T) {
@ -110,17 +112,19 @@ func TestValidate(t *testing.T) {
tests := map[string]struct { tests := map[string]struct {
ranges []extensions.GroupIDRange ranges []extensions.GroupIDRange
groups []int64 groups []int64
pass bool expectedError string
}{ }{
"nil security context": { "nil security context": {
ranges: []extensions.GroupIDRange{ ranges: []extensions.GroupIDRange{
{Min: 1, Max: 3}, {Min: 1, Max: 3},
}, },
expectedError: "unable to validate empty groups against required ranges",
}, },
"empty groups": { "empty groups": {
ranges: []extensions.GroupIDRange{ ranges: []extensions.GroupIDRange{
{Min: 1, Max: 3}, {Min: 1, Max: 3},
}, },
expectedError: "unable to validate empty groups against required ranges",
}, },
"not in range": { "not in range": {
groups: []int64{5}, groups: []int64{5},
@ -128,34 +132,31 @@ func TestValidate(t *testing.T) {
{Min: 1, Max: 3}, {Min: 1, Max: 3},
{Min: 4, Max: 4}, {Min: 4, Max: 4},
}, },
expectedError: "group 5 must be in the ranges: [{1 3} {4 4}]",
}, },
"in range 1": { "in range 1": {
groups: []int64{2}, groups: []int64{2},
ranges: []extensions.GroupIDRange{ ranges: []extensions.GroupIDRange{
{Min: 1, Max: 3}, {Min: 1, Max: 3},
}, },
pass: true,
}, },
"in range boundary min": { "in range boundary min": {
groups: []int64{1}, groups: []int64{1},
ranges: []extensions.GroupIDRange{ ranges: []extensions.GroupIDRange{
{Min: 1, Max: 3}, {Min: 1, Max: 3},
}, },
pass: true,
}, },
"in range boundary max": { "in range boundary max": {
groups: []int64{3}, groups: []int64{3},
ranges: []extensions.GroupIDRange{ ranges: []extensions.GroupIDRange{
{Min: 1, Max: 3}, {Min: 1, Max: 3},
}, },
pass: true,
}, },
"singular range": { "singular range": {
groups: []int64{4}, groups: []int64{4},
ranges: []extensions.GroupIDRange{ ranges: []extensions.GroupIDRange{
{Min: 4, Max: 4}, {Min: 4, Max: 4},
}, },
pass: true,
}, },
} }
@ -165,11 +166,14 @@ func TestValidate(t *testing.T) {
t.Errorf("error creating strategy for %s: %v", k, err) t.Errorf("error creating strategy for %s: %v", k, err)
} }
errs := s.Validate(nil, v.groups) errs := s.Validate(nil, v.groups)
if v.pass && len(errs) > 0 { if v.expectedError == "" && len(errs) > 0 {
t.Errorf("unexpected errors for %s: %v", k, errs) t.Errorf("unexpected errors for %s: %v", k, errs)
} }
if !v.pass && len(errs) == 0 { if v.expectedError != "" && len(errs) == 0 {
t.Errorf("expected no errors for %s but got: %v", k, errs) t.Errorf("expected errors for %s but got: %v", k, errs)
}
if v.expectedError != "" && len(errs) > 0 && !strings.Contains(errs[0].Error(), v.expectedError) {
t.Errorf("expected error for %s: %v, but got: %v", k, v.expectedError, errs[0])
} }
} }
} }

View File

@ -291,7 +291,7 @@ func TestValidatePodSecurityContextFailures(t *testing.T) {
"failSupplementalGroupOutOfRange": { "failSupplementalGroupOutOfRange": {
pod: failSupplementalGroupPod, pod: failSupplementalGroupPod,
psp: failSupplementalGroupPSP, psp: failSupplementalGroupPSP,
expectedError: "999 is not an allowed group", expectedError: "group 999 must be in the ranges: [{1 1}]",
}, },
"failSupplementalGroupEmpty": { "failSupplementalGroupEmpty": {
pod: defaultPod(), pod: defaultPod(),
@ -301,7 +301,7 @@ func TestValidatePodSecurityContextFailures(t *testing.T) {
"failFSGroupOutOfRange": { "failFSGroupOutOfRange": {
pod: failFSGroupPod, pod: failFSGroupPod,
psp: failFSGroupPSP, psp: failFSGroupPSP,
expectedError: "999 is not an allowed group", expectedError: "group 999 must be in the ranges: [{1 1}]",
}, },
"failFSGroupEmpty": { "failFSGroupEmpty": {
pod: defaultPod(), pod: defaultPod(),