@@ -93,6 +93,37 @@ func TestCreate(t *testing.T) {
9393 }
9494}
9595
96+ func TestOpsAfterCloseDontDeadlock (t * testing.T ) {
97+ ts , err := StartTestCluster (1 , nil , logWriter {t : t , p : "[ZKERR] " })
98+ if err != nil {
99+ t .Fatal (err )
100+ }
101+ defer ts .Stop ()
102+ zk , _ , err := ts .ConnectAll ()
103+ if err != nil {
104+ t .Fatalf ("Connect returned error: %+v" , err )
105+ }
106+ zk .Close ()
107+
108+ path := "/gozk-test"
109+
110+ ch := make (chan struct {})
111+ go func () {
112+ defer close (ch )
113+ for range make ([]struct {}, 30 ) {
114+ if _ , err := zk .Create (path , []byte {1 , 2 , 3 , 4 }, 0 , WorldACL (PermAll )); err == nil {
115+ t .Fatal ("Create did not return error" )
116+ }
117+ }
118+ }()
119+ select {
120+ case <- ch :
121+ // expected
122+ case <- time .After (10 * time .Second ):
123+ t .Fatal ("ZK connection deadlocked when executing ops after a Close operation" )
124+ }
125+ }
126+
96127func TestMulti (t * testing.T ) {
97128 ts , err := StartTestCluster (1 , nil , logWriter {t : t , p : "[ZKERR] " })
98129 if err != nil {
@@ -667,6 +698,16 @@ func TestRequestFail(t *testing.T) {
667698 }
668699}
669700
701+ func TestIdempotentClose (t * testing.T ) {
702+ zk , _ , err := Connect ([]string {"127.0.0.1:32444" }, time .Second * 15 )
703+ if err != nil {
704+ t .Fatal (err )
705+ }
706+ // multiple calls to Close() should not panic
707+ zk .Close ()
708+ zk .Close ()
709+ }
710+
670711func TestSlowServer (t * testing.T ) {
671712 ts , err := StartTestCluster (1 , nil , logWriter {t : t , p : "[ZKERR] " })
672713 if err != nil {
0 commit comments