From 366e689eaef6fa014b5ef369f781d607911900ec Mon Sep 17 00:00:00 2001 From: fanmin shi Date: Mon, 6 Feb 2017 15:22:48 -0800 Subject: [PATCH] clientv3: uses direct client calls in integration tests clientv3 integration test was using clientv3.NewKV, clientv3.NewWatcher, etc to create specific client. replace those with direct client calls so that the direct calls can also test grpc proxy. --- clientv3/integration/cluster_test.go | 9 +++--- clientv3/integration/kv_test.go | 42 ++++++++++++-------------- clientv3/integration/lease_test.go | 44 ++++++++++++---------------- clientv3/integration/role_test.go | 3 +- clientv3/integration/txn_test.go | 8 ++--- clientv3/integration/user_test.go | 3 +- clientv3/integration/watch_test.go | 34 ++++++++------------- 7 files changed, 58 insertions(+), 85 deletions(-) diff --git a/clientv3/integration/cluster_test.go b/clientv3/integration/cluster_test.go index e562d416f..6397f8a8a 100644 --- a/clientv3/integration/cluster_test.go +++ b/clientv3/integration/cluster_test.go @@ -18,7 +18,6 @@ import ( "reflect" "testing" - "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/integration" "github.com/coreos/etcd/pkg/testutil" "github.com/coreos/etcd/pkg/types" @@ -31,7 +30,7 @@ func TestMemberList(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - capi := clientv3.NewCluster(clus.RandClient()) + capi := clus.RandClient() resp, err := capi.MemberList(context.Background()) if err != nil { @@ -49,7 +48,7 @@ func TestMemberAdd(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - capi := clientv3.NewCluster(clus.RandClient()) + capi := clus.RandClient() urls := []string{"http://127.0.0.1:1234"} resp, err := capi.MemberAdd(context.Background(), urls) @@ -68,7 +67,7 @@ func TestMemberRemove(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - capi := clientv3.NewCluster(clus.Client(1)) + capi := clus.Client(1) resp, err := capi.MemberList(context.Background()) if err != nil { t.Fatalf("failed to list member %v", err) @@ -106,7 +105,7 @@ func TestMemberUpdate(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - capi := clientv3.NewCluster(clus.RandClient()) + capi := clus.RandClient() resp, err := capi.MemberList(context.Background()) if err != nil { t.Fatalf("failed to list member %v", err) diff --git a/clientv3/integration/kv_test.go b/clientv3/integration/kv_test.go index dc32005d4..f9f87fe20 100644 --- a/clientv3/integration/kv_test.go +++ b/clientv3/integration/kv_test.go @@ -42,7 +42,7 @@ func TestKVPutError(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1, QuotaBackendBytes: quota}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() ctx := context.TODO() _, err := kv.Put(ctx, "", "bar") @@ -74,10 +74,9 @@ func TestKVPut(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - lapi := clientv3.NewLease(clus.RandClient()) - defer lapi.Close() + lapi := clus.RandClient() - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() ctx := context.TODO() resp, err := lapi.Grant(context.Background(), 10) @@ -120,7 +119,7 @@ func TestKVPutWithIgnoreValue(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() _, err := kv.Put(context.TODO(), "foo", "", clientv3.WithIgnoreValue()) if err != rpctypes.ErrKeyNotFound { @@ -153,10 +152,9 @@ func TestKVPutWithIgnoreLease(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() - lapi := clientv3.NewLease(clus.RandClient()) - defer lapi.Close() + lapi := clus.RandClient() resp, err := lapi.Grant(context.Background(), 10) if err != nil { @@ -203,7 +201,7 @@ func TestKVPutWithRequireLeader(t *testing.T) { ) time.Sleep(time.Duration(3*electionTicks) * tickDuration) - kv := clientv3.NewKV(clus.Client(0)) + kv := clus.Client(0) _, err := kv.Put(clientv3.WithRequireLeader(context.Background()), "foo", "bar") if err != rpctypes.ErrNoLeader { t.Fatal(err) @@ -223,7 +221,7 @@ func TestKVRange(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() ctx := context.TODO() keySet := []string{"a", "b", "c", "c", "c", "foo", "foo/abc", "fop"} @@ -408,12 +406,11 @@ func TestKVGetErrConnClosed(t *testing.T) { defer clus.Terminate(t) cli := clus.Client(0) - kv := clientv3.NewKV(cli) donec := make(chan struct{}) go func() { defer close(donec) - _, err := kv.Get(context.TODO(), "foo") + _, err := cli.Get(context.TODO(), "foo") if err != nil && err != grpc.ErrClientConnClosing { t.Fatalf("expected %v, got %v", grpc.ErrClientConnClosing, err) } @@ -445,8 +442,7 @@ func TestKVNewAfterClose(t *testing.T) { donec := make(chan struct{}) go func() { - kv := clientv3.NewKV(cli) - if _, err := kv.Get(context.TODO(), "foo"); err != grpc.ErrClientConnClosing { + if _, err := cli.Get(context.TODO(), "foo"); err != grpc.ErrClientConnClosing { t.Fatalf("expected %v, got %v", grpc.ErrClientConnClosing, err) } close(donec) @@ -464,7 +460,7 @@ func TestKVDeleteRange(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() ctx := context.TODO() tests := []struct { @@ -536,7 +532,7 @@ func TestKVDelete(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() ctx := context.TODO() presp, err := kv.Put(ctx, "foo", "") @@ -568,7 +564,7 @@ func TestKVCompactError(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() ctx := context.TODO() for i := 0; i < 5; i++ { @@ -598,7 +594,7 @@ func TestKVCompact(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() ctx := context.TODO() for i := 0; i < 10; i++ { @@ -620,9 +616,7 @@ func TestKVCompact(t *testing.T) { // new watcher could precede receiving the compaction without quorum first wcli.Get(ctx, "quorum-get") - wc := clientv3.NewWatcher(wcli) - defer wc.Close() - wchan := wc.Watch(ctx, "foo", clientv3.WithRev(3)) + wchan := wcli.Watch(ctx, "foo", clientv3.WithRev(3)) if wr := <-wchan; wr.CompactRevision != 7 { t.Fatalf("wchan CompactRevision got %v, want 7", wr.CompactRevision) @@ -649,7 +643,7 @@ func TestKVGetRetry(t *testing.T) { // could give no other endpoints for client reconnection fIdx := (clus.WaitLeader(t) + 1) % clusterSize - kv := clientv3.NewKV(clus.Client(fIdx)) + kv := clus.Client(fIdx) ctx := context.TODO() if _, err := kv.Put(ctx, "foo", "bar"); err != nil { @@ -697,7 +691,7 @@ func TestKVPutFailGetRetry(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.Client(0)) + kv := clus.Client(0) clus.Members[0].Stop(t) ctx, cancel := context.WithTimeout(context.TODO(), time.Second) @@ -738,7 +732,7 @@ func TestKVGetCancel(t *testing.T) { defer clus.Terminate(t) oldconn := clus.Client(0).ActiveConnection() - kv := clientv3.NewKV(clus.Client(0)) + kv := clus.Client(0) ctx, cancel := context.WithCancel(context.TODO()) cancel() diff --git a/clientv3/integration/lease_test.go b/clientv3/integration/lease_test.go index ce863afd9..851b1fedd 100644 --- a/clientv3/integration/lease_test.go +++ b/clientv3/integration/lease_test.go @@ -36,10 +36,7 @@ func TestLeaseNotFoundError(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer clus.Terminate(t) - lapi := clientv3.NewLease(clus.RandClient()) - defer lapi.Close() - - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() _, err := kv.Put(context.TODO(), "foo", "bar", clientv3.WithLease(clientv3.LeaseID(500))) if err != rpctypes.ErrLeaseNotFound { @@ -53,10 +50,9 @@ func TestLeaseGrant(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - lapi := clientv3.NewLease(clus.RandClient()) - defer lapi.Close() + lapi := clus.RandClient() - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() resp, err := lapi.Grant(context.Background(), 10) if err != nil { @@ -75,10 +71,9 @@ func TestLeaseRevoke(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - lapi := clientv3.NewLease(clus.RandClient()) - defer lapi.Close() + lapi := clus.RandClient() - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() resp, err := lapi.Grant(context.Background(), 10) if err != nil { @@ -102,8 +97,7 @@ func TestLeaseKeepAliveOnce(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - lapi := clientv3.NewLease(clus.RandClient()) - defer lapi.Close() + lapi := clus.RandClient() resp, err := lapi.Grant(context.Background(), 10) if err != nil { @@ -127,7 +121,8 @@ func TestLeaseKeepAlive(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - lapi := clientv3.NewLease(clus.RandClient()) + lapi := clus.Client(0) + clus.TakeClient(0) resp, err := lapi.Grant(context.Background(), 10) if err != nil { @@ -167,7 +162,7 @@ func TestLeaseKeepAliveHandleFailure(t *testing.T) { defer clus.Terminate(t) // TODO: change this line to get a cluster client - lapi := clientv3.NewLease(clus.RandClient()) + lapi := clus.RandClient() resp, err := lapi.Grant(context.Background(), 10) if err != nil { @@ -261,12 +256,12 @@ func TestLeaseGrantErrConnClosed(t *testing.T) { defer clus.Terminate(t) cli := clus.Client(0) - le := clientv3.NewLease(cli) + clus.TakeClient(0) donec := make(chan struct{}) go func() { defer close(donec) - _, err := le.Grant(context.TODO(), 5) + _, err := cli.Grant(context.TODO(), 5) if err != nil && err != grpc.ErrClientConnClosing { t.Fatalf("expected %v, got %v", grpc.ErrClientConnClosing, err) } @@ -275,7 +270,6 @@ func TestLeaseGrantErrConnClosed(t *testing.T) { if err := cli.Close(); err != nil { t.Fatal(err) } - clus.TakeClient(0) select { case <-time.After(3 * time.Second): @@ -298,8 +292,7 @@ func TestLeaseGrantNewAfterClose(t *testing.T) { donec := make(chan struct{}) go func() { - le := clientv3.NewLease(cli) - if _, err := le.Grant(context.TODO(), 5); err != grpc.ErrClientConnClosing { + if _, err := cli.Grant(context.TODO(), 5); err != grpc.ErrClientConnClosing { t.Fatalf("expected %v, got %v", grpc.ErrClientConnClosing, err) } close(donec) @@ -318,8 +311,7 @@ func TestLeaseRevokeNewAfterClose(t *testing.T) { defer clus.Terminate(t) cli := clus.Client(0) - le := clientv3.NewLease(cli) - resp, err := le.Grant(context.TODO(), 5) + resp, err := cli.Grant(context.TODO(), 5) if err != nil { t.Fatal(err) } @@ -332,7 +324,7 @@ func TestLeaseRevokeNewAfterClose(t *testing.T) { donec := make(chan struct{}) go func() { - if _, err := le.Revoke(context.TODO(), leaseID); err != grpc.ErrClientConnClosing { + if _, err := cli.Revoke(context.TODO(), leaseID); err != grpc.ErrClientConnClosing { t.Fatalf("expected %v, got %v", grpc.ErrClientConnClosing, err) } close(donec) @@ -466,15 +458,14 @@ func TestLeaseTimeToLive(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - lapi := clientv3.NewLease(clus.RandClient()) - defer lapi.Close() + lapi := clus.RandClient() resp, err := lapi.Grant(context.Background(), 10) if err != nil { t.Errorf("failed to create lease %v", err) } - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() keys := []string{"foo1", "foo2"} for i := range keys { if _, err = kv.Put(context.TODO(), keys[i], "bar", clientv3.WithLease(resp.ID)); err != nil { @@ -564,12 +555,13 @@ func TestLeaseKeepAliveLoopExit(t *testing.T) { ctx := context.Background() cli := clus.Client(0) + clus.TakeClient(0) resp, err := cli.Grant(ctx, 5) if err != nil { t.Fatal(err) } - cli.Lease.Close() + cli.Close() _, err = cli.KeepAlive(ctx, resp.ID) if _, ok := err.(clientv3.ErrKeepAliveHalted); !ok { diff --git a/clientv3/integration/role_test.go b/clientv3/integration/role_test.go index 74ff2fd3f..7814db5eb 100644 --- a/clientv3/integration/role_test.go +++ b/clientv3/integration/role_test.go @@ -17,7 +17,6 @@ package integration import ( "testing" - "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" "github.com/coreos/etcd/integration" "github.com/coreos/etcd/pkg/testutil" @@ -30,7 +29,7 @@ func TestRoleError(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer clus.Terminate(t) - authapi := clientv3.NewAuth(clus.RandClient()) + authapi := clus.RandClient() _, err := authapi.RoleAdd(context.TODO(), "test-role") if err != nil { diff --git a/clientv3/integration/txn_test.go b/clientv3/integration/txn_test.go index 1b6b808ec..b5cdea7e6 100644 --- a/clientv3/integration/txn_test.go +++ b/clientv3/integration/txn_test.go @@ -33,7 +33,7 @@ func TestTxnError(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() ctx := context.TODO() _, err := kv.Txn(ctx).Then(clientv3.OpPut("foo", "bar1"), clientv3.OpPut("foo", "bar2")).Commit() @@ -57,7 +57,7 @@ func TestTxnWriteFail(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.Client(0)) + kv := clus.Client(0) clus.Members[0].Stop(t) @@ -105,7 +105,7 @@ func TestTxnReadRetry(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.Client(0)) + kv := clus.Client(0) clus.Members[0].Stop(t) <-clus.Members[0].StopNotify() @@ -136,7 +136,7 @@ func TestTxnSuccess(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - kv := clientv3.NewKV(clus.Client(0)) + kv := clus.Client(0) ctx := context.TODO() _, err := kv.Txn(ctx).Then(clientv3.OpPut("foo", "bar")).Commit() diff --git a/clientv3/integration/user_test.go b/clientv3/integration/user_test.go index bef929949..e066af5e8 100644 --- a/clientv3/integration/user_test.go +++ b/clientv3/integration/user_test.go @@ -17,7 +17,6 @@ package integration import ( "testing" - "github.com/coreos/etcd/clientv3" "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" "github.com/coreos/etcd/integration" "github.com/coreos/etcd/pkg/testutil" @@ -30,7 +29,7 @@ func TestUserError(t *testing.T) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer clus.Terminate(t) - authapi := clientv3.NewAuth(clus.RandClient()) + authapi := clus.RandClient() _, err := authapi.UserAdd(context.TODO(), "foo", "bar") if err != nil { diff --git a/clientv3/integration/watch_test.go b/clientv3/integration/watch_test.go index 16e3aa7dc..a6d88d9fb 100644 --- a/clientv3/integration/watch_test.go +++ b/clientv3/integration/watch_test.go @@ -37,7 +37,6 @@ type watcherTest func(*testing.T, *watchctx) type watchctx struct { clus *integration.ClusterV3 w clientv3.Watcher - wclient *clientv3.Client kv clientv3.KV wclientMember int kvMember int @@ -51,19 +50,16 @@ func runWatchTest(t *testing.T, f watcherTest) { defer clus.Terminate(t) wclientMember := rand.Intn(3) - wclient := clus.Client(wclientMember) - w := clientv3.NewWatcher(wclient) - defer w.Close() + w := clus.Client(wclientMember).Watcher // select a different client from wclient so puts succeed if // a test knocks out the watcher client kvMember := rand.Intn(3) for kvMember == wclientMember { kvMember = rand.Intn(3) } - kvclient := clus.Client(kvMember) - kv := clientv3.NewKV(kvclient) + kv := clus.Client(kvMember).KV - wctx := &watchctx{clus, w, wclient, kv, wclientMember, kvMember, nil} + wctx := &watchctx{clus, w, kv, wclientMember, kvMember, nil} f(t, wctx) } @@ -359,8 +355,7 @@ func TestWatchResumeCompacted(t *testing.T) { defer clus.Terminate(t) // create a waiting watcher at rev 1 - w := clientv3.NewWatcher(clus.Client(0)) - defer w.Close() + w := clus.Client(0) wch := w.Watch(context.Background(), "foo", clientv3.WithRev(1)) select { case w := <-wch: @@ -381,7 +376,7 @@ func TestWatchResumeCompacted(t *testing.T) { // put some data and compact away numPuts := 5 - kv := clientv3.NewKV(clus.Client(1)) + kv := clus.Client(1) for i := 0; i < numPuts; i++ { if _, err := kv.Put(context.TODO(), "foo", "bar"); err != nil { t.Fatal(err) @@ -447,15 +442,14 @@ func TestWatchCompactRevision(t *testing.T) { defer clus.Terminate(t) // set some keys - kv := clientv3.NewKV(clus.RandClient()) + kv := clus.RandClient() for i := 0; i < 5; i++ { if _, err := kv.Put(context.TODO(), "foo", "bar"); err != nil { t.Fatal(err) } } - w := clientv3.NewWatcher(clus.RandClient()) - defer w.Close() + w := clus.RandClient() if _, err := kv.Compact(context.TODO(), 4); err != nil { t.Fatal(err) @@ -493,8 +487,7 @@ func testWatchWithProgressNotify(t *testing.T, watchOnPut bool) { clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3}) defer clus.Terminate(t) - wc := clientv3.NewWatcher(clus.RandClient()) - defer wc.Close() + wc := clus.RandClient() opts := []clientv3.OpOption{clientv3.WithProgressNotify()} if watchOnPut { @@ -511,7 +504,7 @@ func testWatchWithProgressNotify(t *testing.T, watchOnPut bool) { t.Fatalf("watch response expected in %v, but timed out", pi) } - kvc := clientv3.NewKV(clus.RandClient()) + kvc := clus.RandClient() if _, err := kvc.Put(context.TODO(), "foox", "bar"); err != nil { t.Fatal(err) } @@ -614,13 +607,11 @@ func TestWatchErrConnClosed(t *testing.T) { defer clus.Terminate(t) cli := clus.Client(0) - defer cli.Close() - wc := clientv3.NewWatcher(cli) donec := make(chan struct{}) go func() { defer close(donec) - ch := wc.Watch(context.TODO(), "foo") + ch := cli.Watch(context.TODO(), "foo") if wr := <-ch; grpc.ErrorDesc(wr.Err()) != grpc.ErrClientConnClosing.Error() { t.Fatalf("expected %v, got %v", grpc.ErrClientConnClosing, grpc.ErrorDesc(wr.Err())) } @@ -652,9 +643,8 @@ func TestWatchAfterClose(t *testing.T) { donec := make(chan struct{}) go func() { - wc := clientv3.NewWatcher(cli) - wc.Watch(context.TODO(), "foo") - if err := wc.Close(); err != nil && err != grpc.ErrClientConnClosing { + cli.Watch(context.TODO(), "foo") + if err := cli.Close(); err != nil && err != grpc.ErrClientConnClosing { t.Fatalf("expected %v, got %v", grpc.ErrClientConnClosing, err) } close(donec)