Ejemplo n.º 1
0
async def test_message_request(ps_server, mocker):
    ps_server.listen()

    ps = PacketStream(ps_server)

    mocker.patch.object(ps, 'register_handler', wraps=ps.register_handler)

    ps.send({'name': ['whoami'], 'args': []})

    header, body = list(ps_server.get_output())
    assert header == b'\x02\x00\x00\x00 \x00\x00\x00\x01'
    assert json.loads(body.decode('utf-8')) == {"name": ["whoami"], "args": []}

    assert ps.req_counter == 2
    assert ps.register_handler.call_count == 1
    handler = list(ps._event_map.values())[0][1]

    with patch.object(handler, 'process') as mock_process:
        ps_server.feed([
            b'\x02\x00\x00\x00>\xff\xff\xff\xff',
            b'{"id":"@1+Iwm79DKvVBqYKFkhT6fWRbAVvNNVH4F2BSxwhYmx8=.ed25519"}'
        ])
        msg = await ps.read()
        assert mock_process.call_count == 1

        # responses have negative req
        assert msg.req == -1
        assert msg.body[
            'id'] == '@1+Iwm79DKvVBqYKFkhT6fWRbAVvNNVH4F2BSxwhYmx8=.ed25519'
        assert ps.req_counter == 2
Ejemplo n.º 2
0
async def test_message_encoding(ps_client):
    await ps_client.connect()

    ps = PacketStream(ps_client)

    assert ps.is_connected

    ps.send(
        {
            'name': ['createHistoryStream'],
            'args': [{
                'id': "@1+Iwm79DKvVBqYKFkhT6fWRbAVvNNVH4F2BSxwhYmx8=.ed25519",
                'seq': 1,
                'live': False,
                'keys': False
            }],
            'type':
            'source'
        },
        stream=True)

    header, body = list(ps_client.get_output())

    assert header == b'\x0a\x00\x00\x00\xa6\x00\x00\x00\x01'
    assert json.loads(body.decode('utf-8')) == {
        "name": ["createHistoryStream"],
        "args": [{
            "id": "@1+Iwm79DKvVBqYKFkhT6fWRbAVvNNVH4F2BSxwhYmx8=.ed25519",
            "seq": 1,
            "live": False,
            "keys": False
        }],
        "type":
        "source"
    }
Ejemplo n.º 3
0
async def test_message_stream(ps_client, mocker):
    await ps_client.connect()

    ps = PacketStream(ps_client)
    mocker.patch.object(ps, 'register_handler', wraps=ps.register_handler)

    assert ps.is_connected

    ps.send(
        {
            'name': ['createHistoryStream'],
            'args': [{
                'id': "@1+Iwm79DKvVBqYKFkhT6fWRbAVvNNVH4F2BSxwhYmx8=.ed25519",
                'seq': 1,
                'live': False,
                'keys': False
            }],
            'type':
            'source'
        },
        stream=True)

    assert ps.req_counter == 2
    assert ps.register_handler.call_count == 1
    handler = list(ps._event_map.values())[0][1]

    with patch.object(handler, 'process') as mock_process:
        ps_client.feed([b'\n\x00\x00\x02\xc5\xff\xff\xff\xff', MSG_BODY_1])
        msg = await ps.read()
        assert mock_process.call_count == 1

        # responses have negative req
        assert msg.req == -1
        assert msg.body[
            'previous'] == '%KTGP6W8vF80McRAZHYDWuKOD0KlNyKSq6Gb42iuV7Iw=.sha256'

        assert ps.req_counter == 2

    stream_handler = ps.send(
        {
            'name': ['createHistoryStream'],
            'args': [{
                'id': "@1+Iwm79DKvVBqYKFkhT6fWRbAVvNNVH4F2BSxwhYmx8=.ed25519",
                'seq': 1,
                'live': False,
                'keys': False
            }],
            'type':
            'source'
        },
        stream=True)

    assert ps.req_counter == 3
    assert ps.register_handler.call_count == 2
    handler = list(ps._event_map.values())[1][1]

    with patch.object(handler, 'process',
                      wraps=handler.process) as mock_process:
        ps_client.feed([
            b'\n\x00\x00\x02\xc5\xff\xff\xff\xfe', MSG_BODY_1,
            b'\x0e\x00\x00\x023\xff\xff\xff\xfe', MSG_BODY_2
        ])

        # execute both message polling and response handling loops
        collected, handled = await gather(_collect_messages(ps),
                                          _collect_messages(stream_handler))

        # No messages collected, since they're all responses
        assert collected == []

        assert mock_process.call_count == 2

        for msg in handled:
            # responses have negative req
            assert msg.req == -2