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() {
|
testutils.ExecuteWithTimeout(t, 10*time.Second, func() {
|
||||||
var (
|
var (
|
||||||
kvs = []testutils.KeyValue{{"key1", "val1"}, {"key2", "val2"}, {"key3", "val3"}}
|
kvs = []string{"a", "b", "c", "c", "c", "foo", "foo/abc", "fop"}
|
||||||
revkvs = []testutils.KeyValue{{"key3", "val3"}, {"key2", "val2"}, {"key1", "val1"}}
|
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 {
|
for i := range kvs {
|
||||||
if err := cc.Put(kvs[i].Key, kvs[i].Value); err != nil {
|
if err := cc.Put(kvs[i], "bar"); err != nil {
|
||||||
t.Fatalf("count not put key %q, err: %s", kvs[i].Key, err)
|
t.Fatalf("count not put key %q, err: %s", kvs[i], err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
key string
|
begin string
|
||||||
|
end string
|
||||||
options config.GetOptions
|
options config.GetOptions
|
||||||
|
|
||||||
wkv []testutils.KeyValue
|
wkv []string
|
||||||
}{
|
}{
|
||||||
{key: "key1", wkv: []testutils.KeyValue{{"key1", "val1"}}},
|
{begin: "a", wkv: wantKvs[:1]},
|
||||||
{key: "", options: config.GetOptions{Prefix: true}, wkv: kvs},
|
{begin: "a", options: config.GetOptions{Serializable: true}, wkv: wantKvs[:1]},
|
||||||
{key: "", options: config.GetOptions{FromKey: true}, wkv: kvs},
|
{begin: "a", options: config.GetOptions{End: "c"}, wkv: wantKvs[:2]},
|
||||||
{key: "key", options: config.GetOptions{Prefix: true}, wkv: kvs},
|
{begin: "", options: config.GetOptions{Prefix: true}, wkv: wantKvs},
|
||||||
{key: "key", options: config.GetOptions{Prefix: true, Limit: 2}, wkv: kvs[:2]},
|
{begin: "", options: config.GetOptions{FromKey: true}, wkv: wantKvs},
|
||||||
{key: "key", options: config.GetOptions{Prefix: true, Order: clientv3.SortAscend, SortBy: clientv3.SortByModRevision}, wkv: kvs},
|
{begin: "a", options: config.GetOptions{End: "x"}, wkv: wantKvs},
|
||||||
{key: "key", options: config.GetOptions{Prefix: true, Order: clientv3.SortAscend, SortBy: clientv3.SortByVersion}, wkv: kvs},
|
{begin: "", options: config.GetOptions{Prefix: true, Revision: 4}, wkv: kvs[:3]},
|
||||||
{key: "key", options: config.GetOptions{Prefix: true, Order: clientv3.SortNone, SortBy: clientv3.SortByCreateRevision}, wkv: kvs},
|
{begin: "a", options: config.GetOptions{CountOnly: true}, wkv: nil},
|
||||||
{key: "key", options: config.GetOptions{Prefix: true, Order: clientv3.SortDescend, SortBy: clientv3.SortByCreateRevision}, wkv: revkvs},
|
{begin: "foo", options: config.GetOptions{Prefix: true}, wkv: []string{"foo", "foo/abc"}},
|
||||||
{key: "key", options: config.GetOptions{Prefix: true, Order: clientv3.SortDescend, SortBy: clientv3.SortByKey}, wkv: revkvs},
|
{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 {
|
for _, tt := range tests {
|
||||||
resp, err := cc.Get(tt.key, tt.options)
|
resp, err := cc.Get(tt.begin, tt.options)
|
||||||
if err != nil {
|
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)
|
assert.Equal(t, tt.wkv, kvs)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -16,13 +16,9 @@ package testutils
|
|||||||
|
|
||||||
import clientv3 "go.etcd.io/etcd/client/v3"
|
import clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
|
|
||||||
type KeyValue struct {
|
func KeysFromGetResponse(resp *clientv3.GetResponse) (kvs []string) {
|
||||||
Key, Value string
|
|
||||||
}
|
|
||||||
|
|
||||||
func FromGetResponse(resp *clientv3.GetResponse) (kvs []KeyValue) {
|
|
||||||
for _, kv := range resp.Kvs {
|
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
|
return kvs
|
||||||
}
|
}
|
@ -254,180 +254,12 @@ func TestKVRange(t *testing.T) {
|
|||||||
|
|
||||||
wantSet []*mvccpb.KeyValue
|
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
|
// fetch entire keyspace using WithFromKey
|
||||||
{
|
{
|
||||||
"\x00", "",
|
"\x00", "",
|
||||||
0,
|
0,
|
||||||
[]clientv3.OpOption{clientv3.WithFromKey(), clientv3.WithSort(clientv3.SortByKey, clientv3.SortAscend)},
|
[]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{
|
[]*mvccpb.KeyValue{
|
||||||
{Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1},
|
{Key: []byte("a"), Value: nil, CreateRevision: 2, ModRevision: 2, Version: 1},
|
||||||
{Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1},
|
{Key: []byte("b"), Value: nil, CreateRevision: 3, ModRevision: 3, Version: 1},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user