Skip to content

Commit 70aa87b

Browse files
committed
Add test for condition of bad server behind LB
Signed-off-by: Waldemar Quevedo <[email protected]>
1 parent 7b068da commit 70aa87b

File tree

1 file changed

+48
-2
lines changed

1 file changed

+48
-2
lines changed

tests/client_test.py

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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\nPONG\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

Comments
 (0)