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
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
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
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
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
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
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
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
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
def test_221(self): c = MqttClient("conformity:{seq}", connect=4) ack = c.unsubscribe("foo/bar") if not isinstance(ack, EventUnsuback): debug(ack) return False return True
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
def test_002(self): sub = MqttClient("sub:{seq}", connect=4) sub.subscribe('a/b', 2) pub = MqttClient("pub:{seq}", connect=4) msg = gen_msg() pub.publish('a/b', payload=msg, qos=0) pub.disconnect() e = sub.recv() sub.unsubscribe('a/b') sub.disconnect() if not isinstance(e, EventPublish) or \ e.msg.payload != msg or \ e.msg.qos != 0: debug(e) return False return True
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
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
def test_012(self): """ """ v = yield exometer.value('wave.subscriptions') ref_val = v['value'] c = MqttClient("metrics:{seq}", connect=4) c.subscribe('foo/bar', qos=0) v = yield exometer.value('wave.subscriptions') if v['value'] != ref_val + 1: debug("{0}, {1}".format(v, ref_val)) defer.returnValue(False) c.unsubscribe('foo/bar') v = yield exometer.value('wave.subscriptions') if v['value'] != ref_val: debug("{0}, {1}".format(v, ref_val)) defer.returnValue(False) c.disconnect() defer.returnValue(True)
def test_012(self): """ """ v = yield exometer.value('wave.subscriptions') ref_val = v['value'] c = MqttClient("metrics:{seq}", connect=4) c.subscribe('foo/bar', qos=0) v = yield exometer.value('wave.subscriptions') if v['value'] != ref_val+1: debug("{0}, {1}".format(v, ref_val)) defer.returnValue(False) c.unsubscribe('foo/bar') v = yield exometer.value('wave.subscriptions') if v['value'] != ref_val: debug("{0}, {1}".format(v, ref_val)) defer.returnValue(False) c.disconnect() defer.returnValue(True)
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
def test_255(self): c = MqttClient("conformity:{seq}", connect=4) c.subscribe("", qos=0) if c.conn_is_alive(): debug("connection still alive") return False c = MqttClient("conformity:{seq}", connect=4) c.unsubscribe("") if c.conn_is_alive(): debug("connection still alive") return False c = MqttClient("conformity:{seq}", connect=4) c.publish("", "", qos=0) if c.conn_is_alive(): debug("connection stil alive") return False return True
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
def test_002(self): f = open('../log/wave.access.log', 'r') f.seek(0, os.SEEK_END) yield app.set_acl(enabled=False) # here we start c = MqttClient("conformity:{seq}", connect=4) c.subscribe("foo/bar", qos=1) c.unsubscribe("foo/bar") f.readline() # skip CONNECT if not _match( f, { 'request_method': 'SUBSCRIBE', 'request_url': 'foo/bar', 'status': '200', 'request_header_user_agent': c.client_id }): defer.returnValue(False) if not _match( f, { 'request_method': 'UNSUBSCRIBE', 'request_url': 'foo/bar', 'status': '200', 'request_header_user_agent': c.client_id }): defer.returnValue(False) # test w/ acls on yield app.set_acl(enabled=True) c.subscribe("foo/bar", qos=0) if not _match( f, { 'request_method': 'SUBSCRIBE', 'request_url': 'foo/bar', 'status': '403', 'request_header_user_agent': c.client_id }): defer.returnValue(False) c.subscribe("foo/bar", qos=1) if not _match( f, { 'request_method': 'SUBSCRIBE', 'request_url': 'foo/bar', 'status': '403', 'request_header_user_agent': c.client_id }): defer.returnValue(False) c.subscribe("foo/bar", qos=2) if not _match( f, { 'request_method': 'SUBSCRIBE', 'request_url': 'foo/bar', 'status': '403', 'request_header_user_agent': c.client_id }): defer.returnValue(False) c.subscribe("foo/baz", qos=0) if not _match( f, { 'request_method': 'SUBSCRIBE', 'request_url': 'foo/baz', 'status': '200', 'request_header_user_agent': c.client_id }): defer.returnValue(False) c.unsubscribe("foo/baz") c.disconnect() defer.returnValue(True)
def test_002(self): pub = MqttClient("publisher:{seq}") evt = pub.connect() if not isinstance(evt, EventConnack) or evt.ret_code != 0: debug(evt); return False ctrl = MqttClient("control-sample:{seq}") evt = ctrl.connect() if not isinstance(evt, EventConnack) or evt.ret_code != 0: debug(evt); return False evt = ctrl.subscribe("/test/qos/0", qos=0) if not isinstance(evt, EventSuback): debug(evt); return False ### dummyid = "dummy:{0}".format(random.randint(0,9999)) dummy = MqttClient(dummyid) evt = dummy.connect(clean_session=0) if not isinstance(evt, EventConnack) or evt.ret_code != 0: debug(evt); return False evt = dummy.subscribe("/test/qos/0", qos=0) if not isinstance(evt, EventSuback): debug(evt); return False # 1. sent qos0, 1, 2 messages; check reception if not self.pubsub((pub, ctrl, dummy), clbs={ 'checkrecv': lambda evt, msg: isinstance(evt, EventPublish) and evt.msg.payload == msg }): return False # 2. disconnecting (properly) dummmy; then reconnects dummy.disconnect(); del(dummy) # be sure dummy client disconnection in fully complete on broker side before going further time.sleep(1) ## publish message msg = gen_msg(10) pub.publish("/test/qos/0", payload=msg) ## reconnects, without explicitly subscribing topic dummy = MqttClient(dummyid) evt = dummy.connect(clean_session=0) if not isinstance(evt, EventConnack) or evt.ret_code != 0: debug(evt); return False ## checking message is not received by dummy evt = ctrl.recv() if not isinstance(evt, EventPublish) or evt.msg.payload != msg: debug(evt); return False evt = dummy.recv() if not isinstance(evt, EventPublish) or evt.msg.payload != msg: debug(evt); return False ## dummy resubscribe, check we receive messages #evt = dummy.do("subscribe", "/test/qos/0", 0) #if not isinstance(evt, EventSuback): # return False ## send test message if not self.pubsub((pub, ctrl, dummy), clbs={ 'checkrecv': lambda evt, msg: evt is not None and evt.msg.payload == msg }): return False # cleanup pub.disconnect() ctrl.disconnect() dummy.unsubscribe("/test/qos/0") dummy.disconnect() return True