Esempio n. 1
0
    def test_003(self):
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe('a/b', qos=2)

        pub = MqttClient("pub:{seq}", connect=4)
        msg = gen_msg()
        pub.publish('a/b', payload=msg, qos=1)

        e = sub.recv()
        if not isinstance(e, EventPublish) or \
                e.msg.payload != msg or \
                e.msg.qos     != 1:
            debug('received event (supposely publish): {0}'.format(e))
            return False

        # send PUBACK
        sub.puback(e.msg.mid)

        e2 = pub.recv()
        if not isinstance(e2, EventPuback) or \
                e2.mid != pub.get_last_mid():
            debug('received event (supposely puback): {0}'.format(e2))
            return False

        sub.unsubscribe('a/b')
        sub.disconnect(); pub.disconnect()

        return True
Esempio n. 2
0
    def test_003(self):
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe('a/b', qos=1)

        pub = MqttClient("pub:{seq}", connect=4)
        msg = gen_msg()
        pub.publish('a/b', payload=msg, qos=1)
        pub.recv()

        e = sub.recv()
        if not isinstance(e, EventPublish) or \
                e.msg.payload != msg or \
                e.msg.qos     != 1:
            debug('failing event: {0}'.format(e))
            return False

        # send PUBACK
        sub.puback(e.msg.mid)

        puback_evt = pub.recv()
        # PUBACK mid == PUBLISH mid
        # validating [MQTT-2.3.1-6]
        if not isinstance(puback_evt, EventPuback) or \
                puback_evt.mid != pub.get_last_mid():
            debug('failing event: {0}'.format(puback_evt))
            return False

        sub.unsubscribe('a/b')
        sub.disconnect(); pub.disconnect()
        return True
Esempio n. 3
0
    def test_100(self):
        c = MqttClient("unicode:{seq}", connect=4)
        topic = u"utf8/Какво е Unicode ?"

        evt = c.subscribe(topic, qos=0)
        if not isinstance(evt, EventSuback) or \
                evt.mid != c.get_last_mid():
            debug(evt)
            return False

        c.unsubscribe(topic)
        c.disconnect()
        return True
Esempio n. 4
0
    def test_232(self):
        pub = MqttClient("conformity-pub:{seq}", connect=4)
        sub = MqttClient("conformity-sub:{seq}", connect=4)

        sub.subscribe("foo/bar", qos=2)
        pub.publish("foo/bar", "grrr", qos=2)                # receive PUBREC as response
        pub.pubrel(pub.get_last_mid(), read_response=False) # triggers message delivery

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.payload != "grrr":
            debug(evt)
            return False

        ack = sub.unsubscribe("foo/bar")
        if not isinstance(ack, EventUnsuback):
            debug(ack)
            return False

        rel = sub.pubrec(evt.msg.mid)
        if not isinstance(rel, EventPubrel):
            debug(rel)
            return False

        sub.pubcomp(evt.msg.mid)
        comp = pub.recv()
        if not isinstance(comp, EventPubcomp):
            debug(comp)
            return False

        pub.disconnect(); sub.disconnect()
        return True
Esempio n. 5
0
    def test_231(self):
        pub = MqttClient("conformity-pub:{seq}", connect=4)
        sub = MqttClient("conformity-sub:{seq}", connect=4)

        sub.subscribe("foo/bar", qos=1)
        pub.publish("foo/bar", "grrr", qos=1)

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.payload != "grrr":
            debug(evt)
            return False

        ack = sub.unsubscribe("foo/bar")
        if not isinstance(ack, EventUnsuback):
            debug(ack)
            return False

        sub.puback(evt.msg.mid)
        ack2 = pub.recv()
        if not isinstance(ack2, EventPuback):
            debug(ack2)
            return False

        pub.disconnect(); sub.disconnect()
        return True
Esempio n. 6
0
    def test_231(self):
        pub = MqttClient("conformity-pub:{seq}", connect=4)
        sub = MqttClient("conformity-sub:{seq}", connect=4)

        sub.subscribe("foo/bar", qos=1)
        pub.publish("foo/bar", "grrr", qos=1)

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.payload != "grrr":
            debug(evt)
            return False

        ack = sub.unsubscribe("foo/bar")
        if not isinstance(ack, EventUnsuback):
            debug(ack)
            return False

        sub.puback(evt.msg.mid)
        ack2 = pub.recv()
        if not isinstance(ack2, EventPuback):
            debug(ack2)
            return False

        pub.disconnect()
        sub.disconnect()
        return True
Esempio n. 7
0
    def _pubsub(self, pubtopic, subtopic, match):
        msg = gen_msg()

        sub = MqttClient("sub:{seq}", connect=4)
        suback_evt = sub.subscribe(subtopic, 0)
        if not isinstance(suback_evt, EventSuback) or \
                suback_evt.mid != sub.get_last_mid() or \
                suback_evt.granted_qos[0] != 0:
            if match: debug("failed to subscribe: {0}".format(suback_evt))
            return False

        pub = MqttClient("pub:{seq}", connect=4)
        pub.publish(pubtopic, msg)
        pub.disconnect()

        e = sub.recv()
        unsuback_evt = sub.unsubscribe(subtopic)
        if not isinstance(unsuback_evt, EventUnsuback) or \
                unsuback_evt.mid != sub.get_last_mid():
            if match: debug("failed to unsubscribe: {0}".format(unsuback_evt))
            return False

        sub.disconnect()
        #print e, e.msg.topic, e.msg.payload
        if not isinstance(e, EventPublish) or \
                e.msg.topic   != pubtopic or \
                e.msg.payload != msg:
            if match: debug("invalid received msg: {0}".format(e))
            return False

        return True
Esempio n. 8
0
    def test_232(self):
        pub = MqttClient("conformity-pub:{seq}", connect=4)
        sub = MqttClient("conformity-sub:{seq}", connect=4)

        sub.subscribe("foo/bar", qos=2)
        pub.publish("foo/bar", "grrr", qos=2)  # receive PUBREC as response
        pub.pubrel(pub.get_last_mid(),
                   read_response=False)  # triggers message delivery

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.payload != "grrr":
            debug(evt)
            return False

        ack = sub.unsubscribe("foo/bar")
        if not isinstance(ack, EventUnsuback):
            debug(ack)
            return False

        rel = sub.pubrec(evt.msg.mid)
        if not isinstance(rel, EventPubrel):
            debug(rel)
            return False

        sub.pubcomp(evt.msg.mid)
        comp = pub.recv()
        if not isinstance(comp, EventPubcomp):
            debug(comp)
            return False

        pub.disconnect()
        sub.disconnect()
        return True
Esempio n. 9
0
    def test_004(self):
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe('a/b', 2)

        pub = MqttClient("pub:{seq}", connect=4)
        msg = gen_msg()
        pub.publish('a/b', payload=msg, qos=2, read_response=False)

        msgid = pub.get_last_mid()

        # PUBREC
        e = pub.recv()
        # validating [MQTT-2.3.1-6]
        if not isinstance(e, EventPubrec) or e.mid != msgid:
            debug('failing event (PUBREC waited): {0}'.format(e))
            return False

        pub.pubrel(msgid, read_response=False)

        # subscriber ready to receive msg
        e = sub.recv()
        if not isinstance(e, EventPublish) or e.msg.qos != 2 or e.msg.payload != msg:
            debug('failing event (PUBLISH waited): {0}'.format(e))
            return False

        # subscriber: send PUBREC after having received PUBLISH message
        sub.pubrec(e.msg.mid, read_response=False)
        e2 = sub.recv()
        # validating [MQTT-2.3.1-6]
        if not isinstance(e2, EventPubrel) or e2.mid != e.msg.mid:
            debug('failing event (PUBREL waited): {0}'.format(e))
            return False

        sub.pubcomp(e.msg.mid)

        #
        pubcomp_evt = pub.recv()
        # validating [MQTT-2.3.1-6]
        if not isinstance(pubcomp_evt, EventPubcomp) or pubcomp_evt.mid != msgid:
            debug('failing event (PUBCOMP waited): {0}'.format(e))
            return False


        sub.unsubscribe('a/b')
        sub.disconnect(); pub.disconnect()

        return True
Esempio n. 10
0
    def test_221(self):
        c = MqttClient("conformity:{seq}", connect=4)
        ack = c.unsubscribe("foo/bar")
        if not isinstance(ack, EventUnsuback):
            debug(ack)
            return False

        return True
Esempio n. 11
0
    def test_221(self):
        c = MqttClient("conformity:{seq}", connect=4)
        ack = c.unsubscribe("foo/bar")
        if not isinstance(ack, EventUnsuback):
            debug(ack)
            return False

        return True
Esempio n. 12
0
    def test_006(self):
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe('a/b', qos=1)

        pub = MqttClient("pub:{seq}", connect=4)
        msg = gen_msg()
        pub.publish('a/b', payload=msg, qos=1)
        pub.recv()

        e = sub.recv()
        if not isinstance(e, EventPublish) or \
                e.msg.payload != msg or \
                e.msg.qos     != 1:
            debug('failing event: {0}'.format(e))
            return False

        # send PUBREL (! ERROR: not a QOS 2 message)
        sub.pubrec(e.msg.mid)

        puback_evt = pub.recv()
        if not puback_evt is None:
            debug('failing event: {0}'.format(puback_evt))
            return False

        # unexpected PUBREL
        sub.pubrel(e.msg.mid)
        puback_evt = pub.recv()
        if not puback_evt is None:
            debug('failing event: {0}'.format(puback_evt))
            return False

        # unexpected PUBCOMP
        sub.pubcomp(e.msg.mid)
        puback_evt = pub.recv()
        if not puback_evt is None:
            debug('failing event: {0}'.format(puback_evt))
            return False

        sub.unsubscribe('a/b')

        sub.disconnect()
        pub.disconnect()
        return True
Esempio n. 13
0
    def test_002(self):
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe('a/b', 2)

        pub = MqttClient("pub:{seq}", connect=4)
        msg = gen_msg()
        pub.publish('a/b', payload=msg, qos=0)
        pub.disconnect()

        e = sub.recv()
        sub.unsubscribe('a/b')
        sub.disconnect()

        if not isinstance(e, EventPublish) or \
                e.msg.payload != msg or \
                e.msg.qos     != 0:
            debug(e)
            return False

        return True
Esempio n. 14
0
    def test_022(self):
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe('a/b', qos=0)

        pub = MqttClient("pub:{seq}", connect=4)
        # published with qos 0
        msg = gen_msg()
        pub.publish('a/b', payload=msg, qos=1)
        pub.disconnect()

        e = sub.recv()
        sub.unsubscribe('a/b')
        sub.disconnect()

        if not isinstance(e, EventPublish) or \
                e.msg.payload != msg or \
                e.msg.qos     != 0:
            debug('failing event: {0}'.format(e))
            return False

        return True
Esempio n. 15
0
    def test_230(self):
        pub = MqttClient("conformity-pub:{seq}", connect=4)
        sub = MqttClient("conformity-sub:{seq}", connect=4)

        sub.subscribe("foo/bar", qos=0)
        pub.publish("foo/bar", "grrr", qos=0)

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.payload != "grrr":
            debug(evt)
            return False

        sub.unsubscribe("foo/bar")
        pub.publish("foo/bar", "grrr bis", qos=0)

        evt = sub.recv()
        if evt is not None:
            debug(evt)
            return False

        pub.disconnect(); sub.disconnect()
        return True
Esempio n. 16
0
    def test_012(self):
        """
        """
        v = yield exometer.value('wave.subscriptions')
        ref_val = v['value']

        c = MqttClient("metrics:{seq}", connect=4)
        c.subscribe('foo/bar', qos=0)

        v = yield exometer.value('wave.subscriptions')
        if v['value'] != ref_val + 1:
            debug("{0}, {1}".format(v, ref_val))
            defer.returnValue(False)

        c.unsubscribe('foo/bar')
        v = yield exometer.value('wave.subscriptions')
        if v['value'] != ref_val:
            debug("{0}, {1}".format(v, ref_val))
            defer.returnValue(False)

        c.disconnect()
        defer.returnValue(True)
Esempio n. 17
0
    def test_012(self):
        """
        """
        v = yield exometer.value('wave.subscriptions')
        ref_val = v['value']

        c = MqttClient("metrics:{seq}", connect=4)
        c.subscribe('foo/bar', qos=0)

        v = yield exometer.value('wave.subscriptions')
        if v['value'] != ref_val+1:
            debug("{0}, {1}".format(v, ref_val))
            defer.returnValue(False)

        c.unsubscribe('foo/bar')
        v = yield exometer.value('wave.subscriptions')
        if v['value'] != ref_val:
            debug("{0}, {1}".format(v, ref_val))
            defer.returnValue(False)

        c.disconnect()
        defer.returnValue(True)
Esempio n. 18
0
    def test_230(self):
        pub = MqttClient("conformity-pub:{seq}", connect=4)
        sub = MqttClient("conformity-sub:{seq}", connect=4)

        sub.subscribe("foo/bar", qos=0)
        pub.publish("foo/bar", "grrr", qos=0)

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.payload != "grrr":
            debug(evt)
            return False

        sub.unsubscribe("foo/bar")
        pub.publish("foo/bar", "grrr bis", qos=0)

        evt = sub.recv()
        if evt is not None:
            debug(evt)
            return False

        pub.disconnect()
        sub.disconnect()
        return True
Esempio n. 19
0
    def test_255(self):
        c = MqttClient("conformity:{seq}", connect=4)
        c.subscribe("", qos=0)

        if c.conn_is_alive():
            debug("connection still alive")
            return False

        c = MqttClient("conformity:{seq}", connect=4)
        c.unsubscribe("")

        if c.conn_is_alive():
            debug("connection still alive")
            return False

        c = MqttClient("conformity:{seq}", connect=4)
        c.publish("", "", qos=0)

        if c.conn_is_alive():
            debug("connection stil alive")
            return False

        return True
Esempio n. 20
0
    def test_255(self):
        c = MqttClient("conformity:{seq}", connect=4)
        c.subscribe("", qos=0)

        if c.conn_is_alive():
            debug("connection still alive")
            return False

        c = MqttClient("conformity:{seq}", connect=4)
        c.unsubscribe("")

        if c.conn_is_alive():
            debug("connection still alive")
            return False

        c = MqttClient("conformity:{seq}", connect=4)
        c.publish("", "", qos=0)

        if c.conn_is_alive():
            debug("connection stil alive")
            return False

        return True
Esempio n. 21
0
    def test_010(self):
        c = MqttClient("reg:{seq}", connect=4)

        evt = c.subscribe("/foo/bar", qos=0)
        # validating [MQTT-2.3.1-7]
        if not isinstance(evt, EventSuback) or evt.mid != c.get_last_mid():
            return False

        evt = c.unsubscribe("/foo/bar")
        # validating [MQTT-2.3.1-7]
        if not isinstance(evt, EventUnsuback) or evt.mid != c.get_last_mid():
            return False

        c.disconnect()
        return True
Esempio n. 22
0
    def test_010(self):
        c = MqttClient("reg:{seq}", connect=4)

        evt = c.subscribe("/foo/bar", qos=0)
        # validating [MQTT-2.3.1-7]
        if not isinstance(evt, EventSuback) or evt.mid != c.get_last_mid():
            return False

        evt = c.unsubscribe("/foo/bar")
        # validating [MQTT-2.3.1-7]
        if not isinstance(evt, EventUnsuback) or evt.mid != c.get_last_mid():
            return False

        c.disconnect()
        return True
Esempio n. 23
0
    def test_002(self):
        f = open('../log/wave.access.log', 'r')
        f.seek(0, os.SEEK_END)

        yield app.set_acl(enabled=False)

        # here we start
        c = MqttClient("conformity:{seq}", connect=4)
        c.subscribe("foo/bar", qos=1)
        c.unsubscribe("foo/bar")

        f.readline()  # skip CONNECT
        if not _match(
                f, {
                    'request_method': 'SUBSCRIBE',
                    'request_url': 'foo/bar',
                    'status': '200',
                    'request_header_user_agent': c.client_id
                }):
            defer.returnValue(False)
        if not _match(
                f, {
                    'request_method': 'UNSUBSCRIBE',
                    'request_url': 'foo/bar',
                    'status': '200',
                    'request_header_user_agent': c.client_id
                }):
            defer.returnValue(False)

        # test w/ acls on
        yield app.set_acl(enabled=True)
        c.subscribe("foo/bar", qos=0)
        if not _match(
                f, {
                    'request_method': 'SUBSCRIBE',
                    'request_url': 'foo/bar',
                    'status': '403',
                    'request_header_user_agent': c.client_id
                }):
            defer.returnValue(False)

        c.subscribe("foo/bar", qos=1)
        if not _match(
                f, {
                    'request_method': 'SUBSCRIBE',
                    'request_url': 'foo/bar',
                    'status': '403',
                    'request_header_user_agent': c.client_id
                }):
            defer.returnValue(False)

        c.subscribe("foo/bar", qos=2)
        if not _match(
                f, {
                    'request_method': 'SUBSCRIBE',
                    'request_url': 'foo/bar',
                    'status': '403',
                    'request_header_user_agent': c.client_id
                }):
            defer.returnValue(False)

        c.subscribe("foo/baz", qos=0)
        if not _match(
                f, {
                    'request_method': 'SUBSCRIBE',
                    'request_url': 'foo/baz',
                    'status': '200',
                    'request_header_user_agent': c.client_id
                }):
            defer.returnValue(False)

        c.unsubscribe("foo/baz")
        c.disconnect()
        defer.returnValue(True)
Esempio n. 24
0
    def test_002(self):
        pub = MqttClient("publisher:{seq}")
        evt = pub.connect()
        if not isinstance(evt, EventConnack) or evt.ret_code != 0:
            debug(evt); return False

        ctrl = MqttClient("control-sample:{seq}")
        evt = ctrl.connect()
        if not isinstance(evt, EventConnack) or evt.ret_code != 0:
            debug(evt); return False

        evt = ctrl.subscribe("/test/qos/0", qos=0)
        if not isinstance(evt, EventSuback):
            debug(evt); return False


        ###
        dummyid = "dummy:{0}".format(random.randint(0,9999))
        dummy = MqttClient(dummyid)
        evt = dummy.connect(clean_session=0)
        if not isinstance(evt, EventConnack) or evt.ret_code != 0:
            debug(evt); return False

        evt = dummy.subscribe("/test/qos/0", qos=0)
        if not isinstance(evt, EventSuback):
            debug(evt); return False


        # 1. sent qos0, 1, 2 messages; check reception
        if not self.pubsub((pub, ctrl, dummy), clbs={
                    'checkrecv': lambda evt, msg: isinstance(evt, EventPublish) and evt.msg.payload == msg
                }):
            return False

        # 2. disconnecting (properly) dummmy; then reconnects
        dummy.disconnect(); del(dummy)
        # be sure dummy client disconnection in fully complete on broker side before going further
        time.sleep(1)

        ## publish message
        msg = gen_msg(10)
        pub.publish("/test/qos/0", payload=msg)


        ## reconnects, without explicitly subscribing topic
        dummy = MqttClient(dummyid)
        evt = dummy.connect(clean_session=0)
        if not isinstance(evt, EventConnack) or evt.ret_code != 0:
            debug(evt); return False


        ## checking message is not received by dummy
        evt = ctrl.recv()
        if not isinstance(evt, EventPublish) or evt.msg.payload != msg:
            debug(evt); return False

        evt = dummy.recv()
        if not isinstance(evt, EventPublish) or evt.msg.payload != msg:
            debug(evt); return False

        ## dummy resubscribe, check we receive messages
        #evt = dummy.do("subscribe", "/test/qos/0", 0)
        #if not isinstance(evt, EventSuback):
        #    return False

        ## send test message
        if not self.pubsub((pub, ctrl, dummy), clbs={
                    'checkrecv': lambda evt, msg: evt is not None and evt.msg.payload == msg
                }):
            return False

        # cleanup
        pub.disconnect()
        ctrl.disconnect()
        dummy.unsubscribe("/test/qos/0")
        dummy.disconnect()

        return True