Пример #1
0
    def _message_received(self, msg):
        """
        Callback run when an XMPP Message is reveived.
        This callback delivers the message to every behaviour
        that is waiting for it using their templates match.
        the aioxmpp.Message is converted to spade.message.Message

        Args:
          msg (aioxmpp.Messagge): the message just received.

        Returns:
            list(asyncio.Future): a list of futures of the append of the message at each matched behaviour.

        """
        logger.debug(f"Got message: {msg}")

        msg = Message.from_node(msg)
        futures = []
        matched = False
        for behaviour in (x for x in self.behaviours if x.match(msg)):
            futures.append(self.submit(behaviour.enqueue(msg)))
            logger.debug(f"Message enqueued to behaviour: {behaviour}")
            self.traces.append(msg, category=str(behaviour))
            matched = True
        if not matched:
            logger.warning(f"No behaviour matched for message: {msg}")
            self.traces.append(msg)
        return futures
Пример #2
0
def test_body_with_languages():
    msg = aioxmpp.Message(type_=aioxmpp.MessageType.CHAT)
    msg.body["en"] = "Hello World"
    msg.body["es"] = "Hola Mundo"

    new_msg = Message.from_node(msg)
    assert new_msg.body == "Hello World"
Пример #3
0
def test_body_with_languages():
    msg = aioxmpp.Message(type_=aioxmpp.MessageType.CHAT)
    msg.body["en"] = "Hello World"
    msg.body["es"] = "Hola Mundo"

    new_msg = Message.from_node(msg)
    assert new_msg.body == "Hello World"
Пример #4
0
def test_message_from_node():
    aiomsg = aioxmpp.Message(type_=aioxmpp.MessageType.CHAT)
    data = forms_xso.Data(type_=forms_xso.DataType.FORM)

    data.fields.append(
        forms_xso.Field(
            var="performative",
            type_=forms_xso.FieldType.TEXT_SINGLE,
            values=["request"],
        )
    )

    data.fields.append(
        forms_xso.Field(
            var="_thread_node",
            type_=forms_xso.FieldType.TEXT_SINGLE,
            values=["thread-id"],
        )
    )
    data.title = SPADE_X_METADATA
    aiomsg.xep0004_data = [data]

    msg = Message.from_node(aiomsg)

    assert msg.thread == "thread-id"
    assert msg.get_metadata("performative") == "request"
    assert msg.metadata == {"performative": "request"}
Пример #5
0
    def setup(self):
        self.web.start(templates_path="examples")
        template1 = Template(sender="agent0@fake_server")
        template2 = Template(sender="agent1@fake_server")
        template3 = Template(sender="agent2@fake_server")
        template4 = Template(sender="agent3@fake_server")

        # Create some dummy behaviours
        dummybehav = self.DummyBehav()
        self.add_behaviour(dummybehav, template=template1)
        periodbehav = self.DummyPeriodBehav(period=12.7)
        self.add_behaviour(periodbehav, template=template2)
        timeoutbehav = self.DummyTimeoutBehav(start_at=datetime.datetime.now())
        self.add_behaviour(timeoutbehav, template=template3)
        fsm_behav = self.DummyFSMBehav()
        self.add_behaviour(fsm_behav, template=template4)
        behavs = [dummybehav, periodbehav, timeoutbehav, fsm_behav]

        # Create some fake contacts
        self.add_fake_contact("agent0@fake_server", PresenceType.AVAILABLE)
        self.add_fake_contact("agent1@fake_server",
                              PresenceType.AVAILABLE,
                              show=PresenceShow.AWAY)
        self.add_fake_contact(
            "agent2@fake_server",
            PresenceType.AVAILABLE,
            show=PresenceShow.DO_NOT_DISTURB,
        )
        self.add_fake_contact("agent3@fake_server", PresenceType.UNAVAILABLE)
        self.add_fake_contact("agent4@fake_server",
                              PresenceType.AVAILABLE,
                              show=PresenceShow.CHAT)
        self.add_fake_contact("agent5@fake_server", PresenceType.UNAVAILABLE)

        # Send and Receive some fake messages
        self.traces.reset()
        for i in range(20):
            number = random.randint(0, 3)
            from_ = JID.fromstr("agent{}@fake_server".format(number))
            msg = aioxmpp.Message(from_=from_,
                                  to=self.jid,
                                  type_=MessageType.CHAT)
            msg.body[None] = "Hello from {}! This is a long message.".format(
                from_.localpart)
            msg = Message.from_node(msg)
            msg.metadata = {
                "performative": "inform",
                "acl-representation": "xml"
            }
            msg = msg.prepare()
            self._message_received(msg=msg)
            msg = Message(sender=str(self.jid),
                          to=str(from_),
                          body="This is my answer.")
            msg.sent = True
            self.traces.append(msg, category=str(behavs[number]))
Пример #6
0
    def _message_received(self, msg):
        """
        Callback run when an XMPP Message is reveived.
        The aioxmpp.Message is converted to spade.message.Message

        Args:
          msg (aioxmpp.Messagge): the message just received.

        Returns:
            asyncio.Future: a future of the append of the message.

        """

        msg = Message.from_node(msg)
        logger.debug(f"Got message: {msg}")
        return asyncio.run_coroutine_threadsafe(self.queue.put(msg), self.loop)
Пример #7
0
def test_receive_without_behaviours():
    agent = make_connected_agent()
    aiomsg = aioxmpp.Message(type_=aioxmpp.MessageType.CHAT)
    msg = Message.from_node(aiomsg)

    assert agent.traces.len() == 0
    agent.start(auto_register=False)

    with LogCapture() as log:
        agent._message_received(aiomsg)
        log.check_present(('spade.Agent', 'WARNING', f"No behaviour matched for message: {msg}"))

    assert agent.traces.len() == 1
    assert msg in agent.traces.store[0]

    agent.stop()
Пример #8
0
def test_receive_without_behaviours():
    agent = make_connected_agent()
    aiomsg = aioxmpp.Message(type_=aioxmpp.MessageType.CHAT)
    msg = Message.from_node(aiomsg)

    assert agent.traces.len() == 0
    future = agent.start(auto_register=False)
    assert future.result() is None

    with LogCapture() as log:
        agent._message_received(aiomsg)
        log.check_present(('spade.Agent', 'WARNING', f"No behaviour matched for message: {msg}"))

    assert agent.traces.len() == 1
    assert msg in agent.traces.store[0]

    agent.stop()
Пример #9
0
    def _message_received(self, msg):
        """
        Callback run when an XMPP Message is reveived.
        This callback delivers the message to every behaviour
        that is waiting for it. First, the aioxmpp.Message is
        converted to spade.message.Message

        Args:
          msg (aioxmpp.Messagge): the message just received.

        Returns:
            list(asyncio.Future): a list of futures of the append of the message at each matched behaviour.

        """

        msg = Message.from_node(msg)
        return self.dispatch(msg)
Пример #10
0
    def _message_received(self, msg):
        """
        Callback run when an XMPP Message is reveived.
        This callback delivers the message to every behaviour
        that is waiting for it. First, the aioxmpp.Message is
        converted to spade.message.Message

        Args:
          msg (aioxmpp.Messagge): the message just received.

        Returns:
            list(asyncio.Future): a list of futures of the append of the message at each matched behaviour.

        """

        msg = Message.from_node(msg)
        return self.dispatch(msg)
Пример #11
0
def test_receive_without_behaviours():
    agent = MockedAgentFactory()
    aiomsg = aioxmpp.Message(type_=aioxmpp.MessageType.CHAT)
    msg = Message.from_node(aiomsg)

    assert agent.traces.len() == 0
    future = agent.start(auto_register=False)
    assert future.result() is None

    with LogCapture() as log:
        agent._message_received(aiomsg)
        log.check_present(("spade.Agent", "WARNING",
                           f"No behaviour matched for message: {msg}"))

    assert agent.traces.len() == 1
    assert msg in agent.traces.store[0]

    agent.stop()
Пример #12
0
    def setup(self):
        self.web.start(templates_path="examples")
        template1 = Template(sender="agent0@fake_server")
        template2 = Template(sender="agent1@fake_server")
        template3 = Template(sender="agent2@fake_server")
        template4 = Template(sender="agent3@fake_server")

        # Create some dummy behaviours
        dummybehav = self.DummyBehav()
        self.add_behaviour(dummybehav, template=template1)
        periodbehav = self.DummyPeriodBehav(period=12.7)
        self.add_behaviour(periodbehav, template=template2)
        timeoutbehav = self.DummyTimeoutBehav(start_at=datetime.datetime.now())
        self.add_behaviour(timeoutbehav, template=template3)
        fsm_behav = self.DummyFSMBehav()
        self.add_behaviour(fsm_behav, template=template4)
        behavs = [dummybehav, periodbehav, timeoutbehav, fsm_behav]

        # Create some fake contacts
        self.add_fake_contact("agent0@fake_server", PresenceType.AVAILABLE)
        self.add_fake_contact("agent1@fake_server", PresenceType.AVAILABLE, show=PresenceShow.AWAY)
        self.add_fake_contact("agent2@fake_server", PresenceType.AVAILABLE, show=PresenceShow.DO_NOT_DISTURB)
        self.add_fake_contact("agent3@fake_server", PresenceType.UNAVAILABLE)
        self.add_fake_contact("agent4@fake_server", PresenceType.AVAILABLE, show=PresenceShow.CHAT)
        self.add_fake_contact("agent5@fake_server", PresenceType.UNAVAILABLE)

        # Send and Receive some fake messages
        self.traces.reset()
        for i in range(20):
            number = random.randint(0, 3)
            from_ = JID.fromstr("agent{}@fake_server".format(number))
            msg = aioxmpp.Message(from_=from_, to=self.jid, type_=MessageType.CHAT)
            msg.body[None] = "Hello from {}! This is a long message.".format(from_.localpart)
            msg = Message.from_node(msg)
            msg.metadata = {"performative": "inform", "acl-representation": "xml"}
            msg = msg.prepare()
            self._message_received(msg=msg)
            msg = Message(sender=str(self.jid), to=str(from_), body="This is my answer.")
            msg.sent = True
            self.traces.append(msg, category=str(behavs[number]))
Пример #13
0
def test_message_from_node():
    aiomsg = aioxmpp.Message(type_=aioxmpp.MessageType.CHAT)
    data = forms_xso.Data(type_=forms_xso.DataType.FORM)

    data.fields.append(
        forms_xso.Field(
            var="performative",
            type_=forms_xso.FieldType.TEXT_SINGLE,
            values=["request"],
        )
    )

    data.fields.append(forms_xso.Field(var="_thread_node",
                                       type_=forms_xso.FieldType.TEXT_SINGLE,
                                       values=["thread-id"]))
    data.title = SPADE_X_METADATA
    aiomsg.xep0004_data = [data]

    msg = Message.from_node(aiomsg)

    assert msg.thread == "thread-id"
    assert msg.get_metadata("performative") == "request"
    assert msg.metadata == {"performative": "request"}
Пример #14
0
def test_message_from_node_attribute_error():
    with pytest.raises(AttributeError) as e:
        Message.from_node(Message())
Пример #15
0
def test_message_from_node_attribute_error():
    with pytest.raises(AttributeError) as e:
        Message.from_node(Message())