Пример #1
0
    def test_012(self):
        pub = MqttClient("publisher:{seq}", connect=4)

        c = MqttClient("cs:{seq}", connect=4, clean_session=0)
        if c.connack().session_present != 0:
            debug("session present")
            return False
        c.subscribe("/cs/qos-0", qos=0)
        c.disconnect()

        # reconnect w/ same clientid
        time.sleep(.5)
        c2 = MqttClient(client_id=c.client_id, connect=4, clean_session=0)
        if c2.connack().session_present != 1:
            debug("session not present")
            return False

        pub.publish("/cs/qos-0", "", qos=1)
        evt = c2.recv()
        if not isinstance(evt, EventPublish) or\
                evt.msg.topic != '/cs/qos-0' or\
                evt.msg.qos != 0:
            debug(evt)
            return False

        return True
Пример #2
0
    def test_014(self):
        c = MqttClient("cs:{seq}", connect=4, clean_session=0)
        if c.connack().session_present != 0:
            debug("session present")
            return False
        c.disconnect()

        # reconnect w/ same clientid, cleansession = 0
        time.sleep(.5)
        c2 = MqttClient(client_id=c.client_id, connect=4, clean_session=0)
        if c2.connack().session_present != 1:
            debug("session not present")
            return False

        c2.disconnect()
        return True
Пример #3
0
    def test_024(self):
        c = MqttClient("cs:{seq}", connect=4, clean_session=0)
        if c.connack().session_present != 0:
            debug("session present")
            return False
        c.subscribe("/cs/topic1/+", qos=0)
        c.disconnect()

        pub = MqttClient("pub:{seq}", connect=4)
        pubmsg = {
            'topic': "/cs/topic1/q2",
            'qos': 2,
            'payload': env.gen_msg(42)
        }
        ack = pub.publish(**pubmsg)
        pub.pubrel(ack.mid)

        # clean_session = 1 => offline subscriptions & published messages dropped
        c2 = MqttClient(client_id=c.client_id, connect=4, clean_session=1)
        if c2.connack().session_present != 0:
            debug("session present")
            return False

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

        pub.publish("/cs/topic1/qz", env.gen_msg(42), qos=0)
        pub.disconnect()

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

        c2.disconnect()
        return True
Пример #4
0
    def test_013(self):
        pub = MqttClient("publisher:{seq}", connect=4)

        c = MqttClient("cs:{seq}", connect=4, clean_session=0)
        if c.connack().session_present != 0:
            debug("session present")
            return False
        c.subscribe("/cs/qos-0", qos=0)
        c.disconnect()

        # reconnect w/ same clientid, cleansession = 1
        time.sleep(.5)
        c2 = MqttClient(client_id=c.client_id, connect=4, clean_session=1)
        if c2.connack().session_present != 0:
            debug("session present")
            return False

        pub.publish("/cs/qos-0", "", qos=1)
        evt = c2.recv()
        if evt is not None:
            debug(evt)
            return False

        return True
Пример #5
0
    def test_030(self):
        c = MqttClient("cs:{seq}", connect=4, clean_session=0)
        c.subscribe("/cs/topic1/+", qos=0)
        c.disconnect()

        pub = MqttClient("pub:{seq}", connect=4)
        pubmsg = {
            'topic': "/cs/topic1/waz",
            'qos': 0,
            'payload': env.gen_msg(42)
        }
        ack = pub.publish(**pubmsg)

        c2 = MqttClient(client_id=c.client_id, connect=4, clean_session=0)
        evt = c2.connack()
        if not isinstance(evt, EventConnack):
            debug(evt)
            return False

        c2.recv()

        c2.disconnect()
        pub.disconnect()
        return True
Пример #6
0
    def test_011(self):
        c = MqttClient("cs:{seq}", connect=4, clean_session=0)
        c.subscribe("/cs/qos-0", qos=0)
        c.subscribe("/cs/qos-1", qos=1)
        c.subscribe("/cs/qos-2", qos=2)

        c.disconnect()

        # reconnect w/ same clientid
        time.sleep(.5)
        c2 = MqttClient(client_id=c.client_id, connect=4, clean_session=0)

        topics = env.db.lrange("topics:" + c.clientid(), 0, -1)
        if len(topics) != 0:
            debug(topics)
            return False

        # checking CONNACK session-present
        if c2.connack().session_present != 1:
            debug("session not present")
            return False

        #TODO: list c2 subscriptions (needs specific API ?)
        return True
Пример #7
0
    def test_023(self):
        c = MqttClient("cs:{seq}", connect=4, clean_session=0)
        if c.connack().session_present != 0:
            debug("session present")
            return False
        c.subscribe("/cs/topic1/+", qos=2)
        c.disconnect()

        pub = MqttClient("pub:{seq}", connect=4)
        pubmsgs = {
            "/cs/topic1/q0": [0, env.gen_msg(42)],
            "/cs/topic1/q1": [1, env.gen_msg(42)],
            "/cs/topic1/q2": [2, env.gen_msg(42)],
        }

        pubmsg = {
            'topic': "/cs/topic1/q2",
            'qos': 2,
            'payload': env.gen_msg(42)
        }
        for (topic, (qos, msg)) in pubmsgs.iteritems():
            ack = pub.publish(topic, msg, qos=qos)
            if qos == 2:
                pub.pubrel(ack.mid)
        pub.disconnect()

        c2 = MqttClient(client_id=c.client_id,
                        connect=4,
                        clean_session=0,
                        read_connack=False)

        #NOTE: response order is not guaranteed
        acked = False
        pubcnt = 0
        while True:
            evt = c2.recv()
            #print evt
            if isinstance(evt, EventConnack):
                if evt.session_present != 1:
                    debug("{0}: session not present".format(evt))
                    return False

                acked = True
                continue

            if isinstance(evt, EventPublish):
                orig = pubmsgs.get(evt.msg.topic, [None, None])
                if evt.msg.payload == orig[1] and evt.msg.qos == orig[0]:
                    pubcnt += 1
                    continue

            if evt != None:
                debug(evt)
                return False
            break

        if not acked:
            debug("not acked")
            return False
        if pubcnt != 3:
            debug("not all messages received: {0}".format(pubcnt))
            return False

        c2.disconnect()
        return True