...

Source file src/kubevirt.io/client-go/api/deepcopy_test.go

Documentation: kubevirt.io/client-go/api

     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