30
30
from httplib import HTTPConnection , HTTPException
31
31
32
32
from system_test import TestCase , TIMEOUT , Logger , Qdrouterd
33
+ TEST_SERVER_ERROR = "TestServer failed to start due to port %s already in use issue"
33
34
34
35
35
36
class RequestHandler (BaseHTTPRequestHandler ):
@@ -212,6 +213,27 @@ class TestServer(object):
212
213
A HTTPServer running in a separate thread
213
214
"""
214
215
216
+ @classmethod
217
+ def new_server (cls , server_port , client_port , tests , handler_cls = None ):
218
+ num_attempts = 0
219
+ max_attempts = 4
220
+ while num_attempts < max_attempts :
221
+ try :
222
+ # Create an instance of TestServer. This might fail because the port has
223
+ # not been relinquished yet. Try for a max of 4 seconds before giving up.
224
+ server11 = TestServer (server_port = server_port ,
225
+ client_port = client_port ,
226
+ tests = tests ,
227
+ handler_cls = handler_cls )
228
+ # Return the successfully created server.
229
+ return server11
230
+ except OSError :
231
+ # TestServer creation failed. Try again in one second, for a max of 4 seconds.
232
+ num_attempts += 1
233
+ sleep (1 )
234
+
235
+ return None
236
+
215
237
def __init__ (self , server_port , client_port , tests , handler_cls = None ):
216
238
self ._logger = Logger (title = "TestServer" , print_to_console = False )
217
239
self ._client_port = client_port
@@ -272,13 +294,11 @@ def http1_ping(sport, cport):
272
294
]
273
295
}
274
296
275
- server = TestServer (server_port = sport ,
276
- client_port = cport ,
277
- tests = TEST )
297
+ server = TestServer .new_server (sport , cport , TEST )
278
298
client = ThreadedTestClient (tests = TEST , port = cport )
279
299
client .wait ()
280
300
server .wait ()
281
- return ( client .count , client .error )
301
+ return client .count , client .error
282
302
283
303
284
304
class ResponseMsg (object ):
@@ -457,14 +477,12 @@ def test_01_concurrent_requests(self):
457
477
ResponseValidator (status = 200 )
458
478
)],
459
479
}
460
- server11 = TestServer (server_port = self .http_server11_port ,
461
- client_port = self .http_listener11_port ,
462
- tests = TESTS_11 )
463
- server10 = TestServer (server_port = self .http_server10_port ,
464
- client_port = self .http_listener10_port ,
465
- tests = TESTS_10 ,
466
- handler_cls = RequestHandler10 )
467
480
481
+ server11 = TestServer .new_server (self .http_server11_port , self .http_listener11_port , TESTS_11 )
482
+ self .assertIsNotNone (server11 , TEST_SERVER_ERROR % self .http_server11_port )
483
+ server10 = TestServer .new_server (self .http_server10_port , self .http_listener10_port , TESTS_10 ,
484
+ handler_cls = RequestHandler10 )
485
+ self .assertIsNotNone (server10 , TEST_SERVER_ERROR % self .http_server10_port )
468
486
self .EA2 .wait_connectors ()
469
487
470
488
repeat_ct = 10
@@ -511,9 +529,9 @@ def test_02_credit_replenish(self):
511
529
),
512
530
]
513
531
}
514
- server = TestServer ( server_port = self .http_server11_port ,
515
- client_port = self .http_listener11_port ,
516
- tests = TESTS )
532
+ server = TestServer . new_server ( self .http_server11_port , self . http_listener11_port , TESTS )
533
+ self . assertIsNotNone ( server , TEST_SERVER_ERROR % self .http_server11_port )
534
+
517
535
self .EA2 .wait_connectors ()
518
536
519
537
client = ThreadedTestClient (TESTS ,
@@ -543,9 +561,8 @@ def test_03_server_reconnect(self):
543
561
544
562
# bring up the server and send some requests. This will cause the
545
563
# router to grant credit for clients
546
- server = TestServer (server_port = self .http_server11_port ,
547
- client_port = self .http_listener11_port ,
548
- tests = TESTS )
564
+ server = TestServer .new_server (self .http_server11_port , self .http_listener11_port , TESTS )
565
+ self .assertIsNotNone (server , TEST_SERVER_ERROR % self .http_server11_port )
549
566
self .EA2 .wait_connectors ()
550
567
551
568
client = ThreadedTestClient (TESTS ,
@@ -567,9 +584,9 @@ def test_03_server_reconnect(self):
567
584
# cannot be reestablished after 2.5 seconds. Restart the server before
568
585
# that occurrs to prevent client messages from being released with 503
569
586
# status.
570
- server = TestServer ( server_port = self .http_server11_port ,
571
- client_port = self .http_listener11_port ,
572
- tests = TESTS )
587
+ server = TestServer . new_server ( self .http_server11_port , self . http_listener11_port , TESTS )
588
+ self . assertIsNotNone ( server , TEST_SERVER_ERROR % self .http_server11_port )
589
+
573
590
client .wait ()
574
591
self .assertIsNone (client .error )
575
592
self .assertEqual (2 , client .count )
@@ -594,9 +611,9 @@ def test_04_server_pining_for_the_fjords(self):
594
611
595
612
# bring up the server and send some requests. This will cause the
596
613
# router to grant credit for clients
597
- server = TestServer ( server_port = self .http_server11_port ,
598
- client_port = self .http_listener11_port ,
599
- tests = TESTS )
614
+ server = TestServer . new_server ( self .http_server11_port , self . http_listener11_port , TESTS )
615
+ self . assertIsNotNone ( server , TEST_SERVER_ERROR % self .http_server11_port )
616
+
600
617
self .EA2 .wait_connectors ()
601
618
602
619
client = ThreadedTestClient (TESTS , self .http_listener11_port )
@@ -627,9 +644,9 @@ def test_04_server_pining_for_the_fjords(self):
627
644
self .assertEqual (1 , client .count )
628
645
629
646
# ensure links recover once the server re-appears
630
- server = TestServer ( server_port = self .http_server11_port ,
631
- client_port = self .http_listener11_port ,
632
- tests = TESTS )
647
+ server = TestServer . new_server ( self .http_server11_port , self . http_listener11_port , TESTS )
648
+ self . assertIsNotNone ( server , TEST_SERVER_ERROR % self .http_server11_port )
649
+
633
650
self .EA2 .wait_connectors ()
634
651
635
652
client = ThreadedTestClient (TESTS , self .http_listener11_port )
@@ -701,13 +718,11 @@ def test_05_large_streaming_msg(self):
701
718
ResponseValidator (status = 200 ))
702
719
],
703
720
}
704
- server11 = TestServer (server_port = self .http_server11_port ,
705
- client_port = self .http_listener11_port ,
706
- tests = TESTS_11 )
707
- server10 = TestServer (server_port = self .http_server10_port ,
708
- client_port = self .http_listener10_port ,
709
- tests = TESTS_10 ,
710
- handler_cls = RequestHandler10 )
721
+ server11 = TestServer .new_server (self .http_server11_port , self .http_listener11_port , TESTS_11 )
722
+ self .assertIsNotNone (server11 , TEST_SERVER_ERROR % self .http_server11_port )
723
+ server10 = TestServer .new_server (self .http_server10_port , self .http_listener10_port , TESTS_10 ,
724
+ handler_cls = RequestHandler10 )
725
+ self .assertIsNotNone (server10 , TEST_SERVER_ERROR % self .http_server10_port )
711
726
712
727
self .EA2 .wait_connectors ()
713
728
0 commit comments