Skip to content

Commit 0187061

Browse files
committed
ClientV3: Add integration test for server timeout
Partially Fixes etcd-io#8645
1 parent dedae6e commit 0187061

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

clientv3/integration/black_hole_test.go

+44
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,52 @@ import (
2626
"go.etcd.io/etcd/integration"
2727
"go.etcd.io/etcd/pkg/testutil"
2828
"google.golang.org/grpc"
29+
"google.golang.org/grpc/codes"
30+
"google.golang.org/grpc/status"
2931
)
3032

33+
func TestServerGRPCKeepAliveTimeout(t *testing.T) {
34+
defer testutil.AfterTest(t)
35+
36+
clus := integration.NewClusterV3(t, &integration.ClusterConfig{
37+
Size: 2,
38+
GRPCKeepAliveInterval: time.Second,
39+
GRPCKeepAliveTimeout: time.Second,
40+
})
41+
defer clus.Terminate(t)
42+
43+
eps := []string{clus.Members[0].GRPCAddr()}
44+
45+
ccfg := clientv3.Config{
46+
Endpoints: []string{eps[0]},
47+
}
48+
49+
cli, err := clientv3.New(ccfg)
50+
if err != nil {
51+
t.Fatal(err)
52+
}
53+
defer cli.Close()
54+
55+
if _, err = clus.Client(1).Put(context.TODO(), "foo", "bar"); err != nil {
56+
t.Fatal(err)
57+
}
58+
clus.Members[1].Blackhole()
59+
time.Sleep(10 * time.Second)
60+
// remove blackhole but connection should be unavailable now
61+
clus.Members[1].Unblackhole()
62+
if _, err = clus.Client(1).Put(context.TODO(), "foo1", "bar1"); err != nil {
63+
ev, ok := status.FromError(err)
64+
if !ok {
65+
t.Fatal(err)
66+
}
67+
if ev.Code() != codes.Unavailable {
68+
t.Fatal(err)
69+
}
70+
} else {
71+
t.Error("rpc error expected")
72+
}
73+
}
74+
3175
// TestBalancerUnderBlackholeKeepAliveWatch tests when watch discovers it cannot talk to
3276
// blackholed endpoint, client balancer switches to healthy one.
3377
// TODO: test server-to-client keepalive ping

0 commit comments

Comments
 (0)