You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gm...@apache.org on 2021/05/18 18:13:14 UTC
[qpid-dispatch] branch main updated: DISPATCH-1986: Retry creating
TestServer instance if port is already in use
This is an automated email from the ASF dual-hosted git repository.
gmurthy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git
The following commit(s) were added to refs/heads/main by this push:
new 7de251a DISPATCH-1986: Retry creating TestServer instance if port is already in use
7de251a is described below
commit 7de251a218d9195eb5b274f9407b0b0d9c2dbe9c
Author: Ganesh Murthy <gm...@apache.org>
AuthorDate: Mon May 17 17:02:29 2021 -0400
DISPATCH-1986: Retry creating TestServer instance if port is already in use
---
tests/http1_tests.py | 81 +++++++++++++++++++++---------------
tests/system_tests_http1_over_tcp.py | 10 ++---
2 files changed, 51 insertions(+), 40 deletions(-)
diff --git a/tests/http1_tests.py b/tests/http1_tests.py
index 835bf42..aece59a 100644
--- a/tests/http1_tests.py
+++ b/tests/http1_tests.py
@@ -30,6 +30,7 @@ except ImportError:
from httplib import HTTPConnection, HTTPException
from system_test import TestCase, TIMEOUT, Logger, Qdrouterd
+TEST_SERVER_ERROR = "TestServer failed to start due to port %s already in use issue"
class RequestHandler(BaseHTTPRequestHandler):
@@ -212,6 +213,27 @@ class TestServer(object):
A HTTPServer running in a separate thread
"""
+ @classmethod
+ def new_server(cls, server_port, client_port, tests, handler_cls=None):
+ num_attempts = 0
+ max_attempts = 4
+ while num_attempts < max_attempts:
+ try:
+ # Create an instance of TestServer. This might fail because the port has
+ # not been relinquished yet. Try for a max of 4 seconds before giving up.
+ server11 = TestServer(server_port=server_port,
+ client_port=client_port,
+ tests=tests,
+ handler_cls=handler_cls)
+ # Return the successfully created server.
+ return server11
+ except OSError:
+ # TestServer creation failed. Try again in one second, for a max of 4 seconds.
+ num_attempts += 1
+ sleep(1)
+
+ return None
+
def __init__(self, server_port, client_port, tests, handler_cls=None):
self._logger = Logger(title="TestServer", print_to_console=False)
self._client_port = client_port
@@ -272,13 +294,11 @@ def http1_ping(sport, cport):
]
}
- server = TestServer(server_port=sport,
- client_port=cport,
- tests=TEST)
+ server = TestServer.new_server(sport, cport, TEST)
client = ThreadedTestClient(tests=TEST, port=cport)
client.wait()
server.wait()
- return (client.count, client.error)
+ return client.count, client.error
class ResponseMsg(object):
@@ -457,14 +477,12 @@ class CommonHttp1Edge2EdgeTest(object):
ResponseValidator(status=200)
)],
}
- server11 = TestServer(server_port=self.http_server11_port,
- client_port=self.http_listener11_port,
- tests=TESTS_11)
- server10 = TestServer(server_port=self.http_server10_port,
- client_port=self.http_listener10_port,
- tests=TESTS_10,
- handler_cls=RequestHandler10)
+ server11 = TestServer.new_server(self.http_server11_port, self.http_listener11_port, TESTS_11)
+ self.assertIsNotNone(server11, TEST_SERVER_ERROR % self.http_server11_port)
+ server10 = TestServer.new_server(self.http_server10_port, self.http_listener10_port, TESTS_10,
+ handler_cls=RequestHandler10)
+ self.assertIsNotNone(server10, TEST_SERVER_ERROR % self.http_server10_port)
self.EA2.wait_connectors()
repeat_ct = 10
@@ -511,9 +529,9 @@ class CommonHttp1Edge2EdgeTest(object):
),
]
}
- server = TestServer(server_port=self.http_server11_port,
- client_port=self.http_listener11_port,
- tests=TESTS)
+ server = TestServer.new_server(self.http_server11_port, self.http_listener11_port, TESTS)
+ self.assertIsNotNone(server, TEST_SERVER_ERROR % self.http_server11_port)
+
self.EA2.wait_connectors()
client = ThreadedTestClient(TESTS,
@@ -543,9 +561,8 @@ class CommonHttp1Edge2EdgeTest(object):
# bring up the server and send some requests. This will cause the
# router to grant credit for clients
- server = TestServer(server_port=self.http_server11_port,
- client_port=self.http_listener11_port,
- tests=TESTS)
+ server = TestServer.new_server(self.http_server11_port, self.http_listener11_port, TESTS)
+ self.assertIsNotNone(server, TEST_SERVER_ERROR % self.http_server11_port)
self.EA2.wait_connectors()
client = ThreadedTestClient(TESTS,
@@ -567,9 +584,9 @@ class CommonHttp1Edge2EdgeTest(object):
# cannot be reestablished after 2.5 seconds. Restart the server before
# that occurrs to prevent client messages from being released with 503
# status.
- server = TestServer(server_port=self.http_server11_port,
- client_port=self.http_listener11_port,
- tests=TESTS)
+ server = TestServer.new_server(self.http_server11_port, self.http_listener11_port, TESTS)
+ self.assertIsNotNone(server, TEST_SERVER_ERROR % self.http_server11_port)
+
client.wait()
self.assertIsNone(client.error)
self.assertEqual(2, client.count)
@@ -594,9 +611,9 @@ class CommonHttp1Edge2EdgeTest(object):
# bring up the server and send some requests. This will cause the
# router to grant credit for clients
- server = TestServer(server_port=self.http_server11_port,
- client_port=self.http_listener11_port,
- tests=TESTS)
+ server = TestServer.new_server(self.http_server11_port, self.http_listener11_port, TESTS)
+ self.assertIsNotNone(server, TEST_SERVER_ERROR % self.http_server11_port)
+
self.EA2.wait_connectors()
client = ThreadedTestClient(TESTS, self.http_listener11_port)
@@ -627,9 +644,9 @@ class CommonHttp1Edge2EdgeTest(object):
self.assertEqual(1, client.count)
# ensure links recover once the server re-appears
- server = TestServer(server_port=self.http_server11_port,
- client_port=self.http_listener11_port,
- tests=TESTS)
+ server = TestServer.new_server(self.http_server11_port, self.http_listener11_port, TESTS)
+ self.assertIsNotNone(server, TEST_SERVER_ERROR % self.http_server11_port)
+
self.EA2.wait_connectors()
client = ThreadedTestClient(TESTS, self.http_listener11_port)
@@ -701,13 +718,11 @@ class CommonHttp1Edge2EdgeTest(object):
ResponseValidator(status=200))
],
}
- server11 = TestServer(server_port=self.http_server11_port,
- client_port=self.http_listener11_port,
- tests=TESTS_11)
- server10 = TestServer(server_port=self.http_server10_port,
- client_port=self.http_listener10_port,
- tests=TESTS_10,
- handler_cls=RequestHandler10)
+ server11 = TestServer.new_server(self.http_server11_port, self.http_listener11_port, TESTS_11)
+ self.assertIsNotNone(server11, TEST_SERVER_ERROR % self.http_server11_port)
+ server10 = TestServer.new_server(self.http_server10_port, self.http_listener10_port, TESTS_10,
+ handler_cls=RequestHandler10)
+ self.assertIsNotNone(server10, TEST_SERVER_ERROR % self.http_server10_port)
self.EA2.wait_connectors()
diff --git a/tests/system_tests_http1_over_tcp.py b/tests/system_tests_http1_over_tcp.py
index 4ca9005..2483fe9 100644
--- a/tests/system_tests_http1_over_tcp.py
+++ b/tests/system_tests_http1_over_tcp.py
@@ -65,13 +65,9 @@ class Http1OverTcpOneRouterTest(Http1OneRouterTestBase,
cls.INT_A = cls.routers[0]
cls.INT_A.listener = cls.INT_A.addresses[0]
- cls.http11_server = TestServer(server_port=cls.http_server11_port,
- client_port=cls.http_listener11_port,
- tests=cls.TESTS_11)
- cls.http10_server = TestServer(server_port=cls.http_server10_port,
- client_port=cls.http_listener10_port,
- tests=cls.TESTS_10,
- handler_cls=RequestHandler10)
+ cls.http11_server = TestServer.new_server(cls.http_server11_port, cls.http_listener11_port, cls.TESTS_11)
+ cls.http10_server = TestServer.new_server(cls.http_server10_port, cls.http_listener10_port, cls.TESTS_10,
+ handler_cls=RequestHandler10)
cls.INT_A.wait_connectors()
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org