Use ZuulWebFixture in tests

This reduces duplication and increases consistency.

Also, an extra logfile.close() call is removed in test_streaming
(there is a cleanup handler which closes the file).

Change-Id: I940ba07a48bade03b6b1f3ced9621d156f7755ae
This commit is contained in:
James E. Blair 2018-05-31 07:55:08 -07:00
parent 56be6165ae
commit 57c0a67f89
4 changed files with 37 additions and 62 deletions

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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