From 74f889d4e137444b857b2d169113a241faf1d5ac Mon Sep 17 00:00:00 2001 From: Salvatore Dario Minonne Date: Fri, 24 Jul 2026 09:03:44 +0200 Subject: [PATCH] fix(nodepool): deep-copy shared objects in TestEnqueueNodePoolsForCloudConfig Parallel subtests share the same HostedControlPlane and NodePool pointers. fake.ClientBuilder.Build() mutates these objects via SetResourceVersion(), causing a data race detected by -race. Deep-copy each object before passing it to WithObjects() so each subtest operates on its own copy. Co-Authored-By: Claude Opus 4.6 --- .../controllers/nodepool/nodepool_controller_test.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hypershift-operator/controllers/nodepool/nodepool_controller_test.go b/hypershift-operator/controllers/nodepool/nodepool_controller_test.go index b16323ab6ef2..791ad4979970 100644 --- a/hypershift-operator/controllers/nodepool/nodepool_controller_test.go +++ b/hypershift-operator/controllers/nodepool/nodepool_controller_test.go @@ -3864,7 +3864,14 @@ func TestEnqueueNodePoolsForCloudConfig(t *testing.T) { t.Parallel() g := NewWithT(t) - c := fake.NewClientBuilder().WithScheme(api.Scheme).WithObjects(tc.objects...).Build() + // Deep-copy shared objects so parallel subtests don't race on + // ResourceVersion mutations inside fake.ClientBuilder.Build(). + objs := make([]client.Object, len(tc.objects)) + for i, obj := range tc.objects { + objs[i] = obj.DeepCopyObject().(client.Object) + } + + c := fake.NewClientBuilder().WithScheme(api.Scheme).WithObjects(objs...).Build() r := &NodePoolReconciler{Client: c} result := r.enqueueNodePoolsForCloudConfig(context.Background(), tc.cm)