Skip to content

Commit 97cf9ce

Browse files
authored
test required VM user (#1257)
1 parent 9ea623c commit 97cf9ce

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

test/e2e/parallel/vm_webhook_test.go

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,31 +38,40 @@ func TestCreateVirtualMachine(t *testing.T) {
3838
for tcname, tc := range map[string]struct {
3939
vmName string
4040
domain map[string]interface{}
41-
cloudInitType string
41+
cloudInitVolume map[string]interface{}
4242
expectedMemoryLimit string
4343
expectedCPULimit string
44+
expectedError string
4445
}{
4546
"vm-cloudInitNoCloud-domain-resource-requests": {
4647
vmName: "cloudinit-nocloud-domain-resources-req",
4748
domain: domainWithResourceRequests("2Gi", "1"),
48-
cloudInitType: cloudInitNoCloud,
49+
cloudInitVolume: cloudInitVolume(cloudInitNoCloud, true),
4950
expectedMemoryLimit: "2Gi",
5051
expectedCPULimit: "1",
5152
},
5253
"vm-cloudInitConfigDrive-domain-resource-requests": {
5354
vmName: "cloudinit-configdrive-domain-resources-req",
5455
domain: domainWithResourceRequests("3Gi", "2"),
55-
cloudInitType: cloudInitConfigDrive,
56+
cloudInitVolume: cloudInitVolume(cloudInitConfigDrive, true),
5657
expectedMemoryLimit: "3Gi",
5758
expectedCPULimit: "2",
5859
},
5960
"vm-domain-memory-guest": {
6061
vmName: "domain-memory-guest",
6162
domain: domainWithMemoryGuest("4Gi"),
62-
cloudInitType: cloudInitNoCloud,
63+
cloudInitVolume: cloudInitVolume(cloudInitNoCloud, true),
6364
expectedMemoryLimit: "4Gi",
6465
expectedCPULimit: "",
6566
},
67+
"vm-without-user": {
68+
vmName: "vm-without-user",
69+
domain: domainWithResourceRequests("1Gi", "1"),
70+
cloudInitVolume: cloudInitVolume(cloudInitNoCloud, false),
71+
expectedMemoryLimit: "1Gi",
72+
expectedCPULimit: "1",
73+
expectedError: "this is a Dev Sandbox enforced restriction. A user must be configured in either the cloudInitNoCloud or cloudInitConfigDrive volume.",
74+
},
6675
} {
6776
t.Run(tcname, func(t *testing.T) {
6877
// create a user for each scenario to avoid vm quota limit
@@ -81,13 +90,17 @@ func TestCreateVirtualMachine(t *testing.T) {
8190
userCounter++
8291

8392
// given
84-
vm := vmResourceWithRequestsAndCloudInitVolume(tc.vmName, tc.domain, cloudInitVolume(tc.cloudInitType))
93+
vm := vmResourceWithRequestsAndCloudInitVolume(tc.vmName, tc.domain, tc.cloudInitVolume)
8594

8695
// when
8796
// create VM
8897
_, err := client.Resource(vmRes).Namespace(vmNamespace).Create(context.TODO(), vm, metav1.CreateOptions{})
8998

9099
// then
100+
if tc.expectedError != "" {
101+
require.ErrorContains(t, err, tc.expectedError)
102+
return
103+
}
91104
// verify no error creating VM
92105
require.NoError(t, err)
93106

@@ -123,7 +136,14 @@ func TestCreateVirtualMachine(t *testing.T) {
123136
require.Equal(t, "Exists", tol["operator"])
124137

125138
// verify cloud-init user data
126-
userData, userDataFound, userDataErr := unstructured.NestedString(volumes[0].(map[string]interface{}), tc.cloudInitType, "userData")
139+
var cloudInitType string
140+
for k := range tc.cloudInitVolume {
141+
if k != "name" {
142+
cloudInitType = k
143+
break
144+
}
145+
}
146+
userData, userDataFound, userDataErr := unstructured.NestedString(volumes[0].(map[string]interface{}), cloudInitType, "userData")
127147
require.NoError(t, userDataErr)
128148
require.True(t, userDataFound, "user data not found")
129149
require.Equal(t, "#cloud-config\nchpasswd:\n expire: false\npassword: abcd-1234-ef56\nssh_authorized_keys:\n- |\n ssh-rsa PcHUNFXhysGvTnvORVbR70EVZA test@host-operator\nuser: cloud-user\n", userData)
@@ -188,10 +208,14 @@ func domainWithResourceRequests(mem, cpu string) map[string]interface{} {
188208
}
189209
}
190210

191-
func cloudInitVolume(cloudInitType string) map[string]interface{} {
211+
func cloudInitVolume(cloudInitType string, withUser bool) map[string]interface{} {
212+
userData := "#cloud-config\nchpasswd:\n expire: false\npassword: abcd-1234-ef56\n"
213+
if withUser {
214+
userData += "user: cloud-user\n"
215+
}
192216
return map[string]interface{}{
193217
cloudInitType: map[string]interface{}{
194-
"userData": "#cloud-config\nchpasswd:\n expire: false\npassword: abcd-1234-ef56\nuser: cloud-user\n",
218+
"userData": userData,
195219
},
196220
"name": "cloudinitdisk",
197221
}

testsupport/wait/member.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2451,7 +2451,7 @@ func (a *MemberAwaitility) verifyValidatingWebhookConfig(t *testing.T, ca []byte
24512451
require.Len(t, vmrequestWebhook.Rules, 1)
24522452

24532453
vmrequestRule := vmrequestWebhook.Rules[0]
2454-
assert.Equal(t, []admv1.OperationType{admv1.Update}, vmrequestRule.Operations)
2454+
assert.Equal(t, []admv1.OperationType{admv1.Create, admv1.Update}, vmrequestRule.Operations)
24552455
assert.Equal(t, []string{"kubevirt.io"}, vmrequestRule.APIGroups)
24562456
assert.Equal(t, []string{"*"}, vmrequestRule.APIVersions)
24572457
assert.Equal(t, []string{"virtualmachines"}, vmrequestRule.Resources)

0 commit comments

Comments
 (0)