diff --git a/tests/base.py b/tests/base.py index 61e7e17a67..6a1d853382 100755 --- a/tests/base.py +++ b/tests/base.py @@ -1882,17 +1882,21 @@ class WebProxyFixture(fixtures.Fixture): class ZuulWebFixture(fixtures.Fixture): - def __init__(self, gearman_server_port, connections): + def __init__(self, gearman_server_port, connections, info=None): super(ZuulWebFixture, self).__init__() self.gearman_server_port = gearman_server_port self.connections = connections + if info is None: + self.info = zuul.model.WebInfo() + else: + self.info = info def _setUp(self): # Start the web server self.web = zuul.web.ZuulWeb( - listen_address='127.0.0.1', listen_port=0, + listen_address='::', listen_port=0, gear_server='127.0.0.1', gear_port=self.gearman_server_port, - info=zuul.model.WebInfo(), + info=self.info, connections=self.connections) self.web.start() self.addCleanup(self.web.stop) diff --git a/tests/unit/test_github_driver.py b/tests/unit/test_github_driver.py index e8347aafcd..0a8d1f174b 100644 --- a/tests/unit/test_github_driver.py +++ b/tests/unit/test_github_driver.py @@ -22,9 +22,8 @@ from unittest import skip import git -import zuul.web - from tests.base import ZuulTestCase, simple_layout, random_sha1 +from tests.base import ZuulWebFixture class TestGithubDriver(ZuulTestCase): @@ -784,12 +783,9 @@ class TestGithubWebhook(ZuulTestCase): super(TestGithubWebhook, self).setUp() # Start the web server - self.web = zuul.web.ZuulWeb( - listen_address='127.0.0.1', listen_port=0, - gear_server='127.0.0.1', gear_port=self.gearman_server.port, - connections=self.connections) - self.web.start() - self.addCleanup(self.web.stop) + self.web = self.useFixture( + ZuulWebFixture(self.gearman_server.port, + self.connections)) host = '127.0.0.1' # Wait until web server is started diff --git a/tests/unit/test_streaming.py b/tests/unit/test_streaming.py index b4a4bba9c6..30231d1feb 100644 --- a/tests/unit/test_streaming.py +++ b/tests/unit/test_streaming.py @@ -28,7 +28,7 @@ import zuul.web import zuul.lib.log_streamer import zuul.lib.fingergw import tests.base -from tests.base import iterate_timeout +from tests.base import iterate_timeout, ZuulWebFixture from ws4py.client import WebSocketBaseClient @@ -230,6 +230,11 @@ class TestStreaming(tests.base.AnsibleZuulTestCase): By making the 1024th character in the log file a multi-byte character (here, the Euro character), we can test this. ''' + # Start the web server + web = self.useFixture( + ZuulWebFixture(self.gearman_server.port, + self.connections)) + # Start the finger streamer daemon streamer = zuul.lib.log_streamer.LogStreamer( self.host, 0, self.executor_server.jobdir_root) @@ -280,29 +285,12 @@ class TestStreaming(tests.base.AnsibleZuulTestCase): logfile = open(ansible_log, 'r') self.addCleanup(logfile.close) - # Start the web server - web_server = zuul.web.ZuulWeb( - listen_address='::', listen_port=0, - gear_server='127.0.0.1', gear_port=self.gearman_server.port, - static_path=tempfile.gettempdir(), - connections=self.connections) - web_server.start() - self.addCleanup(web_server.stop) - - # Wait until web server is started - for x in iterate_timeout(30, "web server to start"): - port = web_server.port - try: - with socket.create_connection((self.host, port)): - break - except ConnectionRefusedError: - pass - # Start a thread with the websocket client ws_client_event = threading.Event() self.ws_client_results = '' ws_client_thread = threading.Thread( - target=self.runWSClient, args=(port, build.uuid, ws_client_event) + target=self.runWSClient, args=(web.port, build.uuid, + ws_client_event) ) ws_client_thread.start() ws_client_event.wait() @@ -324,6 +312,11 @@ class TestStreaming(tests.base.AnsibleZuulTestCase): self.assertEqual(file_contents, self.ws_client_results) def test_websocket_streaming(self): + # Start the web server + web = self.useFixture( + ZuulWebFixture(self.gearman_server.port, + self.connections)) + # Start the finger streamer daemon streamer = zuul.lib.log_streamer.LogStreamer( self.host, 0, self.executor_server.jobdir_root) @@ -367,29 +360,12 @@ class TestStreaming(tests.base.AnsibleZuulTestCase): logfile = open(ansible_log, 'r') self.addCleanup(logfile.close) - # Start the web server - web_server = zuul.web.ZuulWeb( - listen_address='::', listen_port=0, - gear_server='127.0.0.1', gear_port=self.gearman_server.port, - static_path=tempfile.gettempdir(), - connections=self.connections) - web_server.start() - self.addCleanup(web_server.stop) - - # Wait until web server is started - for x in iterate_timeout(30, "connection to web server"): - port = web_server.port - try: - with socket.create_connection((self.host, port)): - break - except ConnectionRefusedError: - pass - # Start a thread with the websocket client ws_client_event = threading.Event() self.ws_client_results = '' ws_client_thread = threading.Thread( - target=self.runWSClient, args=(port, build.uuid, ws_client_event) + target=self.runWSClient, args=(web.port, build.uuid, + ws_client_event) ) ws_client_thread.start() ws_client_event.wait() @@ -405,7 +381,6 @@ class TestStreaming(tests.base.AnsibleZuulTestCase): self.waitUntilSettled() file_contents = logfile.read() - logfile.close() self.log.debug("\n\nFile contents: %s\n\n", file_contents) self.log.debug("\n\nStreamed: %s\n\n", self.ws_client_results) self.assertEqual(file_contents, self.ws_client_results) diff --git a/tests/unit/test_web.py b/tests/unit/test_web.py index 569048322a..7fe12ee06f 100644 --- a/tests/unit/test_web.py +++ b/tests/unit/test_web.py @@ -25,6 +25,7 @@ import requests import zuul.web from tests.base import ZuulTestCase, ZuulDBTestCase, FIXTURE_DIR +from tests.base import ZuulWebFixture class FakeConfig(object): @@ -45,6 +46,16 @@ class BaseTestWeb(ZuulTestCase): def setUp(self): super(BaseTestWeb, self).setUp() + + self.zuul_ini_config = FakeConfig(self.config_ini_data) + + # Start the web server + self.web = self.useFixture( + ZuulWebFixture( + self.gearman_server.port, + self.connections, + info=zuul.model.WebInfo.fromConfig(self.zuul_ini_config))) + self.executor_server.hold_jobs_in_build = True A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A') A.addApproval('Code-Review', 2) @@ -54,17 +65,6 @@ class BaseTestWeb(ZuulTestCase): self.fake_gerrit.addEvent(B.addApproval('Approved', 1)) self.waitUntilSettled() - self.zuul_ini_config = FakeConfig(self.config_ini_data) - # Start the web server - self.web = zuul.web.ZuulWeb( - listen_address='127.0.0.1', listen_port=0, - gear_server='127.0.0.1', gear_port=self.gearman_server.port, - info=zuul.model.WebInfo.fromConfig(self.zuul_ini_config), - connections=self.connections - ) - self.web.start() - self.addCleanup(self.web.stop) - self.host = 'localhost' self.port = self.web.port # Wait until web server is started