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)
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)
def _make_message_kwargs_as_dict(type, *args, **kwargs): if args: return make_message(type, *args, **kwargs) else: return make_message(type, kwargs)
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()))