@@ -20,7 +20,8 @@ import (
20
20
"reflect"
21
21
"testing"
22
22
23
- "k8s.io/api/core/v1"
23
+ v1 "k8s.io/api/core/v1"
24
+ utilptr "k8s.io/utils/pointer"
24
25
)
25
26
26
27
func TestAddNoNewPrivileges (t * testing.T ) {
@@ -120,3 +121,92 @@ func TestConvertToRuntimeReadonlyPaths(t *testing.T) {
120
121
}
121
122
}
122
123
}
124
+
125
+ func TestDetermineEffectiveRunAsUser (t * testing.T ) {
126
+ tests := []struct {
127
+ desc string
128
+ pod * v1.Pod
129
+ container * v1.Container
130
+ wantRunAsUser * int64
131
+ }{
132
+ {
133
+ desc : "no securityContext in pod, no securityContext in container" ,
134
+ pod : & v1.Pod {
135
+ Spec : v1.PodSpec {},
136
+ },
137
+ container : & v1.Container {},
138
+ wantRunAsUser : nil ,
139
+ },
140
+ {
141
+ desc : "no runAsUser in pod, no runAsUser in container" ,
142
+ pod : & v1.Pod {
143
+ Spec : v1.PodSpec {
144
+ SecurityContext : & v1.PodSecurityContext {},
145
+ },
146
+ },
147
+ container : & v1.Container {
148
+ SecurityContext : & v1.SecurityContext {},
149
+ },
150
+ wantRunAsUser : nil ,
151
+ },
152
+ {
153
+ desc : "runAsUser in pod, no runAsUser in container" ,
154
+ pod : & v1.Pod {
155
+ Spec : v1.PodSpec {
156
+ SecurityContext : & v1.PodSecurityContext {
157
+ RunAsUser : new (int64 ),
158
+ },
159
+ },
160
+ },
161
+ container : & v1.Container {
162
+ SecurityContext : & v1.SecurityContext {},
163
+ },
164
+ wantRunAsUser : new (int64 ),
165
+ },
166
+ {
167
+ desc : "no runAsUser in pod, runAsUser in container" ,
168
+ pod : & v1.Pod {
169
+ Spec : v1.PodSpec {
170
+ SecurityContext : & v1.PodSecurityContext {},
171
+ },
172
+ },
173
+ container : & v1.Container {
174
+ SecurityContext : & v1.SecurityContext {
175
+ RunAsUser : new (int64 ),
176
+ },
177
+ },
178
+ wantRunAsUser : new (int64 ),
179
+ },
180
+ {
181
+ desc : "no runAsUser in pod, runAsUser in container" ,
182
+ pod : & v1.Pod {
183
+ Spec : v1.PodSpec {
184
+ SecurityContext : & v1.PodSecurityContext {
185
+ RunAsUser : new (int64 ),
186
+ },
187
+ },
188
+ },
189
+ container : & v1.Container {
190
+ SecurityContext : & v1.SecurityContext {
191
+ RunAsUser : utilptr .Int64Ptr (1 ),
192
+ },
193
+ },
194
+ wantRunAsUser : utilptr .Int64Ptr (1 ),
195
+ },
196
+ }
197
+
198
+ for _ , test := range tests {
199
+ t .Run (test .desc , func (t * testing.T ) {
200
+ runAsUser , ok := DetermineEffectiveRunAsUser (test .pod , test .container )
201
+ if ! ok && test .wantRunAsUser != nil {
202
+ t .Errorf ("DetermineEffectiveRunAsUser(%v, %v) = %v, want %d" , test .pod , test .container , runAsUser , * test .wantRunAsUser )
203
+ }
204
+ if ok && test .wantRunAsUser == nil {
205
+ t .Errorf ("DetermineEffectiveRunAsUser(%v, %v) = %d, want %v" , test .pod , test .container , * runAsUser , test .wantRunAsUser )
206
+ }
207
+ if ok && test .wantRunAsUser != nil && * runAsUser != * test .wantRunAsUser {
208
+ t .Errorf ("DetermineEffectiveRunAsUser(%v, %v) = %d, want %d" , test .pod , test .container , * runAsUser , * test .wantRunAsUser )
209
+ }
210
+ })
211
+ }
212
+ }
0 commit comments