Skip to content

Commit

Permalink
Merge branch '0.24' into memory-leak
Browse files Browse the repository at this point in the history
  • Loading branch information
mborho committed Jan 30, 2018
2 parents 9bb9cda + 95f8159 commit bcd48ed
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 16 deletions.
5 changes: 2 additions & 3 deletions livebridge/web/__init__.py
Expand Up @@ -111,14 +111,13 @@ async def index_handler(self, request):

async def control_get(self, request):
control_doc = await self.app["controller"].load_control_doc()
self.control_etag = self._get_etag(control_doc)
return web.json_response(control_doc, headers={"Etag": self.control_etag})
return web.json_response(control_doc, headers={"Etag": self._get_etag(control_doc)})

async def control_put(self, request):
try:
# check etag first
control_doc = await self.app["controller"].load_control_doc()
if not self.control_etag or self._get_etag(control_doc) != request.headers.get("If-Match"):
if self._get_etag(control_doc) != request.headers.get("If-Match"):
return web.json_response({"error": "Precondition Failed."}, status=412)
# handle data
await request.post()
Expand Down
1 change: 1 addition & 0 deletions setup.py
Expand Up @@ -49,6 +49,7 @@
"asynctest==0.11.1",
"bleach==2.1.2",
"dsnparse==0.1.11",
"pymongo>=3.6.0",
"motor==1.2.1",
"python-dateutil==2.6.1",
"PyYAML==3.12",
Expand Down
1 change: 0 additions & 1 deletion tests/test_logger.py
Expand Up @@ -25,5 +25,4 @@ def test_logger(self):
from livebridge.logger import logger
assert type(logger) is logging.RootLogger
assert type(logger.handlers[0]) is logging.StreamHandler
assert type(logger.handlers[1]) is logging.FileHandler
logger.handlers = []
26 changes: 14 additions & 12 deletions tests/test_web.py
Expand Up @@ -30,8 +30,8 @@ async def get_application(self):
"port": 9990,
"auth": {"user": "test", "password": "testpwd"}}
self.controller = asynctest.MagicMock(spec="livebridge.controller.Controller")
self.server = WebApi(config=self.config, controller=self.controller, loop=self.loop)
return self.server.app
server = WebApi(config=self.config, controller=self.controller, loop=self.loop)
return server.app

@unittest_run_loop
async def test_init_with_loop(self):
Expand All @@ -47,13 +47,15 @@ async def test_init_with_loop(self):
assert self.loop.create_server.call_args[0][2] == 9990
self.client.session.close()

def test_shutdown(self):
self.server.loop = unittest.mock.MagicMock()
self.server.loop.run_until_complete = unittest.mock.MagicMock()
self.server.srv = unittest.mock.MagicMock()
self.server.srv.close = unittest.mock.MagicMock()
self.server.shutdown()
assert self.server.loop.run_until_complete.call_count == 4
@unittest_run_loop
async def test_shutdown(self):
server = WebApi(config=self.config, controller=self.controller, loop=self.loop)
server.loop = unittest.mock.MagicMock()
server.loop.run_until_complete = unittest.mock.MagicMock()
server.srv = unittest.mock.MagicMock()
server.srv.close = unittest.mock.MagicMock()
server.shutdown()
assert server.loop.run_until_complete.call_count == 4

async def _get_token(self):
data = {"username": self.config["auth"]["user"],
Expand Down Expand Up @@ -123,8 +125,7 @@ async def test_get_controldata(self):
@unittest_run_loop
async def test_put_controldata(self):
data = '{"foo": "bla"}'
self.server.control_etag = self.server._get_etag(data)
headers = {"X-Auth-Token": await self._get_token(), "If-Match": self.server.control_etag}
headers = {"X-Auth-Token": await self._get_token(), "If-Match": "51a47b5c06e23b9abfe95f84fea5e21e"}
self.controller.load_control_doc = asynctest.CoroutineMock(return_value=data)
self.controller.save_control_data = asynctest.CoroutineMock(return_value=True)
res = await self.client.request("PUT", "/api/v1/controldata", data=data, headers=headers)
Expand All @@ -135,7 +136,8 @@ async def test_put_controldata(self):

# etag is not matched
self.server.control_etag = None
res = await self.client.request("PUT", "/api/v1/controldata", data=data, headers=headers)
invalid_etag = {"X-Auth-Token": await self._get_token(), "If-Match": "foo"}
res = await self.client.request("PUT", "/api/v1/controldata", data=data, headers=invalid_etag)
assert res.status == 412
self.server.control_etag = "123456"

Expand Down

0 comments on commit bcd48ed

Please sign in to comment.