From b50f10299b6f9aa9cef2ba5cf2dedd7fcb390841 Mon Sep 17 00:00:00 2001 From: Danielle Lancashire Date: Wed, 16 Mar 2022 15:26:08 +0000 Subject: [PATCH] tests/framework: Add PutOptions Put can take a leaseid to associate a value with a lease. This adds the ability for tests to make use of this. --- tests/common/compact_test.go | 2 +- tests/common/defrag_test.go | 2 +- tests/common/kv_test.go | 6 +++--- tests/e2e/ctl_v3_grpc_test.go | 3 ++- tests/framework/config/client.go | 4 ++++ tests/framework/e2e/etcdctl.go | 9 +++++++-- tests/framework/integration.go | 8 ++++++-- tests/framework/interface.go | 2 +- 8 files changed, 25 insertions(+), 11 deletions(-) diff --git a/tests/common/compact_test.go b/tests/common/compact_test.go index 8effa94e1..d21d206aa 100644 --- a/tests/common/compact_test.go +++ b/tests/common/compact_test.go @@ -47,7 +47,7 @@ func TestCompact(t *testing.T) { testutils.ExecuteWithTimeout(t, 10*time.Second, func() { var kvs = []testutils.KV{{Key: "key", Val: "val1"}, {Key: "key", Val: "val2"}, {Key: "key", Val: "val3"}} for i := range kvs { - if err := clus.Client().Put(kvs[i].Key, kvs[i].Val); err != nil { + if err := clus.Client().Put(kvs[i].Key, kvs[i].Val, config.PutOptions{}); err != nil { t.Fatalf("compactTest #%d: put kv error (%v)", i, err) } } diff --git a/tests/common/defrag_test.go b/tests/common/defrag_test.go index 6cfce4c68..2c7db2b7c 100644 --- a/tests/common/defrag_test.go +++ b/tests/common/defrag_test.go @@ -30,7 +30,7 @@ func TestDefragOnline(t *testing.T) { defer clus.Close() var kvs = []testutils.KV{{Key: "key", Val: "val1"}, {Key: "key", Val: "val2"}, {Key: "key", Val: "val3"}} for i := range kvs { - if err := clus.Client().Put(kvs[i].Key, kvs[i].Val); err != nil { + if err := clus.Client().Put(kvs[i].Key, kvs[i].Val, config.PutOptions{}); err != nil { t.Fatalf("compactTest #%d: put kv error (%v)", i, err) } } diff --git a/tests/common/kv_test.go b/tests/common/kv_test.go index 2a4eccacc..6f5849ee9 100644 --- a/tests/common/kv_test.go +++ b/tests/common/kv_test.go @@ -60,7 +60,7 @@ func TestKVPut(t *testing.T) { testutils.ExecuteWithTimeout(t, 10*time.Second, func() { key, value := "foo", "bar" - if err := cc.Put(key, value); err != nil { + if err := cc.Put(key, value, config.PutOptions{}); err != nil { t.Fatalf("count not put key %q, err: %s", key, err) } resp, err := cc.Get(key, config.GetOptions{Serializable: true}) @@ -123,7 +123,7 @@ func TestKVGet(t *testing.T) { ) for i := range kvs { - if err := cc.Put(kvs[i], "bar"); err != nil { + if err := cc.Put(kvs[i], "bar", config.PutOptions{}); err != nil { t.Fatalf("count not put key %q, err: %s", kvs[i], err) } } @@ -246,7 +246,7 @@ func TestKVDelete(t *testing.T) { } for _, tt := range tests { for i := range kvs { - if err := cc.Put(kvs[i], "bar"); err != nil { + if err := cc.Put(kvs[i], "bar", config.PutOptions{}); err != nil { t.Fatalf("count not put key %q, err: %s", kvs[i], err) } } diff --git a/tests/e2e/ctl_v3_grpc_test.go b/tests/e2e/ctl_v3_grpc_test.go index 8c8be2c69..878dd7948 100644 --- a/tests/e2e/ctl_v3_grpc_test.go +++ b/tests/e2e/ctl_v3_grpc_test.go @@ -24,6 +24,7 @@ import ( "time" "github.com/stretchr/testify/assert" + "go.etcd.io/etcd/tests/v3/framework/config" "go.etcd.io/etcd/tests/v3/framework/e2e" "go.etcd.io/etcd/tests/v3/framework/testutils" ) @@ -100,7 +101,7 @@ func TestAuthority(t *testing.T) { endpoints := templateEndpoints(t, tc.clientURLPattern, epc) client := e2e.NewEtcdctl(cfg, endpoints) - err = client.Put("foo", "bar") + err = client.Put("foo", "bar", config.PutOptions{}) if err != nil { t.Fatal(err) } diff --git a/tests/framework/config/client.go b/tests/framework/config/client.go index c63dd5995..ef2ef9c27 100644 --- a/tests/framework/config/client.go +++ b/tests/framework/config/client.go @@ -32,6 +32,10 @@ type GetOptions struct { SortBy clientv3.SortTarget } +type PutOptions struct { + LeaseID clientv3.LeaseID +} + type DeleteOptions struct { Prefix bool FromKey bool diff --git a/tests/framework/e2e/etcdctl.go b/tests/framework/e2e/etcdctl.go index f0714aeb7..2d30a83e0 100644 --- a/tests/framework/e2e/etcdctl.go +++ b/tests/framework/e2e/etcdctl.go @@ -107,8 +107,13 @@ func (ctl *EtcdctlV3) Get(key string, o config.GetOptions) (*clientv3.GetRespons return &resp, err } -func (ctl *EtcdctlV3) Put(key, value string) error { - return SpawnWithExpect(ctl.cmdArgs("put", key, value), "OK") +func (ctl *EtcdctlV3) Put(key, value string, opts config.PutOptions) error { + args := ctl.cmdArgs() + args = append(args, "put", key, value) + if opts.LeaseID != 0 { + args = append(args, "--lease", strconv.FormatInt(int64(opts.LeaseID), 16)) + } + return SpawnWithExpect(args, "OK") } func (ctl *EtcdctlV3) Delete(key string, o config.DeleteOptions) (*clientv3.DeleteResponse, error) { diff --git a/tests/framework/integration.go b/tests/framework/integration.go index 6a5eac295..3c4cf2567 100644 --- a/tests/framework/integration.go +++ b/tests/framework/integration.go @@ -126,8 +126,12 @@ func (c integrationClient) Get(key string, o config.GetOptions) (*clientv3.GetRe return c.Client.Get(context.Background(), key, clientOpts...) } -func (c integrationClient) Put(key, value string) error { - _, err := c.Client.Put(context.Background(), key, value) +func (c integrationClient) Put(key, value string, opts config.PutOptions) error { + clientOpts := []clientv3.OpOption{} + if opts.LeaseID != 0 { + clientOpts = append(clientOpts, clientv3.WithLease(opts.LeaseID)) + } + _, err := c.Client.Put(context.Background(), key, value, clientOpts...) return err } diff --git a/tests/framework/interface.go b/tests/framework/interface.go index c4fa9bda1..08ead6a80 100644 --- a/tests/framework/interface.go +++ b/tests/framework/interface.go @@ -33,7 +33,7 @@ type Cluster interface { } type Client interface { - Put(key, value string) error + Put(key, value string, opts config.PutOptions) error Get(key string, opts config.GetOptions) (*clientv3.GetResponse, error) Delete(key string, opts config.DeleteOptions) (*clientv3.DeleteResponse, error) Compact(rev int64, opts config.CompactOption) (*clientv3.CompactResponse, error)