Пример #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
Пример #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"
    }
Пример #3
0
async def on_connect(conn):
    packet_stream = PacketStream(conn)
    api.add_connection(packet_stream)

    print('connect', conn)
    async for msg in packet_stream:
        print(msg)
Пример #4
0
async def test_message_decoding(ps_client):
    await ps_client.connect()

    ps = PacketStream(ps_client)

    assert ps.is_connected

    ps_client.feed([
        b'\n\x00\x00\x00\x9a\x00\x00\x04\xfb',
        b'{"name":["createHistoryStream"],"args":[{"id":"@omgyp7Pnrw+Qm0I6T6Fh5VvnKmodMXwnxTIesW2DgMg=.ed25519",'
        b'"seq":10,"live":true,"keys":false}],"type":"source"}'
    ])

    messages = (await _collect_messages(ps))
    assert len(messages) == 1
    assert messages[0].type == PSMessageType.JSON
    assert messages[0].body == {
        'name': ['createHistoryStream'],
        'args': [{
            'id': '@omgyp7Pnrw+Qm0I6T6Fh5VvnKmodMXwnxTIesW2DgMg=.ed25519',
            'seq': 10,
            'live': True,
            'keys': False
        }],
        'type':
        'source'
    }
Пример #5
0
async def main():
    client = SHSClient('127.0.0.1', 8008, keypair, bytes(keypair.verify_key))
    packet_stream = PacketStream(client)
    await client.open()
    api.add_connection(packet_stream)
    await gather(ensure_future(api), test_client())
Пример #6
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