@@ -17,14 +17,20 @@ limitations under the License.
17
17
package v1alpha5
18
18
19
19
import (
20
+ "runtime/debug"
20
21
"testing"
21
22
22
23
"github.com/onsi/gomega"
24
+ "github.com/onsi/gomega/format"
23
25
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24
26
runtime "k8s.io/apimachinery/pkg/runtime"
27
+ runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
28
+ "k8s.io/client-go/kubernetes/scheme"
29
+ utilconversion "sigs.k8s.io/cluster-api/util/conversion"
25
30
ctrlconversion "sigs.k8s.io/controller-runtime/pkg/conversion"
26
31
27
32
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1"
33
+ testhelpers "sigs.k8s.io/cluster-api-provider-openstack/test/helpers"
28
34
)
29
35
30
36
func TestConvertFrom (t * testing.T ) {
@@ -165,3 +171,69 @@ func TestConvert_v1alpha5_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(t
165
171
})
166
172
}
167
173
}
174
+
175
+ type convertiblePointer [T any ] interface {
176
+ ctrlconversion.Convertible
177
+ * T
178
+ }
179
+
180
+ type hubPointer [T any ] interface {
181
+ ctrlconversion.Hub
182
+ * T
183
+ }
184
+
185
+ func test_ObjectConvert [SP convertiblePointer [S ], HP hubPointer [H ], S , H any ](tb testing.TB ) {
186
+ tb .Helper ()
187
+
188
+ fuzzerFuncs := func (_ runtimeserializer.CodecFactory ) []interface {} {
189
+ return testhelpers .InfraV1FuzzerFuncs ()
190
+ }
191
+ f := utilconversion .GetFuzzer (scheme .Scheme , fuzzerFuncs )
192
+ g := gomega .NewWithT (tb )
193
+
194
+ for i := 0 ; i < 10000 ; i ++ {
195
+ var hub HP = new (H )
196
+ f .Fuzz (hub )
197
+ var spoke SP = new (S )
198
+
199
+ func () {
200
+ defer func () {
201
+ if r := recover (); r != nil {
202
+ tb .Errorf ("PANIC! Down-converting:\n %s\n %s" , format .Object (hub , 1 ), debug .Stack ())
203
+ tb .FailNow ()
204
+ }
205
+ }()
206
+ g .Expect (spoke .ConvertFrom (hub )).To (gomega .Succeed ())
207
+ }()
208
+
209
+ spoke = new (S )
210
+ f .Fuzz (spoke )
211
+ hub = new (H )
212
+
213
+ func () {
214
+ defer func () {
215
+ if r := recover (); r != nil {
216
+ tb .Errorf ("PANIC! Up-converting:\n %s\n %s" , format .Object (spoke , 1 ), debug .Stack ())
217
+ tb .FailNow ()
218
+ }
219
+ }()
220
+ g .Expect (spoke .ConvertTo (hub )).To (gomega .Succeed ())
221
+ }()
222
+ }
223
+ }
224
+
225
+ func Test_OpenStackClusterConvert (t * testing.T ) {
226
+ test_ObjectConvert [* OpenStackCluster , * infrav1.OpenStackCluster ](t )
227
+ }
228
+
229
+ func Test_OpenStackClusterTemplate (t * testing.T ) {
230
+ test_ObjectConvert [* OpenStackClusterTemplate , * infrav1.OpenStackClusterTemplate ](t )
231
+ }
232
+
233
+ func Test_OpenStackMachineConvert (t * testing.T ) {
234
+ test_ObjectConvert [* OpenStackMachine , * infrav1.OpenStackMachine ](t )
235
+ }
236
+
237
+ func Test_OpenStackMachineTemplateConvert (t * testing.T ) {
238
+ test_ObjectConvert [* OpenStackMachineTemplate , * infrav1.OpenStackMachineTemplate ](t )
239
+ }
0 commit comments