예제 #1
0
async def test_standard_interfaces():
    async with MessageBus().connect() as bus:
        msg = Message(destination='org.freedesktop.DBus',
                      path='/org/freedesktop/DBus',
                      interface='org.freedesktop.DBus',
                      member='ListNames',
                      serial=bus.next_serial())
        reply = await bus.call(msg)

        assert reply.message_type == MessageType.METHOD_RETURN
        assert reply.reply_serial == msg.serial
        assert reply.signature == 'as'
        assert bus.unique_name in reply.body[0]

        msg.interface = 'org.freedesktop.DBus.Introspectable'
        msg.member = 'Introspect'
        msg.serial = bus.next_serial()

        reply = await bus.call(msg)
        assert reply.message_type == MessageType.METHOD_RETURN
        assert reply.reply_serial == msg.serial
        assert reply.signature == 's'
        assert type(reply.body[0]) is str

        msg.member = 'MemberDoesNotExist'
        msg.serial = bus.next_serial()

        reply = await bus.call(msg)
        assert reply.message_type == MessageType.ERROR
        assert reply.reply_serial == msg.serial
        assert reply.error_name
        assert reply.signature == 's'
        assert type(reply.body[0]) is str
예제 #2
0
async def test_sending_messages_between_buses():
    async with MessageBus().connect() as bus1, \
            MessageBus().connect() as bus2:

        msg = Message(destination=bus1.unique_name,
                      path='/org/test/path',
                      interface='org.test.iface',
                      member='SomeMember',
                      serial=bus2.next_serial())

        def message_handler(sent):
            if sent.sender == bus2.unique_name and sent.serial == msg.serial:
                assert sent.path == msg.path
                assert sent.serial == msg.serial
                assert sent.interface == msg.interface
                assert sent.member == msg.member
                bus1.send(Message.new_method_return(sent, 's', ['got it']))
                bus1.remove_message_handler(message_handler)
                return True

        bus1.add_message_handler(message_handler)

        reply = await bus2.call(msg)

        assert reply.message_type == MessageType.METHOD_RETURN
        assert reply.sender == bus1.unique_name
        assert reply.signature == 's'
        assert reply.body == ['got it']
        assert reply.reply_serial == msg.serial

        def message_handler_error(sent):
            if sent.sender == bus2.unique_name and sent.serial == msg.serial:
                assert sent.path == msg.path
                assert sent.serial == msg.serial
                assert sent.interface == msg.interface
                assert sent.member == msg.member
                bus1.send(
                    Message.new_error(sent, 'org.test.Error',
                                      'throwing an error'))
                bus1.remove_message_handler(message_handler_error)
                return True

        bus1.add_message_handler(message_handler_error)

        msg.serial = bus2.next_serial()

        reply = await bus2.call(msg)

        assert reply.message_type == MessageType.ERROR
        assert reply.sender == bus1.unique_name
        assert reply.reply_serial == msg.serial
        assert reply.error_name == 'org.test.Error'
        assert reply.signature == 's'
        assert reply.body == ['throwing an error']

        msg.serial = bus2.next_serial()
        msg.flags = MessageFlag.NO_REPLY_EXPECTED
        reply = await bus2.call(msg)
        assert reply is None