Skip to content

Commit cdbfbde

Browse files
Add ut coverage for capabilities.Setup (kubernetes#125395)
* Add ut coverage for capabilities.Setup * Update pkg/capabilities/capabilities_test.go Co-authored-by: Ed Bartosh <[email protected]> * Add ut coverage for capabilities.Setup Signed-off-by: robert-cronin <[email protected]> --------- Signed-off-by: robert-cronin <[email protected]> Co-authored-by: Ed Bartosh <[email protected]>
1 parent 4cf9bff commit cdbfbde

File tree

4 files changed

+66
-21
lines changed

4 files changed

+66
-21
lines changed

pkg/apis/core/validation/validation_test.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8323,7 +8323,8 @@ func TestValidateLinuxPodSecurityContext(t *testing.T) {
83238323

83248324
func TestValidateContainers(t *testing.T) {
83258325
volumeDevices := make(map[string]core.VolumeSource)
8326-
capabilities.SetForTests(capabilities.Capabilities{
8326+
capabilities.ResetForTest()
8327+
capabilities.Initialize(capabilities.Capabilities{
83278328
AllowPrivileged: true,
83288329
})
83298330

@@ -8526,7 +8527,8 @@ func TestValidateContainers(t *testing.T) {
85268527
t.Errorf("expected success: %v", errs)
85278528
}
85288529

8529-
capabilities.SetForTests(capabilities.Capabilities{
8530+
capabilities.ResetForTest()
8531+
capabilities.Initialize(capabilities.Capabilities{
85308532
AllowPrivileged: false,
85318533
})
85328534
errorCases := []struct {
@@ -9151,7 +9153,8 @@ func TestValidateContainers(t *testing.T) {
91519153

91529154
func TestValidateInitContainers(t *testing.T) {
91539155
volumeDevices := make(map[string]core.VolumeSource)
9154-
capabilities.SetForTests(capabilities.Capabilities{
9156+
capabilities.ResetForTest()
9157+
capabilities.Initialize(capabilities.Capabilities{
91559158
AllowPrivileged: true,
91569159
})
91579160

@@ -9229,7 +9232,8 @@ func TestValidateInitContainers(t *testing.T) {
92299232
t.Errorf("expected success: %v", errs)
92309233
}
92319234

9232-
capabilities.SetForTests(capabilities.Capabilities{
9235+
capabilities.ResetForTest()
9236+
capabilities.Initialize(capabilities.Capabilities{
92339237
AllowPrivileged: false,
92349238
})
92359239
errorCases := []struct {
@@ -14508,7 +14512,8 @@ func TestValidatePodEphemeralContainersUpdate(t *testing.T) {
1450814512

1450914513
// Some tests use Windows host pods as an example of fields that might
1451014514
// conflict between an ephemeral container and the rest of the pod.
14511-
capabilities.SetForTests(capabilities.Capabilities{
14515+
capabilities.ResetForTest()
14516+
capabilities.Initialize(capabilities.Capabilities{
1451214517
AllowPrivileged: true,
1451314518
})
1451414519
makeWindowsHostPod := func(ephemeralContainers []core.EphemeralContainer) *core.Pod {
@@ -20996,7 +21001,8 @@ func TestValidateSecurityContext(t *testing.T) {
2099621001
},
2099721002
}
2099821003
for k, v := range errorCases {
20999-
capabilities.SetForTests(capabilities.Capabilities{
21004+
capabilities.ResetForTest()
21005+
capabilities.Initialize(capabilities.Capabilities{
2100021006
AllowPrivileged: v.capAllowPriv,
2100121007
})
2100221008
// note the unconditional `true` here for hostUsers. The failure case to test for ProcMount only includes it being true,
@@ -23649,8 +23655,8 @@ func TestValidateWindowsHostProcessPod(t *testing.T) {
2364923655

2365023656
for _, testCase := range testCases {
2365123657
t.Run(testCase.name, func(t *testing.T) {
23652-
23653-
capabilities.SetForTests(capabilities.Capabilities{
23658+
capabilities.ResetForTest()
23659+
capabilities.Initialize(capabilities.Capabilities{
2365423660
AllowPrivileged: testCase.allowPrivileged,
2365523661
})
2365623662

pkg/capabilities/capabilities.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,13 @@ func Setup(allowPrivileged bool, perConnectionBytesPerSec int64) {
6868
})
6969
}
7070

71-
// SetForTests sets capabilities for tests. Convenience method for testing. This should only be called from tests.
72-
func SetForTests(c Capabilities) {
71+
// ResetForTest resets the capabilities to a given state for testing purposes.
72+
// This function should only be called from tests.
73+
func ResetForTest() {
7374
capInstance.lock.Lock()
7475
defer capInstance.lock.Unlock()
75-
capInstance.capabilities = &c
76+
capInstance.capabilities = nil
77+
capInstance.once = sync.Once{}
7678
}
7779

7880
// Get returns a read-only copy of the system capabilities.

pkg/capabilities/capabilities_test.go

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,11 @@ package capabilities
1818

1919
import (
2020
"reflect"
21-
"sync"
2221
"testing"
2322
)
2423

2524
func TestGet(t *testing.T) {
26-
defer func() {
27-
capInstance.lock.Lock()
28-
defer capInstance.lock.Unlock()
29-
capInstance.capabilities = nil
30-
capInstance.once = sync.Once{}
31-
}()
25+
defer ResetForTest()
3226
defaultCap := Capabilities{
3327
AllowPrivileged: false,
3428
PrivilegedSources: PrivilegedSources{
@@ -48,10 +42,51 @@ func TestGet(t *testing.T) {
4842
HostNetworkSources: []string{"A", "B"},
4943
},
5044
}
51-
SetForTests(cap)
45+
ResetForTest()
46+
Initialize(cap)
5247

5348
res = Get()
5449
if !reflect.DeepEqual(cap, res) {
5550
t.Fatalf("expected Capabilities: %#v , got a different: %#v", cap, res)
5651
}
5752
}
53+
func TestSetup(t *testing.T) {
54+
defer ResetForTest()
55+
testCases := []struct {
56+
name string
57+
allowPrivileged bool
58+
perConnectionBytesPerSec int64
59+
expectedCapabilities Capabilities
60+
}{
61+
{
62+
name: "AllowPrivileged true with bandwidth limit",
63+
allowPrivileged: true,
64+
perConnectionBytesPerSec: 1024,
65+
expectedCapabilities: Capabilities{
66+
AllowPrivileged: true,
67+
PerConnectionBandwidthLimitBytesPerSec: 1024,
68+
},
69+
},
70+
{
71+
name: "AllowPrivileged false with higher bandwidth limit",
72+
allowPrivileged: false,
73+
perConnectionBytesPerSec: 2048,
74+
expectedCapabilities: Capabilities{
75+
AllowPrivileged: false,
76+
PerConnectionBandwidthLimitBytesPerSec: 2048,
77+
},
78+
},
79+
}
80+
81+
for _, tc := range testCases {
82+
t.Run(tc.name, func(t *testing.T) {
83+
ResetForTest()
84+
85+
Setup(tc.allowPrivileged, tc.perConnectionBytesPerSec)
86+
res := Get()
87+
if !reflect.DeepEqual(tc.expectedCapabilities, res) {
88+
t.Fatalf("expected Capabilities: %#v, got: %#v", tc.expectedCapabilities, res)
89+
}
90+
})
91+
}
92+
}

test/integration/auth/podsecurity_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,8 @@ func TestPodSecurityWebhook(t *testing.T) {
102102
featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.UserNamespacesSupport, true)
103103

104104
// Start test API server.
105-
capabilities.SetForTests(capabilities.Capabilities{AllowPrivileged: true})
105+
capabilities.ResetForTest()
106+
capabilities.Initialize(capabilities.Capabilities{AllowPrivileged: true})
106107
testServer := kubeapiservertesting.StartTestServerOrDie(t, kubeapiservertesting.NewDefaultTestServerOptions(), []string{
107108
"--anonymous-auth=false",
108109
"--allow-privileged=true",
@@ -136,7 +137,8 @@ func TestPodSecurityWebhook(t *testing.T) {
136137

137138
func startPodSecurityServer(t *testing.T) *kubeapiservertesting.TestServer {
138139
// ensure the global is set to allow privileged containers
139-
capabilities.SetForTests(capabilities.Capabilities{AllowPrivileged: true})
140+
capabilities.ResetForTest()
141+
capabilities.Initialize(capabilities.Capabilities{AllowPrivileged: true})
140142

141143
server := kubeapiservertesting.StartTestServerOrDie(t, kubeapiservertesting.NewDefaultTestServerOptions(), []string{
142144
"--anonymous-auth=false",

0 commit comments

Comments
 (0)