From f1ded3b0c34c70c7a993d3c979571d96a29d56bc Mon Sep 17 00:00:00 2001 From: Steve Kuznetsov Date: Wed, 16 Feb 2022 13:23:49 -0800 Subject: [PATCH] storage: etcd: TestGetToList: use sub-tests Signed-off-by: Steve Kuznetsov --- .../apiserver/pkg/storage/etcd3/store_test.go | 86 +++++++++++-------- 1 file changed, 50 insertions(+), 36 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go index e22228534dc..636e48013b3 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go @@ -35,7 +35,7 @@ import ( clientv3 "go.etcd.io/etcd/client/v3" "google.golang.org/grpc/grpclog" - apitesting "k8s.io/apimachinery/pkg/api/apitesting" + "k8s.io/apimachinery/pkg/api/apitesting" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/conversion" @@ -542,68 +542,80 @@ func TestGetToList(t *testing.T) { currentRV, _ := strconv.Atoi(storedObj.ResourceVersion) tests := []struct { + name string key string pred storage.SelectionPredicate expectedOut []*example.Pod rv string rvMatch metav1.ResourceVersionMatch expectRVTooLarge bool - }{{ // test GetToList on existing key + }{{ + name: "test GetToList on existing key", key: key, pred: storage.Everything, expectedOut: []*example.Pod{storedObj}, - }, { // test GetToList on existing key with minimum resource version set to 0 + }, { + name: "test GetToList on existing key with minimum resource version set to 0", key: key, pred: storage.Everything, expectedOut: []*example.Pod{storedObj}, rv: "0", - }, { // test GetToList on existing key with minimum resource version set to 0, match=minimum + }, { + name: "test GetToList on existing key with minimum resource version set to 0, match=minimum", key: key, pred: storage.Everything, expectedOut: []*example.Pod{storedObj}, rv: "0", rvMatch: metav1.ResourceVersionMatchNotOlderThan, - }, { // test GetToList on existing key with minimum resource version set to current resource version + }, { + name: "test GetToList on existing key with minimum resource version set to current resource version", key: key, pred: storage.Everything, expectedOut: []*example.Pod{storedObj}, rv: fmt.Sprintf("%d", currentRV), - }, { // test GetToList on existing key with minimum resource version set to current resource version, match=minimum + }, { + name: "test GetToList on existing key with minimum resource version set to current resource version, match=minimum", key: key, pred: storage.Everything, expectedOut: []*example.Pod{storedObj}, rv: fmt.Sprintf("%d", currentRV), rvMatch: metav1.ResourceVersionMatchNotOlderThan, - }, { // test GetToList on existing key with minimum resource version set to previous resource version, match=minimum + }, { + name: "test GetToList on existing key with minimum resource version set to previous resource version, match=minimum", key: key, pred: storage.Everything, expectedOut: []*example.Pod{storedObj}, rv: fmt.Sprintf("%d", prevRV), rvMatch: metav1.ResourceVersionMatchNotOlderThan, - }, { // test GetToList on existing key with resource version set to current resource version, match=exact + }, { + name: "test GetToList on existing key with resource version set to current resource version, match=exact", key: key, pred: storage.Everything, expectedOut: []*example.Pod{storedObj}, rv: fmt.Sprintf("%d", currentRV), rvMatch: metav1.ResourceVersionMatchExact, - }, { // test GetToList on existing key with resource version set to previous resource version, match=exact + }, { + name: "test GetToList on existing key with resource version set to previous resource version, match=exact", key: prevKey, pred: storage.Everything, expectedOut: []*example.Pod{prevStoredObj}, rv: fmt.Sprintf("%d", prevRV), rvMatch: metav1.ResourceVersionMatchExact, - }, { // test GetToList on existing key with minimum resource version set too high + }, { + name: "test GetToList on existing key with minimum resource version set too high", key: key, pred: storage.Everything, expectedOut: []*example.Pod{storedObj}, rv: fmt.Sprintf("%d", currentRV+1), expectRVTooLarge: true, - }, { // test GetToList on non-existing key + }, { + name: "test GetToList on non-existing key", key: "/non-existing", pred: storage.Everything, expectedOut: nil, - }, { // test GetToList with matching pod name - key: "/non-existing", + }, { + name: "test GetToList with matching pod name", + key: "/non-existing", pred: storage.SelectionPredicate{ Label: labels.Everything(), Field: fields.ParseSelectorOrDie("metadata.name!=" + storedObj.Name), @@ -615,33 +627,35 @@ func TestGetToList(t *testing.T) { expectedOut: nil, }} - for i, tt := range tests { - out := &example.PodList{} - err := store.GetToList(ctx, tt.key, storage.ListOptions{ResourceVersion: tt.rv, ResourceVersionMatch: tt.rvMatch, Predicate: tt.pred}, out) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + out := &example.PodList{} + err := store.GetToList(ctx, tt.key, storage.ListOptions{ResourceVersion: tt.rv, ResourceVersionMatch: tt.rvMatch, Predicate: tt.pred}, out) - if tt.expectRVTooLarge { - if err == nil || !storage.IsTooLargeResourceVersion(err) { - t.Errorf("#%d: expecting resource version too high error, but get: %s", i, err) + if tt.expectRVTooLarge { + if err == nil || !storage.IsTooLargeResourceVersion(err) { + t.Errorf("%s: expecting resource version too high error, but get: %s", tt.name, err) + } + return } - continue - } - if err != nil { - t.Fatalf("GetToList failed: %v", err) - } - if len(out.ResourceVersion) == 0 { - t.Errorf("#%d: unset resourceVersion", i) - } - if len(out.Items) != len(tt.expectedOut) { - t.Errorf("#%d: length of list want=%d, get=%d", i, len(tt.expectedOut), len(out.Items)) - continue - } - for j, wantPod := range tt.expectedOut { - getPod := &out.Items[j] - if !reflect.DeepEqual(wantPod, getPod) { - t.Errorf("#%d: pod want=%#v, get=%#v", i, wantPod, getPod) + if err != nil { + t.Fatalf("GetToList failed: %v", err) } - } + if len(out.ResourceVersion) == 0 { + t.Errorf("%s: unset resourceVersion", tt.name) + } + if len(out.Items) != len(tt.expectedOut) { + t.Errorf("%s: length of list want=%d, get=%d", tt.name, len(tt.expectedOut), len(out.Items)) + return + } + for j, wantPod := range tt.expectedOut { + getPod := &out.Items[j] + if !reflect.DeepEqual(wantPod, getPod) { + t.Errorf("%s: pod want=%#v, get=%#v", tt.name, wantPod, getPod) + } + } + }) } }