@@ -66,6 +66,8 @@ var _ = Describe("OpenStack Fuzz (mapi2capi)", func() {
6666 return capi2mapi .FromMachineAndOpenStackMachineAndOpenStackCluster (machine , openstackMachine , openstackCluster )
6767 }
6868
69+ f := & openstackProviderFuzzer {}
70+
6971 conversiontest .MAPI2CAPIMachineRoundTripFuzzTest (
7072 scheme ,
7173 infra ,
@@ -74,7 +76,7 @@ var _ = Describe("OpenStack Fuzz (mapi2capi)", func() {
7476 fromMachineAndOpenStackMachineAndOpenStackCluster ,
7577 conversiontest .ObjectMetaFuzzerFuncs (mapiNamespace ),
7678 conversiontest .MAPIMachineFuzzerFuncs (& mapiv1alpha1.OpenstackProviderSpec {}, nil , openstackProviderIDFuzzer ),
77- openstackProviderSpecFuzzerFuncs ,
79+ f . FuzzerFuncsMachine ,
7880 )
7981 })
8082
@@ -89,6 +91,8 @@ var _ = Describe("OpenStack Fuzz (mapi2capi)", func() {
8991 return capi2mapi .FromMachineSetAndOpenStackMachineTemplateAndOpenStackCluster (machineSet , openstackMachineTemplate , openstackCluster )
9092 }
9193
94+ f := & openstackProviderFuzzer {}
95+
9296 conversiontest .MAPI2CAPIMachineSetRoundTripFuzzTest (
9397 scheme ,
9498 infra ,
@@ -98,7 +102,7 @@ var _ = Describe("OpenStack Fuzz (mapi2capi)", func() {
98102 conversiontest .ObjectMetaFuzzerFuncs (mapiNamespace ),
99103 conversiontest .MAPIMachineFuzzerFuncs (& mapiv1alpha1.OpenstackProviderSpec {}, nil , openstackProviderIDFuzzer ),
100104 conversiontest .MAPIMachineSetFuzzerFuncs (),
101- openstackProviderSpecFuzzerFuncs ,
105+ f . FuzzerFuncsMachineSet ,
102106 )
103107 })
104108})
@@ -107,8 +111,62 @@ func openstackProviderIDFuzzer(c randfill.Continue) string {
107111 return "openstack://" + uuid .NewString ()
108112}
109113
114+ type openstackProviderFuzzer struct {
115+ conversiontest.MAPIMachineFuzzer
116+ }
117+
118+ func (f * openstackProviderFuzzer ) fuzzProviderSpec (providerSpec * mapiv1alpha1.OpenstackProviderSpec , c randfill.Continue ) {
119+ c .FillNoCustom (providerSpec )
120+
121+ // The type meta is always set to these values by the conversion.
122+ providerSpec .APIVersion = mapiv1alpha1 .GroupVersion .String ()
123+ providerSpec .Kind = openstackProviderSpecKind
124+
125+ // Clear fields that are not supported in the provider spec.
126+ providerSpec .ObjectMeta = metav1.ObjectMeta {}
127+ providerSpec .FloatingIP = ""
128+ providerSpec .PrimarySubnet = ""
129+ providerSpec .SshUserName = ""
130+
131+ // Clear namespace fields, since these are intentionally not copied
132+ if providerSpec .UserDataSecret != nil {
133+ providerSpec .UserDataSecret .Namespace = ""
134+ }
135+
136+ if providerSpec .CloudsSecret != nil {
137+ providerSpec .CloudsSecret .Namespace = ""
138+
139+ if providerSpec .CloudsSecret .Name == "" {
140+ providerSpec .CloudsSecret = nil
141+ }
142+ }
143+
144+ // Clear fields that depend on other, unset fields or cannot coexist
145+ if providerSpec .CloudsSecret == nil {
146+ providerSpec .CloudName = ""
147+ }
148+
149+ switch c .Int31n (2 ) {
150+ case 0 :
151+ providerSpec .ServerGroupID = uuid .NewString ()
152+ providerSpec .ServerGroupName = ""
153+ case 1 :
154+ providerSpec .ServerGroupID = ""
155+ providerSpec .ServerGroupName = uuid .NewString ()
156+ }
157+
158+ // Clear pointers to empty structs.
159+ if providerSpec .UserDataSecret != nil && providerSpec .UserDataSecret .Name == "" {
160+ providerSpec .UserDataSecret = nil
161+ }
162+
163+ // Copy instance-type, region and zone to the struct so they can be set at the machine labels too.
164+ f .MAPIMachineFuzzer .InstanceType = providerSpec .Flavor
165+ f .MAPIMachineFuzzer .Zone = providerSpec .AvailabilityZone
166+ }
167+
110168//nolint:funlen
111- func openstackProviderSpecFuzzerFuncs (codecs runtimeserializer.CodecFactory ) []any {
169+ func ( f * openstackProviderFuzzer ) FuzzerFuncsMachineSet (codecs runtimeserializer.CodecFactory ) []any {
112170 return []any {
113171 func (bdm * mapiv1alpha1.BlockDeviceStorage , c randfill.Continue ) {
114172 switch c .Int31n (2 ) {
@@ -194,54 +252,17 @@ func openstackProviderSpecFuzzerFuncs(codecs runtimeserializer.CodecFactory) []a
194252 securityGroup .Filter .NotTagsAny = generateFakeTags ()
195253 }
196254 },
197- func (providerSpec * mapiv1alpha1.OpenstackProviderSpec , c randfill.Continue ) {
198- c .FillNoCustom (providerSpec )
199-
200- // The type meta is always set to these values by the conversion.
201- providerSpec .APIVersion = mapiv1alpha1 .GroupVersion .String ()
202- providerSpec .Kind = openstackProviderSpecKind
203-
204- // Clear fields that are not supported in the provider spec.
205- providerSpec .ObjectMeta = metav1.ObjectMeta {}
206- providerSpec .FloatingIP = ""
207- providerSpec .PrimarySubnet = ""
208- providerSpec .SshUserName = ""
209-
210- // Clear namespace fields, since these are intentionally not copied
211- if providerSpec .UserDataSecret != nil {
212- providerSpec .UserDataSecret .Namespace = ""
213- }
214-
215- if providerSpec .CloudsSecret != nil {
216- providerSpec .CloudsSecret .Namespace = ""
217-
218- if providerSpec .CloudsSecret .Name == "" {
219- providerSpec .CloudsSecret = nil
220- }
221- }
222-
223- // Clear fields that depend on other, unset fields or cannot coexist
224- if providerSpec .CloudsSecret == nil {
225- providerSpec .CloudName = ""
226- }
227-
228- switch c .Int31n (2 ) {
229- case 0 :
230- providerSpec .ServerGroupID = uuid .NewString ()
231- providerSpec .ServerGroupName = ""
232- case 1 :
233- providerSpec .ServerGroupID = ""
234- providerSpec .ServerGroupName = uuid .NewString ()
235- }
236-
237- // Clear pointers to empty structs.
238- if providerSpec .UserDataSecret != nil && providerSpec .UserDataSecret .Name == "" {
239- providerSpec .UserDataSecret = nil
240- }
241- },
255+ f .fuzzProviderSpec ,
242256 }
243257}
244258
259+ func (f * openstackProviderFuzzer ) FuzzerFuncsMachine (codecs runtimeserializer.CodecFactory ) []interface {} {
260+ return append (
261+ f .FuzzerFuncsMachineSet (codecs ),
262+ f .FuzzMachine ,
263+ )
264+ }
265+
245266// generateFakeTags generate a fake alphanumeric CSV string for use in a tags field.
246267func generateFakeTags () string {
247268 var buffer bytes.Buffer
0 commit comments