diff --git a/gns3server/compute/docker/__init__.py b/gns3server/compute/docker/__init__.py index 048d5e47..722f7e69 100644 --- a/gns3server/compute/docker/__init__.py +++ b/gns3server/compute/docker/__init__.py @@ -46,6 +46,7 @@ class Docker(BaseManager): self._connected = False # Allow locking during ubridge operations self.ubridge_lock = asyncio.Lock() + self._session = None @asyncio.coroutine def connector(self): @@ -107,17 +108,16 @@ class Docker(BaseManager): data = json.dumps(data) url = "http://docker/" + path try: - session = aiohttp.ClientSession() - response = yield from session.request( + if self._session is None or self._session.closed is True: + self._session = aiohttp.ClientSession(connector=(yield from self.connector())) + response = yield from self._session.request( method, url, - connector=(yield from self.connector()), params=params, data=data, headers={"content-type": "application/json", }, timeout=timeout ) - yield from session.close() except (aiohttp.ClientResponseError, aiohttp.ClientOSError) as e: raise DockerError("Docker has returned an error: {}".format(str(e))) if response.status >= 300: diff --git a/tests/compute/docker/test_docker.py b/tests/compute/docker/test_docker.py index 100c4fcc..ee5de061 100644 --- a/tests/compute/docker/test_docker.py +++ b/tests/compute/docker/test_docker.py @@ -28,8 +28,6 @@ from gns3server.compute.docker.docker_error import DockerError def vm(): vm = Docker() vm._connected = True - vm._connector = MagicMock() - vm._connector.closed = False return vm @@ -48,7 +46,6 @@ def test_query_success(loop, vm): data = loop.run_until_complete(asyncio.async(vm.query("POST", "test", data={"a": True}, params={"b": 1}))) mock.assert_called_with('POST', 'http://docker/test', - connector=vm._connector, data='{"a": true}', headers={'content-type': 'application/json'}, params={'b': 1}, @@ -72,7 +69,6 @@ def test_query_error(loop, vm): data = loop.run_until_complete(asyncio.async(vm.query("POST", "test", data={"a": True}, params={"b": 1}))) mock.assert_called_with('POST', 'http://docker/test', - connector=vm._connector, data='{"a": true}', headers={'content-type': 'application/json'}, params={'b': 1}, @@ -94,7 +90,6 @@ def test_query_error_json(loop, vm): data = loop.run_until_complete(asyncio.async(vm.query("POST", "test", data={"a": True}, params={"b": 1}))) mock.assert_called_with('POST', 'http://docker/test', - connector=vm._connector, data='{"a": true}', headers={'content-type': 'application/json'}, params={'b': 1},