From 786d468570215d66438dd0eba5abe6c6a6a47600 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Wed, 10 Nov 2021 15:58:10 +0000 Subject: [PATCH] MID reuse test. --- test/broker/03-publish-qos2-reuse-mid.py | 60 ++++++++++++++++++++++++ test/broker/Makefile | 1 + test/broker/test.py | 1 + 3 files changed, 62 insertions(+) create mode 100755 test/broker/03-publish-qos2-reuse-mid.py diff --git a/test/broker/03-publish-qos2-reuse-mid.py b/test/broker/03-publish-qos2-reuse-mid.py new file mode 100755 index 00000000..a4cccded --- /dev/null +++ b/test/broker/03-publish-qos2-reuse-mid.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 + +# Test what happens if a client reuses an in-use mid with a different message. + +from mosq_test_helper import * + +def do_test(proto_ver): + rc = 1 + connect_packet = mosq_test.gen_connect("pub-qos2-test", proto_ver=proto_ver) + connack_packet = mosq_test.gen_connack(rc=0, proto_ver=proto_ver) + + mid = 312 + publish_packet1 = mosq_test.gen_publish("pub/qos2/test", qos=2, mid=mid, payload="message", proto_ver=proto_ver) + pubrec_packet = mosq_test.gen_pubrec(mid, proto_ver=proto_ver) + pubrel_packet = mosq_test.gen_pubrel(mid, proto_ver=proto_ver) + pubcomp_packet = mosq_test.gen_pubcomp(mid, proto_ver=proto_ver) + + mid = 312 + publish_packet2 = mosq_test.gen_publish("pub/qos2/reuse", qos=2, mid=mid, payload="message", proto_ver=proto_ver) + + sub_connect_packet = mosq_test.gen_connect("sub-qos2-test", proto_ver=proto_ver) + sub_connack_packet = mosq_test.gen_connack(rc=0, proto_ver=proto_ver) + mid = 1 + subscribe_packet = mosq_test.gen_subscribe(mid, "#", 2, proto_ver=proto_ver) + suback_packet = mosq_test.gen_suback(mid, 2, proto_ver=proto_ver) + mid = 1 + publish_packet_expected = mosq_test.gen_publish("pub/qos2/reuse", qos=2, mid=mid, payload="message", proto_ver=proto_ver) + + port = mosq_test.get_port() + broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + + try: + ssock = mosq_test.do_client_connect(sub_connect_packet, sub_connack_packet, port=port) + mosq_test.do_send_receive(ssock, subscribe_packet, suback_packet, "suback") + + sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) + mosq_test.do_send_receive(sock, publish_packet1, pubrec_packet, "pubrec1") + mosq_test.do_send_receive(sock, publish_packet2, pubrec_packet, "pubrec2") + mosq_test.do_send_receive(sock, pubrel_packet, pubcomp_packet, "pubcomp") + + mosq_test.expect_packet(ssock, "publish", publish_packet_expected) + + rc = 0 + + sock.close() + except mosq_test.TestError: + pass + finally: + broker.terminate() + broker.wait() + (stdo, stde) = broker.communicate() + if rc: + print(stde.decode('utf-8')) + print("proto_ver=%d" % (proto_ver)) + exit(rc) + + +do_test(proto_ver=4) +do_test(proto_ver=5) +exit(0) diff --git a/test/broker/Makefile b/test/broker/Makefile index 420ea9c5..9d4dcee3 100644 --- a/test/broker/Makefile +++ b/test/broker/Makefile @@ -90,6 +90,7 @@ msg_sequence_test: ./03-publish-qos1.py ./03-publish-qos2-max-inflight-exceeded.py ./03-publish-qos2-max-inflight.py + ./03-publish-qos2-reuse-mid.py ./03-publish-qos2.py 04 : diff --git a/test/broker/test.py b/test/broker/test.py index e39531a3..bad82981 100755 --- a/test/broker/test.py +++ b/test/broker/test.py @@ -70,6 +70,7 @@ tests = [ (1, './03-publish-qos1.py'), (1, './03-publish-qos2-max-inflight-exceeded.py'), (1, './03-publish-qos2-max-inflight.py'), + (1, './03-publish-qos2-reuse-mid.py'), (1, './03-publish-qos2.py'), (1, './04-retain-check-source-persist.py'),