Skip to content

Commit f42c80e

Browse files
committed
Tests: Use Patch instead of Update
This commit refactors tests to use Patch client calls instead of Updates. Signed-off-by: Alvaro Romero <alromero@redhat.com> Assisted-by: Claude <noreply@anthropic.com>
1 parent 92661ff commit f42c80e

4 files changed

Lines changed: 73 additions & 16 deletions

File tree

tests/framework/framework.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
kv1 "kubevirt.io/api/core/v1"
2626
"kubevirt.io/client-go/kubecli"
2727
"kubevirt.io/client-go/log"
28+
"kubevirt.io/kubevirt-velero-plugin/tests/patch"
2829
)
2930

3031
const (
@@ -495,10 +496,12 @@ func UpdateVMStateStorageClass(kvClient kubecli.KubevirtClient) {
495496
kv := GetKubevirt(kvClient)
496497
kv.Spec.Configuration.VMStateStorageClass = getStorageClassFromEnv()
497498

498-
data, err := json.Marshal(kv.Spec)
499+
patchData, err := patch.New(
500+
patch.WithReplace("/spec", kv.Spec),
501+
).GeneratePayload()
499502
gomega.Expect(err).ToNot(gomega.HaveOccurred())
500-
patchData := fmt.Sprintf(`[{ "op": "replace", "path": "/spec", "value": %s }]`, string(data))
501-
_, err = kvClient.KubeVirt(kv.Namespace).Patch(context.Background(), kv.Name, types.JSONPatchType, []byte(patchData), metav1.PatchOptions{})
503+
504+
_, err = kvClient.KubeVirt(kv.Namespace).Patch(context.Background(), kv.Name, types.JSONPatchType, patchData, metav1.PatchOptions{})
502505
gomega.Expect(err).ToNot(gomega.HaveOccurred())
503506
}
504507

tests/pvc_vs_labeling_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,23 @@ package tests
22

33
import (
44
"context"
5+
"encoding/json"
56
"fmt"
67
"time"
78

89
. "github.com/onsi/ginkgo/v2"
910
. "github.com/onsi/gomega"
1011
velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
1112
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13+
"k8s.io/apimachinery/pkg/types"
1214
"k8s.io/apimachinery/pkg/util/wait"
1315
"k8s.io/utils/strings/slices"
1416

1517
kvv1 "kubevirt.io/api/core/v1"
1618
"kubevirt.io/kubevirt-velero-plugin/pkg/util"
1719
"kubevirt.io/kubevirt-velero-plugin/tests/framework"
1820
. "kubevirt.io/kubevirt-velero-plugin/tests/framework/matcher"
21+
"kubevirt.io/kubevirt-velero-plugin/tests/patch"
1922
)
2023

2124
var _ = Describe("PVC and VolumeSnapshot Labeling", func() {
@@ -67,7 +70,11 @@ var _ = Describe("PVC and VolumeSnapshot Labeling", func() {
6770
pvc.Labels = make(map[string]string)
6871
}
6972
pvc.Labels[util.PVCUIDLabel] = userDefinedValue
70-
_, err = f.K8sClient.CoreV1().PersistentVolumeClaims(f.Namespace.Name).Update(context.Background(), pvc, metav1.UpdateOptions{})
73+
patchData, err := patch.New(
74+
patch.WithReplace("/metadata/labels", pvc.Labels),
75+
).GeneratePayload()
76+
Expect(err).ToNot(HaveOccurred())
77+
_, err = f.K8sClient.CoreV1().PersistentVolumeClaims(f.Namespace.Name).Patch(context.Background(), pvc.Name, types.JSONPatchType, patchData, metav1.PatchOptions{})
7178
Expect(err).ToNot(HaveOccurred())
7279

7380
By("Creating backup")

tests/resource_filtering_test.go

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tests
22

33
import (
44
"context"
5+
"encoding/json"
56
"fmt"
67
"strings"
78
"time"
@@ -10,13 +11,15 @@ import (
1011
"k8s.io/utils/strings/slices"
1112
"kubevirt.io/client-go/kubecli"
1213
"kubevirt.io/kubevirt-velero-plugin/tests/framework"
14+
"kubevirt.io/kubevirt-velero-plugin/tests/patch"
1315

1416
. "github.com/onsi/ginkgo/v2"
1517
. "github.com/onsi/gomega"
1618
velerov1api "github.com/vmware-tanzu/velero/pkg/apis/velero/v1"
1719
v1 "k8s.io/api/core/v1"
1820
apierrs "k8s.io/apimachinery/pkg/api/errors"
1921
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22+
"k8s.io/apimachinery/pkg/types"
2023
kvv1 "kubevirt.io/api/core/v1"
2124
cdiv1 "kubevirt.io/containerized-data-importer-api/pkg/apis/core/v1beta1"
2225
. "kubevirt.io/kubevirt-velero-plugin/tests/framework/matcher"
@@ -2651,8 +2654,14 @@ var _ = Describe("Resource excludes", func() {
26512654
retryOnceOnErr(
26522655
func() error {
26532656
pod := framework.FindLauncherPod(f.K8sClient, f.Namespace.Name, vmName)
2654-
pod.SetLabels(addExcludeLabel(pod.GetLabels()))
2655-
_, err := f.K8sClient.CoreV1().Pods(f.Namespace.Name).Update(context.TODO(), &pod, metav1.UpdateOptions{})
2657+
newLabels := addExcludeLabel(pod.GetLabels())
2658+
patchData, err := patch.New(
2659+
patch.WithReplace("/metadata/labels", newLabels),
2660+
).GeneratePayload()
2661+
if err != nil {
2662+
return err
2663+
}
2664+
_, err = f.K8sClient.CoreV1().Pods(f.Namespace.Name).Patch(context.TODO(), pod.Name, types.JSONPatchType, patchData, metav1.PatchOptions{})
26562665
return err
26572666
}).Should(BeNil())
26582667
}
@@ -3465,7 +3474,13 @@ func updateVm(kvClient kubecli.KubevirtClient, namespace string, name string,
34653474
}
34663475
vm = update(vm)
34673476

3468-
_, err = kvClient.VirtualMachine(namespace).Update(context.Background(), vm, metav1.UpdateOptions{})
3477+
patchData, err := patch.New(
3478+
patch.WithReplace("/metadata/labels", vm.Labels),
3479+
).GeneratePayload()
3480+
if err != nil {
3481+
return err
3482+
}
3483+
_, err = kvClient.VirtualMachine(namespace).Patch(context.Background(), vm.Name, types.JSONPatchType, patchData, metav1.PatchOptions{})
34693484
return err
34703485
}
34713486
}
@@ -3479,7 +3494,13 @@ func updateVmi(kvClient kubecli.KubevirtClient, namespace string, name string,
34793494
}
34803495
vmi = update(vmi)
34813496

3482-
_, err = kvClient.VirtualMachineInstance(namespace).Update(context.Background(), vmi, metav1.UpdateOptions{})
3497+
patchData, err := patch.New(
3498+
patch.WithReplace("/metadata/labels", vmi.Labels),
3499+
).GeneratePayload()
3500+
if err != nil {
3501+
return err
3502+
}
3503+
_, err = kvClient.VirtualMachineInstance(namespace).Patch(context.Background(), vmi.Name, types.JSONPatchType, patchData, metav1.PatchOptions{})
34833504
return err
34843505
}
34853506
}
@@ -3493,7 +3514,13 @@ func updatePvc(client *kubernetes.Clientset, namespace string, name string,
34933514
}
34943515
pvc = update(pvc)
34953516

3496-
_, err = client.CoreV1().PersistentVolumeClaims(namespace).Update(context.TODO(), pvc, metav1.UpdateOptions{})
3517+
patchData, err := patch.New(
3518+
patch.WithReplace("/metadata/labels", pvc.Labels),
3519+
).GeneratePayload()
3520+
if err != nil {
3521+
return err
3522+
}
3523+
_, err = client.CoreV1().PersistentVolumeClaims(namespace).Patch(context.TODO(), pvc.Name, types.JSONPatchType, patchData, metav1.PatchOptions{})
34973524
return err
34983525
}
34993526
}
@@ -3506,7 +3533,13 @@ func updateDataVolume(kvClient kubecli.KubevirtClient, namespace string, name st
35063533
}
35073534
dv = update(dv)
35083535

3509-
_, err = kvClient.CdiClient().CdiV1beta1().DataVolumes(namespace).Update(context.TODO(), dv, metav1.UpdateOptions{})
3536+
patchData, err := patch.New(
3537+
patch.WithReplace("/metadata/labels", dv.Labels),
3538+
).GeneratePayload()
3539+
if err != nil {
3540+
return err
3541+
}
3542+
_, err = kvClient.CdiClient().CdiV1beta1().DataVolumes(namespace).Patch(context.TODO(), dv.Name, types.JSONPatchType, patchData, metav1.PatchOptions{})
35103543
return err
35113544
}
35123545
}

tests/vm_backup_test.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package tests
22

33
import (
44
"context"
5+
"encoding/json"
56
"fmt"
67
"time"
78

@@ -20,6 +21,7 @@ import (
2021
kubecli "kubevirt.io/client-go/kubecli"
2122
"kubevirt.io/kubevirt-velero-plugin/tests/framework"
2223
. "kubevirt.io/kubevirt-velero-plugin/tests/framework/matcher"
24+
"kubevirt.io/kubevirt-velero-plugin/tests/patch"
2325
)
2426

2527
const (
@@ -455,18 +457,30 @@ var _ = Describe("[smoke] VM Backup", func() {
455457
updateInstancetypeFunc := func() {
456458
instancetype, err := f.KvClient.VirtualMachineInstancetype(f.Namespace.Name).Get(context.Background(), instancetypeName, metav1.GetOptions{})
457459
Expect(err).ToNot(HaveOccurred())
458-
instancetype.Spec.CPU.Guest = instancetype.Spec.CPU.Guest + 1
459-
instancetype.Spec.Memory.Guest.Add(resource.MustParse("128Mi"))
460-
_, err = f.KvClient.VirtualMachineInstancetype(f.Namespace.Name).Update(context.Background(), instancetype, metav1.UpdateOptions{})
460+
newCPU := instancetype.Spec.CPU.Guest + 1
461+
newMemory := instancetype.Spec.Memory.Guest.DeepCopy()
462+
newMemory.Add(resource.MustParse("128Mi"))
463+
patchData, err := patch.New(
464+
patch.WithReplace("/spec/cpu/guest", newCPU),
465+
patch.WithReplace("/spec/memory/guest", newMemory.String()),
466+
).GeneratePayload()
467+
Expect(err).ToNot(HaveOccurred())
468+
_, err = f.KvClient.VirtualMachineInstancetype(f.Namespace.Name).Patch(context.Background(), instancetype.Name, types.JSONPatchType, patchData, metav1.PatchOptions{})
461469
Expect(err).ToNot(HaveOccurred())
462470
}
463471

464472
updateClusterInstancetypeFunc := func() {
465473
instancetype, err := f.KvClient.VirtualMachineClusterInstancetype().Get(context.Background(), instancetypeName, metav1.GetOptions{})
466474
Expect(err).ToNot(HaveOccurred())
467-
instancetype.Spec.CPU.Guest = instancetype.Spec.CPU.Guest + 1
468-
instancetype.Spec.Memory.Guest.Add(resource.MustParse("128Mi"))
469-
_, err = f.KvClient.VirtualMachineClusterInstancetype().Update(context.Background(), instancetype, metav1.UpdateOptions{})
475+
newCPU := instancetype.Spec.CPU.Guest + 1
476+
newMemory := instancetype.Spec.Memory.Guest.DeepCopy()
477+
newMemory.Add(resource.MustParse("128Mi"))
478+
patchData, err := patch.New(
479+
patch.WithReplace("/spec/cpu/guest", newCPU),
480+
patch.WithReplace("/spec/memory/guest", newMemory.String()),
481+
).GeneratePayload()
482+
Expect(err).ToNot(HaveOccurred())
483+
_, err = f.KvClient.VirtualMachineClusterInstancetype().Patch(context.Background(), instancetype.Name, types.JSONPatchType, patchData, metav1.PatchOptions{})
470484
Expect(err).ToNot(HaveOccurred())
471485
}
472486

0 commit comments

Comments
 (0)