Add test for MQTT v3.1.1.
Change-Id: Ia7b38ba92f848d88255a1ad96ca8504cd193fc6f
--- /dev/null
+#!/usr/bin/env python
+
+# Test whether a client produces a correct connect and subsequent disconnect.
+
+# The client should connect to port 1888 with keepalive=60, clean session set,
+# and client id 01-con-discon-success
+# The test will send a CONNACK message to the client with rc=0. Upon receiving
+# the CONNACK and verifying that rc=0, the client should send a DISCONNECT
+# message. If rc!=0, the client should exit with an error.
+
+import inspect
+import os
+import subprocess
+import socket
+import sys
+import time
+
+# 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 paho_test
+
+rc = 1
+keepalive = 60
+connect_packet = paho_test.gen_connect("01-con-discon-success", keepalive=keepalive, proto_name="MQTT", proto_ver=4)
+connack_packet = paho_test.gen_connack(rc=0)
+
+disconnect_packet = paho_test.gen_disconnect()
+
+sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
+sock.settimeout(10)
+sock.bind(('', 1888))
+sock.listen(5)
+
+client_args = sys.argv[1:]
+env = dict(os.environ)
+try:
+ pp = env['PYTHONPATH']
+except KeyError:
+ pp = ''
+env['PYTHONPATH'] = '../../src:'+pp
+client = subprocess.Popen(client_args, env=env)
+
+try:
+ (conn, address) = sock.accept()
+ conn.settimeout(10)
+
+ if paho_test.expect_packet(conn, "connect", connect_packet):
+ conn.send(connack_packet)
+
+ if paho_test.expect_packet(conn, "disconnect", disconnect_packet):
+ rc = 0
+
+ conn.close()
+finally:
+ client.terminate()
+ client.wait()
+ sock.close()
+
+exit(rc)
+
python python3 :
./01-con-discon-success.py $@/01-con-discon-success.test
+ ./01-con-discon-success-mqtt311.py $@/01-con-discon-success-mqtt311.test
./01-will-set.py $@/01-will-set.test
./01-unpwd-set.py $@/01-unpwd-set.test
./01-will-unpwd-set.py $@/01-will-unpwd-set.test
--- /dev/null
+#!/usr/bin/env python
+
+import os
+import subprocess
+import socket
+import sys
+import time
+from struct import *
+
+import paho.mqtt.client as mqtt
+
+
+def on_connect(mqttc, obj, flags, rc):
+ if rc != 0:
+ exit(rc)
+ else:
+ mqttc.disconnect()
+
+def on_disconnect(mqttc, obj, rc):
+ mqttc.loop()
+ obj = rc
+
+
+run = -1
+mqttc = mqtt.Client("01-con-discon-success", run, protocol=mqtt.MQTTv311)
+mqttc.on_connect = on_connect
+mqttc.on_disconnect = on_disconnect
+
+mqttc.connect("localhost", 1888)
+while run == -1:
+ mqttc.loop()
+
+exit(run)
--- /dev/null
+#!/usr/bin/env python3
+
+import os
+import subprocess
+import socket
+import sys
+import time
+from struct import *
+
+import paho.mqtt.client as mqtt
+
+
+def on_connect(mqttc, obj, flags, rc):
+ if rc != 0:
+ exit(rc)
+ else:
+ mqttc.disconnect()
+
+def on_disconnect(mqttc, obj, rc):
+ mqttc.loop()
+ obj = rc
+
+
+run = -1
+mqttc = mqtt.Client("01-con-discon-success", run, protocol=mqtt.MQTTv311)
+mqttc.on_connect = on_connect
+mqttc.on_disconnect = on_disconnect
+
+mqttc.connect("localhost", 1888)
+while run == -1:
+ mqttc.loop()
+
+exit(run)
# Reserved
return "0xF0"
-def gen_connect(client_id, clean_session=True, keepalive=60, username=None, password=None, will_topic=None, will_qos=0, will_retain=False, will_payload="", proto_name="MQTT", proto_ver=4):
+def gen_connect(client_id, clean_session=True, keepalive=60, username=None, password=None, will_topic=None, will_qos=0, will_retain=False, will_payload="", proto_name="MQIsdp", proto_ver=3):
if client_id == None:
remaining_length = 12
else: