@@ -17,14 +17,20 @@ limitations under the License.
1717package v1alpha5
1818
1919import (
20+ "runtime/debug"
2021 "testing"
2122
2223 "github.com/onsi/gomega"
24+ "github.com/onsi/gomega/format"
2325 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2426 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"
2530 ctrlconversion "sigs.k8s.io/controller-runtime/pkg/conversion"
2631
2732 infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1"
33+ testhelpers "sigs.k8s.io/cluster-api-provider-openstack/test/helpers"
2834)
2935
3036func TestConvertFrom (t * testing.T ) {
@@ -165,3 +171,69 @@ func TestConvert_v1alpha5_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(t
165171 })
166172 }
167173}
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