Skip to content

Commit

Permalink
Deflake watchcache tests
Browse files Browse the repository at this point in the history
  • Loading branch information
wojtek-t committed Apr 29, 2024
1 parent c6b6163 commit 6d9edcc
Showing 1 changed file with 25 additions and 21 deletions.
46 changes: 25 additions & 21 deletions staging/src/k8s.io/apiserver/pkg/storage/testing/store_tests.go
Original file line number Diff line number Diff line change
Expand Up @@ -1631,7 +1631,9 @@ func RunTestListContinuation(ctx context.Context, t *testing.T, store storage.In
}
}
options := storage.ListOptions{
ResourceVersion: "0",
// Limit is ignored when ResourceVersion is set to 0.
// Set it to consistent read.
ResourceVersion: "",
Predicate: pred(1, ""),
Recursive: true,
}
Expand All @@ -1654,7 +1656,8 @@ func RunTestListContinuation(ctx context.Context, t *testing.T, store storage.In
// no limit, should get two items
out = &example.PodList{}
options = storage.ListOptions{
ResourceVersion: "0",
// ResourceVersion should be unset when setting continuation token.
ResourceVersion: "",
Predicate: pred(0, continueFromSecondItem),
Recursive: true,
}
Expand All @@ -1677,7 +1680,8 @@ func RunTestListContinuation(ctx context.Context, t *testing.T, store storage.In
// limit, should get two more pages
out = &example.PodList{}
options = storage.ListOptions{
ResourceVersion: "0",
// ResourceVersion should be unset when setting continuation token.
ResourceVersion: "",
Predicate: pred(1, continueFromSecondItem),
Recursive: true,
}
Expand All @@ -1699,7 +1703,8 @@ func RunTestListContinuation(ctx context.Context, t *testing.T, store storage.In

out = &example.PodList{}
options = storage.ListOptions{
ResourceVersion: "0",
// ResourceVersion should be unset when setting continuation token.
ResourceVersion: "",
Predicate: pred(1, continueFromThirdItem),
Recursive: true,
}
Expand Down Expand Up @@ -1815,7 +1820,9 @@ func RunTestListContinuationWithFilter(ctx context.Context, t *testing.T, store
}
}
options := storage.ListOptions{
ResourceVersion: "0",
// Limit is ignored when ResourceVersion is set to 0.
// Set it to consistent read.
ResourceVersion: "",
Predicate: pred(2, ""),
Recursive: true,
}
Expand Down Expand Up @@ -1845,7 +1852,8 @@ func RunTestListContinuationWithFilter(ctx context.Context, t *testing.T, store
// both read counters should be incremented for the singular calls they make in this case
out = &example.PodList{}
options = storage.ListOptions{
ResourceVersion: "0",
// ResourceVersion should be unset when setting continuation token.
ResourceVersion: "",
Predicate: pred(2, cont),
Recursive: true,
}
Expand Down Expand Up @@ -2407,7 +2415,7 @@ func RunTestGuaranteedUpdateWithSuggestionAndConflict(ctx context.Context, t *te
err := store.GuaranteedUpdate(ctx, key, updatedPod, false, nil,
storage.SimpleUpdate(func(obj runtime.Object) (runtime.Object, error) {
pod := obj.(*example.Pod)
pod.Name = "foo-2"
pod.Generation = 2
return pod, nil
}),
nil,
Expand All @@ -2424,24 +2432,24 @@ func RunTestGuaranteedUpdateWithSuggestionAndConflict(ctx context.Context, t *te
err = store.GuaranteedUpdate(ctx, key, updatedPod2, false, nil,
storage.SimpleUpdate(func(obj runtime.Object) (runtime.Object, error) {
pod := obj.(*example.Pod)
if pod.Name != "foo-2" {
if pod.Generation != 2 {
if sawConflict {
t.Fatalf("unexpected second conflict")
}
sawConflict = true
// simulated stale object - return a conflict
return nil, apierrors.NewConflict(example.SchemeGroupVersion.WithResource("pods").GroupResource(), "name", errors.New("foo"))
}
pod.Name = "foo-3"
pod.Generation = 3
return pod, nil
}),
originalPod,
)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if updatedPod2.Name != "foo-3" {
t.Errorf("unexpected pod name: %q", updatedPod2.Name)
if updatedPod2.Generation != 3 {
t.Errorf("unexpected pod generation: %q", updatedPod2.Generation)
}

// Third, update using a current version as the suggestion.
Expand All @@ -2452,14 +2460,8 @@ func RunTestGuaranteedUpdateWithSuggestionAndConflict(ctx context.Context, t *te
err = store.GuaranteedUpdate(ctx, key, updatedPod3, false, nil,
storage.SimpleUpdate(func(obj runtime.Object) (runtime.Object, error) {
pod := obj.(*example.Pod)
if pod.Name != updatedPod2.Name || pod.ResourceVersion != updatedPod2.ResourceVersion {
t.Errorf(
"unexpected live object (name=%s, rv=%s), expected name=%s, rv=%s",
pod.Name,
pod.ResourceVersion,
updatedPod2.Name,
updatedPod2.ResourceVersion,
)
if pod.Generation != updatedPod2.Generation || pod.ResourceVersion != updatedPod2.ResourceVersion {
t.Logf("stale object (rv=%s), expected rv=%s", pod.ResourceVersion, updatedPod2.ResourceVersion)
}
attempts++
return nil, fmt.Errorf("validation or admission error")
Expand All @@ -2469,8 +2471,10 @@ func RunTestGuaranteedUpdateWithSuggestionAndConflict(ctx context.Context, t *te
if err == nil {
t.Fatalf("expected error, got none")
}
if attempts != 1 {
t.Errorf("expected 1 attempt, got %d", attempts)
// Implementations of the storage interface are allowed to ignore the suggestion,
// in which case two attempts are possible.
if attempts > 2 {
t.Errorf("update function should have been called at most twice, called %d", attempts)
}
}

Expand Down

0 comments on commit 6d9edcc

Please sign in to comment.