Skip to content

Commit

Permalink
Only reconnect session when managed internally
Browse files Browse the repository at this point in the history
  • Loading branch information
emlove committed May 23, 2022
1 parent fffb1a6 commit e8a389e
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 9 deletions.
2 changes: 1 addition & 1 deletion jsonrpc_websocket/jsonrpc.py
Expand Up @@ -60,7 +60,7 @@ async def ws_connect(self):
raise TransportError('Connection already open.')

try:
if self._session.closed:
if self._internal_session and self._session.closed:
self._session = aiohttp.ClientSession()
self._client = await self._session.ws_connect(
self._url, **self._connect_kwargs)
Expand Down
25 changes: 17 additions & 8 deletions tests.py
Expand Up @@ -13,9 +13,9 @@
from jsonrpc_websocket import Server, TransportError

if sys.version_info[:2] < (3, 8):
from asynctest import patch, MagicMock as AsyncMock
from asynctest import patch
else:
from unittest.mock import patch, AsyncMock
from unittest.mock import patch

pytestmark = pytest.mark.asyncio

Expand All @@ -32,6 +32,9 @@ async def ws_connect(self, *args, **kwargs):
self.test_server = JsonTestServer(self.loop)
return self.test_server

async def close(self):
self._test_server = None

@property
def handler(self):
return self.test_server.send_handler
Expand All @@ -48,7 +51,7 @@ def receive_binary(self, data):

@property
def closed(self):
self.test_server is None
return self.test_server is None


class JsonTestServer(ClientWebSocketResponse):
Expand Down Expand Up @@ -101,9 +104,14 @@ def assertSameJSON(json1, json2):


@pytest.fixture()
async def server(event_loop):
async def client(event_loop):
"""Generate a mock json server."""
return JsonTestClient(event_loop)


@pytest.fixture()
async def server(client):
"""Generate a mock json server."""
client = JsonTestClient(event_loop)
server = Server('/xmlrpc', session=client, timeout=0.2)
client.run_loop_future = await server.ws_connect()
yield server
Expand All @@ -118,16 +126,17 @@ def test_pending_message_response():
assert pending_message.response == 10


async def test_internal_session():
client = AsyncMock(spec=aiohttp.ClientSession)
async def test_internal_session(client):
with patch('jsonrpc_websocket.jsonrpc.aiohttp.ClientSession',
return_value=client) as client_class:
server = Server('/xmlrpc', timeout=0.2)
client_class.assert_called_once()

await server.close()

client.close.assert_called_once()
await server.ws_connect()

assert client_class.call_count == 2


async def test_send_message(server):
Expand Down

0 comments on commit e8a389e

Please sign in to comment.