Beispiel #1
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
Beispiel #2
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
Beispiel #3
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
Beispiel #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
Beispiel #5
0
    def test_203(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", "wootwoot", qos=2, read_response=False)

        # PUB PUBREC
        evt = pub.recv()
        pub.pubrel(pub.get_last_mid(), read_response=False)

        # subscr: receiving PUBLISH
        evt = sub.recv()
        sub.pubrec(evt.msg.mid, read_response=False)

        # subscr: receiving PUBREL
        evt = sub.recv()

        # sending PUBCOMP with wrong pktid
        sub.forge(NC.CMD_PUBCOMP, 0, [
            ('uint16', (evt.mid+10)%65535) # wrong pktid
        ], send=True)


        evt = pub.recv()
        # publisher: PUBCOMP never received
        if evt is not None:
            debug(evt)
            return False

        pub.disconnect(); sub.disconnect()
        return True
Beispiel #6
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
Beispiel #7
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
Beispiel #8
0
    def test_110(self):
        sub = MqttClient("unisub:{seq}", connect=4)
        pub = MqttClient("unipub:{seq}", connect=4)

        evt = sub.subscribe(u"ᛋᚳᛖᚪᛚ/+/ᚦᛖᚪᚻ", qos=0)
        if not isinstance(evt, EventSuback) or \
                evt.mid != sub.get_last_mid():
            debug(evt)
            return False

        topic = u"ᛋᚳᛖᚪᛚ/䑓/ᚦᛖᚪᚻ"
        content = u"На берегу пустынных волн"

        evt = pub.publish(topic, payload=content, qos=0)

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or\
                evt.msg.topic != topic:
            debug(evt)
            return false

        content2 = evt.msg.payload.decode('utf8')
        if content2 != content:
            debugt("payload differs: {0} != {1}".format(content, content2))
            return False

        sub.disconnect()
        pub.disconnect()
        return True
Beispiel #9
0
    def test_013(self):
        pub = MqttClient("conformity:{seq}", connect=4)
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe("/test/022/013/+", qos=2)

        pub.publish("/test/022/013/t1", 'hurry', retain=True, qos=1)
        msg = sub.recv()
        if not isinstance(msg, EventPublish) or \
                msg.msg.topic != '/test/022/013/t1' or \
                msg.msg.payload != 'hurry' or\
                msg.msg.qos != 1 or\
                msg.msg.retain:
            debug(msg)
            return False

        # same with empty payload
        pub.publish("/test/022/013/t2", 'up', retain=True, qos=2)
        pub.pubrel(pub.get_last_mid())

        msg = sub.recv()
        if not isinstance(msg, EventPublish) or \
                msg.msg.topic != '/test/022/013/t2' or \
                msg.msg.payload != "up" or\
                msg.msg.qos != 2 or\
                msg.msg.retain:
            debug(msg)
            return False

        return True
Beispiel #10
0
    def test_203(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", "wootwoot", qos=2, read_response=False)

        # PUB PUBREC
        evt = pub.recv()
        pub.pubrel(pub.get_last_mid(), read_response=False)

        # subscr: receiving PUBLISH
        evt = sub.recv()
        sub.pubrec(evt.msg.mid, read_response=False)

        # subscr: receiving PUBREL
        evt = sub.recv()

        # sending PUBCOMP with wrong pktid
        sub.forge(
            NC.CMD_PUBCOMP,
            0,
            [('uint16', (evt.mid + 10) % 65535)  # wrong pktid
             ],
            send=True)

        evt = pub.recv()
        # publisher: PUBCOMP never received
        if evt is not None:
            debug(evt)
            return False

        pub.disconnect()
        sub.disconnect()
        return True
Beispiel #11
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
Beispiel #12
0
    def test_013(self):
        pub = MqttClient("conformity:{seq}", connect=4)
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe("/test/022/013/+", qos=2)

        pub.publish("/test/022/013/t1", 'hurry', retain=True, qos=1)
        msg = sub.recv()
        if not isinstance(msg, EventPublish) or \
                msg.msg.topic != '/test/022/013/t1' or \
                msg.msg.payload != 'hurry' or\
                msg.msg.qos != 1 or\
                msg.msg.retain:
            debug(msg)
            return False

        # same with empty payload
        pub.publish("/test/022/013/t2", 'up', retain=True, qos=2)
        pub.pubrel(pub.get_last_mid())

        msg = sub.recv()
        if not isinstance(msg, EventPublish) or \
                msg.msg.topic != '/test/022/013/t2' or \
                msg.msg.payload != "up" or\
                msg.msg.qos != 2 or\
                msg.msg.retain:
            debug(msg)
            return False

        return True
Beispiel #13
0
    def test_222(self):
        sub = MqttClient("conformity-sub:{seq}", connect=4)
        ack = sub.unsubscribe_multi(["foo/bar", "bar/baz", "paper/+/scissor"])

        if not isinstance(ack, EventUnsuback) or ack.mid != sub.get_last_mid():
            debug(ack)
            return False

        sub.disconnect()
        return True
Beispiel #14
0
    def test_222(self):
        sub = MqttClient("conformity-sub:{seq}", connect=4)
        ack = sub.unsubscribe_multi(["foo/bar", "bar/baz", "paper/+/scissor"])

        if not isinstance(ack, EventUnsuback) or ack.mid != sub.get_last_mid():
            debug(ack)
            return False

        sub.disconnect()
        return True
Beispiel #15
0
    def test_001(self):
        sub = MqttClient("sub:{seq}", connect=4)
        suback_evt = sub.subscribe('foo/bar', 2)
        if not isinstance(suback_evt, EventSuback) or \
                suback_evt.mid != sub.get_last_mid() or \
                suback_evt.granted_qos[0] != 2:
            debug(suback_evt)
            return False

        return True
Beispiel #16
0
    def test_001(self):
        sub = MqttClient("sub:{seq}", connect=4)
        suback_evt = sub.subscribe('foo/bar', qos=1)
        if not isinstance(suback_evt, EventSuback) or \
                suback_evt.mid != sub.get_last_mid() or \
                suback_evt.granted_qos[0] != 1:
            debug('failing event: {0}'.format(suback_evt))
            return False

        return True
Beispiel #17
0
    def test_240(self):
        pub = MqttClient("conformity-pub:{seq}", connect=4)

        pub.publish("foo/bar", "", qos=2, read_response=False)
        mid1 = pub.get_last_mid()
        pub.publish("bar/baz", "", qos=2, read_response=False)
        mid2 = pub.get_last_mid()

        evt = pub.recv()
        if not isinstance(evt, EventPubrec) or evt.mid != mid1:
            debug(evt)
            return False

        evt = pub.recv()
        if not isinstance(evt, EventPubrec) or evt.mid != mid2:
            debug(evt)
            return False

        pub.disconnect()
        return True
Beispiel #18
0
    def test_010(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)

        pub.pubrec(pub.get_last_mid())

        # PUBREC
        pub.recv()

        pub.pubrec(pub.get_last_mid())
        pub.puback(pub.get_last_mid())
        pub.pubcomp(pub.get_last_mid())


        # finally send correct PUBREL message
        pub.pubrel(pub.get_last_mid())

        # PUBLISH received by subscriber
        evt = sub.recv()

        sub.pubrel(sub.get_last_mid())
        sub.puback(sub.get_last_mid())
        sub.pubcomp(sub.get_last_mid())

        return True
Beispiel #19
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
Beispiel #20
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
Beispiel #21
0
    def test_010(self):
        pub = MqttClient("pub:{seq}", connect=4)
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe('a/b', 0)

        # NOTE: remaining length value is message length + 5 bytes (topic encoded) + 2 bytes (msgid)
        puback_evt = pub.publish('a/b', payload='', qos=1)
        if not isinstance(puback_evt, EventPuback) or \
                puback_evt.mid != pub.get_last_mid():
            return False

        publish_evt = sub.recv()
        if not isinstance(publish_evt, EventPublish) or \
                publish_evt.msg.payloadlen != 0 or \
                publish_evt.msg.payload is not None:
            return False

        return True
Beispiel #22
0
    def test_240(self):
        pub = MqttClient("conformity-pub:{seq}", connect=4)

        pub.publish("foo/bar", "", qos=2, read_response=False); mid1 = pub.get_last_mid()
        pub.publish("bar/baz", "", qos=2, read_response=False); mid2 = pub.get_last_mid()

        evt = pub.recv()
        if not isinstance(evt, EventPubrec) or evt.mid != mid1:
            debug(evt)
            return False

        evt = pub.recv()
        if not isinstance(evt, EventPubrec) or evt.mid != mid2:
            debug(evt)
            return False

        pub.disconnect()
        return True
Beispiel #23
0
    def test_216(self):
        pub = MqttClient("conformity-pub:{seq}", connect=4)
        sub = MqttClient("conformity-sub:{seq}", connect=4)

        ack = sub.subscribe_multi([("foo/bar", 2), ("bar/baz", 0),
                                   ("paper/+/scissor", 1)])

        if not isinstance(ack, EventSuback) or ack.mid != sub.get_last_mid():
            debug(ack)
            return False

        # checking granted qos
        if len(ack.granted_qos) != 3 or \
                ack.granted_qos[0] != 2 or \
                ack.granted_qos[1] != 0 or \
                ack.granted_qos[2] != 1:
            debug(ack)
            return False

        return True
Beispiel #24
0
    def test_013(self):
        pub = MqttClient("pub:{seq}", connect=4)
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe('a/b', 0)

        # NOTE: remaining length value is message length + 5 bytes (topic encoded) + 2 bytes (msgid)
        msg = gen_msg(17000)
        #print "msg=", msg, len(msg)

        puback_evt = pub.publish('a/b', msg, qos=1)
        if not isinstance(puback_evt, EventPuback) or \
                puback_evt.mid != pub.get_last_mid():
            return False

        publish_evt = sub.recv()
        if not isinstance(publish_evt, EventPublish) or \
                publish_evt.msg.payloadlen != len(msg) or \
                publish_evt.msg.payload != msg:
            return False

        return True
Beispiel #25
0
    def test_216(self):
        pub = MqttClient("conformity-pub:{seq}", connect=4)
        sub = MqttClient("conformity-sub:{seq}", connect=4)

        ack = sub.subscribe_multi([
            ("foo/bar", 2),
            ("bar/baz", 0),
            ("paper/+/scissor", 1)
        ])

        if not isinstance(ack, EventSuback) or ack.mid != sub.get_last_mid():
            debug(ack)
            return False

        # checking granted qos
        if len(ack.granted_qos) != 3 or \
                ack.granted_qos[0] != 2 or \
                ack.granted_qos[1] != 0 or \
                ack.granted_qos[2] != 1:
            debug(ack)
            return False

        return True