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
def test_014(self): c = MqttClient("cs:{seq}", connect=4, clean_session=0) if c.connack().session_present != 0: debug("session present") return False c.disconnect() # reconnect w/ same clientid, cleansession = 0 time.sleep(.5) c2 = MqttClient(client_id=c.client_id, connect=4, clean_session=0) if c2.connack().session_present != 1: debug("session not present") return False c2.disconnect() return True
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
def test_013(self): pub = MqttClient("publisher:{seq}", connect=4) c = MqttClient("cs:{seq}", connect=4, clean_session=0) if c.connack().session_present != 0: debug("session present") return False c.subscribe("/cs/qos-0", qos=0) c.disconnect() # reconnect w/ same clientid, cleansession = 1 time.sleep(.5) c2 = MqttClient(client_id=c.client_id, connect=4, clean_session=1) if c2.connack().session_present != 0: debug("session present") return False pub.publish("/cs/qos-0", "", qos=1) evt = c2.recv() if evt is not None: debug(evt) return False return True
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
def test_011(self): c = MqttClient("cs:{seq}", connect=4, clean_session=0) c.subscribe("/cs/qos-0", qos=0) c.subscribe("/cs/qos-1", qos=1) c.subscribe("/cs/qos-2", qos=2) c.disconnect() # reconnect w/ same clientid time.sleep(.5) c2 = MqttClient(client_id=c.client_id, connect=4, clean_session=0) topics = env.db.lrange("topics:" + c.clientid(), 0, -1) if len(topics) != 0: debug(topics) return False # checking CONNACK session-present if c2.connack().session_present != 1: debug("session not present") return False #TODO: list c2 subscriptions (needs specific API ?) return True
def test_023(self): c = MqttClient("cs:{seq}", connect=4, clean_session=0) if c.connack().session_present != 0: debug("session present") return False c.subscribe("/cs/topic1/+", qos=2) c.disconnect() pub = MqttClient("pub:{seq}", connect=4) pubmsgs = { "/cs/topic1/q0": [0, env.gen_msg(42)], "/cs/topic1/q1": [1, env.gen_msg(42)], "/cs/topic1/q2": [2, env.gen_msg(42)], } pubmsg = { 'topic': "/cs/topic1/q2", 'qos': 2, 'payload': env.gen_msg(42) } for (topic, (qos, msg)) in pubmsgs.iteritems(): ack = pub.publish(topic, msg, qos=qos) if qos == 2: pub.pubrel(ack.mid) pub.disconnect() c2 = MqttClient(client_id=c.client_id, connect=4, clean_session=0, read_connack=False) #NOTE: response order is not guaranteed acked = False pubcnt = 0 while True: evt = c2.recv() #print evt if isinstance(evt, EventConnack): if evt.session_present != 1: debug("{0}: session not present".format(evt)) return False acked = True continue if isinstance(evt, EventPublish): orig = pubmsgs.get(evt.msg.topic, [None, None]) if evt.msg.payload == orig[1] and evt.msg.qos == orig[0]: pubcnt += 1 continue if evt != None: debug(evt) return False break if not acked: debug("not acked") return False if pubcnt != 3: debug("not all messages received: {0}".format(pubcnt)) return False c2.disconnect() return True