@@ -1507,7 +1507,6 @@ async def reconnected_cb():
15071507 reconnected .set_result (True )
15081508
15091509 async def err_cb (e ):
1510- print (e )
15111510 nonlocal errors
15121511 errors .append (e )
15131512
@@ -1583,7 +1582,7 @@ async def bad_server(reader, writer):
15831582 await asyncio .sleep (0.2 , loop = self .loop )
15841583 writer .close ()
15851584
1586- await asyncio .start_server (
1585+ sv = await asyncio .start_server (
15871586 bad_server , '127.0.0.1' , 4555 , loop = self .loop
15881587 )
15891588
@@ -1605,6 +1604,53 @@ async def error_cb(e):
16051604 await nc .connect (** options )
16061605 self .assertEqual (1 , len (errors ))
16071606 self .assertEqual (errors [0 ], nc .last_error )
1607+ sv .close ()
1608+
1609+ @async_test
1610+ async def test_empty_response_from_server_after_reconnect (self ):
1611+ async def bad_server (reader , writer ):
1612+ writer .write ("INFO {}\r \n PONG\r \n " .encode ())
1613+ await asyncio .sleep (0.2 , loop = self .loop )
1614+ writer .close ()
1615+
1616+ async def bad_server2 (reader , writer ):
1617+ writer .write (b'' )
1618+
1619+ sv = await asyncio .start_server (
1620+ bad_server , '127.0.0.1' , 4556 , loop = self .loop
1621+ )
1622+ sv2 = await asyncio .start_server (
1623+ bad_server2 , '127.0.0.1' , 4557 , loop = self .loop
1624+ )
1625+
1626+ future = asyncio .Future ()
1627+
1628+ async def error_cb (e ):
1629+ if type (e ) is asyncio .TimeoutError :
1630+ future .set_result (True )
1631+
1632+ nc = NATS ()
1633+ options = {
1634+ 'servers' : ["nats://127.0.0.1:4556" , "nats://127.0.0.1:4557" ],
1635+ 'error_cb' : error_cb ,
1636+ 'io_loop' : self .loop ,
1637+ 'allow_reconnect' : True ,
1638+ 'reconnect_time_wait' : 0.1 ,
1639+ 'dont_randomize' : True ,
1640+ 'connect_timeout' : 0.5
1641+ }
1642+
1643+ await nc .connect (** options )
1644+ sv .close ()
1645+ await sv .wait_closed ()
1646+ await asyncio .sleep (1 , loop = self .loop )
1647+ sv2 .close ()
1648+ await sv2 .wait_closed ()
1649+
1650+ # Wait for the timeout error from the EOF to the second server.
1651+ await asyncio .wait_for (future , 1 )
1652+
1653+ await nc .close ()
16081654
16091655 @async_test
16101656 async def test_malformed_info_response_from_server (self ):
0 commit comments