@@ -77,24 +77,25 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
77
77
},
78
78
}
79
79
portOptsWithAdditionalSecurityGroup := []infrav1.PortOpts {
80
- {
81
- Network : & infrav1.NetworkParam {
82
- ID : ptr .To (openStackCluster .Status .Network .ID ),
83
- },
84
- SecurityGroups : []infrav1.SecurityGroupParam {
85
- {
86
- ID : ptr .To (extraSecurityGroupUUID ),
87
- },
88
- },
89
- },
90
- }
80
+ {
81
+ Network : & infrav1.NetworkParam {
82
+ ID : ptr .To (openStackCluster .Status .Network .ID ),
83
+ },
84
+ SecurityGroups : []infrav1.SecurityGroupParam {
85
+ {
86
+ ID : ptr .To (extraSecurityGroupUUID ),
87
+ },
88
+ },
89
+ },
90
+ }
91
91
image := infrav1.ImageParam {Filter : & infrav1.ImageFilter {Name : ptr .To ("my-image" )}}
92
92
tags := []string {"tag1" , "tag2" }
93
93
userData := & corev1.LocalObjectReference {Name : "server-data-secret" }
94
94
tests := []struct {
95
- name string
96
- spec * infrav1.OpenStackMachineSpec
97
- want * infrav1alpha1.OpenStackServerSpec
95
+ name string
96
+ spec * infrav1.OpenStackMachineSpec
97
+ want * infrav1alpha1.OpenStackServerSpec
98
+ wantErr bool
98
99
}{
99
100
{
100
101
name : "Test a minimum OpenStackMachineSpec to OpenStackServerSpec conversion" ,
@@ -155,68 +156,115 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
155
156
},
156
157
},
157
158
{
158
- name : "Test an OpenStackMachineSpec to OpenStackServerSpec conversion with flavorID specified but not flavor" ,
159
- spec : & infrav1.OpenStackMachineSpec {
160
- FlavorID : ptr .To (flavorUUID ),
161
- Image : image ,
162
- SSHKeyName : sshKeyName ,
163
- },
164
- want : & infrav1alpha1.OpenStackServerSpec {
165
- FlavorID : ptr .To (flavorUUID ),
166
- IdentityRef : identityRef ,
167
- Image : image ,
168
- SSHKeyName : sshKeyName ,
169
- Ports : portOpts ,
170
- Tags : tags ,
171
- UserDataRef : userData ,
172
- },
173
- },
174
- {
175
- name : "Cluster network nil, machine defines port network and overrides SG" ,
176
- spec : & infrav1.OpenStackMachineSpec {
177
- Ports : []infrav1.PortOpts {{
178
- Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
179
- }},
180
- SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (extraSecurityGroupUUID )}},
181
- },
182
- want : & infrav1alpha1.OpenStackServerSpec {
183
- IdentityRef : identityRef ,
184
- Ports : []infrav1.PortOpts {{
185
- Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
186
- SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (extraSecurityGroupUUID )}},
187
- }},
188
- Tags : tags ,
189
- UserDataRef : userData ,
190
- },
191
- },
192
- {
193
- name : "Cluster network nil, machine defines port network and falls back to cluster SG" ,
194
- spec : & infrav1.OpenStackMachineSpec {
195
- Ports : []infrav1.PortOpts {{
196
- Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
197
- }},
198
- },
199
- want : & infrav1alpha1.OpenStackServerSpec {
200
- IdentityRef : identityRef ,
201
- Ports : []infrav1.PortOpts {{
202
- Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
203
- SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (workerSecurityGroupUUID )}},
204
- }},
205
- Tags : tags ,
206
- UserDataRef : userData ,
207
- },
208
- },
159
+ name : "Test an OpenStackMachineSpec to OpenStackServerSpec conversion with flavorID specified but not flavor" ,
160
+ spec : & infrav1.OpenStackMachineSpec {
161
+ FlavorID : ptr .To (flavorUUID ),
162
+ Image : image ,
163
+ SSHKeyName : sshKeyName ,
164
+ },
165
+ want : & infrav1alpha1.OpenStackServerSpec {
166
+ FlavorID : ptr .To (flavorUUID ),
167
+ IdentityRef : identityRef ,
168
+ Image : image ,
169
+ SSHKeyName : sshKeyName ,
170
+ Ports : portOpts ,
171
+ Tags : tags ,
172
+ UserDataRef : userData ,
173
+ },
174
+ },
175
+ {
176
+ name : "Cluster network nil, machine defines port network and overrides SG" ,
177
+ spec : & infrav1.OpenStackMachineSpec {
178
+ Ports : []infrav1.PortOpts {{
179
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
180
+ }},
181
+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (extraSecurityGroupUUID )}},
182
+ },
183
+ want : & infrav1alpha1.OpenStackServerSpec {
184
+ IdentityRef : identityRef ,
185
+ Ports : []infrav1.PortOpts {{
186
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
187
+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (extraSecurityGroupUUID )}},
188
+ }},
189
+ Tags : tags ,
190
+ UserDataRef : userData ,
191
+ },
192
+ },
193
+ {
194
+ name : "Cluster network nil, machine defines port network and falls back to cluster SG" ,
195
+ spec : & infrav1.OpenStackMachineSpec {
196
+ Ports : []infrav1.PortOpts {{
197
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
198
+ }},
199
+ },
200
+ want : & infrav1alpha1.OpenStackServerSpec {
201
+ IdentityRef : identityRef ,
202
+ Ports : []infrav1.PortOpts {{
203
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
204
+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (workerSecurityGroupUUID )}},
205
+ }},
206
+ Tags : tags ,
207
+ UserDataRef : userData ,
208
+ },
209
+ },
210
+ {
211
+ name : "Error case: no cluster network and no machine ports" ,
212
+ spec : & infrav1.OpenStackMachineSpec {
213
+ Flavor : ptr .To (flavorName ),
214
+ Image : image ,
215
+ SSHKeyName : sshKeyName ,
216
+ // No ports defined
217
+ },
218
+ want : nil ,
219
+ wantErr : true ,
220
+ },
221
+ {
222
+ name : "Empty cluster network ID, machine defines explicit ports" ,
223
+ spec : & infrav1.OpenStackMachineSpec {
224
+ Flavor : ptr .To (flavorName ),
225
+ Image : image ,
226
+ Ports : []infrav1.PortOpts {{
227
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
228
+ }},
229
+ },
230
+ want : & infrav1alpha1.OpenStackServerSpec {
231
+ Flavor : ptr .To (flavorName ),
232
+ IdentityRef : identityRef ,
233
+ Image : image ,
234
+ Ports : []infrav1.PortOpts {{
235
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
236
+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (workerSecurityGroupUUID )}},
237
+ }},
238
+ Tags : tags ,
239
+ UserDataRef : userData ,
240
+ },
241
+ },
209
242
}
210
243
for i := range tests {
211
244
tt := tests [i ]
212
245
t .Run (tt .name , func (t * testing.T ) {
213
- defaultNetID := ""
214
- if openStackCluster .Status .Network != nil {
215
- defaultNetID = openStackCluster .Status .Network .ID
246
+ // Handle special test cases
247
+ var clusterNetwork * infrav1.NetworkStatusWithSubnets
248
+ switch {
249
+ case tt .wantErr && tt .name == "Error case: no cluster network and no machine ports" :
250
+ clusterNetwork = nil // Simulate nil cluster network for HCP scenario
251
+ case tt .name == "Empty cluster network ID, machine defines explicit ports" :
252
+ // Create a cluster network with empty ID
253
+ clusterNetwork = & infrav1.NetworkStatusWithSubnets {
254
+ NetworkStatus : infrav1.NetworkStatus {
255
+ ID : "" , // Empty network ID
256
+ },
257
+ }
258
+ default :
259
+ clusterNetwork = openStackCluster .Status .Network
216
260
}
217
261
218
- spec := openStackMachineSpecToOpenStackServerSpec (tt .spec , identityRef , tags , "" , userData , & openStackCluster .Status .WorkerSecurityGroup .ID , defaultNetID )
219
- if ! reflect .DeepEqual (spec , tt .want ) {
262
+ spec , err := openStackMachineSpecToOpenStackServerSpec (tt .spec , identityRef , tags , "" , userData , & openStackCluster .Status .WorkerSecurityGroup .ID , clusterNetwork )
263
+ if (err != nil ) != tt .wantErr {
264
+ t .Errorf ("openStackMachineSpecToOpenStackServerSpec() error = %v, wantErr %v" , err , tt .wantErr )
265
+ return
266
+ }
267
+ if ! tt .wantErr && ! reflect .DeepEqual (spec , tt .want ) {
220
268
t .Errorf ("openStackMachineSpecToOpenStackServerSpec() got = %+v, want %+v" , spec , tt .want )
221
269
}
222
270
})
0 commit comments