clientv3: check if KV.Client is closed
For https://github.com/coreos/etcd/issues/5495.
This commit is contained in:
@ -279,6 +279,42 @@ func TestKVRange(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestKVGetErrConnClosed(t *testing.T) {
|
||||
defer testutil.AfterTest(t)
|
||||
|
||||
clus := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1})
|
||||
defer clus.Terminate(t)
|
||||
|
||||
cli := clus.Client(0)
|
||||
kv := clientv3.NewKV(cli)
|
||||
|
||||
closed, donec := make(chan struct{}), make(chan struct{})
|
||||
go func() {
|
||||
select {
|
||||
case <-time.After(3 * time.Second):
|
||||
t.Fatal("cli.Close took too long")
|
||||
case <-closed:
|
||||
}
|
||||
|
||||
if _, err := kv.Get(context.TODO(), "foo"); err != rpctypes.ErrConnClosed {
|
||||
t.Fatalf("expected %v, got %v", rpctypes.ErrConnClosed, err)
|
||||
}
|
||||
close(donec)
|
||||
}()
|
||||
|
||||
if err := cli.Close(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
clus.TakeClient(0)
|
||||
close(closed)
|
||||
|
||||
select {
|
||||
case <-time.After(3 * time.Second):
|
||||
t.Fatal("kv.Get took too long")
|
||||
case <-donec:
|
||||
}
|
||||
}
|
||||
|
||||
func TestKVDeleteRange(t *testing.T) {
|
||||
defer testutil.AfterTest(t)
|
||||
|
||||
|
Reference in New Issue
Block a user