def server_factory(request, event_loop, server_permanent_keys):
"""
Return a factory to create :class:`saltyrtc.Server` instances.
"""
# Enable asyncio debug logging
os.environ['PYTHONASYNCIODEBUG'] = '1'
# Enable logging
util.enable_logging(level=logbook.NOTICE, redirect_loggers={
'asyncio': logbook.WARNING,
'websockets': logbook.WARNING,
})
# Push handler
logging_handler = logbook.StderrHandler()
logging_handler.push_application()
_server_instances = []
def _server_factory(permanent_keys=None):
if permanent_keys is None:
permanent_keys = server_permanent_keys
# Setup server
port = unused_tcp_port()
coroutine = serve(
util.create_ssl_context(
pytest.saltyrtc.cert, dh_params_file=pytest.saltyrtc.dh_params),
permanent_keys,
host=pytest.saltyrtc.ip,
port=port,
loop=event_loop,
server_class=TestServer,
)
server_ = event_loop.run_until_complete(coroutine)
# Inject timeout and address (little bit of a hack but meh...)
server_.timeout = _get_timeout(request=request)
server_.address = (pytest.saltyrtc.ip, port)
_server_instances.append(server_)
def fin():
server_.close()
event_loop.run_until_complete(server_.wait_closed())
_server_instances.remove(server_)
if len(_server_instances) == 0:
logging_handler.pop_application()
request.addfinalizer(fin)
return server_
return _server_factory
评论列表
文章目录