Esempio n. 1
0
def check_channel_active_after_handshake(multiplexer_password=None):
    with nested(
        closing(socket.socket()), closing(create_connections_manager(multiplexer_password=multiplexer_password))
    ) as (so, client):
        so.bind(("localhost", 0))
        so.listen(1)
        address = so.getsockname()
        msg = make_message(MultiplexerMessage, type=0)

        connect_future = client.connect(address)
        send_future = client.send_message(msg, connection=ConnectionsManager.ONE)
        # so has not yet replied with CONNECTION_WELCOME
        raises(FutureError)(lambda: send_future.wait(timeout=0.3))()

        with closing(so.accept()[0]) as so_channel:
            _send_welcome(so_channel, multiplexer_password=multiplexer_password)
            connect_future.wait(timeout=0.3)

            # so has replies, connect_future returned, connection is active
            client.send_message(msg, connection=ConnectionsManager.ONE).wait(timeout=0.3)
Esempio n. 2
0
def check_make_message(make_message):
    r = {'req_uint32': 1, 'rep_uint32': [3,4]}
    msg = make_message(VariousFields, **r)
    eq_(msg.req_uint32, 1)
    eq_(msg.opt_uint32, 0)
    assert list(msg.rep_uint32) == [3,4]
    eq_(dict_message(msg), r)
    assert dict_message(msg, all_fields=True) == dict(r, opt_uint32=0)

    msg2 = make_message(VariousFieldsList, field=r)
    eq_(msg2.field, msg)
    eq_(dict_message(msg2, recursive=True), {'field': r})

    msg3 = make_message(VariousFieldsList,
            field=make_message(VariousFields, **r))
    eq_(msg3.field, msg)
    eq_(dict_message(msg3, recursive=True), {'field': r})

    raises(ValueError)(lambda: make_message(VariousFieldsList, field=[]))()
    raises(ValueError)(lambda: make_message(VariousFieldsList, field=1))()

    r = range(10)
    msgs = make_message(VariousFieldsList, fields=[
            {'req_uint32': 1},
            {'opt_uint32': 2, 'rep_uint32': []},
            {'rep_uint32': r},
        ])
    eq_(msgs.fields[0].req_uint32, 1)
    eq_(msgs.fields[0].opt_uint32, 0)
    eq_(list(msgs.fields[0].rep_uint32), [])

    eq_(msgs.fields[1].req_uint32, 0)
    eq_(msgs.fields[1].opt_uint32, 2)
    eq_(list(msgs.fields[1].rep_uint32), [])

    eq_(msgs.fields[2].req_uint32, 0)
    eq_(list(msgs.fields[2].rep_uint32), r)
Esempio n. 3
0
 def _make_message_kwargs_as_dict(type, *args, **kwargs):
     if args:
         return make_message(type, *args, **kwargs)
     else:
         return make_message(type, kwargs)
Esempio n. 4
0
def _send_welcome(so, type=PeerTypes.MULTIPLEXER, id=56987, multiplexer_password=None):
    welcome = make_message(WelcomeMessage, type=type, id=id, multiplexer_password=multiplexer_password)
    welcome_message = make_message(
        MultiplexerMessage, type=MessageTypes.CONNECTION_WELCOME, message=welcome.SerializeToString()
    )
    so.sendall(create_frame(welcome_message.SerializeToString()))