mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
tests: Migrate TestKVGet e2e test to common test framework
This commit is contained in:
parent
81ef11ffb8
commit
74d77dbaaa
@ -18,6 +18,8 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
"go.etcd.io/etcd/tests/v3/framework/config"
|
"go.etcd.io/etcd/tests/v3/framework/config"
|
||||||
"go.etcd.io/etcd/tests/v3/framework/testutils"
|
"go.etcd.io/etcd/tests/v3/framework/testutils"
|
||||||
)
|
)
|
||||||
@ -78,3 +80,76 @@ func TestKVPut(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestKVGet(t *testing.T) {
|
||||||
|
testRunner.BeforeTest(t)
|
||||||
|
tcs := []struct {
|
||||||
|
name string
|
||||||
|
config config.ClusterConfig
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "NoTLS",
|
||||||
|
config: config.ClusterConfig{ClusterSize: 1},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "PeerTLS",
|
||||||
|
config: config.ClusterConfig{ClusterSize: 1, PeerTLS: config.ManualTLS},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "PeerAutoTLS",
|
||||||
|
config: config.ClusterConfig{ClusterSize: 1, PeerTLS: config.AutoTLS},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ClientTLS",
|
||||||
|
config: config.ClusterConfig{ClusterSize: 1, ClientTLS: config.ManualTLS},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "ClientAutoTLS",
|
||||||
|
config: config.ClusterConfig{ClusterSize: 1, ClientTLS: config.AutoTLS},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tc := range tcs {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
clus := testRunner.NewCluster(t, tc.config)
|
||||||
|
defer clus.Close()
|
||||||
|
cc := clus.Client()
|
||||||
|
|
||||||
|
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"}}
|
||||||
|
)
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
key string
|
||||||
|
options config.GetOptions
|
||||||
|
|
||||||
|
wkv []testutils.KeyValue
|
||||||
|
}{
|
||||||
|
{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},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
resp, err := cc.Get(tt.key, tt.options)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("count not get key %q, err: %s", tt.key[0], err)
|
||||||
|
}
|
||||||
|
kvs := testutils.FromGetResponse(resp)
|
||||||
|
assert.Equal(t, tt.wkv, kvs)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -29,13 +29,6 @@ func TestCtlV3PutClientTLSFlagByEnv(t *testing.T) {
|
|||||||
func TestCtlV3PutIgnoreValue(t *testing.T) { testCtl(t, putTestIgnoreValue) }
|
func TestCtlV3PutIgnoreValue(t *testing.T) { testCtl(t, putTestIgnoreValue) }
|
||||||
func TestCtlV3PutIgnoreLease(t *testing.T) { testCtl(t, putTestIgnoreLease) }
|
func TestCtlV3PutIgnoreLease(t *testing.T) { testCtl(t, putTestIgnoreLease) }
|
||||||
|
|
||||||
func TestCtlV3Get(t *testing.T) { testCtl(t, getTest) }
|
|
||||||
func TestCtlV3GetNoTLS(t *testing.T) { testCtl(t, getTest, withCfg(*e2e.NewConfigNoTLS())) }
|
|
||||||
func TestCtlV3GetClientTLS(t *testing.T) { testCtl(t, getTest, withCfg(*e2e.NewConfigClientTLS())) }
|
|
||||||
func TestCtlV3GetClientAutoTLS(t *testing.T) {
|
|
||||||
testCtl(t, getTest, withCfg(*e2e.NewConfigClientAutoTLS()))
|
|
||||||
}
|
|
||||||
func TestCtlV3GetPeerTLS(t *testing.T) { testCtl(t, getTest, withCfg(*e2e.NewConfigPeerTLS())) }
|
|
||||||
func TestCtlV3GetTimeout(t *testing.T) { testCtl(t, getTest, withDialTimeout(0)) }
|
func TestCtlV3GetTimeout(t *testing.T) { testCtl(t, getTest, withDialTimeout(0)) }
|
||||||
func TestCtlV3GetQuorum(t *testing.T) { testCtl(t, getTest, withQuorum()) }
|
func TestCtlV3GetQuorum(t *testing.T) { testCtl(t, getTest, withQuorum()) }
|
||||||
|
|
||||||
|
28
tests/framework/testutils/kvs.go
Normal file
28
tests/framework/testutils/kvs.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// Copyright 2022 The etcd Authors
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
package testutils
|
||||||
|
|
||||||
|
import clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
|
|
||||||
|
type KeyValue struct {
|
||||||
|
Key, Value string
|
||||||
|
}
|
||||||
|
|
||||||
|
func FromGetResponse(resp *clientv3.GetResponse) (kvs []KeyValue) {
|
||||||
|
for _, kv := range resp.Kvs {
|
||||||
|
kvs = append(kvs, KeyValue{Key: string(kv.Key), Value: string(kv.Value)})
|
||||||
|
}
|
||||||
|
return kvs
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user