mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
tests: Migrate TestKVRange integration test to TestKVGet
This commit is contained in:
parent
74d77dbaaa
commit
bd9f366f40
@ -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)
|
||||
}
|
||||
})
|
||||
|
@ -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
|
||||
}
|
@ -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},
|
||||
|
Loading…
x
Reference in New Issue
Block a user