X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;ds=inline;f=modules%2Flibjuju%2Ftests%2Funit%2Ftest_connection.py;fp=modules%2Flibjuju%2Ftests%2Funit%2Ftest_connection.py;h=f69b8d6bc2a0a102957f9d1d0a29b59933110472;hb=68858c1915122c2dbc8999a5cd3229694abf5f3a;hp=0000000000000000000000000000000000000000;hpb=032a71b2a6692b8b4e30f629a1f906d246f06736;p=osm%2FN2VC.git diff --git a/modules/libjuju/tests/unit/test_connection.py b/modules/libjuju/tests/unit/test_connection.py new file mode 100644 index 0000000..f69b8d6 --- /dev/null +++ b/modules/libjuju/tests/unit/test_connection.py @@ -0,0 +1,54 @@ +import asyncio +import json +import mock +import pytest +from collections import deque + +from websockets.exceptions import ConnectionClosed + +from .. import base +from juju.client.connection import Connection + + +class WebsocketMock: + def __init__(self, responses): + super().__init__() + self.responses = deque(responses) + self.open = True + + async def send(self, message): + pass + + async def recv(self): + if not self.responses: + await asyncio.sleep(1) # delay to give test time to finish + raise ConnectionClosed(0, 'ran out of responses') + return json.dumps(self.responses.popleft()) + + async def close(self): + self.open = False + + +@pytest.mark.asyncio +async def test_out_of_order(event_loop): + con = Connection(*[None]*4) + ws = WebsocketMock([ + {'request-id': 1}, + {'request-id': 3}, + {'request-id': 2}, + ]) + expected_responses = [ + {'request-id': 1}, + {'request-id': 2}, + {'request-id': 3}, + ] + con._get_sll = mock.MagicMock() + try: + with mock.patch('websockets.connect', base.AsyncMock(return_value=ws)): + await con.open() + actual_responses = [] + for i in range(3): + actual_responses.append(await con.rpc({'version': 1})) + assert actual_responses == expected_responses + finally: + await con.close()