@@ -1312,6 +1312,76 @@ def connection_made(self, transport):
1312
1312
1313
1313
server .close ()
1314
1314
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
+
1315
1385
def test_server_close (self ):
1316
1386
f = self .loop .create_server (MyProto , '0.0.0.0' , 0 )
1317
1387
server = self .loop .run_until_complete (f )
0 commit comments