1 package api
2
3 import (
4 "reflect"
5
6 fuzz "github.com/google/gofuzz"
7 . "github.com/onsi/ginkgo/v2"
8 . "github.com/onsi/gomega"
9
10 v1 "kubevirt.io/api/core/v1"
11 )
12
13 var _ = Describe("Generated deepcopy functions", func() {
14
15 var structs []interface{}
16 BeforeEach(func() {
17
18 structs = []interface{}{
19 &v1.CloudInitNoCloudSource{},
20 &v1.DomainSpec{},
21 &v1.ResourceRequirements{},
22 &v1.Firmware{},
23 &v1.Devices{},
24 &v1.Disk{},
25 &v1.DiskDevice{},
26 &v1.DiskTarget{},
27 &v1.LunTarget{},
28 &v1.CDRomTarget{},
29 &v1.Volume{},
30 &v1.VolumeSource{},
31 &v1.ContainerDiskSource{},
32 &v1.ClockOffset{},
33 &v1.ClockOffsetUTC{},
34 &v1.Clock{},
35 &v1.Timer{},
36 &v1.RTCTimer{},
37 &v1.HPETTimer{},
38 &v1.PITTimer{},
39 &v1.KVMTimer{},
40 &v1.HypervTimer{},
41 &v1.Features{},
42 &v1.FeatureState{},
43 &v1.FeatureAPIC{},
44 &v1.FeatureSpinlocks{},
45 &v1.FeatureVendorID{},
46 &v1.FeatureHyperv{},
47 &v1.CPU{},
48 &v1.Watchdog{},
49 &v1.WatchdogDevice{},
50 &v1.I6300ESBWatchdog{},
51 &v1.VirtualMachineInstance{},
52 &v1.VirtualMachineInstanceList{},
53 &v1.VirtualMachineInstanceSpec{},
54 &v1.VirtualMachineInstanceStatus{},
55 &v1.VirtualMachineInstanceCondition{},
56 &v1.VMISelector{},
57 &v1.VirtualMachineInstanceReplicaSet{},
58 &v1.VirtualMachineInstanceReplicaSetList{},
59 &v1.VirtualMachineInstanceReplicaSetSpec{},
60 &v1.VirtualMachineInstanceReplicaSetStatus{},
61 &v1.VirtualMachineInstanceReplicaSetCondition{},
62 &v1.VirtualMachineInstanceTemplateSpec{},
63 &v1.VirtualMachine{},
64 &v1.VirtualMachineList{},
65 &v1.VirtualMachineSpec{},
66 &v1.VirtualMachineCondition{},
67 &v1.VirtualMachineStatus{},
68 &v1.VirtualMachineInstancePreset{},
69 &v1.VirtualMachineInstancePresetList{},
70 &v1.VirtualMachineInstancePresetSpec{},
71 &v1.Probe{},
72 &v1.Handler{},
73 &v1.Hugepages{},
74 &v1.Interface{},
75 &v1.Memory{},
76 &v1.Machine{},
77 &v1.InterfaceBridge{},
78 &v1.DeprecatedInterfaceSlirp{},
79 }
80 })
81
82 DescribeTable("should work for fuzzed structs with a probability for nils of", func(nilProbability float64) {
83 for _, s := range structs {
84 fuzz.New().NilChance(nilProbability).Fuzz(s)
85 Expect(reflect.ValueOf(s).MethodByName("DeepCopy").Call(nil)[0].Interface()).To(Equal(s))
86 if reflect.ValueOf(s).MethodByName("DeepCopyObject").IsValid() {
87 Expect(reflect.ValueOf(s).MethodByName("DeepCopyObject").Call(nil)[0].Interface()).To(Equal(s))
88 }
89 new := reflect.New(reflect.TypeOf(s).Elem())
90 reflect.ValueOf(s).MethodByName("DeepCopyInto").Call([]reflect.Value{new})
91 Expect(new.Interface()).To(Equal(s))
92 }
93 },
94 Entry("0%", float64(0)),
95 Entry("10%", float64(0.1)),
96 Entry("50%", float64(0.5)),
97 Entry("70%", float64(0.7)),
98 Entry("100%", float64(1)),
99 )
100 })
101
View as plain text