mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-10 12:32:03 +00:00
dra scheduler: fix data race in unit test
Clearing some irrelevant fields in objects caused a flaky data race alert because in some cases, the objects were pointers into a shared cache. A better solution is to treat the objects as read-only and ignore the irrelevant fields.
This commit is contained in:
parent
f39ece24b2
commit
a66d2163f9
@ -26,6 +26,7 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/google/go-cmp/cmp/cmpopts"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
@ -1172,10 +1173,8 @@ func (tc *testContext) verify(t *testing.T, expected result, initialObjects []me
|
||||
}
|
||||
}
|
||||
sortObjects(wantObjects)
|
||||
stripObjects(wantObjects)
|
||||
stripObjects(objects)
|
||||
// Sometimes assert strips the diff too much, let's do it ourselves...
|
||||
if diff := cmp.Diff(wantObjects, objects); diff != "" {
|
||||
if diff := cmp.Diff(wantObjects, objects, cmpopts.IgnoreFields(metav1.ObjectMeta{}, "UID", "ResourceVersion")); diff != "" {
|
||||
t.Errorf("Stored objects are different (- expected, + actual):\n%s", diff)
|
||||
}
|
||||
|
||||
@ -1184,31 +1183,17 @@ func (tc *testContext) verify(t *testing.T, expected result, initialObjects []me
|
||||
expectAssumedClaims = append(expectAssumedClaims, expected.assumedClaim)
|
||||
}
|
||||
actualAssumedClaims := tc.listAssumedClaims()
|
||||
assert.Equal(t, expectAssumedClaims, actualAssumedClaims, "assumed claims")
|
||||
if diff := cmp.Diff(expectAssumedClaims, actualAssumedClaims, cmpopts.IgnoreFields(metav1.ObjectMeta{}, "UID", "ResourceVersion")); diff != "" {
|
||||
t.Errorf("Assumed claims are different (- expected, + actual):\n%s", diff)
|
||||
}
|
||||
|
||||
var expectInFlightClaims []metav1.Object
|
||||
if expected.inFlightClaim != nil {
|
||||
expectInFlightClaims = append(expectInFlightClaims, expected.inFlightClaim)
|
||||
}
|
||||
actualInFlightClaims := tc.listInFlightClaims()
|
||||
assert.Equal(t, expectInFlightClaims, actualInFlightClaims, "in-flight claims")
|
||||
}
|
||||
|
||||
// setGVK is implemented by metav1.TypeMeta and thus all API objects, in
|
||||
// contrast to metav1.Type, which is not (?!) implemented.
|
||||
type setGVK interface {
|
||||
SetGroupVersionKind(gvk schema.GroupVersionKind)
|
||||
}
|
||||
|
||||
// stripObjects removes certain fields (Kind, APIVersion, etc.) which are not
|
||||
// important and might not be set.
|
||||
func stripObjects(objects []metav1.Object) {
|
||||
for _, obj := range objects {
|
||||
obj.SetResourceVersion("")
|
||||
obj.SetUID("")
|
||||
if objType, ok := obj.(setGVK); ok {
|
||||
objType.SetGroupVersionKind(schema.GroupVersionKind{})
|
||||
}
|
||||
if diff := cmp.Diff(expectInFlightClaims, actualInFlightClaims, cmpopts.IgnoreFields(metav1.ObjectMeta{}, "UID", "ResourceVersion")); diff != "" {
|
||||
t.Errorf("In-flight claims are different (- expected, + actual):\n%s", diff)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1242,7 +1227,6 @@ func (tc *testContext) listAssumedClaims() []metav1.Object {
|
||||
}
|
||||
}
|
||||
sortObjects(assumedClaims)
|
||||
stripObjects(assumedClaims)
|
||||
return assumedClaims
|
||||
}
|
||||
|
||||
@ -1253,7 +1237,6 @@ func (tc *testContext) listInFlightClaims() []metav1.Object {
|
||||
return true
|
||||
})
|
||||
sortObjects(inFlightClaims)
|
||||
stripObjects(inFlightClaims)
|
||||
return inFlightClaims
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user