Skip to content

Commit

Permalink
Add unit tests for RunAsUser.MustRunAsRange strategy.
Browse files Browse the repository at this point in the history
  • Loading branch information
php-coder committed Dec 18, 2017
1 parent 3d4c343 commit d07223b
Showing 1 changed file with 102 additions and 0 deletions.
102 changes: 102 additions & 0 deletions pkg/security/securitycontextconstraints/user/mustrunasrange_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package user

import (
"fmt"
"strings"
"testing"

securityapi "github.com/openshift/origin/pkg/security/apis/security"
)

func TestMustRunAsRangeOptions(t *testing.T) {
var uid int64 = 1
tests := map[string]struct {
opts *securityapi.RunAsUserStrategyOptions
pass bool
}{
"invalid opts, required min and max": {
opts: &securityapi.RunAsUserStrategyOptions{},
pass: false,
},
"invalid opts, required max": {
opts: &securityapi.RunAsUserStrategyOptions{UIDRangeMin: &uid},
pass: false,
},
"invalid opts, required min": {
opts: &securityapi.RunAsUserStrategyOptions{UIDRangeMax: &uid},
pass: false,
},
"valid opts": {
opts: &securityapi.RunAsUserStrategyOptions{UIDRangeMin: &uid, UIDRangeMax: &uid},
pass: true,
},
}
for name, tc := range tests {
_, err := NewMustRunAsRange(tc.opts)
if err != nil && tc.pass {
t.Errorf("%s expected to pass but received error %v", name, err)
}
if err == nil && !tc.pass {
t.Errorf("%s expected to fail but did not receive an error", name)
}
}
}

func TestMustRunAsRangeGenerate(t *testing.T) {
var uidMin int64 = 1
var uidMax int64 = 10
opts := &securityapi.RunAsUserStrategyOptions{UIDRangeMin: &uidMin, UIDRangeMax: &uidMax}
mustRunAsRange, err := NewMustRunAsRange(opts)
if err != nil {
t.Fatalf("unexpected error initializing NewMustRunAsRange %v", err)
}
generated, err := mustRunAsRange.Generate(nil, nil)
if err != nil {
t.Fatalf("unexpected error generating uid %v", err)
}
if *generated != uidMin {
t.Errorf("generated uid does not equal expected uid")
}
}

func TestMustRunAsRangeValidate(t *testing.T) {
var uidMin int64 = 1
var uidMax int64 = 10
opts := &securityapi.RunAsUserStrategyOptions{UIDRangeMin: &uidMin, UIDRangeMax: &uidMax}
mustRunAsRange, err := NewMustRunAsRange(opts)
if err != nil {
t.Fatalf("unexpected error initializing NewMustRunAsRange %v", err)
}

errs := mustRunAsRange.Validate(nil, nil, nil, nil, nil)
expectedMessage := "runAsUser: Required value"
if len(errs) == 0 {
t.Errorf("expected errors from nil runAsUser but got none")
} else if !strings.Contains(errs[0].Error(), expectedMessage) {
t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs)
}

var lowUid int64 = 0
errs = mustRunAsRange.Validate(nil, nil, nil, nil, &lowUid)
expectedMessage = fmt.Sprintf("runAsUser: Invalid value: %d: must be in the ranges: [%d, %d]", lowUid, uidMin, uidMax)
if len(errs) == 0 {
t.Errorf("expected errors from mismatch uid but got none")
} else if !strings.Contains(errs[0].Error(), expectedMessage) {
t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs)
}

var highUid int64 = 11
errs = mustRunAsRange.Validate(nil, nil, nil, nil, &highUid)
expectedMessage = fmt.Sprintf("runAsUser: Invalid value: %d: must be in the ranges: [%d, %d]", highUid, uidMin, uidMax)
if len(errs) == 0 {
t.Errorf("expected errors from mismatch uid but got none")
} else if !strings.Contains(errs[0].Error(), expectedMessage) {
t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs)
}

var goodUid int64 = 5
errs = mustRunAsRange.Validate(nil, nil, nil, nil, &goodUid)
if len(errs) != 0 {
t.Errorf("expected no errors from matching uid but got %v", errs)
}
}

0 comments on commit d07223b

Please sign in to comment.