Esempio n. 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
Esempio n. 2
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
Esempio n. 3
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. 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_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
Esempio n. 6
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
Esempio n. 7
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. 8
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
Esempio n. 9
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
Esempio n. 10
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)
Esempio n. 11
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. 12
0
    def test_270(self):
        pub = MqttClient("luser:{seq}", connect=4)
        pub.publish("$foo/bar", "test1")

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

        return True
Esempio n. 13
0
    def test_003(self):
        c = MqttClient("conformity:{seq}", connect=4)
        c.publish("/foo/bar/2", "plop", qos=2, retain=True)
        c.disconnect()

        # checking message as been store in db
        store = env.db.hgetall('retain:/foo/bar/2')
        if store.get('data') != 'plop' or store.get('qos') != '2':
            debug(store)
            return False

        return True
Esempio n. 14
0
        def _(qos):
            v_start = yield exometer.value('wave.messages.in.'+str(qos))

            c = MqttClient("metrics:{seq}", connect=4)
            c.publish("foo/bar", "", qos=qos)
            c.disconnect()

            v_end = yield exometer.value('wave.messages.in.'+str(qos))
            if v_end['count'] - v_start['count'] != 1:
                debug("{0}, {1}".format(v_end, v_start))
                defer.returnValue(False)

            defer.returnValue(True)
Esempio n. 15
0
    def test_001(self):
        c = MqttClient("conformity:{seq}", connect=4)

        c.publish("/foo/bar/0", "plop", qos=0, retain=True)
        c.disconnect()

        # checking message as been store in db
        store = env.db.hgetall('retain:/foo/bar/0')
        if not (store.get('data') == 'plop' and store.get('qos') == '0'):
            debug(store)
            return False

        return True
Esempio n. 16
0
    def test_213(self):
        c = MqttClient("conformity:{seq}", connect=4)
        c.publish("foo/+/bar", "", qos=0)
        if c.conn_is_alive():
            debug("connection still alive")
            return False

        c = MqttClient("conformity:{seq}", connect=4)
        c.publish("foo/#/bar", "", qos=0)
        if c.conn_is_alive():
            debug("connection still alive")
            return False

        return True
Esempio n. 17
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
Esempio n. 18
0
    def test_021(self):
        c = MqttClient("metrics:{seq}", connect=4)
        d = MqttClient("duck:{seq}", connect=3)
        c.subscribe('$SYS/#', qos=0)

        pubs_start = sys_value(c, "$SYS/broker/publish/messages/received", int)
        d.publish("foo/bar", "")
        pubs_end = sys_value(c, "$SYS/broker/publish/messages/received", int)

        if pubs_end != pubs_start+1:
            debug("{0}, {1}".format(pubs_start, pubs_end))
            return False

        c.disconnect()
        return True
Esempio n. 19
0
    def test_011(self):
        c = MqttClient("reg:{seq}", connect=4)
        e = c.publish("/foo/bar", "plop")
        # QOS = 0 : no response indented
        c.disconnect()

        return (e is None)
Esempio n. 20
0
    def test_100(self):
        c = MqttClient("conformity:{seq}")

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            sock.connect(('127.0.0.1', 1883))
            sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
            sock.setblocking(0)
        except Exception as e:
            debug(e)
            return False

        c._c.sock = sock
        e = c.subscribe("foo/bar", qos=0)
        if e is not None:
            debug(e)
            return False

        # socket MUST be disconnected
        try:
            e = c.publish("foo", "bar")
            sock.getpeername()
        except socket.error as e:
            return True

        debug("connection still alive")
        return False
Esempio n. 21
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
Esempio n. 22
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
Esempio n. 23
0
    def test_010(self):
        c = MqttClient("conformity:{seq}", connect=4)
        c.publish("/retain/delete", 'waze', qos=0, retain=True)

        store = env.db.hgetall("retain:/retain/delete")
        if store != {'data': 'waze', 'qos': '0'}:
            debug(store)
            return False

        # deleting message
        c.publish("/retain/delete", '', retain=True)
        retain = env.db.keys('retain:/retain/delete')
        if retain != []:
            debug("retain= {0}".format(retain))
            return False

        c.disconnect()
        return True
Esempio n. 24
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
Esempio n. 25
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. 26
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
Esempio n. 27
0
    def test_011(self):
        c = MqttClient("v311:{seq}", connect=4)
        e = c.publish("/foo/bar", payload="plop")
        # QOS = 0 : no response indented
        if e is not None:
            debug(e)
            c.disconnect()
            return False

        c.disconnect()
        return True
Esempio n. 28
0
    def test_001(self):
        sub = MqttClient("sub:{seq}", connect=4)
        sub.subscribe("foo/bar", qos=0)

        pub = MqttClient("pub:{seq}", connect=4)
        pub.publish("foo/bar", env.gen_msg(42), qos=2)
        # PUBREL not sent
        pub.destroy(); del pub

        cnt = yield supervisor.count('wave_msgworkers_sup')
        if cnt != 1:
            debug("wrong msgworkers count: {0}".format(cnt))
            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)

        defer.returnValue(True)
Esempio n. 29
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. 30
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. 31
0
    def test_001(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=1)
        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
        #print evt.mid


        # 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=1)
        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 evt != None:
            debug(evt); return False

        ## dummy resubscribe, check we receive messages
        evt = dummy.subscribe("/test/qos/0", qos=0)
        if not isinstance(evt, EventSuback):
            debug(evt); 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
                }):
            debug('pubsub failed')
            return False


        # cleanup
        pub.disconnect()
        ctrl.disconnect()
        dummy.disconnect()

        return True
Esempio n. 32
0
    def _t_check(self, client, acl, user, password):
        ctrl = MqttClient("ctrl:{seq}",
                          connect=4,
                          username='******',
                          password='******')
        c = MqttClient("client:{seq}",
                       connect=4,
                       username=user,
                       password=password)

        ctrl.subscribe("test/#", qos=0)

        ## subscribe
        # MUST FAIL when acl on
        ret = c.subscribe("test/{0}/sub/0".format(client), qos=0)
        if not isinstance(ret, EventSuback):
            debug("{0}, acl {1}: {2}".format(client, acl, ret))
            return False
        if     acl and ret.granted_qos != [0x80] or\
           not acl and ret.granted_qos != [0]:
            debug("{0}, acl {1}: {2}".format(client, acl, ret))
            return False

        ## publish
        # NOTE: publish never reports failure or success
        topic = "test/{0}/pub/0".format(client)
        msg = env.gen_msg(10)
        c.publish(topic, msg)
        e = ctrl.recv()
        if acl and e != None:
            debug("{0}, acl {1}: {2}".format(client, acl, e))
            return False
        elif not acl and (not isinstance(e, EventPublish) or\
                e.msg.topic != topic or\
                e.msg.payload != msg):
            debug("{0}, acl {1}: {2}".format(client, acl, e))
            return False

        # MUST ALWAYS SUCCEED

        ret = c.subscribe("test/{0}/sub/1".format(client), qos=0)
        if not isinstance(ret, EventSuback) or ret.granted_qos != [0]:
            debug("{0}, acl {1}: {2}".format(client, acl, ret))
            return False

        if acl:
            ret = c.subscribe("test/{0}/sub/1/extra".format(client), qos=0)
            if not isinstance(ret, EventSuback) or ret.granted_qos != [0x80]:
                debug("{0}, acl {1}: {2}".format(client, acl, ret))
                return false

        topic = "test/{0}/pub/1".format(client)
        msg = env.gen_msg(10)
        c.publish(topic, msg)
        e = ctrl.recv()
        if not isinstance(e, EventPublish) or\
                e.msg.topic != topic or\
                e.msg.payload != msg:
            debug("{0}, acl {1}: {2}".format(client, acl, e))
            return False

        if acl:
            msg = env.gen_msg(10)
            c.publish("test/{0}/pub/1/extra".format(client), msg)
            e = ctrl.recv()
            if e != None:
                debug("{0}, acl {1}: {2}".format(client, acl, e))
                return False

        topic = "test/{0}/pub/2/foo/bar".format(client)
        msg = env.gen_msg(10)
        c.publish(topic, msg)
        e = ctrl.recv()
        if not isinstance(e, EventPublish) or\
                e.msg.topic != topic or\
                e.msg.payload != msg:
            debug("{0}, acl {1}: {2}".format(client, acl, e))
            return False

        ctrl.disconnect()
        c.disconnect()
        return True
Esempio n. 33
0
    def test_003(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.publish("foo/bar", "baz", qos=1)

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

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

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

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

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

        c.disconnect()
        defer.returnValue(True)