From 423dcaf2e465c3cf91200125494b74f734811d41 Mon Sep 17 00:00:00 2001 From: mevrin Date: Thu, 30 May 2024 07:55:52 -0400 Subject: [PATCH] refactor: Replace reflect.DeepEqual by equality.Semantic.DeepEqual Signed-off-by: mevrin --- .../app/options/options_test.go | 4 +- cmd/scheduler/app/options/options_test.go | 4 +- docs/ut_coverage/UT_coverage_v1.4.0.html | 14 +++--- docs/ut_coverage/UT_coverage_v1.5.0.html | 14 +++--- pkg/controllers/job/job_controller_actions.go | 4 +- pkg/controllers/job/job_controller_handler.go | 4 +- .../pytorch/pytorch_test.go | 4 +- .../jobflow/jobflow_controller_action_test.go | 14 +++--- .../jobtemplate_controller_action_test.go | 4 +- .../podgroup/pg_controller_test.go | 4 +- .../queue/queue_controller_action.go | 4 +- .../actions/allocate/allocate_test.go | 5 +- pkg/scheduler/api/helpers/helpers_test.go | 4 +- pkg/scheduler/api/job_info_test.go | 4 +- pkg/scheduler/api/pod_info_test.go | 6 +-- pkg/scheduler/api/resource_info_test.go | 48 +++++++++---------- pkg/scheduler/cache/cache_test.go | 3 +- pkg/scheduler/cache/event_handlers.go | 4 +- .../capabilities/volumebinding/binder_test.go | 6 +-- pkg/scheduler/framework/arguments_test.go | 5 +- pkg/scheduler/framework/job_updater.go | 6 +-- pkg/scheduler/framework/session.go | 4 +- pkg/scheduler/plugins/cdp/cdp_test.go | 4 +- .../plugins/conformance/conformance_test.go | 4 +- pkg/scheduler/plugins/drf/hdrf_test.go | 4 +- .../policy/policy_best_effort_test.go | 4 +- .../numaaware/policy/policy_none_test.go | 5 +- .../policy/policy_restricted_test.go | 4 +- .../policy/policy_single_numa_node_test.go | 4 +- .../provider/cpumanager/cpu_mng_test.go | 6 +-- .../plugins/overcommit/overcommit_test.go | 4 +- pkg/scheduler/plugins/pdb/pdb_test.go | 8 ++-- .../plugins/proportion/proportion.go | 6 +-- .../resourcequota/resourcequota_test.go | 4 +- pkg/scheduler/plugins/sla/sla_test.go | 6 +-- pkg/scheduler/uthelper/helper.go | 4 +- pkg/scheduler/util/scheduler_helper_test.go | 4 +- pkg/scheduler/util_test.go | 7 +-- .../admission/jobs/validate/util_test.go | 4 +- .../admission/pods/mutate/mutate_pod_test.go | 4 +- .../queues/mutate/mutate_queue_test.go | 4 +- .../queues/validate/validate_queue_test.go | 4 +- 42 files changed, 134 insertions(+), 129 deletions(-) diff --git a/cmd/controller-manager/app/options/options_test.go b/cmd/controller-manager/app/options/options_test.go index 5918d58bf3..f93f0ed7bc 100644 --- a/cmd/controller-manager/app/options/options_test.go +++ b/cmd/controller-manager/app/options/options_test.go @@ -17,11 +17,11 @@ limitations under the License. package options import ( - "reflect" "testing" "time" "github.com/spf13/pflag" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/leaderelection/resourcelock" "k8s.io/component-base/config" @@ -79,7 +79,7 @@ func TestAddFlags(t *testing.T) { WorkerThreadsForGC: 1, } - if !reflect.DeepEqual(expected, s) { + if !equality.Semantic.DeepEqual(expected, s) { t.Errorf("Got different run options than expected.\nGot: %+v\nExpected: %+v\n", s, expected) } diff --git a/cmd/scheduler/app/options/options_test.go b/cmd/scheduler/app/options/options_test.go index d4f699d276..84f3065f71 100644 --- a/cmd/scheduler/app/options/options_test.go +++ b/cmd/scheduler/app/options/options_test.go @@ -17,11 +17,11 @@ limitations under the License. package options import ( - "reflect" "testing" "time" "github.com/spf13/pflag" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/leaderelection/resourcelock" "k8s.io/component-base/config" @@ -78,7 +78,7 @@ func TestAddFlags(t *testing.T) { CacheDumpFileDir: "/tmp", } - if !reflect.DeepEqual(expected, s) { + if !equality.Semantic.DeepEqual(expected, s) { t.Errorf("Got different run options than expected.\nGot: %+v\nExpected: %+v\n", s, expected) } } diff --git a/docs/ut_coverage/UT_coverage_v1.4.0.html b/docs/ut_coverage/UT_coverage_v1.4.0.html index fc639d6654..a341bdf680 100644 --- a/docs/ut_coverage/UT_coverage_v1.4.0.html +++ b/docs/ut_coverage/UT_coverage_v1.4.0.html @@ -4005,7 +4005,7 @@ } minResources := cc.calcPGMinResources(job) - if pg.Spec.MinMember != job.Spec.MinAvailable || !reflect.DeepEqual(pg.Spec.MinResources, minResources) { + if pg.Spec.MinMember != job.Spec.MinAvailable || !equality.Semantic.DeepEqual(pg.Spec.MinResources, minResources) { pg.Spec.MinMember = job.Spec.MinAvailable pg.Spec.MinResources = minResources pgShouldUpdate = true @@ -4269,7 +4269,7 @@ // NOTE: Since we only reconcile job based on Spec, we will ignore other attributes // For Job status, it's used internally and always been updated via our controller. - if reflect.DeepEqual(newJob.Spec, oldJob.Spec) && newJob.Status.State.Phase == oldJob.Status.State.Phase { + if equality.Semantic.DeepEqual(newJob.Spec, oldJob.Spec) && newJob.Status.State.Phase == oldJob.Status.State.Phase { klog.V(6).Infof("Job update event is ignored since no update in 'Spec'.") return } @@ -6097,7 +6097,7 @@ } // ignore update when status does not change - if reflect.DeepEqual(queueStatus, queue.Status) { + if equality.Semantic.DeepEqual(queueStatus, queue.Status) { return nil } @@ -12437,7 +12437,7 @@ newTransitionID := newCond.TransitionID newCond.TransitionID = oldCond.TransitionID - shouldUpdate := !reflect.DeepEqual(&newCond, &oldCond) + shouldUpdate := !equality.Semantic.DeepEqual(&newCond, &oldCond) newCond.LastTransitionTime = newTime newCond.TransitionID = newTransitionID @@ -12455,7 +12455,7 @@ oldCondition := oldStatus.Conditions oldStatus.Conditions = nil - return !reflect.DeepEqual(newStatus, oldStatus) || isPodGroupConditionsUpdated(newCondition, oldCondition) + return !equality.Semantic.DeepEqual(newStatus, oldStatus) || isPodGroupConditionsUpdated(newCondition, oldCondition) } // updateJob update specified job @@ -19010,7 +19010,7 @@ "k8s.io/api/admission/v1beta1" whv1beta1 "k8s.io/api/admissionregistration/v1beta1" v1 "k8s.io/api/core/v1" - apiequality "k8s.io/apimachinery/pkg/api/equality" + apieequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation/field" @@ -19234,7 +19234,7 @@ } } - if !apiequality.Semantic.DeepEqual(new.Spec, old.Spec) { + if !apieequality.Semantic.DeepEqual(new.Spec, old.Spec) { return fmt.Errorf("job updates may not change fields other than `minAvailable`, `tasks[*].replicas under spec`") } diff --git a/docs/ut_coverage/UT_coverage_v1.5.0.html b/docs/ut_coverage/UT_coverage_v1.5.0.html index 65feebce08..1eaaa796fe 100644 --- a/docs/ut_coverage/UT_coverage_v1.5.0.html +++ b/docs/ut_coverage/UT_coverage_v1.5.0.html @@ -4265,7 +4265,7 @@ } minResources := cc.calcPGMinResources(job) - if pg.Spec.MinMember != job.Spec.MinAvailable || !reflect.DeepEqual(pg.Spec.MinResources, minResources) { + if pg.Spec.MinMember != job.Spec.MinAvailable || !equality.Semantic.DeepEqual(pg.Spec.MinResources, minResources) { pg.Spec.MinMember = job.Spec.MinAvailable pg.Spec.MinResources = minResources pgShouldUpdate = true @@ -4537,7 +4537,7 @@ // NOTE: Since we only reconcile job based on Spec, we will ignore other attributes // For Job status, it's used internally and always been updated via our controller. - if reflect.DeepEqual(newJob.Spec, oldJob.Spec) && newJob.Status.State.Phase == oldJob.Status.State.Phase { + if equality.Semantic.DeepEqual(newJob.Spec, oldJob.Spec) && newJob.Status.State.Phase == oldJob.Status.State.Phase { klog.V(6).Infof("Job update event is ignored since no update in 'Spec'.") return } @@ -6584,7 +6584,7 @@ } // ignore update when status does not change - if reflect.DeepEqual(queueStatus, queue.Status) { + if equality.Semantic.DeepEqual(queueStatus, queue.Status) { return nil } @@ -13646,7 +13646,7 @@ newTransitionID := newCond.TransitionID newCond.TransitionID = oldCond.TransitionID - shouldUpdate := !reflect.DeepEqual(&newCond, &oldCond) + shouldUpdate := !equality.Semantic.DeepEqual(&newCond, &oldCond) newCond.LastTransitionTime = newTime newCond.TransitionID = newTransitionID @@ -13664,7 +13664,7 @@ oldCondition := oldStatus.Conditions oldStatus.Conditions = nil - return !reflect.DeepEqual(newStatus, oldStatus) || isPodGroupConditionsUpdated(newCondition, oldCondition) + return !equality.Semantic.DeepEqual(newStatus, oldStatus) || isPodGroupConditionsUpdated(newCondition, oldCondition) } // updateJob update specified job @@ -20285,7 +20285,7 @@ "k8s.io/api/admission/v1beta1" whv1beta1 "k8s.io/api/admissionregistration/v1beta1" v1 "k8s.io/api/core/v1" - apiequality "k8s.io/apimachinery/pkg/api/equality" + apieequality "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation/field" @@ -20521,7 +20521,7 @@ } } - if !apiequality.Semantic.DeepEqual(new.Spec, old.Spec) { + if !apieequality.Semantic.DeepEqual(new.Spec, old.Spec) { return fmt.Errorf("job updates may not change fields other than `minAvailable`, `tasks[*].replicas under spec`") } diff --git a/pkg/controllers/job/job_controller_actions.go b/pkg/controllers/job/job_controller_actions.go index 2964ec98b0..f0bdc54f36 100644 --- a/pkg/controllers/job/job_controller_actions.go +++ b/pkg/controllers/job/job_controller_actions.go @@ -19,13 +19,13 @@ package job import ( "context" "fmt" - "reflect" "sort" "sync" "sync/atomic" "time" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" quotav1 "k8s.io/apiserver/pkg/quota/v1" @@ -712,7 +712,7 @@ func (cc *jobcontroller) createOrUpdatePodGroup(job *batch.Job) error { } minResources := cc.calcPGMinResources(job) - if pg.Spec.MinMember != job.Spec.MinAvailable || !reflect.DeepEqual(pg.Spec.MinResources, minResources) { + if pg.Spec.MinMember != job.Spec.MinAvailable || !equality.Semantic.DeepEqual(pg.Spec.MinResources, minResources) { pg.Spec.MinMember = job.Spec.MinAvailable pg.Spec.MinResources = minResources pgShouldUpdate = true diff --git a/pkg/controllers/job/job_controller_handler.go b/pkg/controllers/job/job_controller_handler.go index 3f632d508d..6c8f4d34b7 100644 --- a/pkg/controllers/job/job_controller_handler.go +++ b/pkg/controllers/job/job_controller_handler.go @@ -19,10 +19,10 @@ package job import ( "context" "fmt" - "reflect" "strconv" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/cache" @@ -97,7 +97,7 @@ func (cc *jobcontroller) updateJob(oldObj, newObj interface{}) { // NOTE: Since we only reconcile job based on Spec, we will ignore other attributes // For Job status, it's used internally and always been updated via our controller. - if reflect.DeepEqual(newJob.Spec, oldJob.Spec) && newJob.Status.State.Phase == oldJob.Status.State.Phase { + if equality.Semantic.DeepEqual(newJob.Spec, oldJob.Spec) && newJob.Status.State.Phase == oldJob.Status.State.Phase { klog.V(6).Infof("Job update event is ignored since no update in 'Spec'.") return } diff --git a/pkg/controllers/job/plugins/distributed-framework/pytorch/pytorch_test.go b/pkg/controllers/job/plugins/distributed-framework/pytorch/pytorch_test.go index 95abbd4389..ce8a138e31 100644 --- a/pkg/controllers/job/plugins/distributed-framework/pytorch/pytorch_test.go +++ b/pkg/controllers/job/plugins/distributed-framework/pytorch/pytorch_test.go @@ -2,10 +2,10 @@ package pytorch import ( "fmt" - "reflect" "testing" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "volcano.sh/apis/pkg/apis/batch/v1alpha1" @@ -365,7 +365,7 @@ func TestPytorch(t *testing.T) { } } - if !reflect.DeepEqual(testcase.Pod.Spec.Containers[0].Env, testcase.envs) { + if !equality.Semantic.DeepEqual(testcase.Pod.Spec.Containers[0].Env, testcase.envs) { t.Errorf("Case %d (%s): wrong envs, got %v, expected %v", index, testcase.Name, testcase.Pod.Spec.Containers[0].Env, testcase.envs) } }) diff --git a/pkg/controllers/jobflow/jobflow_controller_action_test.go b/pkg/controllers/jobflow/jobflow_controller_action_test.go index 628b99971d..71a6dec726 100755 --- a/pkg/controllers/jobflow/jobflow_controller_action_test.go +++ b/pkg/controllers/jobflow/jobflow_controller_action_test.go @@ -18,10 +18,10 @@ package jobflow import ( "context" - "reflect" "testing" "time" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/informers" kubeclient "k8s.io/client-go/kubernetes/fake" @@ -183,7 +183,7 @@ func TestSyncJobFlowFunc(t *testing.T) { tt.args.jobFlow.Status.JobStatusList[i].RunningHistories[i2].StartTimestamp = metav1.Time{} } } - if !reflect.DeepEqual(&tt.args.jobFlow.Status, tt.want.jobFlowStatus) { + if !equality.Semantic.DeepEqual(&tt.args.jobFlow.Status, tt.want.jobFlowStatus) { t.Error("not the expected result") } }) @@ -246,7 +246,7 @@ func TestGetRunningHistoriesFunc(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if got := getRunningHistories(tt.args.jobStatusList, tt.args.job); !reflect.DeepEqual(got, tt.want) { + if got := getRunningHistories(tt.args.jobStatusList, tt.args.job); !equality.Semantic.DeepEqual(got, tt.want) { t.Errorf("getRunningHistories() = %v, want %v", got, tt.want) } }) @@ -406,7 +406,7 @@ func TestGetAllJobStatusFunc(t *testing.T) { got.JobStatusList[0].RunningHistories[0].StartTimestamp = metav1.Time{} got.JobStatusList[1].RunningHistories[0].StartTimestamp = metav1.Time{} } - if !reflect.DeepEqual(got, tt.want) { + if !equality.Semantic.DeepEqual(got, tt.want) { t.Errorf("getAllJobStatus() got = %v, want %v", got, tt.want) } }) @@ -486,13 +486,13 @@ func TestLoadJobTemplateAndSetJobFunc(t *testing.T) { if got := fakeController.loadJobTemplateAndSetJob(tt.args.jobFlow, tt.args.flowName, tt.args.jobName, tt.args.job); got != tt.want.Err { t.Error("Expected loadJobTemplateAndSetJob() return nil, but not nil") } - if !reflect.DeepEqual(tt.args.job.OwnerReferences, tt.want.OwnerReference) { + if !equality.Semantic.DeepEqual(tt.args.job.OwnerReferences, tt.want.OwnerReference) { t.Error("not expected job OwnerReferences") } - if !reflect.DeepEqual(tt.args.job.Annotations, tt.want.Annotations) { + if !equality.Semantic.DeepEqual(tt.args.job.Annotations, tt.want.Annotations) { t.Error("not expected job Annotations") } - if !reflect.DeepEqual(tt.args.job.Labels, tt.want.Labels) { + if !equality.Semantic.DeepEqual(tt.args.job.Labels, tt.want.Labels) { t.Error("not expected job Annotations") } }) diff --git a/pkg/controllers/jobtemplate/jobtemplate_controller_action_test.go b/pkg/controllers/jobtemplate/jobtemplate_controller_action_test.go index 2b08191975..e820da6f7d 100755 --- a/pkg/controllers/jobtemplate/jobtemplate_controller_action_test.go +++ b/pkg/controllers/jobtemplate/jobtemplate_controller_action_test.go @@ -18,7 +18,7 @@ package jobtemplate import ( "context" - "reflect" + "k8s.io/apimachinery/pkg/api/equality" "testing" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -115,7 +115,7 @@ func TestSyncJobTemplateFunc(t *testing.T) { if got := fakeController.syncJobTemplate(tt.args.jobTemplate); got != tt.want.err { t.Error("Expected deleteAllJobsCreateByJobFlow() return nil, but not nil") } - if !reflect.DeepEqual(&tt.args.jobTemplate.Status, tt.want.jobTemplateStatus) { + if !equality.Semantic.DeepEqual(&tt.args.jobTemplate.Status, tt.want.jobTemplateStatus) { t.Error("not the expected result") } }) diff --git a/pkg/controllers/podgroup/pg_controller_test.go b/pkg/controllers/podgroup/pg_controller_test.go index ecb9f5cf17..f5cb602c6b 100644 --- a/pkg/controllers/podgroup/pg_controller_test.go +++ b/pkg/controllers/podgroup/pg_controller_test.go @@ -18,10 +18,10 @@ package podgroup import ( "context" - "reflect" "testing" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/informers" @@ -166,7 +166,7 @@ func TestAddPodGroup(t *testing.T) { t.Errorf("Case %s failed when getting podGroup for %v", testCase.name, err) } - if false == reflect.DeepEqual(pg.OwnerReferences, testCase.expectedPodGroup.OwnerReferences) { + if false == equality.Semantic.DeepEqual(pg.OwnerReferences, testCase.expectedPodGroup.OwnerReferences) { t.Errorf("Case %s failed, expect %v, got %v", testCase.name, testCase.expectedPodGroup, pg) } diff --git a/pkg/controllers/queue/queue_controller_action.go b/pkg/controllers/queue/queue_controller_action.go index d6729231e5..8055bc7981 100644 --- a/pkg/controllers/queue/queue_controller_action.go +++ b/pkg/controllers/queue/queue_controller_action.go @@ -19,9 +19,9 @@ package queue import ( "context" "fmt" - "reflect" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/cache" "k8s.io/klog/v2" @@ -75,7 +75,7 @@ func (c *queuecontroller) syncQueue(queue *schedulingv1beta1.Queue, updateStateF } // ignore update when status does not change - if reflect.DeepEqual(queueStatus, queue.Status) { + if equality.Semantic.DeepEqual(queueStatus, queue.Status) { return nil } diff --git a/pkg/scheduler/actions/allocate/allocate_test.go b/pkg/scheduler/actions/allocate/allocate_test.go index fb23ce76da..16ec4545b8 100644 --- a/pkg/scheduler/actions/allocate/allocate_test.go +++ b/pkg/scheduler/actions/allocate/allocate_test.go @@ -25,6 +25,7 @@ import ( "github.com/agiledragon/gomonkey/v2" v1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/fake" @@ -322,10 +323,10 @@ func TestAllocateWithDynamicPVC(t *testing.T) { allocate.Execute(ssn) bindResults := binder.Binds() - if !reflect.DeepEqual(test.expectedBind, bindResults) { + if !equality.Semantic.DeepEqual(test.expectedBind, bindResults) { t.Errorf("expected: %v, got %v ", test.expectedBind, bindResults) } - if !reflect.DeepEqual(test.expectedActions, fakeVolumeBinder.Actions) { + if !equality.Semantic.DeepEqual(test.expectedActions, fakeVolumeBinder.Actions) { t.Errorf("expected: %v, got %v ", test.expectedActions, fakeVolumeBinder.Actions) } fakeVolumeBinder.Actions = make(map[string][]string) diff --git a/pkg/scheduler/api/helpers/helpers_test.go b/pkg/scheduler/api/helpers/helpers_test.go index 676c710409..12f49302e0 100644 --- a/pkg/scheduler/api/helpers/helpers_test.go +++ b/pkg/scheduler/api/helpers/helpers_test.go @@ -1,10 +1,10 @@ package helpers import ( - "reflect" "testing" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" "volcano.sh/volcano/pkg/scheduler/api" ) @@ -36,7 +36,7 @@ func TestMax(t *testing.T) { }, } re := Max(l, r) - if !reflect.DeepEqual(expected, re) { + if !equality.Semantic.DeepEqual(expected, re) { t.Errorf("expected: %#v, got: %#v", expected, re) } } diff --git a/pkg/scheduler/api/job_info_test.go b/pkg/scheduler/api/job_info_test.go index 3a83ed508c..fc2ba232e0 100644 --- a/pkg/scheduler/api/job_info_test.go +++ b/pkg/scheduler/api/job_info_test.go @@ -17,11 +17,11 @@ limitations under the License. package api import ( - "reflect" "testing" "github.com/stretchr/testify/assert" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -31,7 +31,7 @@ import ( ) func jobInfoEqual(l, r *JobInfo) bool { - return reflect.DeepEqual(l, r) + return equality.Semantic.DeepEqual(l, r) } func TestAddTaskInfo(t *testing.T) { diff --git a/pkg/scheduler/api/pod_info_test.go b/pkg/scheduler/api/pod_info_test.go index 4b02c648df..e192023388 100644 --- a/pkg/scheduler/api/pod_info_test.go +++ b/pkg/scheduler/api/pod_info_test.go @@ -17,11 +17,11 @@ limitations under the License. package api import ( - "reflect" "testing" "github.com/google/go-cmp/cmp" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -90,7 +90,7 @@ func TestGetPodResourceRequest(t *testing.T) { for i, test := range tests { req := GetPodResourceRequest(test.pod) - if !reflect.DeepEqual(req, test.expectedResource) { + if !equality.Semantic.DeepEqual(req, test.expectedResource) { t.Errorf("case %d(%s) failed: \n expected %v, \n got: %v \n", i, test.name, test.expectedResource, req) } @@ -183,7 +183,7 @@ func TestGetPodResourceWithoutInitContainers(t *testing.T) { for i, test := range tests { req := GetPodResourceWithoutInitContainers(test.pod) - if !reflect.DeepEqual(req, test.expectedResource) { + if !equality.Semantic.DeepEqual(req, test.expectedResource) { t.Errorf("case %d(%s) failed: \n expected %v, \n got: %v \n", i, test.name, test.expectedResource, req) } diff --git a/pkg/scheduler/api/resource_info_test.go b/pkg/scheduler/api/resource_info_test.go index 0463844bd7..49edc13e09 100644 --- a/pkg/scheduler/api/resource_info_test.go +++ b/pkg/scheduler/api/resource_info_test.go @@ -18,11 +18,11 @@ package api import ( "math" - "reflect" "sort" "testing" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/resource" ) @@ -56,7 +56,7 @@ func TestNewResource(t *testing.T) { for _, test := range tests { r := NewResource(test.resourceList) - if !reflect.DeepEqual(test.expected, r) { + if !equality.Semantic.DeepEqual(test.expected, r) { t.Errorf("expected: %#v, got: %#v", test.expected, r) } } @@ -95,7 +95,7 @@ func TestResourceAddScalar(t *testing.T) { for _, test := range tests { test.resource.AddScalar(test.scalarName, test.scalarQuantity) - if !reflect.DeepEqual(test.expected, test.resource) { + if !equality.Semantic.DeepEqual(test.expected, test.resource) { t.Errorf("expected: %#v, got: %#v", test.expected, test.resource) } } @@ -141,7 +141,7 @@ func TestSetMaxResource(t *testing.T) { for _, test := range tests { test.resource1.SetMaxResource(test.resource2) - if !reflect.DeepEqual(test.expected, test.resource1) { + if !equality.Semantic.DeepEqual(test.expected, test.resource1) { t.Errorf("expected: %#v, got: %#v", test.expected, test.resource1) } } @@ -180,7 +180,7 @@ func TestIsZero(t *testing.T) { for _, test := range tests { flag := test.resource.IsZero(test.resourceName) - if !reflect.DeepEqual(test.expected, flag) { + if !equality.Semantic.DeepEqual(test.expected, flag) { t.Errorf("expected: %#v, got: %#v", test.expected, flag) } } @@ -243,7 +243,7 @@ func TestAddResource(t *testing.T) { for _, test := range tests { test.resource1.Add(test.resource2) - if !reflect.DeepEqual(test.expected, test.resource1) { + if !equality.Semantic.DeepEqual(test.expected, test.resource1) { t.Errorf("expected: %#v, got: %#v", test.expected, test.resource1) } } @@ -289,7 +289,7 @@ func TestSubResource(t *testing.T) { for _, test := range tests { test.resource1.Sub(test.resource2) - if !reflect.DeepEqual(test.expected, test.resource1) { + if !equality.Semantic.DeepEqual(test.expected, test.resource1) { t.Errorf("expected: %#v, got: %#v", test.expected, test.resource1) } } @@ -450,19 +450,19 @@ func TestDiff(t *testing.T) { for _, test := range testsForDefaultZero { increased, decreased := test.resource1.Diff(test.resource2, Zero) - if !reflect.DeepEqual(test.expectedIncreased, increased) { + if !equality.Semantic.DeepEqual(test.expectedIncreased, increased) { t.Errorf("expected: %#v, got: %#v", test.expectedIncreased, increased) } - if !reflect.DeepEqual(test.expectedDecreased, decreased) { + if !equality.Semantic.DeepEqual(test.expectedDecreased, decreased) { t.Errorf("expected: %#v, got: %#v", test.expectedDecreased, decreased) } } for _, test := range testsForDefaultInfinity { increased, decreased := test.resource1.Diff(test.resource2, Infinity) - if !reflect.DeepEqual(test.expectedIncreased, increased) { + if !equality.Semantic.DeepEqual(test.expectedIncreased, increased) { t.Errorf("expected: %#v, got: %#v", test.expectedIncreased, increased) } - if !reflect.DeepEqual(test.expectedDecreased, decreased) { + if !equality.Semantic.DeepEqual(test.expectedDecreased, decreased) { t.Errorf("expected: %#v, got: %#v", test.expectedDecreased, decreased) } } @@ -577,13 +577,13 @@ func TestLess(t *testing.T) { for caseID, test := range testsForDefaultZero { flag := test.resource1.Less(test.resource2, Zero) - if !reflect.DeepEqual(test.expected, flag) { + if !equality.Semantic.DeepEqual(test.expected, flag) { t.Errorf("caseID %d expected: %#v, got: %#v", caseID, test.expected, flag) } } for caseID, test := range testsForDefaultInfinity { flag := test.resource1.Less(test.resource2, Infinity) - if !reflect.DeepEqual(test.expected, flag) { + if !equality.Semantic.DeepEqual(test.expected, flag) { t.Errorf("caseID %d expected: %#v, got: %#v", caseID, test.expected, flag) } } @@ -741,13 +741,13 @@ func TestLessEqual(t *testing.T) { for _, test := range testsForDefaultZero { flag := test.resource1.LessEqual(test.resource2, Zero) - if !reflect.DeepEqual(test.expected, flag) { + if !equality.Semantic.DeepEqual(test.expected, flag) { t.Errorf("expected: %#v, got: %#v", test.expected, flag) } } for caseID, test := range testsForDefaultInfinity { flag := test.resource1.LessEqual(test.resource2, Infinity) - if !reflect.DeepEqual(test.expected, flag) { + if !equality.Semantic.DeepEqual(test.expected, flag) { t.Errorf("caseID %d expected: %#v, got: %#v", caseID, test.expected, flag) } } @@ -897,13 +897,13 @@ func TestLessPartly(t *testing.T) { for caseID, test := range testsForDefaultZero { flag := test.resource1.LessPartly(test.resource2, Zero) - if !reflect.DeepEqual(test.expected, flag) { + if !equality.Semantic.DeepEqual(test.expected, flag) { t.Errorf("caseID %d expected: %#v, got: %#v", caseID, test.expected, flag) } } for _, test := range testsForDefaultInfinity { flag := test.resource1.LessPartly(test.resource2, Infinity) - if !reflect.DeepEqual(test.expected, flag) { + if !equality.Semantic.DeepEqual(test.expected, flag) { t.Errorf("expected: %#v, got: %#v", test.expected, flag) } } @@ -1053,13 +1053,13 @@ func TestLessEqualPartly(t *testing.T) { for _, test := range testsForDefaultZero { flag := test.resource1.LessEqualPartly(test.resource2, Zero) - if !reflect.DeepEqual(test.expected, flag) { + if !equality.Semantic.DeepEqual(test.expected, flag) { t.Errorf("expected: %#v, got: %#v", test.expected, flag) } } for _, test := range testsForDefaultInfinity { flag := test.resource1.LessEqualPartly(test.resource2, Infinity) - if !reflect.DeepEqual(test.expected, flag) { + if !equality.Semantic.DeepEqual(test.expected, flag) { t.Errorf("expected: %#v, got: %#v", test.expected, flag) } } @@ -1115,7 +1115,7 @@ func TestEqual(t *testing.T) { for _, test := range tests { flag := test.resource1.Equal(test.resource2, Zero) - if !reflect.DeepEqual(test.expected, flag) { + if !equality.Semantic.DeepEqual(test.expected, flag) { t.Errorf("expected: %#v, got: %#v", test.expected, flag) } } @@ -1198,7 +1198,7 @@ func TestMinDimensionResourceZero(t *testing.T) { for _, test := range tests { test.resource1.MinDimensionResource(test.resource2, Zero) - if !reflect.DeepEqual(test.expected, test.resource1) { + if !equality.Semantic.DeepEqual(test.expected, test.resource1) { t.Errorf("expected: %#v, got: %#v", test.expected, test.resource1) } } @@ -1247,7 +1247,7 @@ func TestMinDimensionResourceInfinity(t *testing.T) { for _, test := range tests { test.resource1.MinDimensionResource(test.resource2, Infinity) - if !reflect.DeepEqual(test.expected, test.resource1) { + if !equality.Semantic.DeepEqual(test.expected, test.resource1) { t.Errorf("expected: %#v, got: %#v", test.expected, test.resource1) } } @@ -1383,7 +1383,7 @@ func TestResource_LessEqualResource(t *testing.T) { _, reason := test.resource1.LessEqualWithResourcesName(test.resource2, Zero) sort.Strings(test.expected) sort.Strings(reason) - if !reflect.DeepEqual(test.expected, reason) { + if !equality.Semantic.DeepEqual(test.expected, reason) { t.Errorf("expected: %#v, got: %#v", test.expected, reason) } } @@ -1391,7 +1391,7 @@ func TestResource_LessEqualResource(t *testing.T) { _, reason := test.resource1.LessEqualWithResourcesName(test.resource2, Infinity) sort.Strings(test.expected) sort.Strings(reason) - if !reflect.DeepEqual(test.expected, reason) { + if !equality.Semantic.DeepEqual(test.expected, reason) { t.Errorf("caseID %d expected: %#v, got: %#v", caseID, test.expected, reason) } } diff --git a/pkg/scheduler/cache/cache_test.go b/pkg/scheduler/cache/cache_test.go index 0e13f91b10..2830b11616 100644 --- a/pkg/scheduler/cache/cache_test.go +++ b/pkg/scheduler/cache/cache_test.go @@ -24,6 +24,7 @@ import ( "time" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/record" @@ -196,7 +197,7 @@ func TestSchedulerCache_Bind_NodeWithInsufficientResources(t *testing.T) { if err != nil { t.Errorf("expected to find task after failed bind") } - if !reflect.DeepEqual(taskBeforeBind, taskAfterBind) { + if !equality.Semantic.DeepEqual(taskBeforeBind, taskAfterBind) { t.Errorf("expected task to remain the same after failed bind: \n %#v\n %#v", taskBeforeBind, taskAfterBind) } diff --git a/pkg/scheduler/cache/event_handlers.go b/pkg/scheduler/cache/event_handlers.go index b1739f7637..a08ed3e541 100644 --- a/pkg/scheduler/cache/event_handlers.go +++ b/pkg/scheduler/cache/event_handlers.go @@ -20,12 +20,12 @@ import ( "context" "fmt" "math" - "reflect" "strconv" v1 "k8s.io/api/core/v1" schedulingv1 "k8s.io/api/scheduling/v1" sv1 "k8s.io/api/storage/v1" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -642,7 +642,7 @@ func (sc *SchedulerCache) UpdateCSINode(oldObj, newObj interface{}) { if !ok { return } - if reflect.DeepEqual(oldCSINode.Spec, newCSINode.Spec) { + if equality.Semantic.DeepEqual(oldCSINode.Spec, newCSINode.Spec) { return } sc.AddOrUpdateCSINode(newObj) diff --git a/pkg/scheduler/capabilities/volumebinding/binder_test.go b/pkg/scheduler/capabilities/volumebinding/binder_test.go index 4fdcab8cb8..98c5e979aa 100644 --- a/pkg/scheduler/capabilities/volumebinding/binder_test.go +++ b/pkg/scheduler/capabilities/volumebinding/binder_test.go @@ -20,13 +20,13 @@ import ( "context" "fmt" "os" - "reflect" "sort" "testing" "time" "github.com/google/go-cmp/cmp" storagev1beta1 "k8s.io/api/storage/v1beta1" + "k8s.io/apimachinery/pkg/api/equality" storageinformersv1beta1 "k8s.io/client-go/informers/storage/v1beta1" v1 "k8s.io/api/core/v1" @@ -2457,12 +2457,12 @@ func TestGetEligibleNodes(t *testing.T) { eligibleNodes := testEnv.binder.GetEligibleNodes(logger, scenario.pvcs) // Validate - if reflect.DeepEqual(scenario.eligibleNodes, eligibleNodes) { + if equality.Semantic.DeepEqual(scenario.eligibleNodes, eligibleNodes) { fmt.Println("foo") } if compDiff := cmp.Diff(scenario.eligibleNodes, eligibleNodes, cmp.Comparer(func(a, b sets.Set[string]) bool { - return reflect.DeepEqual(a, b) + return equality.Semantic.DeepEqual(a, b) })); compDiff != "" { t.Errorf("Unexpected eligible nodes (-want +got):\n%s", compDiff) } diff --git a/pkg/scheduler/framework/arguments_test.go b/pkg/scheduler/framework/arguments_test.go index f60342d503..dec4b4cdd3 100644 --- a/pkg/scheduler/framework/arguments_test.go +++ b/pkg/scheduler/framework/arguments_test.go @@ -17,9 +17,10 @@ limitations under the License. package framework import ( - "reflect" "testing" + "k8s.io/apimachinery/pkg/api/equality" + "volcano.sh/volcano/pkg/scheduler/conf" ) @@ -181,7 +182,7 @@ func TestGetArgOfActionFromConf(t *testing.T) { for index, c := range cases { arg := GetArgOfActionFromConf(c.configurations, c.action) - if false == reflect.DeepEqual(arg, c.expectedArguments) { + if false == equality.Semantic.DeepEqual(arg, c.expectedArguments) { t.Errorf("index %d, case %s,expected %v, but got %v", index, c.name, c.expectedArguments, arg) } } diff --git a/pkg/scheduler/framework/job_updater.go b/pkg/scheduler/framework/job_updater.go index 2b90b81e6c..80ba52987d 100644 --- a/pkg/scheduler/framework/job_updater.go +++ b/pkg/scheduler/framework/job_updater.go @@ -3,9 +3,9 @@ package framework import ( "context" "math/rand" - "reflect" "time" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/client-go/util/workqueue" "k8s.io/klog/v2" @@ -66,7 +66,7 @@ func isPodGroupConditionsUpdated(newCondition, oldCondition []scheduling.PodGrou newTransitionID := newCond.TransitionID newCond.TransitionID = oldCond.TransitionID - shouldUpdate := !reflect.DeepEqual(&newCond, &oldCond) + shouldUpdate := !equality.Semantic.DeepEqual(&newCond, &oldCond) newCond.LastTransitionTime = newTime newCond.TransitionID = newTransitionID @@ -84,7 +84,7 @@ func isPodGroupStatusUpdated(newStatus, oldStatus scheduling.PodGroupStatus) boo oldCondition := oldStatus.Conditions oldStatus.Conditions = nil - return !reflect.DeepEqual(newStatus, oldStatus) || isPodGroupConditionsUpdated(newCondition, oldCondition) + return !equality.Semantic.DeepEqual(newStatus, oldStatus) || isPodGroupConditionsUpdated(newCondition, oldCondition) } // updateJob update specified job diff --git a/pkg/scheduler/framework/session.go b/pkg/scheduler/framework/session.go index 993238dbbb..eccfbe62f0 100644 --- a/pkg/scheduler/framework/session.go +++ b/pkg/scheduler/framework/session.go @@ -18,9 +18,9 @@ package framework import ( "fmt" - "reflect" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/uuid" @@ -210,7 +210,7 @@ func updateQueueStatus(ssn *Session) { for queueID := range ssn.Queues { // convert api.Resource to v1.ResourceList var queueStatus = util.ConvertRes2ResList(allocatedResources[queueID]).DeepCopy() - if reflect.DeepEqual(ssn.Queues[queueID].Queue.Status.Allocated, queueStatus) { + if equality.Semantic.DeepEqual(ssn.Queues[queueID].Queue.Status.Allocated, queueStatus) { klog.V(5).Infof("Queue <%s> allocated resource keeps equal, no need to update queue status <%v>.", queueID, ssn.Queues[queueID].Queue.Status.Allocated) continue diff --git a/pkg/scheduler/plugins/cdp/cdp_test.go b/pkg/scheduler/plugins/cdp/cdp_test.go index 36f339d4d5..85598d6afa 100644 --- a/pkg/scheduler/plugins/cdp/cdp_test.go +++ b/pkg/scheduler/plugins/cdp/cdp_test.go @@ -17,11 +17,11 @@ limitations under the License. package cdp import ( - "reflect" "testing" "time" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "volcano.sh/apis/pkg/apis/scheduling/v1beta1" @@ -157,7 +157,7 @@ func TestPreemptableFn(t *testing.T) { victims := ssn.Preemptable(&api.TaskInfo{}, preemptees) expectVictims := []*api.TaskInfo{task2, task3} - if !reflect.DeepEqual(victims, expectVictims) { + if !equality.Semantic.DeepEqual(victims, expectVictims) { t.Errorf("stable preempt test not equal! expect victims %v, actual %v", expectVictims, victims) } } diff --git a/pkg/scheduler/plugins/conformance/conformance_test.go b/pkg/scheduler/plugins/conformance/conformance_test.go index 6237884291..58ad290fbd 100644 --- a/pkg/scheduler/plugins/conformance/conformance_test.go +++ b/pkg/scheduler/plugins/conformance/conformance_test.go @@ -1,10 +1,10 @@ package conformance import ( - "reflect" "testing" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" "volcano.sh/volcano/pkg/scheduler/api" "volcano.sh/volcano/pkg/scheduler/conf" @@ -56,7 +56,7 @@ func TestConformancePlugin(t *testing.T) { ssn := test.RegisterSession(tiers, nil) defer test.Close() victims := ssn.Preemptable(&api.TaskInfo{}, test.preemptees) - if !reflect.DeepEqual(victims, test.expectVictims) { + if !equality.Semantic.DeepEqual(victims, test.expectVictims) { t.Errorf("case: %s error, expect %v, but get %v", test.Name, test.expectVictims, victims) } }) diff --git a/pkg/scheduler/plugins/drf/hdrf_test.go b/pkg/scheduler/plugins/drf/hdrf_test.go index 69b481f018..83698778f3 100644 --- a/pkg/scheduler/plugins/drf/hdrf_test.go +++ b/pkg/scheduler/plugins/drf/hdrf_test.go @@ -2,10 +2,10 @@ package drf import ( "fmt" - "reflect" "testing" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" schedulingv1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1" "volcano.sh/volcano/cmd/scheduler/app/options" @@ -204,7 +204,7 @@ func TestHDRF(t *testing.T) { defer test.Close() test.Run([]framework.Action{allocate.New()}) for _, job := range ssn.Jobs { - if reflect.DeepEqual(test.expected, job.Allocated) { + if equality.Semantic.DeepEqual(test.expected, job.Allocated) { t.Fatalf("%s: job %s expected resource %s, but got %s", test.Name, job.Name, test.expected[job.Name], job.Allocated) } } diff --git a/pkg/scheduler/plugins/numaaware/policy/policy_best_effort_test.go b/pkg/scheduler/plugins/numaaware/policy/policy_best_effort_test.go index 828258c1a5..c6a4fc9778 100644 --- a/pkg/scheduler/plugins/numaaware/policy/policy_best_effort_test.go +++ b/pkg/scheduler/plugins/numaaware/policy/policy_best_effort_test.go @@ -17,9 +17,9 @@ limitations under the License. package policy import ( - "reflect" "testing" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" ) @@ -315,7 +315,7 @@ func Test_best_effort_predicate(t *testing.T) { for _, testcase := range testCases { policy := NewPolicyBestEffort([]int{0, 1}) bestHit, _ := policy.Predicate(testcase.providersHints) - if !reflect.DeepEqual(bestHit, testcase.expect) { + if !equality.Semantic.DeepEqual(bestHit, testcase.expect) { t.Errorf("%s failed, expect %v, bestHit= %v\n", testcase.name, testcase.expect, bestHit) } } diff --git a/pkg/scheduler/plugins/numaaware/policy/policy_none_test.go b/pkg/scheduler/plugins/numaaware/policy/policy_none_test.go index ed531006e5..9860bf52e5 100644 --- a/pkg/scheduler/plugins/numaaware/policy/policy_none_test.go +++ b/pkg/scheduler/plugins/numaaware/policy/policy_none_test.go @@ -17,8 +17,9 @@ limitations under the License. package policy import ( - "reflect" "testing" + + "k8s.io/apimachinery/pkg/api/equality" ) func Test_none_predicate(t *testing.T) { @@ -37,7 +38,7 @@ func Test_none_predicate(t *testing.T) { for _, testcase := range testCases { policy := NewPolicyNone([]int{0, 1}) bestHit, _ := policy.Predicate(testcase.providersHints) - if !reflect.DeepEqual(bestHit, testcase.expect) { + if !equality.Semantic.DeepEqual(bestHit, testcase.expect) { t.Errorf("%s failed, expect %v, bestHit= %v\n", testcase.name, testcase.expect, bestHit) } } diff --git a/pkg/scheduler/plugins/numaaware/policy/policy_restricted_test.go b/pkg/scheduler/plugins/numaaware/policy/policy_restricted_test.go index c1054bfa29..2c9be6c1ae 100644 --- a/pkg/scheduler/plugins/numaaware/policy/policy_restricted_test.go +++ b/pkg/scheduler/plugins/numaaware/policy/policy_restricted_test.go @@ -17,9 +17,9 @@ limitations under the License. package policy import ( - "reflect" "testing" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" ) @@ -315,7 +315,7 @@ func Test_restricted_predicate(t *testing.T) { for _, testcase := range testCases { policy := NewPolicyRestricted([]int{0, 1}) bestHit, _ := policy.Predicate(testcase.providersHints) - if !reflect.DeepEqual(bestHit, testcase.expect) { + if !equality.Semantic.DeepEqual(bestHit, testcase.expect) { t.Errorf("%s failed, expect %v, bestHit= %v\n", testcase.name, testcase.expect, bestHit) } } diff --git a/pkg/scheduler/plugins/numaaware/policy/policy_single_numa_node_test.go b/pkg/scheduler/plugins/numaaware/policy/policy_single_numa_node_test.go index 5b041b9a68..19abd6b144 100644 --- a/pkg/scheduler/plugins/numaaware/policy/policy_single_numa_node_test.go +++ b/pkg/scheduler/plugins/numaaware/policy/policy_single_numa_node_test.go @@ -17,9 +17,9 @@ limitations under the License. package policy import ( - "reflect" "testing" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" ) @@ -281,7 +281,7 @@ func Test_single_numa_node_predicate(t *testing.T) { for _, testcase := range testCases { policy := NewPolicySingleNumaNode([]int{0, 1}) bestHit, _ := policy.Predicate(testcase.providersHints) - if !reflect.DeepEqual(bestHit, testcase.expect) { + if !equality.Semantic.DeepEqual(bestHit, testcase.expect) { t.Errorf("%s failed, bestHit= %v\n", testcase.name, bestHit) } } diff --git a/pkg/scheduler/plugins/numaaware/provider/cpumanager/cpu_mng_test.go b/pkg/scheduler/plugins/numaaware/provider/cpumanager/cpu_mng_test.go index b176f73289..1e8307eb89 100644 --- a/pkg/scheduler/plugins/numaaware/provider/cpumanager/cpu_mng_test.go +++ b/pkg/scheduler/plugins/numaaware/provider/cpumanager/cpu_mng_test.go @@ -17,10 +17,10 @@ limitations under the License. package cpumanager import ( - "reflect" "testing" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" @@ -200,7 +200,7 @@ func Test_GetTopologyHints(t *testing.T) { for _, testcase := range teseCases { provider := NewProvider() topologyHintmap := provider.GetTopologyHints(&testcase.container, &numaInfo, testcase.resNumaSets) - if !(reflect.DeepEqual(topologyHintmap["cpu"], testcase.expect) || + if !(equality.Semantic.DeepEqual(topologyHintmap["cpu"], testcase.expect) || (len(topologyHintmap["cpu"]) == 0 && len(testcase.expect) == 0)) { t.Errorf("%s failed. topologyHintmap = %v\n", testcase.name, topologyHintmap) } @@ -325,7 +325,7 @@ func Test_Allocate(t *testing.T) { for _, testcase := range teseCases { provider := NewProvider() assignMap := provider.Allocate(&testcase.container, testcase.bestHit, &numaInfo, testcase.resNumaSets) - if !(reflect.DeepEqual(assignMap["cpu"], testcase.expect)) { + if !(equality.Semantic.DeepEqual(assignMap["cpu"], testcase.expect)) { t.Errorf("%s failed.\n", testcase.name) } } diff --git a/pkg/scheduler/plugins/overcommit/overcommit_test.go b/pkg/scheduler/plugins/overcommit/overcommit_test.go index 1700377d05..39e0f309c3 100644 --- a/pkg/scheduler/plugins/overcommit/overcommit_test.go +++ b/pkg/scheduler/plugins/overcommit/overcommit_test.go @@ -1,10 +1,10 @@ package overcommit import ( - "reflect" "testing" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" "volcano.sh/apis/pkg/apis/scheduling" schedulingv1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1" @@ -112,7 +112,7 @@ func TestOvercommitPlugin(t *testing.T) { for _, job := range ssn.Jobs { ssn.JobEnqueued(job) isEnqueue := ssn.JobEnqueueable(job) - if !reflect.DeepEqual(test.expectedEnqueueAble, isEnqueue) { + if !equality.Semantic.DeepEqual(test.expectedEnqueueAble, isEnqueue) { t.Errorf("case: %s error, expect %v, but get %v", test.Name, test.expectedEnqueueAble, isEnqueue) } } diff --git a/pkg/scheduler/plugins/pdb/pdb_test.go b/pkg/scheduler/plugins/pdb/pdb_test.go index ebd17030e1..dcfedbdea2 100644 --- a/pkg/scheduler/plugins/pdb/pdb_test.go +++ b/pkg/scheduler/plugins/pdb/pdb_test.go @@ -17,11 +17,11 @@ limitations under the License. package pdb import ( - "reflect" "testing" v1 "k8s.io/api/core/v1" pdbPolicy "k8s.io/api/policy/v1" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes/fake" @@ -135,19 +135,19 @@ func TestPreemptableAndReclaimableFn(t *testing.T) { // (e. test the Preemptable in pdb plugin victims := ssn.Preemptable(&api.TaskInfo{}, test.preemptees) - if !reflect.DeepEqual(test.expectVictims, victims) { + if !equality.Semantic.DeepEqual(test.expectVictims, victims) { t.Errorf("Test of preemptable: test name: %s, expected: %v, got %v ", test.name, test.expectVictims, victims) } // (f. test the Reclaimable in pdb plugin victims = ssn.Reclaimable(&api.TaskInfo{}, test.preemptees) - if !reflect.DeepEqual(test.expectVictims, victims) { + if !equality.Semantic.DeepEqual(test.expectVictims, victims) { t.Errorf("Test of reclaimable: test name: %s, expected: %v, got %v ", test.name, test.expectVictims, victims) } // (g. test the VictimTasks in pdb plugin victimsMap := ssn.VictimTasks(test.preemptees) - if !reflect.DeepEqual(test.expectVictimsMap, victimsMap) { + if !equality.Semantic.DeepEqual(test.expectVictimsMap, victimsMap) { t.Errorf("Test of victimTasks: test name %s, expected: %v, got %v ", test.name, test.expectVictims, victims) } } diff --git a/pkg/scheduler/plugins/proportion/proportion.go b/pkg/scheduler/plugins/proportion/proportion.go index 0f397a4744..831bcb71ef 100644 --- a/pkg/scheduler/plugins/proportion/proportion.go +++ b/pkg/scheduler/plugins/proportion/proportion.go @@ -18,9 +18,9 @@ package proportion import ( "math" - "reflect" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" "k8s.io/klog/v2" "volcano.sh/apis/pkg/apis/scheduling" @@ -226,7 +226,7 @@ func (pp *proportionPlugin) OnSessionOpen(ssn *framework.Session) { if attr.request.LessEqual(attr.deserved, api.Zero) { meet[attr.queueID] = struct{}{} klog.V(4).Infof("queue <%s> is meet", attr.name) - } else if reflect.DeepEqual(attr.deserved, oldDeserved) { + } else if equality.Semantic.DeepEqual(attr.deserved, oldDeserved) { meet[attr.queueID] = struct{}{} klog.V(4).Infof("queue <%s> is meet cause of the capability", attr.name) } @@ -244,7 +244,7 @@ func (pp *proportionPlugin) OnSessionOpen(ssn *framework.Session) { remaining.Sub(increasedDeserved).Add(decreasedDeserved) klog.V(4).Infof("Remaining resource is <%s>", remaining) - if remaining.IsEmpty() || reflect.DeepEqual(remaining, oldRemaining) { + if remaining.IsEmpty() || equality.Semantic.DeepEqual(remaining, oldRemaining) { klog.V(4).Infof("Exiting when remaining is empty or no queue has more resource request: <%v>", remaining) break } diff --git a/pkg/scheduler/plugins/resourcequota/resourcequota_test.go b/pkg/scheduler/plugins/resourcequota/resourcequota_test.go index 6f614c8e45..34329a4ded 100644 --- a/pkg/scheduler/plugins/resourcequota/resourcequota_test.go +++ b/pkg/scheduler/plugins/resourcequota/resourcequota_test.go @@ -1,10 +1,10 @@ package resourcequota import ( - "reflect" "testing" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" "volcano.sh/apis/pkg/apis/scheduling" schedulingv1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1" @@ -93,7 +93,7 @@ func TestResourceQuotaPlugin(t *testing.T) { defer test.Close() for _, job := range ssn.Jobs { isEnqueue := ssn.JobEnqueueable(job) - if !reflect.DeepEqual(test.expectedEnqueueAble, isEnqueue) { + if !equality.Semantic.DeepEqual(test.expectedEnqueueAble, isEnqueue) { t.Errorf("case: %s error, expect %v, but get %v", test.Name, test.expectedEnqueueAble, isEnqueue) } } diff --git a/pkg/scheduler/plugins/sla/sla_test.go b/pkg/scheduler/plugins/sla/sla_test.go index 57edf3c6f4..6ef50452e8 100644 --- a/pkg/scheduler/plugins/sla/sla_test.go +++ b/pkg/scheduler/plugins/sla/sla_test.go @@ -1,10 +1,10 @@ package sla import ( - "reflect" "testing" "time" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "volcano.sh/apis/pkg/apis/scheduling" @@ -119,11 +119,11 @@ func TestSlaPlugin(t *testing.T) { ssn := test.RegisterSession(tiers, nil) defer test.Close() isOrder := ssn.JobOrderFn(job1, job2) - if !reflect.DeepEqual(test.expectedOrder, isOrder) { + if !equality.Semantic.DeepEqual(test.expectedOrder, isOrder) { t.Errorf("case: %s error, expect %v, but get %v", test.Name, test.expectedOrder, isOrder) } isEnqueue := ssn.JobEnqueueable(job1) - if !reflect.DeepEqual(test.expectedEnqueueAble, isEnqueue) { + if !equality.Semantic.DeepEqual(test.expectedEnqueueAble, isEnqueue) { t.Errorf("case: %s error, expect %v, but get %v", test.Name, test.expectedEnqueueAble, isEnqueue) } }) diff --git a/pkg/scheduler/uthelper/helper.go b/pkg/scheduler/uthelper/helper.go index 306d6822c6..912386f728 100644 --- a/pkg/scheduler/uthelper/helper.go +++ b/pkg/scheduler/uthelper/helper.go @@ -18,11 +18,11 @@ package uthelper import ( "fmt" - "reflect" "time" v1 "k8s.io/api/core/v1" schedulingv1 "k8s.io/api/scheduling/v1" + "k8s.io/apimachinery/pkg/api/equality" "volcano.sh/apis/pkg/apis/scheduling" vcapisv1 "volcano.sh/apis/pkg/apis/scheduling/v1beta1" @@ -228,7 +228,7 @@ func (test *TestCommonStruct) CheckEvict(caseIndex int) error { got[v]++ } - if !reflect.DeepEqual(expect, got) { + if !equality.Semantic.DeepEqual(expect, got) { return fmt.Errorf("case %d(%s) check evict: \nwant: %v\n got: %v ", caseIndex, test.Name, expect, got) } return nil diff --git a/pkg/scheduler/util/scheduler_helper_test.go b/pkg/scheduler/util/scheduler_helper_test.go index ec0ddfada4..cf7aedf76a 100644 --- a/pkg/scheduler/util/scheduler_helper_test.go +++ b/pkg/scheduler/util/scheduler_helper_test.go @@ -17,9 +17,9 @@ limitations under the License. package util import ( - "reflect" "testing" + "k8s.io/apimachinery/pkg/api/equality" "volcano.sh/volcano/cmd/scheduler/app/options" "volcano.sh/volcano/pkg/scheduler/api" ) @@ -53,7 +53,7 @@ func TestSelectBestNode(t *testing.T) { oneOf := func(node *api.NodeInfo, nodes []*api.NodeInfo) bool { for _, v := range nodes { - if reflect.DeepEqual(node, v) { + if equality.Semantic.DeepEqual(node, v) { return true } } diff --git a/pkg/scheduler/util_test.go b/pkg/scheduler/util_test.go index 1aa645103d..2c5b3bbbd6 100644 --- a/pkg/scheduler/util_test.go +++ b/pkg/scheduler/util_test.go @@ -17,9 +17,10 @@ limitations under the License. package scheduler import ( - "reflect" "testing" + "k8s.io/apimachinery/pkg/api/equality" + _ "volcano.sh/volcano/pkg/scheduler/actions" "volcano.sh/volcano/pkg/scheduler/conf" ) @@ -204,11 +205,11 @@ tiers: if err != nil { t.Errorf("Failed to load Scheduler configuration: %v", err) } - if !reflect.DeepEqual(tiers, expectedTiers) { + if !equality.Semantic.DeepEqual(tiers, expectedTiers) { t.Errorf("Failed to set default settings for plugins, expected: %+v, got %+v", expectedTiers, tiers) } - if !reflect.DeepEqual(configurations, expectedConfigurations) { + if !equality.Semantic.DeepEqual(configurations, expectedConfigurations) { t.Errorf("Wrong configuration, expected: %+v, got %+v", expectedConfigurations, configurations) } diff --git a/pkg/webhooks/admission/jobs/validate/util_test.go b/pkg/webhooks/admission/jobs/validate/util_test.go index 26fa0363ab..84fbd23905 100644 --- a/pkg/webhooks/admission/jobs/validate/util_test.go +++ b/pkg/webhooks/admission/jobs/validate/util_test.go @@ -1,9 +1,9 @@ package validate import ( - "reflect" "testing" + "k8s.io/apimachinery/pkg/api/equality" "volcano.sh/apis/pkg/apis/batch/v1alpha1" ) @@ -128,7 +128,7 @@ func TestTopoSort(t *testing.T) { for _, testcase := range testCases { tasks, isDag := topoSort(testcase.job) - if isDag != testcase.isDag || !reflect.DeepEqual(tasks, testcase.sortedTasks) { + if isDag != testcase.isDag || !equality.Semantic.DeepEqual(tasks, testcase.sortedTasks) { t.Errorf("%s failed, expect sortedTasks: %v, got: %v, expected isDag: %v, got: %v", testcase.name, testcase.sortedTasks, tasks, testcase.isDag, isDag) } diff --git a/pkg/webhooks/admission/pods/mutate/mutate_pod_test.go b/pkg/webhooks/admission/pods/mutate/mutate_pod_test.go index f964ee8372..6db37bdae8 100644 --- a/pkg/webhooks/admission/pods/mutate/mutate_pod_test.go +++ b/pkg/webhooks/admission/pods/mutate/mutate_pod_test.go @@ -18,10 +18,10 @@ package mutate import ( "encoding/json" - "reflect" "testing" v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" webconfig "volcano.sh/volcano/pkg/webhooks/config" @@ -209,7 +209,7 @@ func TestMutatePods(t *testing.T) { t.Run(testCase.Name, func(t *testing.T) { patchBytes, _ := createPatch(testCase.Pod) expectBytes, _ := json.Marshal(testCase.expect) - if !reflect.DeepEqual(patchBytes, expectBytes) { + if !equality.Semantic.DeepEqual(patchBytes, expectBytes) { t.Errorf("Test case '%s' failed, expect: %v, got: %v", testCase.Name, expectBytes, patchBytes) } diff --git a/pkg/webhooks/admission/queues/mutate/mutate_queue_test.go b/pkg/webhooks/admission/queues/mutate/mutate_queue_test.go index 95117fa319..24f5517869 100644 --- a/pkg/webhooks/admission/queues/mutate/mutate_queue_test.go +++ b/pkg/webhooks/admission/queues/mutate/mutate_queue_test.go @@ -19,11 +19,11 @@ package mutate import ( "encoding/json" "fmt" - "reflect" "strings" "testing" admissionv1 "k8s.io/api/admission/v1" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -216,7 +216,7 @@ func TestMutateQueues(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.Name, func(t *testing.T) { reviewResponse := Queues(testCase.AR) - if !reflect.DeepEqual(reviewResponse, testCase.reviewResponse) { + if !equality.Semantic.DeepEqual(reviewResponse, testCase.reviewResponse) { t.Errorf("Test case '%s' failed, expect: %v, got: %v", testCase.Name, testCase.reviewResponse, reviewResponse) } diff --git a/pkg/webhooks/admission/queues/validate/validate_queue_test.go b/pkg/webhooks/admission/queues/validate/validate_queue_test.go index e6cb1acab4..32eccd27e6 100644 --- a/pkg/webhooks/admission/queues/validate/validate_queue_test.go +++ b/pkg/webhooks/admission/queues/validate/validate_queue_test.go @@ -20,10 +20,10 @@ import ( "context" "encoding/json" "fmt" - "reflect" "testing" admissionv1 "k8s.io/api/admission/v1" + "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/validation/field" @@ -904,7 +904,7 @@ func TestAdmitQueues(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.Name, func(t *testing.T) { reviewResponse := AdmitQueues(testCase.AR) - if !reflect.DeepEqual(reviewResponse, testCase.reviewResponse) { + if !equality.Semantic.DeepEqual(reviewResponse, testCase.reviewResponse) { t.Errorf("Test case %s failed, expect %v, got %v", testCase.Name, testCase.reviewResponse, reviewResponse) }