Merge pull request #823 from benoitc/gaiohttp_unixsock

Support UNIX sockets in gaiohttp worker
This commit is contained in:
Andrew Svetlov 2014-07-24 09:03:10 +03:00
commit 4b1cbe6a37
2 changed files with 25 additions and 5 deletions

View File

@ -47,7 +47,7 @@ class AiohttpWorker(base.Worker):
proto, proto.connection_lost, self.connections, False)
return proto
def factory(self, wsgi, host, port):
def factory(self, wsgi, addr):
proto = WSGIServerHttpProtocol(
wsgi, readpayload=True,
loop=self.loop,
@ -58,8 +58,8 @@ class AiohttpWorker(base.Worker):
access_log_format=self.cfg.access_log_format)
return self.wrap_protocol(proto)
def get_factory(self, sock, host, port):
return functools.partial(self.factory, self.wsgi, host, port)
def get_factory(self, sock, addr):
return functools.partial(self.factory, self.wsgi, addr)
@asyncio.coroutine
def close(self):
@ -72,7 +72,7 @@ class AiohttpWorker(base.Worker):
@asyncio.coroutine
def _run(self):
for sock in self.sockets:
factory = self.get_factory(sock.sock, *sock.cfg_addr)
factory = self.get_factory(sock.sock, sock.cfg_addr)
self.servers.append(
(yield from self.loop.create_server(factory, sock=sock.sock)))

View File

@ -61,7 +61,7 @@ class WorkerTests(unittest.TestCase):
self.worker.cfg = mock.Mock()
f = self.worker.factory(
self.worker.wsgi, 'localhost', 8080)
self.worker.wsgi, ('localhost', 8080))
self.assertIsInstance(f, WSGIServerHttpProtocol)
@mock.patch('gunicorn.workers.gaiohttp.asyncio')
@ -84,6 +84,26 @@ class WorkerTests(unittest.TestCase):
self.assertTrue(self.worker.log.info.called)
self.assertTrue(self.worker.notify.called)
@mock.patch('gunicorn.workers.gaiohttp.asyncio')
def test__run_unix_socket(self, m_asyncio):
self.worker.ppid = 1
self.worker.alive = True
self.worker.servers = []
sock = mock.Mock()
sock.cfg_addr = '/tmp/gunicorn.sock'
self.worker.sockets = [sock]
self.worker.wsgi = mock.Mock()
self.worker.log = mock.Mock()
self.worker.notify = mock.Mock()
loop = self.worker.loop = mock.Mock()
loop.create_server.return_value = asyncio.Future(loop=self.loop)
loop.create_server.return_value.set_result(sock)
self.loop.run_until_complete(self.worker._run())
self.assertTrue(self.worker.log.info.called)
self.assertTrue(self.worker.notify.called)
def test__run_connections(self):
conn = mock.Mock()
self.worker.ppid = 1