@@ -302,6 +302,13 @@ func TestClose(t *testing.T) {
302302 cancel ()
303303 require .Nil (t , conn .Properties ())
304304 require .NoError (t , conn .Close ())
305+ select {
306+ case <- conn .Done ():
307+ require .NoError (t , conn .Err ())
308+ default :
309+ t .Fatal ("expected conn.Done() to be signaled" )
310+ }
311+
305312 // with Close error
306313 netConn = fake .NewNetConn (senderFrameHandlerNoUnhandled (0 , SenderSettleModeUnsettled ), fake.NetConnOptions {})
307314 conn , err = newConn (netConn , nil )
@@ -315,6 +322,50 @@ func TestClose(t *testing.T) {
315322 // wait a bit for connReader to read from the mock
316323 time .Sleep (100 * time .Millisecond )
317324 require .Error (t , conn .Close ())
325+ select {
326+ case <- conn .Done ():
327+ require .Error (t , conn .Err ())
328+ default :
329+ t .Fatal ("expected conn.Done() to be signaled" )
330+ }
331+ }
332+
333+ func TestCloseAsync (t * testing.T ) {
334+ netConn := fake .NewNetConn (senderFrameHandlerNoUnhandled (0 , SenderSettleModeUnsettled ), fake.NetConnOptions {})
335+ conn , err := newConn (netConn , nil )
336+ require .NoError (t , err )
337+ ctx , cancel := context .WithTimeout (context .Background (), 1 * time .Second )
338+ require .NoError (t , conn .start (ctx ))
339+ cancel ()
340+ go func () {
341+ require .NoError (t , conn .Close ())
342+ }()
343+ select {
344+ case <- conn .Done ():
345+ require .NoError (t , conn .Err ())
346+ case <- time .After (1 * time .Second ):
347+ t .Fatal ("expected conn.Done() to be signaled" )
348+ }
349+
350+ // with Close error
351+ netConn = fake .NewNetConn (senderFrameHandlerNoUnhandled (0 , SenderSettleModeUnsettled ), fake.NetConnOptions {})
352+ conn , err = newConn (netConn , nil )
353+ require .NoError (t , err )
354+ ctx , cancel = context .WithTimeout (context .Background (), 1 * time .Second )
355+ require .NoError (t , conn .start (ctx ))
356+ cancel ()
357+ netConn .OnClose = func () error {
358+ return errors .New ("mock close failed" )
359+ }
360+ go func () {
361+ require .Error (t , conn .Close ())
362+ }()
363+ select {
364+ case <- conn .Done ():
365+ require .Error (t , conn .Err ())
366+ case <- time .After (1 * time .Second ):
367+ t .Fatal ("expected conn.Done() to be signaled" )
368+ }
318369}
319370
320371func TestServerSideClose (t * testing.T ) {
@@ -344,6 +395,12 @@ func TestServerSideClose(t *testing.T) {
344395 <- closeReceived
345396 err = conn .Close ()
346397 require .NoError (t , err )
398+ select {
399+ case <- conn .Done ():
400+ require .NoError (t , conn .Err ())
401+ default :
402+ t .Fatal ("expected conn.Done() to be signaled" )
403+ }
347404
348405 // with error
349406 closeReceived = make (chan struct {})
@@ -361,6 +418,16 @@ func TestServerSideClose(t *testing.T) {
361418 var connErr * ConnError
362419 require .ErrorAs (t , err , & connErr )
363420 require .Equal (t , "*Error{Condition: Close, Description: mock server error, Info: map[]}" , connErr .Error ())
421+ select {
422+ case <- conn .Done ():
423+ connErr = nil
424+ require .ErrorAs (t , conn .Err (), & connErr )
425+ require .Equal (t , "*Error{Condition: Close, Description: mock server error, Info: map[]}" , connErr .Error ())
426+ default :
427+ t .Fatal ("expected conn.Done() to be signaled" )
428+ }
429+ require .ErrorAs (t , conn .Err (), & connErr )
430+ require .Equal (t , "*Error{Condition: Close, Description: mock server error, Info: map[]}" , connErr .Error ())
364431}
365432
366433func TestKeepAlives (t * testing.T ) {
@@ -592,7 +659,9 @@ func TestClientClose(t *testing.T) {
592659 require .NoError (t , err )
593660 require .NotNil (t , client )
594661 require .NoError (t , client .Close ())
662+ require .NoError (t , client .Err ())
595663 require .NoError (t , client .Close ())
664+ require .NoError (t , client .Err ())
596665}
597666
598667func TestSessionOptions (t * testing.T ) {
0 commit comments