Esempio n. 1
0
async def test_last_msg_time(monkeypatch):
    alice_multiplexer, bob_multiplexer = MultiplexerPairFactory()

    async with alice_multiplexer.multiplex():
        async with bob_multiplexer.multiplex():
            assert alice_multiplexer.last_msg_time == 0
            assert bob_multiplexer.last_msg_time == 0
            alice_stream = alice_multiplexer.stream_protocol_messages(
                P2PProtocolV5)
            bob_stream = bob_multiplexer.stream_protocol_messages(
                P2PProtocolV5)

            alice_p2p_protocol = alice_multiplexer.get_protocol_by_type(
                P2PProtocolV5)
            bob_p2p_protocol = bob_multiplexer.get_protocol_by_type(
                P2PProtocolV5)

            now = time.monotonic()
            monkeypatch.setattr(time, 'monotonic', lambda: now)

            alice_p2p_protocol.send(Ping(None))
            cmd = await asyncio.wait_for(bob_stream.asend(None),
                                         timeout=DEFAULT_TIMEOUT)
            assert isinstance(cmd, Ping)
            assert bob_multiplexer.last_msg_time == now

            bob_p2p_protocol.send(Pong(None))
            cmd = await asyncio.wait_for(alice_stream.asend(None),
                                         timeout=DEFAULT_TIMEOUT)
            assert isinstance(cmd, Pong)
            assert alice_multiplexer.last_msg_time == now
Esempio n. 2
0
async def test_multiplexer_p2p_and_paragon_protocol():
    alice_multiplexer, bob_multiplexer = MultiplexerPairFactory(
        protocol_types=(SecondProtocol, ), )

    async with alice_multiplexer.multiplex():
        async with bob_multiplexer.multiplex():
            alice_p2p_stream = alice_multiplexer.stream_protocol_messages(
                P2PProtocolV5)
            bob_p2p_stream = bob_multiplexer.stream_protocol_messages(
                P2PProtocolV5)
            alice_second_stream = alice_multiplexer.stream_protocol_messages(
                SecondProtocol)
            bob_second_stream = bob_multiplexer.stream_protocol_messages(
                SecondProtocol)

            alice_p2p_protocol = alice_multiplexer.get_protocol_by_type(
                P2PProtocolV5)
            alice_second_protocol = alice_multiplexer.get_protocol_by_type(
                SecondProtocol)

            bob_p2p_protocol = bob_multiplexer.get_protocol_by_type(
                P2PProtocolV5)
            bob_second_protocol = bob_multiplexer.get_protocol_by_type(
                SecondProtocol)

            alice_second_protocol.send(CommandA(None))
            alice_p2p_protocol.send(Ping(None))
            alice_second_protocol.send(CommandB(None))
            cmd = await asyncio.wait_for(bob_p2p_stream.asend(None),
                                         timeout=DEFAULT_TIMEOUT)
            assert isinstance(cmd, Ping)

            bob_second_protocol.send(CommandA(None))
            bob_p2p_protocol.send(Pong(None))
            bob_second_protocol.send(CommandB(None))

            cmd = await asyncio.wait_for(alice_p2p_stream.asend(None),
                                         timeout=DEFAULT_TIMEOUT)
            assert isinstance(cmd, Pong)

            cmd_1 = await asyncio.wait_for(bob_second_stream.asend(None),
                                           timeout=DEFAULT_TIMEOUT
                                           )  # noqa: E501
            cmd_2 = await asyncio.wait_for(bob_second_stream.asend(None),
                                           timeout=DEFAULT_TIMEOUT
                                           )  # noqa: E501
            cmd_3 = await asyncio.wait_for(alice_second_stream.asend(None),
                                           timeout=DEFAULT_TIMEOUT
                                           )  # noqa: E501
            cmd_4 = await asyncio.wait_for(alice_second_stream.asend(None),
                                           timeout=DEFAULT_TIMEOUT
                                           )  # noqa: E501

            assert isinstance(cmd_1, CommandA)
            assert isinstance(cmd_2, CommandB)
            assert isinstance(cmd_3, CommandA)
            assert isinstance(cmd_4, CommandB)
Esempio n. 3
0
async def test_multiplexer_p2p_and_two_more_protocols():
    alice_multiplexer, bob_multiplexer = MultiplexerPairFactory(
        protocol_types=(SecondProtocol, ThirdProtocol),
    )

    async with alice_multiplexer.multiplex():
        async with bob_multiplexer.multiplex():
            alice_p2p_stream = alice_multiplexer.stream_protocol_messages(P2PProtocolV5)
            bob_p2p_stream = bob_multiplexer.stream_protocol_messages(P2PProtocolV5)
            alice_second_stream = alice_multiplexer.stream_protocol_messages(SecondProtocol)
            bob_second_stream = bob_multiplexer.stream_protocol_messages(SecondProtocol)
            alice_third_stream = alice_multiplexer.stream_protocol_messages(ThirdProtocol)
            bob_third_stream = bob_multiplexer.stream_protocol_messages(ThirdProtocol)

            alice_p2p_protocol = alice_multiplexer.get_protocol_by_type(P2PProtocolV5)
            alice_second_protocol = alice_multiplexer.get_protocol_by_type(SecondProtocol)
            alice_third_protocol = alice_multiplexer.get_protocol_by_type(ThirdProtocol)

            bob_p2p_protocol = bob_multiplexer.get_protocol_by_type(P2PProtocolV5)
            bob_second_protocol = bob_multiplexer.get_protocol_by_type(SecondProtocol)
            bob_third_protocol = bob_multiplexer.get_protocol_by_type(ThirdProtocol)

            alice_second_protocol.send_cmd(CommandA)
            alice_third_protocol.send_cmd(CommandC)
            alice_p2p_protocol.send_ping()
            alice_second_protocol.send_cmd(CommandB)
            alice_third_protocol.send_cmd(CommandD)
            cmd, _ = await asyncio.wait_for(bob_p2p_stream.asend(None), timeout=0.1)
            assert isinstance(cmd, Ping)

            bob_second_protocol.send_cmd(CommandA)
            bob_third_protocol.send_cmd(CommandC)
            bob_p2p_protocol.send_pong()
            bob_second_protocol.send_cmd(CommandB)
            bob_third_protocol.send_cmd(CommandD)
            cmd, _ = await asyncio.wait_for(alice_p2p_stream.asend(None), timeout=0.1)
            assert isinstance(cmd, Pong)

            cmd_1, _ = await asyncio.wait_for(bob_third_stream.asend(None), timeout=0.1)  # noqa: E501
            cmd_2, _ = await asyncio.wait_for(bob_third_stream.asend(None), timeout=0.1)  # noqa: E501
            cmd_3, _ = await asyncio.wait_for(bob_second_stream.asend(None), timeout=0.1)  # noqa: E501
            cmd_4, _ = await asyncio.wait_for(bob_second_stream.asend(None), timeout=0.1)  # noqa: E501
            cmd_5, _ = await asyncio.wait_for(alice_third_stream.asend(None), timeout=0.1)  # noqa: E501
            cmd_6, _ = await asyncio.wait_for(alice_third_stream.asend(None), timeout=0.1)  # noqa: E501
            cmd_7, _ = await asyncio.wait_for(alice_second_stream.asend(None), timeout=0.1)  # noqa: E501
            cmd_8, _ = await asyncio.wait_for(alice_second_stream.asend(None), timeout=0.1)  # noqa: E501

            assert isinstance(cmd_1, CommandC)
            assert isinstance(cmd_2, CommandD)
            assert isinstance(cmd_3, CommandA)
            assert isinstance(cmd_4, CommandB)
            assert isinstance(cmd_5, CommandC)
            assert isinstance(cmd_6, CommandD)
            assert isinstance(cmd_7, CommandA)
            assert isinstance(cmd_8, CommandB)
Esempio n. 4
0
async def test_multiplexer_only_p2p_protocol():
    alice_multiplexer, bob_multiplexer = MultiplexerPairFactory()

    async with alice_multiplexer.multiplex():
        async with bob_multiplexer.multiplex():
            alice_stream = alice_multiplexer.stream_protocol_messages(P2PProtocolV5)
            bob_stream = bob_multiplexer.stream_protocol_messages(P2PProtocolV5)

            alice_p2p_protocol = alice_multiplexer.get_protocol_by_type(P2PProtocolV5)
            bob_p2p_protocol = bob_multiplexer.get_protocol_by_type(P2PProtocolV5)

            alice_p2p_protocol.send_ping()
            cmd, _ = await asyncio.wait_for(bob_stream.asend(None), timeout=0.1)
            assert isinstance(cmd, Ping)

            bob_p2p_protocol.send_pong()
            cmd, _ = await asyncio.wait_for(alice_stream.asend(None), timeout=0.1)