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_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_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_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
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_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_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
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
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
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_222(self): sub = MqttClient("conformity-sub:{seq}", connect=4) ack = sub.unsubscribe_multi(["foo/bar", "bar/baz", "paper/+/scissor"]) if not isinstance(ack, EventUnsuback) or ack.mid != sub.get_last_mid(): debug(ack) return False sub.disconnect() return True
def test_001(self): sub = MqttClient("sub:{seq}", connect=4) suback_evt = sub.subscribe('foo/bar', 2) if not isinstance(suback_evt, EventSuback) or \ suback_evt.mid != sub.get_last_mid() or \ suback_evt.granted_qos[0] != 2: debug(suback_evt) return False return True
def test_001(self): sub = MqttClient("sub:{seq}", connect=4) suback_evt = sub.subscribe('foo/bar', qos=1) if not isinstance(suback_evt, EventSuback) or \ suback_evt.mid != sub.get_last_mid() or \ suback_evt.granted_qos[0] != 1: debug('failing event: {0}'.format(suback_evt)) return False return True
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
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
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_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_010(self): pub = MqttClient("pub:{seq}", connect=4) sub = MqttClient("sub:{seq}", connect=4) sub.subscribe('a/b', 0) # NOTE: remaining length value is message length + 5 bytes (topic encoded) + 2 bytes (msgid) puback_evt = pub.publish('a/b', payload='', qos=1) if not isinstance(puback_evt, EventPuback) or \ puback_evt.mid != pub.get_last_mid(): return False publish_evt = sub.recv() if not isinstance(publish_evt, EventPublish) or \ publish_evt.msg.payloadlen != 0 or \ publish_evt.msg.payload is not None: return False return True
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
def test_216(self): pub = MqttClient("conformity-pub:{seq}", connect=4) sub = MqttClient("conformity-sub:{seq}", connect=4) ack = sub.subscribe_multi([("foo/bar", 2), ("bar/baz", 0), ("paper/+/scissor", 1)]) if not isinstance(ack, EventSuback) or ack.mid != sub.get_last_mid(): debug(ack) return False # checking granted qos if len(ack.granted_qos) != 3 or \ ack.granted_qos[0] != 2 or \ ack.granted_qos[1] != 0 or \ ack.granted_qos[2] != 1: debug(ack) return False return True
def test_013(self): pub = MqttClient("pub:{seq}", connect=4) sub = MqttClient("sub:{seq}", connect=4) sub.subscribe('a/b', 0) # NOTE: remaining length value is message length + 5 bytes (topic encoded) + 2 bytes (msgid) msg = gen_msg(17000) #print "msg=", msg, len(msg) puback_evt = pub.publish('a/b', msg, qos=1) if not isinstance(puback_evt, EventPuback) or \ puback_evt.mid != pub.get_last_mid(): return False publish_evt = sub.recv() if not isinstance(publish_evt, EventPublish) or \ publish_evt.msg.payloadlen != len(msg) or \ publish_evt.msg.payload != msg: return False return True
def test_216(self): pub = MqttClient("conformity-pub:{seq}", connect=4) sub = MqttClient("conformity-sub:{seq}", connect=4) ack = sub.subscribe_multi([ ("foo/bar", 2), ("bar/baz", 0), ("paper/+/scissor", 1) ]) if not isinstance(ack, EventSuback) or ack.mid != sub.get_last_mid(): debug(ack) return False # checking granted qos if len(ack.granted_qos) != 3 or \ ack.granted_qos[0] != 2 or \ ack.granted_qos[1] != 0 or \ ack.granted_qos[2] != 1: debug(ack) return False return True