Simple pub/sub/unsub tests for v5.

pull/1022/head
Roger A. Light 7 years ago
parent 52c25fa899
commit 6996fd450a

@ -0,0 +1,45 @@
#!/usr/bin/env python
# Test whether a client subscribed to a topic receives its own message sent to that topic.
# MQTT v5
import inspect, os, sys
# From http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder
cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile( inspect.currentframe() ))[0],"..")))
if cmd_subfolder not in sys.path:
sys.path.insert(0, cmd_subfolder)
import mosq_test
rc = 1
mid = 53
keepalive = 60
connect_packet = mosq_test.gen_connect("subpub-qos0-test", keepalive=keepalive, proto_ver=5)
connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5)
subscribe_packet = mosq_test.gen_subscribe(mid, "subpub/qos0", 0, proto_ver=5)
suback_packet = mosq_test.gen_suback(mid, 0, proto_ver=5)
publish_packet = mosq_test.gen_publish("subpub/qos0", qos=0, payload="message", proto_ver=5)
port = mosq_test.get_port()
broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port)
try:
sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port)
mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback")
mosq_test.do_send_receive(sock, publish_packet, publish_packet, "publish")
rc = 0
sock.close()
finally:
broker.terminate()
broker.wait()
(stdo, stde) = broker.communicate()
if rc:
print(stde)
exit(rc)

@ -0,0 +1,53 @@
#!/usr/bin/env python
# Test whether a client subscribed to a topic receives its own message sent to that topic.
# MQTT v5
import inspect, os, sys
# From http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder
cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile( inspect.currentframe() ))[0],"..")))
if cmd_subfolder not in sys.path:
sys.path.insert(0, cmd_subfolder)
import mosq_test
rc = 1
mid = 530
keepalive = 60
connect_packet = mosq_test.gen_connect("subpub-qos1-test", keepalive=keepalive, proto_ver=5)
connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5)
subscribe_packet = mosq_test.gen_subscribe(mid, "subpub/qos1", 1, proto_ver=5)
suback_packet = mosq_test.gen_suback(mid, 1, proto_ver=5)
mid = 300
publish_packet = mosq_test.gen_publish("subpub/qos1", qos=1, mid=mid, payload="message", proto_ver=5)
puback_packet = mosq_test.gen_puback(mid, proto_ver=5)
mid = 1
publish_packet2 = mosq_test.gen_publish("subpub/qos1", qos=1, mid=mid, payload="message", proto_ver=5)
port = mosq_test.get_port()
broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port)
try:
sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port)
mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback")
mosq_test.do_send_receive(sock, publish_packet, puback_packet, "puback")
if mosq_test.expect_packet(sock, "publish2", publish_packet2):
rc = 0
sock.close()
finally:
broker.terminate()
broker.wait()
(stdo, stde) = broker.communicate()
if rc:
print(stde)
exit(rc)

@ -0,0 +1,60 @@
#!/usr/bin/env python
# Test whether a client subscribed to a topic receives its own message sent to that topic.
# MQTT v5
import inspect, os, sys
# From http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder
cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile( inspect.currentframe() ))[0],"..")))
if cmd_subfolder not in sys.path:
sys.path.insert(0, cmd_subfolder)
import mosq_test
rc = 1
mid = 530
keepalive = 60
connect_packet = mosq_test.gen_connect("subpub-qos2-test", keepalive=keepalive, proto_ver=5)
connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5)
subscribe_packet = mosq_test.gen_subscribe(mid, "subpub/qos2", 2, proto_ver=5)
suback_packet = mosq_test.gen_suback(mid, 2, proto_ver=5)
mid = 301
publish_packet = mosq_test.gen_publish("subpub/qos2", qos=2, mid=mid, payload="message", proto_ver=5)
pubrec_packet = mosq_test.gen_pubrec(mid, proto_ver=5)
pubrel_packet = mosq_test.gen_pubrel(mid, proto_ver=5)
pubcomp_packet = mosq_test.gen_pubcomp(mid, proto_ver=5)
mid = 1
publish_packet2 = mosq_test.gen_publish("subpub/qos2", qos=2, mid=mid, payload="message", proto_ver=5)
pubrec_packet2 = mosq_test.gen_pubrec(mid, proto_ver=5)
pubrel_packet2 = mosq_test.gen_pubrel(mid, proto_ver=5)
pubcomp_packet2 = mosq_test.gen_pubcomp(mid, proto_ver=5)
port = mosq_test.get_port()
broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port)
try:
sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port)
mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback")
mosq_test.do_send_receive(sock, publish_packet, pubrec_packet, "pubrec")
mosq_test.do_send_receive(sock, pubrel_packet, pubcomp_packet, "pubcomp")
if mosq_test.expect_packet(sock, "publish2", publish_packet2):
mosq_test.do_send_receive(sock, pubrec_packet2, pubrel_packet2, "pubrel2")
# Broker side of flow complete so can quit here.
rc = 0
sock.close()
finally:
broker.terminate()
broker.wait()
(stdo, stde) = broker.communicate()
if rc:
print(stde)
exit(rc)

@ -0,0 +1,41 @@
#!/usr/bin/env python
# Test whether a SUBSCRIBE to a topic with QoS 2 results in the correct SUBACK packet.
# MQTT 5
import inspect, os, sys
# From http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder
cmd_subfolder = os.path.realpath(os.path.abspath(os.path.join(os.path.split(inspect.getfile( inspect.currentframe() ))[0],"..")))
if cmd_subfolder not in sys.path:
sys.path.insert(0, cmd_subfolder)
import mosq_test
rc = 1
mid = 3
keepalive = 60
connect_packet = mosq_test.gen_connect("unsubscribe-qos2-test", keepalive=keepalive, proto_ver=5)
connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5)
unsubscribe_packet = mosq_test.gen_unsubscribe(mid, "qos2/test", proto_ver=5)
unsuback_packet = mosq_test.gen_unsuback(mid, proto_ver=5)
port = mosq_test.get_port()
broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port)
try:
sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port)
mosq_test.do_send_receive(sock, unsubscribe_packet, unsuback_packet, "unsuback")
rc = 0
sock.close()
finally:
broker.terminate()
broker.wait()
(stdo, stde) = broker.communicate()
if rc:
print(stde)
exit(rc)

@ -46,9 +46,13 @@ endif
./02-subpub-qos0.py
./02-subpub-qos1.py
./02-subpub-qos2.py
./02-subpub-qos0-v5.py
./02-subpub-qos1-v5.py
./02-subpub-qos2-v5.py
./02-unsubscribe-qos0.py
./02-unsubscribe-qos1.py
./02-unsubscribe-qos2.py
./02-unsubscribe-qos2-v5.py
./02-unsubscribe-invalid-no-topic.py
./02-subscribe-invalid-utf8.py
./02-subscribe-persistence-flipflop.py

@ -29,9 +29,13 @@ tests = [
(1, './02-subpub-qos0.py'),
(1, './02-subpub-qos1.py'),
(1, './02-subpub-qos2.py'),
(1, './02-subpub-qos0-v5.py'),
(1, './02-subpub-qos1-v5.py'),
(1, './02-subpub-qos2-v5.py'),
(1, './02-unsubscribe-qos0.py'),
(1, './02-unsubscribe-qos1.py'),
(1, './02-unsubscribe-qos2.py'),
(1, './02-unsubscribe-qos2-v5.py'),
(1, './02-unsubscribe-invalid-no-topic.py'),
(1, './02-subscribe-invalid-utf8.py'),
(1, './02-subscribe-persistence-flipflop.py'),

@ -363,12 +363,16 @@ def gen_connack(resv=0, rc=0, proto_ver=4):
return packet
def gen_publish(topic, qos, payload=None, retain=False, dup=False, mid=0):
def gen_publish(topic, qos, payload=None, retain=False, dup=False, mid=0, proto_ver=4):
rl = 2+len(topic)
pack_format = "H"+str(len(topic))+"s"
if qos > 0:
rl = rl + 2
pack_format = pack_format + "H"
if proto_ver == 5:
rl += 1
pack_format = pack_format + "B"
if payload != None:
rl = rl + len(payload)
pack_format = pack_format + str(len(payload))+"s"
@ -383,39 +387,71 @@ def gen_publish(topic, qos, payload=None, retain=False, dup=False, mid=0):
if dup:
cmd = cmd + 8
if proto_ver == 5:
if qos > 0:
return struct.pack("!B" + str(len(rlpacked))+"s" + pack_format, cmd, rlpacked, len(topic), topic, mid, 0, payload)
else:
return struct.pack("!B" + str(len(rlpacked))+"s" + pack_format, cmd, rlpacked, len(topic), topic, 0, payload)
else:
if qos > 0:
return struct.pack("!B" + str(len(rlpacked))+"s" + pack_format, cmd, rlpacked, len(topic), topic, mid, payload)
else:
return struct.pack("!B" + str(len(rlpacked))+"s" + pack_format, cmd, rlpacked, len(topic), topic, payload)
def gen_puback(mid):
def gen_puback(mid, proto_ver=4):
if proto_ver == 5:
return struct.pack('!BBHB', 64, 3, mid, 0)
else:
return struct.pack('!BBH', 64, 2, mid)
def gen_pubrec(mid):
def gen_pubrec(mid, proto_ver=4):
if proto_ver == 5:
return struct.pack('!BBHB', 80, 3, mid, 0)
else:
return struct.pack('!BBH', 80, 2, mid)
def gen_pubrel(mid, dup=False):
def gen_pubrel(mid, dup=False, proto_ver=4):
if dup:
cmd = 96+8+2
else:
cmd = 96+2
if proto_ver == 5:
return struct.pack('!BBHB', cmd, 3, mid, 0)
else:
return struct.pack('!BBH', cmd, 2, mid)
def gen_pubcomp(mid):
def gen_pubcomp(mid, proto_ver=4):
if proto_ver == 5:
return struct.pack('!BBHB', 112, 3, mid, 0)
else:
return struct.pack('!BBH', 112, 2, mid)
def gen_subscribe(mid, topic, qos):
def gen_subscribe(mid, topic, qos, proto_ver=4):
if proto_ver == 5:
pack_format = "!BBHBH"+str(len(topic))+"sB"
return struct.pack(pack_format, 130, 2+1+2+len(topic)+1, mid, 0, len(topic), topic, qos)
else:
pack_format = "!BBHH"+str(len(topic))+"sB"
return struct.pack(pack_format, 130, 2+2+len(topic)+1, mid, len(topic), topic, qos)
def gen_suback(mid, qos):
def gen_suback(mid, qos, proto_ver=4):
if proto_ver == 5:
return struct.pack('!BBHBB', 144, 2+1+1, mid, 0, qos)
else:
return struct.pack('!BBHB', 144, 2+1, mid, qos)
def gen_unsubscribe(mid, topic):
def gen_unsubscribe(mid, topic, proto_ver=4):
if proto_ver == 5:
pack_format = "!BBHBH"+str(len(topic))+"s"
return struct.pack(pack_format, 162, 2+2+len(topic)+1, mid, 0, len(topic), topic)
else:
pack_format = "!BBHH"+str(len(topic))+"s"
return struct.pack(pack_format, 162, 2+2+len(topic), mid, len(topic), topic)
def gen_unsuback(mid):
def gen_unsuback(mid, proto_ver=4):
if proto_ver == 5:
return struct.pack('!BBHB', 176, 3, mid, 0)
else:
return struct.pack('!BBH', 176, 2, mid)
def gen_pingreq():

Loading…
Cancel
Save