From bd9f366f40ea1da55ee859acf283c5ab84c723f8 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Fri, 18 Feb 2022 15:15:35 +0100 Subject: [PATCH] tests: Migrate TestKVRange integration test to TestKVGet --- tests/common/kv_test.go | 48 +++-- .../testutils/{kvs.go => helpters.go} | 8 +- tests/integration/clientv3/kv_test.go | 168 ------------------ 3 files changed, 31 insertions(+), 193 deletions(-) rename tests/framework/testutils/{kvs.go => helpters.go} (78%) diff --git a/tests/common/kv_test.go b/tests/common/kv_test.go index a2c16f89f..2b69d7ba5 100644 --- a/tests/common/kv_test.go +++ b/tests/common/kv_test.go @@ -116,37 +116,47 @@ func TestKVGet(t *testing.T) { testutils.ExecuteWithTimeout(t, 10*time.Second, func() { var ( - kvs = []testutils.KeyValue{{"key1", "val1"}, {"key2", "val2"}, {"key3", "val3"}} - revkvs = []testutils.KeyValue{{"key3", "val3"}, {"key2", "val2"}, {"key1", "val1"}} + kvs = []string{"a", "b", "c", "c", "c", "foo", "foo/abc", "fop"} + wantKvs = []string{"a", "b", "c", "foo", "foo/abc", "fop"} + kvsByVersion = []string{"a", "b", "foo", "foo/abc", "fop", "c"} + reversedKvs = []string{"fop", "foo/abc", "foo", "c", "b", "a"} ) + for i := range kvs { - if err := cc.Put(kvs[i].Key, kvs[i].Value); err != nil { - t.Fatalf("count not put key %q, err: %s", kvs[i].Key, err) + if err := cc.Put(kvs[i], "bar"); err != nil { + t.Fatalf("count not put key %q, err: %s", kvs[i], err) } } tests := []struct { - key string + begin string + end string options config.GetOptions - wkv []testutils.KeyValue + wkv []string }{ - {key: "key1", wkv: []testutils.KeyValue{{"key1", "val1"}}}, - {key: "", options: config.GetOptions{Prefix: true}, wkv: kvs}, - {key: "", options: config.GetOptions{FromKey: true}, wkv: kvs}, - {key: "key", options: config.GetOptions{Prefix: true}, wkv: kvs}, - {key: "key", options: config.GetOptions{Prefix: true, Limit: 2}, wkv: kvs[:2]}, - {key: "key", options: config.GetOptions{Prefix: true, Order: clientv3.SortAscend, SortBy: clientv3.SortByModRevision}, wkv: kvs}, - {key: "key", options: config.GetOptions{Prefix: true, Order: clientv3.SortAscend, SortBy: clientv3.SortByVersion}, wkv: kvs}, - {key: "key", options: config.GetOptions{Prefix: true, Order: clientv3.SortNone, SortBy: clientv3.SortByCreateRevision}, wkv: kvs}, - {key: "key", options: config.GetOptions{Prefix: true, Order: clientv3.SortDescend, SortBy: clientv3.SortByCreateRevision}, wkv: revkvs}, - {key: "key", options: config.GetOptions{Prefix: true, Order: clientv3.SortDescend, SortBy: clientv3.SortByKey}, wkv: revkvs}, + {begin: "a", wkv: wantKvs[:1]}, + {begin: "a", options: config.GetOptions{Serializable: true}, wkv: wantKvs[:1]}, + {begin: "a", options: config.GetOptions{End: "c"}, wkv: wantKvs[:2]}, + {begin: "", options: config.GetOptions{Prefix: true}, wkv: wantKvs}, + {begin: "", options: config.GetOptions{FromKey: true}, wkv: wantKvs}, + {begin: "a", options: config.GetOptions{End: "x"}, wkv: wantKvs}, + {begin: "", options: config.GetOptions{Prefix: true, Revision: 4}, wkv: kvs[:3]}, + {begin: "a", options: config.GetOptions{CountOnly: true}, wkv: nil}, + {begin: "foo", options: config.GetOptions{Prefix: true}, wkv: []string{"foo", "foo/abc"}}, + {begin: "foo", options: config.GetOptions{FromKey: true}, wkv: []string{"foo", "foo/abc", "fop"}}, + {begin: "", options: config.GetOptions{Prefix: true, Limit: 2}, wkv: wantKvs[:2]}, + {begin: "", options: config.GetOptions{Prefix: true, Order: clientv3.SortAscend, SortBy: clientv3.SortByModRevision}, wkv: wantKvs}, + {begin: "", options: config.GetOptions{Prefix: true, Order: clientv3.SortAscend, SortBy: clientv3.SortByVersion}, wkv: kvsByVersion}, + {begin: "", options: config.GetOptions{Prefix: true, Order: clientv3.SortNone, SortBy: clientv3.SortByCreateRevision}, wkv: wantKvs}, + {begin: "", options: config.GetOptions{Prefix: true, Order: clientv3.SortDescend, SortBy: clientv3.SortByCreateRevision}, wkv: reversedKvs}, + {begin: "", options: config.GetOptions{Prefix: true, Order: clientv3.SortDescend, SortBy: clientv3.SortByKey}, wkv: reversedKvs}, } for _, tt := range tests { - resp, err := cc.Get(tt.key, tt.options) + resp, err := cc.Get(tt.begin, tt.options) if err != nil { - t.Fatalf("count not get key %q, err: %s", tt.key[0], err) + t.Fatalf("count not get key %q, err: %s", tt.begin, err) } - kvs := testutils.FromGetResponse(resp) + kvs := testutils.KeysFromGetResponse(resp) assert.Equal(t, tt.wkv, kvs) } }) diff --git a/tests/framework/testutils/kvs.go b/tests/framework/testutils/helpters.go similarity index 78% rename from tests/framework/testutils/kvs.go rename to tests/framework/testutils/helpters.go index d61ab6742..ecc165a86 100644 --- a/tests/framework/testutils/kvs.go +++ b/tests/framework/testutils/helpters.go @@ -16,13 +16,9 @@ package testutils import clientv3 "go.etcd.io/etcd/client/v3" -type KeyValue struct { - Key, Value string -} - -func FromGetResponse(resp *clientv3.GetResponse) (kvs []KeyValue) { +func KeysFromGetResponse(resp *clientv3.GetResponse) (kvs []string) { for _, kv := range resp.Kvs { - kvs = append(kvs, KeyValue{Key: string(kv.Key), Value: string(kv.Value)}) + kvs = append(kvs, string(kv.Key)) } return kvs } diff --git a/tests/integration/clientv3/kv_test.go b/tests/integration/clientv3/kv_test.go index fe0b5a2c4..9d164760c 100644 --- a/tests/integration/clientv3/kv_test.go +++ b/tests/integration/clientv3/kv_test.go @@ -254,180 +254,12 @@ func TestKVRange(t *testing.T) { wantSet []*mvccpb.KeyValue }{ - // range first two - { - "a", "c", - 0, - nil, - - []*mvccpb.KeyValue{ - {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, - {Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1}, - }, - }, - // range first two with serializable - { - "a", "c", - 0, - []clientv3.OpOption{clientv3.WithSerializable()}, - - []*mvccpb.KeyValue{ - {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, - {Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1}, - }, - }, - // range all with rev - { - "a", "x", - 2, - nil, - - []*mvccpb.KeyValue{ - {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, - }, - }, - // range all with countOnly - { - "a", "x", - 2, - []clientv3.OpOption{clientv3.WithCountOnly()}, - - nil, - }, - // range all with SortByKey, SortAscend - { - "a", "x", - 0, - []clientv3.OpOption{clientv3.WithSort(clientv3.SortByKey, clientv3.SortAscend)}, - - []*mvccpb.KeyValue{ - {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, - {Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1}, - {Key: []byte("c"), Value: nil, CreateRevision: 4, ModRevision: 6, Version: 3}, - {Key: []byte("foo"), Value: nil, CreateRevision: 7, ModRevision: 7, Version: 1}, - {Key: []byte("foo/abc"), Value: nil, CreateRevision: 8, ModRevision: 8, Version: 1}, - {Key: []byte("fop"), Value: nil, CreateRevision: 9, ModRevision: 9, Version: 1}, - }, - }, - // range all with SortByKey, missing sorting order (ASCEND by default) - { - "a", "x", - 0, - []clientv3.OpOption{clientv3.WithSort(clientv3.SortByKey, clientv3.SortNone)}, - - []*mvccpb.KeyValue{ - {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, - {Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1}, - {Key: []byte("c"), Value: nil, CreateRevision: 4, ModRevision: 6, Version: 3}, - {Key: []byte("foo"), Value: nil, CreateRevision: 7, ModRevision: 7, Version: 1}, - {Key: []byte("foo/abc"), Value: nil, CreateRevision: 8, ModRevision: 8, Version: 1}, - {Key: []byte("fop"), Value: nil, CreateRevision: 9, ModRevision: 9, Version: 1}, - }, - }, - // range all with SortByCreateRevision, SortDescend - { - "a", "x", - 0, - []clientv3.OpOption{clientv3.WithSort(clientv3.SortByCreateRevision, clientv3.SortDescend)}, - - []*mvccpb.KeyValue{ - {Key: []byte("fop"), Value: nil, CreateRevision: 9, ModRevision: 9, Version: 1}, - {Key: []byte("foo/abc"), Value: nil, CreateRevision: 8, ModRevision: 8, Version: 1}, - {Key: []byte("foo"), Value: nil, CreateRevision: 7, ModRevision: 7, Version: 1}, - {Key: []byte("c"), Value: nil, CreateRevision: 4, ModRevision: 6, Version: 3}, - {Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1}, - {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, - }, - }, - // range all with SortByCreateRevision, missing sorting order (ASCEND by default) - { - "a", "x", - 0, - []clientv3.OpOption{clientv3.WithSort(clientv3.SortByCreateRevision, clientv3.SortNone)}, - - []*mvccpb.KeyValue{ - {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, - {Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1}, - {Key: []byte("c"), Value: nil, CreateRevision: 4, ModRevision: 6, Version: 3}, - {Key: []byte("foo"), Value: nil, CreateRevision: 7, ModRevision: 7, Version: 1}, - {Key: []byte("foo/abc"), Value: nil, CreateRevision: 8, ModRevision: 8, Version: 1}, - {Key: []byte("fop"), Value: nil, CreateRevision: 9, ModRevision: 9, Version: 1}, - }, - }, - // range all with SortByModRevision, SortDescend - { - "a", "x", - 0, - []clientv3.OpOption{clientv3.WithSort(clientv3.SortByModRevision, clientv3.SortDescend)}, - - []*mvccpb.KeyValue{ - {Key: []byte("fop"), Value: nil, CreateRevision: 9, ModRevision: 9, Version: 1}, - {Key: []byte("foo/abc"), Value: nil, CreateRevision: 8, ModRevision: 8, Version: 1}, - {Key: []byte("foo"), Value: nil, CreateRevision: 7, ModRevision: 7, Version: 1}, - {Key: []byte("c"), Value: nil, CreateRevision: 4, ModRevision: 6, Version: 3}, - {Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1}, - {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, - }, - }, - // WithPrefix - { - "foo", "", - 0, - []clientv3.OpOption{clientv3.WithPrefix()}, - - []*mvccpb.KeyValue{ - {Key: []byte("foo"), Value: nil, CreateRevision: 7, ModRevision: 7, Version: 1}, - {Key: []byte("foo/abc"), Value: nil, CreateRevision: 8, ModRevision: 8, Version: 1}, - }, - }, - // WithFromKey - { - "fo", "", - 0, - []clientv3.OpOption{clientv3.WithFromKey()}, - - []*mvccpb.KeyValue{ - {Key: []byte("foo"), Value: nil, CreateRevision: 7, ModRevision: 7, Version: 1}, - {Key: []byte("foo/abc"), Value: nil, CreateRevision: 8, ModRevision: 8, Version: 1}, - {Key: []byte("fop"), Value: nil, CreateRevision: 9, ModRevision: 9, Version: 1}, - }, - }, // fetch entire keyspace using WithFromKey { "\x00", "", 0, []clientv3.OpOption{clientv3.WithFromKey(), clientv3.WithSort(clientv3.SortByKey, clientv3.SortAscend)}, - []*mvccpb.KeyValue{ - {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, - {Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1}, - {Key: []byte("c"), Value: nil, CreateRevision: 4, ModRevision: 6, Version: 3}, - {Key: []byte("foo"), Value: nil, CreateRevision: 7, ModRevision: 7, Version: 1}, - {Key: []byte("foo/abc"), Value: nil, CreateRevision: 8, ModRevision: 8, Version: 1}, - {Key: []byte("fop"), Value: nil, CreateRevision: 9, ModRevision: 9, Version: 1}, - }, - }, - // fetch entire keyspace using WithPrefix - { - "", "", - 0, - []clientv3.OpOption{clientv3.WithPrefix(), clientv3.WithSort(clientv3.SortByKey, clientv3.SortAscend)}, - - []*mvccpb.KeyValue{ - {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, - {Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1}, - {Key: []byte("c"), Value: nil, CreateRevision: 4, ModRevision: 6, Version: 3}, - {Key: []byte("foo"), Value: nil, CreateRevision: 7, ModRevision: 7, Version: 1}, - {Key: []byte("foo/abc"), Value: nil, CreateRevision: 8, ModRevision: 8, Version: 1}, - {Key: []byte("fop"), Value: nil, CreateRevision: 9, ModRevision: 9, Version: 1}, - }, - }, - // fetch keyspace with empty key using WithFromKey - { - "", "", - 0, - []clientv3.OpOption{clientv3.WithFromKey(), clientv3.WithSort(clientv3.SortByKey, clientv3.SortAscend)}, - []*mvccpb.KeyValue{ {Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1}, {Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1},