mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-08 11:38:15 +00:00
Merge pull request #118793 from serathius/test-cache-bypass
Test all cases for LIST request cache bypass
This commit is contained in:
commit
2802bbce14
@ -154,6 +154,34 @@ func (d *dummyStorage) injectError(err error) {
|
||||
}
|
||||
|
||||
func TestGetListCacheBypass(t *testing.T) {
|
||||
type testCase struct {
|
||||
opts storage.ListOptions
|
||||
expectBypass bool
|
||||
}
|
||||
testCases := []testCase{
|
||||
{opts: storage.ListOptions{ResourceVersion: ""}, expectBypass: true},
|
||||
{opts: storage.ListOptions{ResourceVersion: "0"}, expectBypass: false},
|
||||
{opts: storage.ListOptions{ResourceVersion: "1"}, expectBypass: false},
|
||||
|
||||
{opts: storage.ListOptions{ResourceVersion: "", Predicate: storage.SelectionPredicate{Continue: "a"}}, expectBypass: true},
|
||||
{opts: storage.ListOptions{ResourceVersion: "0", Predicate: storage.SelectionPredicate{Continue: "a"}}, expectBypass: true},
|
||||
{opts: storage.ListOptions{ResourceVersion: "1", Predicate: storage.SelectionPredicate{Continue: "a"}}, expectBypass: true},
|
||||
|
||||
{opts: storage.ListOptions{ResourceVersion: "", Predicate: storage.SelectionPredicate{Limit: 500}}, expectBypass: true},
|
||||
{opts: storage.ListOptions{ResourceVersion: "0", Predicate: storage.SelectionPredicate{Limit: 500}}, expectBypass: false},
|
||||
{opts: storage.ListOptions{ResourceVersion: "1", Predicate: storage.SelectionPredicate{Limit: 500}}, expectBypass: true},
|
||||
|
||||
{opts: storage.ListOptions{ResourceVersion: "", ResourceVersionMatch: metav1.ResourceVersionMatchExact}, expectBypass: true},
|
||||
{opts: storage.ListOptions{ResourceVersion: "0", ResourceVersionMatch: metav1.ResourceVersionMatchExact}, expectBypass: true},
|
||||
{opts: storage.ListOptions{ResourceVersion: "1", ResourceVersionMatch: metav1.ResourceVersionMatchExact}, expectBypass: true},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
testGetListCacheBypass(t, tc.opts, tc.expectBypass)
|
||||
}
|
||||
}
|
||||
|
||||
func testGetListCacheBypass(t *testing.T, options storage.ListOptions, expectBypass bool) {
|
||||
backingStorage := &dummyStorage{}
|
||||
cacher, _, err := newTestCacher(backingStorage)
|
||||
if err != nil {
|
||||
@ -161,34 +189,21 @@ func TestGetListCacheBypass(t *testing.T) {
|
||||
}
|
||||
defer cacher.Stop()
|
||||
|
||||
pred := storage.SelectionPredicate{
|
||||
Limit: 500,
|
||||
}
|
||||
result := &example.PodList{}
|
||||
|
||||
// Wait until cacher is initialized.
|
||||
if err := cacher.ready.wait(context.Background()); err != nil {
|
||||
t.Fatalf("unexpected error waiting for the cache to be ready")
|
||||
}
|
||||
|
||||
// Inject error to underlying layer and check if cacher is not bypassed.
|
||||
backingStorage.injectError(errDummy)
|
||||
err = cacher.GetList(context.TODO(), "pods/ns", storage.ListOptions{
|
||||
ResourceVersion: "0",
|
||||
Predicate: pred,
|
||||
Recursive: true,
|
||||
}, result)
|
||||
if err != nil {
|
||||
t.Errorf("GetList with Limit and RV=0 should be served from cache: %v", err)
|
||||
err = cacher.GetList(context.TODO(), "pods/ns", options, result)
|
||||
if err != nil && err != errDummy {
|
||||
t.Fatalf("Unexpected error for List request with options: %v, err: %v", options, err)
|
||||
}
|
||||
|
||||
err = cacher.GetList(context.TODO(), "pods/ns", storage.ListOptions{
|
||||
ResourceVersion: "",
|
||||
Predicate: pred,
|
||||
Recursive: true,
|
||||
}, result)
|
||||
if err != errDummy {
|
||||
t.Errorf("GetList with Limit without RV=0 should bypass cacher: %v", err)
|
||||
gotBypass := err == errDummy
|
||||
if gotBypass != expectBypass {
|
||||
t.Errorf("Unexpected bypass result for List request with options %+v, bypass expected: %v, got: %v", options, expectBypass, gotBypass)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user