Example #1
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
Example #2
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
Example #3
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
Example #4
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
Example #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
Example #6
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
Example #7
0
    def test_202(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()
        # sending PUBREL with wrong pktid
        pub.forge(NC.CMD_PUBREL, 2, [
            ('uint16', (evt.mid+10)%65535) # wrong pktid
        ], send=True)

        # subscriber: PUBLISH never received
        evt = sub.recv()
        if evt is not None:
            debug(evt)
            return False

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

        pub.disconnect(); sub.disconnect()
        return True
Example #8
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
Example #9
0
    def test_003(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=0)

        client  = MqttClient("rabbit:{seq}", keepalive=2)
        will    = {'topic': '/node/disconnect', 'message': client.clientid()}
        client.connect(version=4, will=will)

        time.sleep(1)
        client.send_pingreq()
        evt = monitor.recv()
        if monitor.recv() != None:
            debug(evt)
            return False

        time.sleep(4)
        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message']:
            debug(evt)
            return False

        monitor.disconnect()
        return True
Example #10
0
    def test_003(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=0)

        client = MqttClient("rabbit:{seq}", keepalive=2)
        will = {'topic': '/node/disconnect', 'message': client.clientid()}
        client.connect(version=4, will=will)

        time.sleep(1)
        client.send_pingreq()
        evt = monitor.recv()
        if monitor.recv() != None:
            debug(evt)
            return False

        time.sleep(4)
        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message']:
            debug(evt)
            return False

        monitor.disconnect()
        return True
Example #11
0
    def test_200(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", "wootwoot", qos=1)

        # reading PUBLISH
        evt = sub.recv()

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

        evt = pub.recv()
        # PUBACK from server is never received
        if evt is not None:
            debug(evt)
            return False

        pub.disconnect()
        sub.disconnect()
        return True
Example #12
0
    def test_012(self):
        pub = MqttClient("conformity:{seq}", connect=4)
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe("/retain/+", qos=0)

        pub.publish("/retain/delivered", 'waze', retain=True)
        msg = sub.recv()
        if not isinstance(msg, EventPublish) or \
                msg.msg.topic != '/retain/delivered' or \
                msg.msg.payload != 'waze' or\
                msg.msg.retain:
            debug(msg)
            return False

        # same with empty payload
        pub.publish("/retain/empty", '', retain=True)
        msg = sub.recv()
        if not isinstance(msg, EventPublish) or \
                msg.msg.topic != '/retain/empty' or \
                msg.msg.payload != None or\
                msg.msg.retain:
            debug(msg)
            return False

        pub.disconnect(); sub.disconnect()
        return True
Example #13
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
Example #14
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
Example #15
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
Example #16
0
    def test_012(self):
        pub = MqttClient("conformity:{seq}", connect=4)
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe("/retain/+", qos=0)

        pub.publish("/retain/delivered", 'waze', retain=True)
        msg = sub.recv()
        if not isinstance(msg, EventPublish) or \
                msg.msg.topic != '/retain/delivered' or \
                msg.msg.payload != 'waze' or\
                msg.msg.retain:
            debug(msg)
            return False

        # same with empty payload
        pub.publish("/retain/empty", '', retain=True)
        msg = sub.recv()
        if not isinstance(msg, EventPublish) or \
                msg.msg.topic != '/retain/empty' or \
                msg.msg.payload != None or\
                msg.msg.retain:
            debug(msg)
            return False

        pub.disconnect()
        sub.disconnect()
        return True
Example #17
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
Example #18
0
    def test_020(self):
        metrics = [
            '$SYS/broker/uptime',
            '$SYS/broker/version',
            '$SYS/broker/clients/total',
            '$SYS/broker/clients/connected',
            '$SYS/broker/clients/disconnected',
            '$SYS/broker/messages/sent',
            '$SYS/broker/messages/received',
            '$SYS/broker/messages/inflight',
            '$SYS/broker/messages/stored',
            '$SYS/broker/publish/messages/sent',
            '$SYS/broker/publish/messages/sent/qos 0',
            '$SYS/broker/publish/messages/sent/qos 1',
            '$SYS/broker/publish/messages/sent/qos 2',
            '$SYS/broker/publish/messages/received',
            '$SYS/broker/publish/messages/received/qos 0',
            '$SYS/broker/publish/messages/received/qos 1',
            '$SYS/broker/publish/messages/received/qos 2',
            '$SYS/broker/retained messages/count',
            '$SYS/broker/subscriptions/count',
        ]

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

        while True:
            evt = c.recv()
            if evt is not None and isinstance(evt, EventPublish):
                break

        stats = {evt.msg.topic: evt.msg.payload}
        while True:
            evt = c.recv()
            if evt is None: break
            if isinstance(evt, EventPingResp): continue

            stats[evt.msg.topic] = evt.msg.payload

        #pprint(stats)
        for topic in metrics:
            if topic not in stats:
                debug("{0} metric not in $SYS".format(topic))
                return False

            del stats[topic]

        if len(stats) > 0:
            debug("extra $SYS metrics: {0}".format(stats))

        c.disconnect()
        return True
Example #19
0
    def test_020(self):
        metrics = [
            '$SYS/broker/uptime',
            '$SYS/broker/version',
            '$SYS/broker/clients/total',
            '$SYS/broker/clients/connected',
            '$SYS/broker/clients/disconnected',
            '$SYS/broker/messages/sent',
            '$SYS/broker/messages/received',
            '$SYS/broker/messages/inflight',
            '$SYS/broker/messages/stored',
            '$SYS/broker/publish/messages/sent',
            '$SYS/broker/publish/messages/sent/qos 0',
            '$SYS/broker/publish/messages/sent/qos 1',
            '$SYS/broker/publish/messages/sent/qos 2',
            '$SYS/broker/publish/messages/received',
            '$SYS/broker/publish/messages/received/qos 0',
            '$SYS/broker/publish/messages/received/qos 1',
            '$SYS/broker/publish/messages/received/qos 2',
            '$SYS/broker/retained messages/count',
            '$SYS/broker/subscriptions/count',
        ]

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

        while True:
            evt = c.recv()
            if evt is not None and isinstance(evt, EventPublish):
                break

        stats = {evt.msg.topic: evt.msg.payload}
        while True:
            evt = c.recv()
            if evt is None: break
            if isinstance(evt, EventPingResp): continue

            stats[evt.msg.topic] = evt.msg.payload

        #pprint(stats)
        for topic in metrics:
            if topic not in stats:
                debug("{0} metric not in $SYS".format(topic))
                return False

            del stats[topic]

        if len(stats) > 0:
            debug("extra $SYS metrics: {0}".format(stats))

        c.disconnect()
        return True
Example #20
0
    def test_021(self):
        retain = MqttClient("retain:{seq}", connect=4)
        sub = MqttClient("subscriber:{seq}", connect=4)

        topic = "/woot/wo/ot"
        msg = "expression of simplistic ecstasy"
        retain.publish(topic, msg, retain=True)

        # wildcard match topic
        sub.subscribe("/woot/+/ot", qos=0, read_response=False)

        acked = False
        pubevt = None
        while True:
            evt = sub.recv()
            if isinstance(evt, EventSuback):
                acked = True
                continue

            # receiving retained message
            if isinstance(evt, EventPublish) and\
                    evt.msg.topic   == topic and\
                    evt.msg.payload == msg   and\
                    evt.msg.retain:
                pubevt = evt
                continue

            break

        if not acked:
            debug("not acked")
            return False
        if pubevt is None:
            debug("message not received")
            return False

        # MUST NOT match
        topic = "/scri/b/b/le"
        msg = "hundrerd dollar bill"
        retain.publish(topic, msg, retain=True)

        sub.subscribe("/scri/*/le", qos=0)
        evt = sub.recv()
        if evt is not None:
            debug(evt)
            return False

        return True
Example #21
0
    def test_030(self):
        retain = MqttClient("retain:{seq}", connect=4)
        sub    = MqttClient("subscr:{seq}", connect=4)

        msg = {'topic': "baby/ma/ma", 'payload': "The mother of your child(ren)", 'retain': True,
                'qos': 1}
        retain.publish(**msg)

        sub.subscribe("baby/ma/+", qos=1, read_response=False)

        pubevt = None
        while True:
            evt = sub.recv()
            if isinstance(evt, EventSuback): continue
            if isinstance(evt, EventPublish) and\
                    evt.msg.qos == 1 and\
                    evt.msg.retain and\
                    evt.msg.topic == msg['topic'] and\
                    evt.msg.payload == msg['payload']:
                pubevt = evt; continue

            break

        if pubevt is None:
            debug("message not received")
            return False
        sub.puback(mid=pubevt.msg.mid)

        retain.disconnect(); sub.disconnect()
        return True
Example #22
0
    def test_022(self):
        retain = MqttClient("retain:{seq}", connect=4)
        sub    = MqttClient("subscriber:{seq}", connect=4)

        topic = "/woot/wo/ot"; msg = "expression of simplistic ecstasy"
        retain.publish(topic, msg, retain=True)

        # wildcard match topic
        sub.subscribe("/woot/#", qos=0, read_response=False)
        acked = False; pubevt = None
        while True:
            evt = sub.recv()
            if isinstance(evt, EventSuback):
                acked = True; continue

            # receiving retained message
            if isinstance(evt, EventPublish) and\
                    evt.msg.topic   == topic and\
                    evt.msg.payload == msg   and\
                    evt.msg.retain:
                pubevt = evt; continue

            break

        if not acked:
            debug("not acked")
            return False
        if pubevt is None:
            debug("message not received")
            return False

        retain.disconnect(); sub.disconnect()
        return True
Example #23
0
    def test_251(self):
        tfs = [
            ("+", True),
            ("/+", True),
            ("+/", True),
            ("+/foo", True),
            ("/foo/+", True),
            ("/foo/+/", True),
            ("/foo/+/bar", True),
            ("+/foo/bar", True),
            ("foo+", False),
            ("foo+/bar", False),
            ("+foo/bar", False),
            ("foo/+bar", False),
            # ~
            ("++", False),
            ("foo/++/bar", False),
        ]

        for (tf, isvalid) in tfs:
            sub = MqttClient("conformity:{seq}", connect=4)
            sub.subscribe(tf, qos=0, read_response=False)
            ack = sub.recv()

            if (isvalid and not isinstance(ack, EventSuback)) or \
                    (not isvalid and (ack is not None or sub.conn_is_alive())):
                debug("{0}: {1} ({2})".format(tf, ack, sub.conn_is_alive()))
                return False

            sub.disconnect()

        return True
Example #24
0
    def test_012(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=2)

        client = MqttClient("rabbit:{seq}")  # no keepalive
        will = {
            'topic': '/node/disconnect',
            'message': client.clientid(),
            'retain': True
        }
        client.connect(version=4, will=will)
        client.socket_close()

        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message'] or \
                evt.msg.qos != 0:
            debug(evt)
            return False

        if not evt.msg.retain:
            debug("evt remain flag set")
            return False

        monitor.disconnect()
        return True
Example #25
0
    def test_251(self):
        tfs = [
            ("+"         , True),
            ("/+"        , True),
            ("+/"        , True),
            ("+/foo"     , True),
            ("/foo/+"    , True),
            ("/foo/+/"   , True),
            ("/foo/+/bar", True),
            ("+/foo/bar" , True),
            ("foo+"      , False),
            ("foo+/bar"  , False),
            ("+foo/bar"  , False),
            ("foo/+bar"  , False),
            # ~
            ("++"        , False),
            ("foo/++/bar", False),
        ]

        for (tf, isvalid) in tfs:
            sub = MqttClient("conformity:{seq}", connect=4)
            sub.subscribe(tf, qos=0, read_response=False)
            ack = sub.recv()

            if (isvalid and not isinstance(ack, EventSuback)) or \
                    (not isvalid and (ack is not None or sub.conn_is_alive())):
                debug("{0}: {1} ({2})".format(tf, ack, sub.conn_is_alive()))
                return False

            sub.disconnect()

        return True
Example #26
0
    def test_020(self):
        retain = MqttClient("retain:{seq}", connect=4)
        sub = MqttClient("subscriber:{seq}", connect=4)

        topic = "/woot/wo/ot"
        msg = "expression of simplistic ecstasy"
        retain.publish(topic, msg, retain=True)

        # exact match topic
        sub.subscribe("/woot/wo/ot", qos=0, read_response=False)
        while True:
            evt = sub.recv()
            if isinstance(evt, EventSuback):
                acked = True
                continue

            # receiving retained message
            if isinstance(evt, EventPublish) and\
                    evt.msg.topic   == topic and\
                    evt.msg.payload == msg   and\
                    evt.msg.retain:
                pubevt = evt
                continue

            break

        if not acked:
            debug("not acked")
            return False
        if pubevt is None:
            debug("message not received")
            return False

        return True
Example #27
0
    def test_008(self):
        client  = MqttClient("rabbit:{seq}", raw_connect=True)
        client.forge(NC.CMD_CONNECT, 0, [
            ('string', 'MQTT'),
            ('byte'  , 4),         # protocol level
            ('byte'  , 28),        # will=1, will-qos=3
            ('uint16', 60),        # keepalive
        ], send=True)
        if client.conn_is_alive():
            debug("connection still alive")
            return False

        client  = MqttClient("rabbit:{seq}", raw_connect=True)
        client.forge(NC.CMD_CONNECT, 0, [
            ('string', 'MQTT'),
            ('byte'  , 4),         # protocol level
            ('byte'  , 12),        # will=1, will-qos=1
            ('uint16', 60),        # keepalive
            ('string', client._c.client_id),   # clientid
            ('string', '/foo/bar'),# will topic
            ('uint16', 0),         # will payload len
            ('bytes' , ''),        # will payload
        ], send=True)

        evt = client.recv()
        if not isinstance(evt, EventConnack):
            debug(evt)
            return False

        client.disconnect()
        return True
Example #28
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
Example #29
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
Example #30
0
    def test_002(self):
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe("foo/bar", qos=1)

        pub = MqttClient("pub:{seq}", connect=4)
        pub.publish("foo/bar", env.gen_msg(42), qos=1)

        evt = sub.recv()
        if not isinstance(evt, EventPublish):
            debug(evt)
            defer.returnValue(False)

        # PUBACK not send
        sub.destroy(); del sub

        if (yield supervisor.count('wave_msgworkers_sup')) != 1:
            debug("wrong msgworkers count")
            defer.returnValue(False)

        # msg worker is destroyed after 5 secs
        time.sleep(6)
        if (yield supervisor.count('wave_msgworkers_sup')) != 0:
            debug("wrong msgworkers count")
            defer.returnValue(False)

        pub.disconnect()
        defer.returnValue(True)
Example #31
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
Example #32
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
Example #33
0
    def test_261(self):
        pub = MqttClient("conformity:{seq}", connect=4)
        sub = MqttClient("test:{seq}", connect=4)
        sub.subscribe("/foo/bar", qos=0)

        pub.forge(
            NC.CMD_PUBLISH,
            2,
            [
                ('string', '/foo/bar'),  # topic
                ('uint16', 42),  # identifier
            ],
            send=True)

        ack = pub.recv()
        if not isinstance(ack, EventPuback):
            debug(ack)
            return False

        # ensure message has been delivered
        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != '/foo/bar':
            debug(evt)
            return False

        # sending again same packet (same id) with dup=1
        pub.forge(
            NC.CMD_PUBLISH,
            10,
            [
                ('string', '/foo/bar'),  # topic
                ('uint16', 42),  # identifier
            ],
            send=True)

        ack = pub.recv()
        if not isinstance(ack, EventPuback):
            debug(ack)
            return False

        # ensure message has been delivered
        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != '/foo/bar':
            debug(evt)
            return False

        return True
Example #34
0
    def test_262(self):
        pub = MqttClient("conformity:{seq}", connect=4)
        sub = MqttClient("test:{seq}", connect=4)
        sub.subscribe("/foo/bar", qos=1)

        pub.forge(
            NC.CMD_PUBLISH,
            2,
            [
                ('string', '/foo/bar'),  # topic
                ('uint16', 42),  # identifier
            ],
            send=True)

        ack = pub.recv()
        if ack is not None:
            debug(ack)
            return False

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != '/foo/bar':
            debug(evt)
            return False

        ## reemit message with dup=1 (same msgid)
        ## message must be discarded as previous on is still inflight
        pub.forge(
            NC.CMD_PUBLISH,
            2,
            [
                ('string', '/foo/bar'),  # topic
                ('uint16', 42),  # identifier
            ],
            send=True)

        ack = pub.recv()
        if ack is not None:
            debug(ack)
            return False

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

        return True
Example #35
0
    def test_030(self):
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe("foo/bar", qos=1)

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

        e1 = sub.recv()

        msg2 = gen_msg()
        pub.publish("foo/bar", payload=msg2, qos=1)
        e2 = sub.recv()
        if e2.msg.mid != e1.msg.mid + 1:
            debug('failing event: {0}'.format(e2))
            return False

        return True
Example #36
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
Example #37
0
    def test_023(self):
        retain = MqttClient("retain:{seq}", connect=4)
        sub = MqttClient("subscr:{seq}", connect=4)

        # matching topics
        rs = {
            # match
            "dead/bea/t k/id/s": {
                'topic': "dead/bea/t k/id/s",
                'payload': "children that just aren't worth supporting",
                'retain': True
            },
            # match
            "dead/abe/t k/id/s": {
                'topic': "dead/abe/t k/id/s",
                'payload': "just children that aren't supporting worth",
                'retain': True
            },
        }
        for args in rs.values():
            retain.publish(**args)

            # no match
        nors = {
            'topic': "dead/be/a/t k/ids",
            'payload': "children that just aren't worth supporting",
            'retain': True
        }
        retain.publish(**nors)

        #NOTE: we must receive BOTH rs message, but NOT nors one
        #NOTE: PUBLISH messages MAY arrived BEFORE PUBACK
        sub.subscribe("dead/+/t k/#", qos=0, read_response=False)
        count = 0
        while True:
            evt = sub.recv()
            if evt is None:
                break
            if isinstance(evt, EventSuback):
                continue

            if not isinstance(evt, EventPublish) or\
                    not evt.msg.retain or\
                    evt.msg.topic not in rs:
                debug(evt)
                return False

            count += 1

        if count != len(rs):
            debug("not received enough messages")
            return False

        retain.disconnect()
        sub.disconnect()
        return True
Example #38
0
    def test_003(self):
        c = MqttClient("cs:{seq}", raw_connect=True)
        c.forge(
            NC.CMD_CONNECT,
            0,
            [
                ('string', 'MQTT'),
                ('byte', 4),  # protocol level
                ('byte', 2),  # cleansession 1
                ('uint16', 60),  # keepalive
                ('string', ''),  # 0-length client-if
            ],
            send=True)

        ack = c.recv()
        if not isinstance(ack, EventConnack) or\
                ack.ret_code != 0 or\
                ack.session_present != 0:
            debug(ack)
            return False

        c2 = MqttClient("cs:{seq}", raw_connect=True)
        c2.forge(
            NC.CMD_CONNECT,
            0,
            [
                ('string', 'MQTT'),
                ('byte', 4),  # protocol level
                ('byte', 2),  # cleansession 1
                ('uint16', 60),  # keepalive
                ('string', ''),  # 0-length client-if
            ],
            send=True)

        ack = c2.recv()
        if not isinstance(ack, EventConnack) or\
                ack.ret_code != 0 or\
                ack.session_present != 0:
            debug(ack)
            return False

        return True
Example #39
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
Example #40
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
Example #41
0
    def test_261(self):
        pub = MqttClient("conformity:{seq}", connect=4)
        sub = MqttClient("test:{seq}", connect=4)
        sub.subscribe("/foo/bar", qos=0)

        pub.forge(NC.CMD_PUBLISH, 2, [
            ('string', '/foo/bar'), # topic
            ('uint16', 42),         # identifier
        ], send=True)

        ack = pub.recv()
        if not isinstance(ack, EventPuback):
            debug(ack)
            return False

        # ensure message has been delivered
        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != '/foo/bar':
            debug(evt)
            return False

        # sending again same packet (same id) with dup=1
        pub.forge(NC.CMD_PUBLISH, 10, [
            ('string', '/foo/bar'), # topic
            ('uint16', 42),         # identifier
        ], send=True)

        ack = pub.recv()
        if not isinstance(ack, EventPuback):
            debug(ack)
            return False

        # ensure message has been delivered
        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != '/foo/bar':
            debug(evt)
            return False

        return True
Example #42
0
    def test_253(self):
        sub = MqttClient("conformity:{seq}", connect=4)
        sub.subscribe("+/bar", qos=0)

        pub = MqttClient("pub:{seq}", connect=4)
        pub.publish("foo/bar", "test1")

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or\
                evt.msg.topic != 'foo/bar' or\
                evt.msg.payload != 'test1':
            debug(evt)
            return False

        pub.publish("$SYS/bar", "test2")
        evt = sub.recv()
        if evt is not None:
            debug(evt)
            return False

        pub.disconnect(); sub.disconnect()
        return True
Example #43
0
    def test_262(self):
        pub = MqttClient("conformity:{seq}", connect=4)
        sub = MqttClient("test:{seq}", connect=4)
        sub.subscribe("/foo/bar", qos=1)

        pub.forge(NC.CMD_PUBLISH, 2, [
            ('string', '/foo/bar'), # topic
            ('uint16', 42),         # identifier
        ], send=True)

        ack = pub.recv()
        if ack is not None:
            debug(ack)
            return False

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != '/foo/bar':
            debug(evt)
            return False

        ## reemit message with dup=1 (same msgid)
        ## message must be discarded as previous on is still inflight
        pub.forge(NC.CMD_PUBLISH, 2, [
            ('string', '/foo/bar'), # topic
            ('uint16', 42),         # identifier
        ], send=True)

        ack = pub.recv()
        if ack is not None:
            debug(ack)
            return False

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

        return True
Example #44
0
    def test_003(self):
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe("foo/bar", qos=1)
        sub2 = MqttClient("sub:{seq}", connect=4)
        sub2.subscribe("foo/+", qos=1)

        pub = MqttClient("pub:{seq}", connect=4)
        pub.publish("foo/bar", env.gen_msg(42), qos=1)

        evt1 = sub.recv()
        evt2 = sub2.recv()

        sub.destroy(); del sub

        if (yield supervisor.count('wave_msgworkers_sup')) != 1:
            debug("wrong msgworkers count")
            defer.returnValue(False)

        # sub removed, sub2 still alive
        time.sleep(6)
        if (yield supervisor.count('wave_msgworkers_sup')) != 1:
            debug("wrong msgworkers count")
            defer.returnValue(False)

        # sub2 still alive
        time.sleep(6)
        if (yield supervisor.count('wave_msgworkers_sup')) != 1:
            debug("wrong msgworkers count")
            defer.returnValue(False)

        # msg worker is destroyed after 5 secs
        sub2.puback(evt2.msg.mid)
        if (yield supervisor.count('wave_msgworkers_sup')) != 0:
            debug("wrong msgworkers count")
            defer.returnValue(False)

        pub.disconnect()
        defer.returnValue(True)
Example #45
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
Example #46
0
    def test_023(self):
        retain = MqttClient("retain:{seq}", connect=4)
        sub    = MqttClient("subscr:{seq}", connect=4)

        # matching topics
        rs = {
            # match
            "dead/bea/t k/id/s": {
                'topic' : "dead/bea/t k/id/s",
                'payload': "children that just aren't worth supporting",
                'retain' : True},
            # match
            "dead/abe/t k/id/s": {
                'topic'  : "dead/abe/t k/id/s",
                'payload': "just children that aren't supporting worth",
                'retain' : True},
            }
        for args in rs.values():
            retain.publish(**args)

            # no match
        nors = {'topic': "dead/be/a/t k/ids", 'payload': "children that just aren't worth supporting",
                'retain': True}
        retain.publish(**nors)

        #NOTE: we must receive BOTH rs message, but NOT nors one
        #NOTE: PUBLISH messages MAY arrived BEFORE PUBACK
        sub.subscribe("dead/+/t k/#", qos=0, read_response=False)
        count = 0
        while True:
            evt = sub.recv()
            if evt is None:
                break
            if isinstance(evt, EventSuback):
                continue

            if not isinstance(evt, EventPublish) or\
                    not evt.msg.retain or\
                    evt.msg.topic not in rs:
                debug(evt)
                return False

            count += 1

        if count != len(rs):
            debug("not received enough messages")
            return False

        retain.disconnect(); sub.disconnect()
        return True
Example #47
0
    def test_253(self):
        sub = MqttClient("conformity:{seq}", connect=4)
        sub.subscribe("+/bar", qos=0)

        pub = MqttClient("pub:{seq}", connect=4)
        pub.publish("foo/bar", "test1")

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or\
                evt.msg.topic != 'foo/bar' or\
                evt.msg.payload != 'test1':
            debug(evt)
            return False

        pub.publish("$SYS/bar", "test2")
        evt = sub.recv()
        if evt is not None:
            debug(evt)
            return False

        pub.disconnect()
        sub.disconnect()
        return True
Example #48
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
Example #49
0
    def test_200(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", "wootwoot", qos=1)

        # reading PUBLISH
        evt = sub.recv()

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

        evt = pub.recv()
        # PUBACK from server is never received
        if evt is not None:
            debug(evt)
            return False

        pub.disconnect(); sub.disconnect()
        return True
Example #50
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
Example #51
0
    def test_031(self):
        sub = MqttClient("sub:{seq}", connect=4)
        ack = sub.subscribe_multi([('foo/+', 1), ('foo/#', 1)])
        debug("subscribe_multi response: {0}".format(ack))

        pub = MqttClient("pub:{seq}", connect=4)
        pub.publish("foo/bar", gen_msg(42), qos=1)

        evt = sub.recv()
        if not isinstance(evt, EventPublish) or\
                evt.msg.topic != 'foo/bar' or\
                evt.msg.qos   != 1:
            debug('failing event: {0}'.format(evt))
            return False
        sub.puback(evt.msg.mid, read_response=False)

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

        # receive 2d publish
        evt = sub.recv()
        if not isinstance(evt, EventPublish) or\
                evt.msg.topic != 'foo/bar' or\
                evt.msg.qos   != 1:
            debug('failing event: {0}'.format(evt))
            return False
        sub.puback(evt.msg.mid)

        evt = pub.recv()
        if not isinstance(evt, EventPuback):
            debug('failing event: {0}'.format(evt))
            return False

        return True
Example #52
0
    def test_020(self):
        ws  = MqttClient("ws:{seq}", port=1884, websocket=True, connect=4)
        tcp = MqttClient("tcp:{seq}", connect=4)

        tcp.subscribe("foo/bar", qos=0)
        ws.publish("foo/bar", "baz", qos=0)

        evt =  tcp.recv()
        if not isinstance(evt, EventPublish) or\
                evt.msg.topic != "foo/bar" or\
                evt.msg.payload != "baz":
            debug(evt)
            return False

        ws.disconnect(); tcp.disconnect()
        return True
Example #53
0
    def test_001(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=0)

        client  = MqttClient("rabbit:{seq}", connect=4)
        # close socket without disconnection
        client.socket_close()

        evt = monitor.recv()
        if evt != None:
            debug(evt)
            return False

        monitor.disconnect()
        return True
Example #54
0
    def test_254(self):
        yield app.set_metrics(enabled=True)
        sub = MqttClient("conformity:{seq}", connect=4)
        sub.subscribe("$SYS/broker/uptime", qos=0)

        # $SYS stats are published each 10 seconds by default
        time.sleep(12)

        retval = True
        evt = sub.recv()
        if not isinstance(evt, EventPublish) or\
                evt.msg.topic != '$SYS/broker/uptime':
            debug(evt)
            retval=False

        sub.disconnect()
        yield app.set_metrics(enabled=False)
        defer.returnValue(retval)
Example #55
0
    def test_005(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)
        # destoying socket
        pub.destroy(); del pub

        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

        sub.disconnect()
        return True
Example #56
0
    def test_002(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=0)

        client  = MqttClient("rabbit:{seq}")
        will    = {'topic': '/node/disconnect', 'message': client.clientid()}
        client.connect(version=4, will=will)
        # close socket without disconnection
        client.socket_close()

        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message']:
            debug(evt)
            return False

        monitor.disconnect()
        return True