@@ -40,42 +40,52 @@ func TestServerGRPCKeepAliveTimeout(t *testing.T) {
40
40
41
41
clus := integration .NewClusterV3 (t , & integration.ClusterConfig {
42
42
Size : 2 ,
43
- GRPCKeepAliveInterval : 500 * time .Millisecond ,
44
- GRPCKeepAliveTimeout : 500 * time .Millisecond ,
43
+ GRPCKeepAliveInterval : 2 * time .Second ,
44
+ GRPCKeepAliveTimeout : 1 * time .Second ,
45
45
})
46
46
defer clus .Terminate (t )
47
47
48
48
eps := []string {clus .Members [0 ].GRPCAddr ()}
49
-
50
49
ccfg := clientv3.Config {
51
50
Endpoints : []string {eps [0 ]},
52
51
}
53
-
54
52
cli , err := clientv3 .New (ccfg )
55
53
if err != nil {
56
54
t .Fatal (err )
57
55
}
58
56
defer cli .Close ()
59
57
58
+ // give keepalive some time
59
+ time .Sleep (4 * time .Second )
60
+
60
61
if _ , err = clus .Client (1 ).Put (context .TODO (), "foo" , "bar" ); err != nil {
61
62
t .Fatal (err )
62
63
}
63
- clus .Members [1 ].Blackhole ()
64
- time .Sleep (10 * time .Second )
65
- // remove blackhole but by now the keepalive ping should have triggered server to
66
- // close server-to-client connection.
67
- clus .Members [1 ].Unblackhole ()
68
- _ , err = clus .Client (1 ).Put (context .TODO (), "foo1" , "bar1" )
64
+ // TODO: keepalive sometimes doesn't work on first attempt.
65
+ for i := 0 ; i < 5 ; i ++ {
66
+ clus .Members [1 ].Blackhole ()
67
+ time .Sleep (10 * time .Second )
68
+ // remove blackhole but by now the keepalive ping should have triggered server to
69
+ // close server-to-client connection.
70
+ clus .Members [1 ].Unblackhole ()
71
+ _ , err = clus .Client (1 ).Put (context .TODO (), "foo1" , "bar1" )
72
+ if err != nil {
73
+ ev , ok := status .FromError (err )
74
+ if ! ok {
75
+ t .Fatal (err )
76
+ }
77
+ if ev .Code () != codes .Unavailable {
78
+ t .Fatal (err )
79
+ }
80
+ break
81
+ } else {
82
+ t .Logf ("info: expected an error, received none." )
83
+ }
84
+ }
85
+
69
86
if err == nil {
70
87
t .Error ("rpc error expected" )
71
88
}
72
- ev , ok := status .FromError (err )
73
- if ! ok {
74
- t .Fatal (err )
75
- }
76
- if ev .Code () != codes .Unavailable {
77
- t .Fatal (err )
78
- }
79
89
}
80
90
81
91
// TestBalancerUnderBlackholeKeepAliveWatch tests when watch discovers it cannot talk to
0 commit comments