Browse Source

clientv3/integration: test endpoint switches on partitioned member

Anthony Romano 8 years ago
parent
commit
49e5e78d0f
1 changed files with 26 additions and 0 deletions
  1. 26 0
      clientv3/integration/kv_test.go

+ 26 - 0
clientv3/integration/kv_test.go

@@ -933,3 +933,29 @@ func TestKVPutAtMostOnce(t *testing.T) {
 		t.Fatalf("expected version <= 10, got %+v", resp.Kvs[0])
 	}
 }
+
+func TestKVSwitchUnavailable(t *testing.T) {
+	defer testutil.AfterTest(t)
+	clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 3})
+	defer clus.Terminate(t)
+
+	clus.Members[0].InjectPartition(t, clus.Members[1:])
+	// try to connect with dead node in the endpoint list
+	cfg := clientv3.Config{
+		Endpoints: []string{
+			clus.Members[0].GRPCAddr(),
+			clus.Members[1].GRPCAddr(),
+		},
+		DialTimeout: 1 * time.Second}
+	cli, err := clientv3.New(cfg)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer cli.Close()
+	timeout := 3 * clus.Members[0].ServerConfig.ReqTimeout()
+	ctx, cancel := context.WithTimeout(context.TODO(), timeout)
+	if _, err := cli.Get(ctx, "abc"); err != nil {
+		t.Fatal(err)
+	}
+	cancel()
+}