@@ -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\n chpasswd:\n expire: false\n password: abcd-1234-ef56\n ssh_authorized_keys:\n - |\n ssh-rsa PcHUNFXhysGvTnvORVbR70EVZA test@host-operator\n user: 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\n chpasswd:\n expire: false\n password: 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 \n chpasswd: \n expire: false \n password: abcd-1234-ef56 \n user: cloud-user \n " ,
218+ "userData" : userData ,
195219 },
196220 "name" : "cloudinitdisk" ,
197221 }
0 commit comments