8000 Add tests for Server pause behavior. · python/asyncio@56d0d0b · GitHub
[go: up one dir, main page]

Skip to content
This repository was archived by the owner on Nov 23, 2017. It is now read-only.

Commit 56d0d0b

Browse files
committed
Add tests for Server pause behavior.
Tests for create_server(max_connections=number) and Server.pause/resume.
1 parent 526b74d commit 56d0d0b

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

tests/test_events.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,6 +1312,76 @@ def connection_made(self, transport):
13121312

13131313
server.close()
13141314

1315+
def test_create_server_max_connections(self):
1316+
protos = []
1317+
on_data = asyncio.Event(loop=self.loop)
1318+
1319+
class MaxConnTestProto(MyBaseProto):
1320+
def connection_made(self, transport):
1321+
super().connection_made(transport)
1322+
protos.append(self)
1323+
def data_received(self, data):
1324+
super().data_received(data)
1325+
on_data.set()
1326+
1327+
f = self.loop.create_server(lambda: MaxConnTestProto(loop=self.loop),
1328+
'0.0.0.0', 0, max_connections=2)
1329+
server = self.loop.run_until_complete(f)
1330+
sock = server.sockets[0]
1331+
port = sock.getsockname()[1]
1332+
1333+
# Low water..
1334+
c1 = socket.socket()
1335+
c1.connect(('127.0.0.1', port))
1336+
c1.sendall(b'x')
1337+
self.loop.run_until_complete(on_data.wait())
1338+
on_data.clear()
1339+
self.assertFalse(server._paused)
1340+
self.loop._selector.get_key(sock.fileno()) # has reader
1341+
1342+
# High water..
1343+
c2 = socket.socket()
1344+
c2.connect(('127.0.0.1', port))
1345+
c2.sendall(b'x')
1346+
self.loop.run_until_complete(on_data.wait())
1347+
on_data.clear()
1348+
self.assertEqual(server._active_count, 2)
1349+
self.assertTrue(server._paused)
1350+
self.assertRaises(KeyError, self.loop._selector.get_key, sock.fileno())
1351+
1352+
# Low water again..
1353+
p = protos.pop(0)
1354+
p.transport.close()
1355+
self.loop.run_until_complete(p.done)
1356+
self.assertFalse(server._paused)
1357+
self.loop._selector.get_key(sock.fileno()) # has reader
1358+
1359+
# cleanup
1360+
p = protos.pop(0)
1361+
p.transport.close()
1362+
self.loop.run_until_complete(p.done)
1363+
c1.close()
1364+
c2.close()
1365+
server.close()
1366+
self.assertFalse(protos)
1367+
1368+
def test_create_server_pause_resume(self):
1369+
f = self.loop.create_server(lambda: None, '0.0.0.0', 0)
1370+
server = self.loop.run_until_complete(f)
1371+
sock_fd = server.sockets[0].fileno()
1372+
1373+
server.pause()
1374+
self.assertTrue(server._paused)
1375+
self.assertRaises(KeyError, self.loop._selector.get_key, sock_fd)
1376+
self.assertRaises(AssertionError, server.pause)
1377+
1378+
server.resume()
1379+
self.assertFalse(server._paused)
1380+
self.loop._selector.get_key(sock_fd) # has reader
1381+
self.assertRaises(AssertionError, server.resume)
1382+
1383+
server.close()
1384+
13151385
def test_server_close(self):
13161386
f = self.loop.create_server(MyProto, '0.0.0.0', 0)
13171387
server = self.loop.run_until_complete(f)

0 commit comments

Comments
 (0)
0