improve waiting for service to start in mockservice fixture

- wait for proxy update before starting service
- wait for service server to respond to start before proceeding
This commit is contained in:
Min RK
2017-05-04 13:33:16 +02:00
parent 4cb18c931d
commit 226b6c40a5

View File

@@ -9,7 +9,7 @@ from subprocess import TimeoutExpired
import time import time
from unittest import mock from unittest import mock
from pytest import fixture, raises from pytest import fixture, raises
from tornado import ioloop from tornado import ioloop, gen
from .. import orm from .. import orm
from ..utils import random_port from ..utils import random_port
@@ -81,10 +81,14 @@ def _mockservice(request, app, url=False):
with mock.patch.object(jupyterhub.services.service, '_ServiceSpawner', MockServiceSpawner): with mock.patch.object(jupyterhub.services.service, '_ServiceSpawner', MockServiceSpawner):
app.services = [spec] app.services = [spec]
app.init_services() app.init_services()
app.io_loop.add_callback(app.proxy.add_all_services, app._service_map)
assert name in app._service_map assert name in app._service_map
service = app._service_map[name] service = app._service_map[name]
app.io_loop.add_callback(service.start) @gen.coroutine
def start():
# wait for proxy to be updated before starting the service
yield app.proxy.add_all_services(app._service_map)
service.start()
app.io_loop.add_callback(start)
def cleanup(): def cleanup():
service.stop() service.stop()
app.services[:] = [] app.services[:] = []
@@ -96,6 +100,8 @@ def _mockservice(request, app, url=False):
# ensure process finishes starting # ensure process finishes starting
with raises(TimeoutExpired): with raises(TimeoutExpired):
service.proc.wait(1) service.proc.wait(1)
if url:
ioloop.IOLoop().run_sync(service.server.wait_up)
return service return service