From 02f6f52fdcfb905527cc8a4a289b169dd9ce59c4 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Tue, 5 May 2026 01:25:16 +0100 Subject: [PATCH] Test: Start of big refactor Add new MosquittoBroker class to remove test boilerplate. This only handles non-config cases so far. --- test/broker/01-connect-575314.py | 25 +-- test/broker/01-connect-disconnect-v5.py | 26 +-- test/broker/01-connect-take-over.py | 19 +- test/broker/02-shared-nolocal.py | 28 +-- test/broker/02-shared-qos0-v5.py | 26 +-- test/broker/02-subhier-crash.py | 30 +--- test/broker/02-subpub-b2c-topic-alias.py | 29 +--- test/broker/02-subpub-qos0-long-topic.py | 71 +++----- .../02-subpub-qos0-retain-as-publish.py | 26 +-- test/broker/02-subpub-qos0-send-retain.py | 26 +-- test/broker/02-subpub-qos0-subscription-id.py | 27 +-- .../02-subpub-qos0-topic-alias-unknown.py | 26 +-- test/broker/02-subpub-qos0-topic-alias.py | 25 +-- .../02-subpub-qos1-message-expiry-retain.py | 18 +- .../02-subpub-qos1-message-expiry-will.py | 17 +- test/broker/02-subpub-qos1-message-expiry.py | 17 +- test/broker/02-subpub-qos1-nolocal.py | 25 +-- test/broker/02-subpub-qos1.py | 47 ++--- test/broker/02-subpub-qos2-1322.py | 29 +--- test/broker/02-subpub-qos2-pubrec-error.py | 18 +- .../02-subpub-qos2-receive-maximum-1.py | 29 +--- .../02-subpub-qos2-receive-maximum-2.py | 28 +-- test/broker/02-subpub-qos2.py | 56 ++---- .../broker/02-subpub-recover-subscriptions.py | 28 +-- test/broker/02-subscribe-dollar-v5.py | 42 ++--- test/broker/02-subscribe-invalid-utf8.py | 54 ++---- test/broker/02-subscribe-long-topic.py | 55 ++---- .../02-subscribe-persistence-flipflop.py | 31 +--- test/broker/03-pattern-matching.py | 21 +-- test/broker/03-publish-b2c-disconnect-qos1.py | 31 +--- test/broker/03-publish-b2c-disconnect-qos2.py | 31 +--- test/broker/03-publish-b2c-qos1-len.py | 39 +---- test/broker/03-publish-b2c-qos2-len.py | 36 +--- test/broker/03-publish-c2b-disconnect-qos2.py | 33 +--- test/broker/03-publish-c2b-qos2-len.py | 36 +--- test/broker/03-publish-dollar-v5.py | 28 +-- test/broker/03-publish-dollar.py | 29 +--- test/broker/03-publish-invalid-utf8.py | 32 +--- test/broker/03-publish-long-topic.py | 31 +--- .../03-publish-qos1-no-subscribers-v5.py | 28 +-- test/broker/03-publish-qos1-queued-bytes.py | 2 +- test/broker/03-publish-qos1.py | 33 +--- test/broker/03-publish-qos2-dup.py | 32 +--- .../03-publish-qos2-max-inflight-exceeded.py | 27 +-- test/broker/03-publish-qos2-reuse-mid.py | 26 +-- test/broker/03-publish-qos2.py | 43 ++--- test/broker/04-retain-clear-multiple.py | 20 +-- test/broker/04-retain-qos0-clear.py | 32 +--- test/broker/04-retain-qos0-fresh.py | 32 +--- test/broker/04-retain-qos0-repeated.py | 30 +--- test/broker/04-retain-qos0.py | 32 +--- test/broker/04-retain-qos1-qos0.py | 32 +--- test/broker/05-clean-session-qos1.py | 31 +--- test/broker/05-session-expiry-v5.py | 29 +--- test/broker/06-bridge-no-local.py | 42 +---- test/broker/07-will-control.py | 39 +---- test/broker/07-will-delay-invalid-573191.py | 28 ++- test/broker/07-will-delay-reconnect.py | 31 +--- test/broker/07-will-delay-recover.py | 36 +--- test/broker/07-will-delay-session-expiry-0.py | 30 +--- test/broker/07-will-delay-session-expiry.py | 30 +--- test/broker/07-will-delay-session-expiry2.py | 30 +--- test/broker/07-will-delay.py | 38 +--- test/broker/07-will-disconnect-with-will.py | 30 +--- test/broker/07-will-invalid-utf8.py | 40 ++--- test/broker/07-will-no-flag.py | 40 ++--- test/broker/07-will-null-topic.py | 43 ++--- test/broker/07-will-null.py | 39 +---- test/broker/07-will-properties.py | 51 +----- test/broker/07-will-qos0.py | 44 +---- test/broker/07-will-reconnect-1273.py | 38 +--- test/broker/07-will-takeover.py | 69 ++------ test/broker/09-auth-bad-method.py | 27 +-- .../12-prop-assigned-client-identifier.py | 39 +---- ...2-prop-maximum-packet-size-publish-qos1.py | 28 +-- ...2-prop-maximum-packet-size-publish-qos2.py | 29 +--- ...12-prop-response-topic-correlation-data.py | 30 +--- test/broker/12-prop-response-topic.py | 30 +--- test/broker/12-prop-subpub-content-type.py | 9 +- test/broker/12-prop-subpub-payload-format.py | 9 +- test/broker/20-sparkplug-compliance.py | 16 +- test/broker/mosq_test_helper.py | 1 + test/broker/ntest.py | 164 ------------------ test/broker/prop_subpub_helper.py | 25 +-- test/client/02-subscribe-filter-out.py | 67 +++---- .../02-subscribe-format-json-properties.py | 63 +++---- test/client/02-subscribe-format-json-qos0.py | 66 +++---- test/client/02-subscribe-format-json-qos1.py | 67 +++---- .../client/02-subscribe-format-json-retain.py | 63 +++---- test/client/02-subscribe-format.py | 156 ++++++++--------- test/client/02-subscribe-null.py | 65 +++---- test/client/02-subscribe-qos1.py | 59 +++---- test/client/02-subscribe-verbose.py | 67 +++---- test/client/03-publish-env.py | 16 +- test/client/03-publish-qos0-empty.py | 53 +++--- test/client/03-publish-qos1-properties.py | 49 ++---- test/client/03-publish-qos1.py | 54 +++--- test/client/03-publish-repeat.py | 52 +++--- test/client/03-publish-stdin-file.py | 53 ++---- test/client/03-publish-stdin-line.py | 57 +++--- test/client/03-publish-url.py | 53 +++--- test/client/04-rr-env.py | 17 +- test/client/04-rr-qos1.py | 62 +++---- test/client/mosq_test_helper.py | 1 + test/mosquitto_broker.py | 89 ++++++++++ 105 files changed, 1027 insertions(+), 2961 deletions(-) delete mode 100755 test/broker/ntest.py create mode 100644 test/mosquitto_broker.py diff --git a/test/broker/01-connect-575314.py b/test/broker/01-connect-575314.py index 8ba16b88..f04aa789 100755 --- a/test/broker/01-connect-575314.py +++ b/test/broker/01-connect-575314.py @@ -9,7 +9,6 @@ def do_test(): num_connects = 1000 num_props = 5000 - rc = 1 props = mqtt5_props.gen_string_pair_prop(mqtt5_props.USER_PROPERTY, "key", "value") for i in range(0, num_props): props += mqtt5_props.gen_string_pair_prop(mqtt5_props.USER_PROPERTY, "key", "value") @@ -18,10 +17,9 @@ def do_test(): connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: - broker_info = ProcessInfo(broker.pid) + broker = MosquittoBroker(port=port) + with broker: + broker_info = ProcessInfo(broker._process.pid) cpu_user_start = broker_info.cpu_times().user for i in range(num_connects): @@ -40,19 +38,10 @@ def do_test(): # 20 is chosen as a factor that works in plain mode and running under # valgrind. The slow performance manifests as a factor of >100. Fast is <10. if cpu_user_with_props / cpu_user_without_props < 20.0: - rc = 0 + pass else: - print(f"CPU usage ratio with/without properties is {cpu_user_with_props / cpu_user_without_props}") - except Exception: - traceback.print_stack(file=sys.stdout) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - exit(rc) + raise ValueError(f"CPU usage ratio with/without properties is {cpu_user_with_props / cpu_user_without_props}") -do_test() -exit(0) +if __name__ == '__main__': + do_test() diff --git a/test/broker/01-connect-disconnect-v5.py b/test/broker/01-connect-disconnect-v5.py index 0ffa4dd5..b1d8e971 100755 --- a/test/broker/01-connect-disconnect-v5.py +++ b/test/broker/01-connect-disconnect-v5.py @@ -33,16 +33,13 @@ def disco_test(test, disconnect_packet): rc -= 1 -def do_test(start_broker): +def do_test(): global rc rc = 4 - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - - try: + broker = MosquittoBroker(port=port) + with broker: # No reason code, no properties, len=0 disconnect_packet = mqtt_packets.gen_disconnect(proto_ver=5) disco_test("disco len=0", disconnect_packet) @@ -59,22 +56,9 @@ def do_test(start_broker): props = mqtt5_props.gen_string_pair_prop(mqtt5_props.USER_PROPERTY, "key", "value") disconnect_packet = mqtt_packets.gen_disconnect(proto_ver=5, reason_code=0, properties=props) disco_test("disco len>2", disconnect_packet) - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) + assert rc == 0 -def all_tests(start_broker=False): - do_test(start_broker) if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/01-connect-take-over.py b/test/broker/01-connect-take-over.py index b969dac7..9e678405 100755 --- a/test/broker/01-connect-take-over.py +++ b/test/broker/01-connect-take-over.py @@ -5,10 +5,8 @@ from mosq_test_helper import * port = mosq_test.get_port() -broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - -try: - rc = 1 +broker = MosquittoBroker(port=port) +with broker: connect_packet = mqtt_packets.gen_connect("take-over", proto_ver=5) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) disconnect_packet = mqtt_packets.gen_disconnect(reason_code=mqtt5_rc.SESSION_TAKEN_OVER, proto_ver=5) @@ -20,16 +18,3 @@ try: sock2.close() sock1.close() - rc = 0 -except mosq_test.TestError: - pass -except Exception as e: - print(e) -finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) diff --git a/test/broker/02-shared-nolocal.py b/test/broker/02-shared-nolocal.py index 746206dd..6bbacf92 100755 --- a/test/broker/02-shared-nolocal.py +++ b/test/broker/02-shared-nolocal.py @@ -4,8 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): mid = 1 connect1_packet = mqtt_packets.gen_connect("02-shared-nolocal-client1", proto_ver=5) @@ -15,31 +14,12 @@ def do_test(start_broker): disconnect_packet = mqtt_packets.gen_disconnect(reason_code=mqtt5_rc.PROTOCOL_ERROR, proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=20, port=port) - mosq_test.do_send_receive(sock, subscribe_packet, disconnect_packet, "disconnect") - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) - -def all_tests(start_broker=False): - do_test(start_broker) if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/02-shared-qos0-v5.py b/test/broker/02-shared-qos0-v5.py index 3a0b2a1c..35ba4e3a 100755 --- a/test/broker/02-shared-qos0-v5.py +++ b/test/broker/02-shared-qos0-v5.py @@ -15,8 +15,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): mid = 1 connect1_packet = mqtt_packets.gen_connect("02-shared-client1", proto_ver=5) @@ -77,10 +76,9 @@ def do_test(start_broker): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=20, port=port) sock2 = mosq_test.do_client_connect(connect2_packet, connack2_packet, timeout=20, port=port) sock3 = mosq_test.do_client_connect(connect3_packet, connack3_packet, timeout=20, port=port) @@ -115,28 +113,12 @@ def do_test(start_broker): mosq_test.do_send_receive(sock4, unsubscribe4_packet, unsuback4_packet, "unsuback4") mosq_test.do_send_receive(sock5, unsubscribe5_packet, unsuback5_packet, "unsuback5") - rc = 0 - sock1.close() sock2.close() sock3.close() sock4.close() sock5.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker) if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/02-subhier-crash.py b/test/broker/02-subhier-crash.py index 19022ab4..d8035bca 100755 --- a/test/broker/02-subhier-crash.py +++ b/test/broker/02-subhier-crash.py @@ -25,41 +25,19 @@ def test(port): mosq_test.do_send_receive(sock, subscribe1_packet, suback1_packet, "suback 1") mosq_test.do_send_receive(sock, subscribe2_packet, suback2_packet, "suback 2") mosq_test.do_send_receive(sock, unsubscribe1_packet, unsuback1_packet, "unsuback") - sock.send(disconnect_packet) sock.close() -def do_test(start_broker=True): - rc = 1 - +def do_test(): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: test(port) # Repeat test to check broker is still there test(port) - rc = 0 - - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) - - -def all_tests(start_broker=False): - do_test(start_broker) if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/02-subpub-b2c-topic-alias.py b/test/broker/02-subpub-b2c-topic-alias.py index 5e36a033..d97cc4ad 100755 --- a/test/broker/02-subpub-b2c-topic-alias.py +++ b/test/broker/02-subpub-b2c-topic-alias.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): props = mqtt5_props.gen_uint16_prop(mqtt5_props.TOPIC_ALIAS_MAXIMUM, 65535) connect_packet = mqtt_packets.gen_connect("02-b2c-topic-alias", proto_ver=5, properties=props) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -18,10 +17,9 @@ def do_test(start_broker): connack_packet_helper = mqtt_packets.gen_connack(rc=0, proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port, nolog=True) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=5, port=port) helper = mosq_test.do_client_connect(connect_packet_helper, connack_packet_helper, timeout=5, port=port) @@ -70,27 +68,8 @@ def do_test(start_broker): sock.send(publish_packet_s) mosq_test.expect_packet(sock, "publish %db"%(i), publish_packet_r) - rc = 0 - - - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/02-subpub-qos0-long-topic.py b/test/broker/02-subpub-qos0-long-topic.py index 394c6824..80111be8 100755 --- a/test/broker/02-subpub-qos0-long-topic.py +++ b/test/broker/02-subpub-qos0-long-topic.py @@ -4,8 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker, topic, succeeds): - rc = 1 +def do_test(port, topic, succeeds): mid = 53 connect_packet = mqtt_packets.gen_connect("02-subpub-qos0-long-topic") connack_packet = mqtt_packets.gen_connack(rc=0) @@ -15,53 +14,29 @@ def do_test(start_broker, topic, succeeds): publish_packet = mqtt_packets.gen_publish(topic, qos=0, payload="message") + sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port) + + if succeeds: + mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") + mosq_test.do_send_receive(sock, publish_packet, publish_packet, "publish") + else: + try: + mosq_test.do_send_receive(sock, subscribe_packet, b"", "suback") + raise RuntimeError(topic) + except BrokenPipeError: + pass + sock.close() + + +def all_tests(): port = mosq_test.get_port() - broker = None - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: - sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port) - - if succeeds: - mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") - mosq_test.do_send_receive(sock, publish_packet, publish_packet, "publish") - else: - try: - mosq_test.do_send_receive(sock, subscribe_packet, b"", "suback") - return 1 - except BrokenPipeError: - pass - - rc = 0 - - sock.close() - finally: - if broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - return rc - - -def all_tests(start_broker=False): - rc = do_test(start_broker, "/"*200, True) # 200 max hierarchy limit - if rc: - return rc - rc = do_test(start_broker, "abc/"*199+"d", True) # 200 max hierarchy limit, longer overall string than 200 - if rc: - return rc - - rc = do_test(start_broker, "/"*201, False) # Exceeds 200 max hierarchy limit - if rc: - return rc - rc = do_test(start_broker, "abc/"*201+"d", False) # Exceeds 200 max hierarchy limit, longer overall string than 200 - if rc: - return rc - return 0 + with broker: + do_test(port, "/"*200, True) # 200 max hierarchy limit + do_test(port, "abc/"*199+"d", True) # 200 max hierarchy limit, longer overall string than 200 + do_test(port, "/"*201, False) # Exceeds 200 max hierarchy limit + do_test(port, "abc/"*201+"d", False) # Exceeds 200 max hierarchy limit, longer overall string than 200 if __name__ == '__main__': - sys.exit(all_tests(True)) + all_tests() diff --git a/test/broker/02-subpub-qos0-retain-as-publish.py b/test/broker/02-subpub-qos0-retain-as-publish.py index e3b466d6..465aba7d 100755 --- a/test/broker/02-subpub-qos0-retain-as-publish.py +++ b/test/broker/02-subpub-qos0-retain-as-publish.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): connect_packet = mqtt_packets.gen_connect("02-subpub-qos0-rap", proto_ver=5) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -29,10 +28,9 @@ def do_test(start_broker): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port) mosq_test.do_send_receive(sock, subscribe1_packet, suback1_packet, "suback1") @@ -40,25 +38,9 @@ def do_test(start_broker): mosq_test.do_send_receive(sock, publish1_packet, publish1r_packet, "publish1") mosq_test.do_send_receive(sock, publish2_packet, publish2r_packet, "publish2") - rc = 0 sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/02-subpub-qos0-send-retain.py b/test/broker/02-subpub-qos0-send-retain.py index 982a04c0..d022c3cb 100755 --- a/test/broker/02-subpub-qos0-send-retain.py +++ b/test/broker/02-subpub-qos0-send-retain.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): connect_packet = mqtt_packets.gen_connect("02-subpub-qos0-send-retain", proto_ver=5) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -36,10 +35,8 @@ def do_test(start_broker): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=5, port=port) sock.send(publish1_packet) @@ -66,22 +63,7 @@ def do_test(start_broker): rc = 0 sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/02-subpub-qos0-subscription-id.py b/test/broker/02-subpub-qos0-subscription-id.py index b7f4915b..29812150 100755 --- a/test/broker/02-subpub-qos0-subscription-id.py +++ b/test/broker/02-subpub-qos0-subscription-id.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): connect_packet = mqtt_packets.gen_connect("02-subpub-subid", proto_ver=5) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -67,10 +66,9 @@ def do_test(start_broker, proto_ver): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port) mosq_test.do_send_receive(sock, subscribe1_packet, suback1_packet, "suback1") @@ -90,25 +88,8 @@ def do_test(start_broker, proto_ver): mosq_test.do_send_receive(sock, publish3_packet, publish3ru_packet, "publish3u") mosq_test.do_send_receive(sock, publish1_packet, publish1ru_packet, "publish1u") - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=5) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=5) diff --git a/test/broker/02-subpub-qos0-topic-alias-unknown.py b/test/broker/02-subpub-qos0-topic-alias-unknown.py index 32ee376a..ae1df39e 100755 --- a/test/broker/02-subpub-qos0-topic-alias-unknown.py +++ b/test/broker/02-subpub-qos0-topic-alias-unknown.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): connect_packet = mqtt_packets.gen_connect("02-subpub-alias-unknown", proto_ver=5) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -16,33 +15,16 @@ def do_test(start_broker): disconnect_packet = mqtt_packets.gen_disconnect(reason_code=mqtt5_rc.PROTOCOL_ERROR, proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=5, port=port) sock.send(publish1_packet) mosq_test.expect_packet(sock, "disconnect", disconnect_packet) - rc = 0 sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/02-subpub-qos0-topic-alias.py b/test/broker/02-subpub-qos0-topic-alias.py index 6b7af048..d962eeab 100755 --- a/test/broker/02-subpub-qos0-topic-alias.py +++ b/test/broker/02-subpub-qos0-topic-alias.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): connect1_packet = mqtt_packets.gen_connect("02-subpub-qos0-topic-alias", proto_ver=5) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -26,10 +25,9 @@ def do_test(start_broker): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=5, port=port) sock2 = mosq_test.do_client_connect(connect2_packet, connack2_packet, timeout=5, port=port) @@ -40,26 +38,11 @@ def do_test(start_broker): sock1.send(publish2s_packet) mosq_test.expect_packet(sock2, "publish2r", publish2r_packet) - rc = 0 sock1.close() sock2.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker) if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/02-subpub-qos1-message-expiry-retain.py b/test/broker/02-subpub-qos1-message-expiry-retain.py index 0031471a..518f8af6 100755 --- a/test/broker/02-subpub-qos1-message-expiry-retain.py +++ b/test/broker/02-subpub-qos1-message-expiry-retain.py @@ -14,7 +14,6 @@ from mosq_test_helper import * def do_test(proto_ver): - rc = 1 keepalive = 60 connect_packet = mqtt_packets.gen_connect("subpub", keepalive=keepalive, proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -45,9 +44,9 @@ def do_test(proto_ver): port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: helper = mosq_test.do_client_connect(helper_connect, helper_connack, timeout=20, port=port) mosq_test.do_send_receive(helper, publish1_packet, puback1_packet, "puback 1") mosq_test.do_send_receive(helper, publish2s_packet, puback2s_packet, "puback 2") @@ -73,19 +72,6 @@ def do_test(proto_ver): mosq_test.expect_packet(sock, "publish 2", publish2r_packet) sock.send(puback2r_packet) sock.close() - rc = 0 - - except mosq_test.TestError: - pass - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - exit(rc) do_test(proto_ver=5) diff --git a/test/broker/02-subpub-qos1-message-expiry-will.py b/test/broker/02-subpub-qos1-message-expiry-will.py index c4881b68..719cc9a7 100755 --- a/test/broker/02-subpub-qos1-message-expiry-will.py +++ b/test/broker/02-subpub-qos1-message-expiry-will.py @@ -12,7 +12,6 @@ from mosq_test_helper import * def do_test(proto_ver): - rc = 1 mid = 53 keepalive = 60 props = mqtt5_props.gen_uint32_prop(mqtt5_props.SESSION_EXPIRY_INTERVAL, 60) @@ -35,9 +34,9 @@ def do_test(proto_ver): port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack1_packet, timeout=20, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") sock.close() @@ -56,17 +55,7 @@ def do_test(proto_ver): break sock.close() - except mosq_test.TestError: - pass - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + assert rc == 0 do_test(proto_ver=5) diff --git a/test/broker/02-subpub-qos1-message-expiry.py b/test/broker/02-subpub-qos1-message-expiry.py index 5f025ad3..8757572d 100755 --- a/test/broker/02-subpub-qos1-message-expiry.py +++ b/test/broker/02-subpub-qos1-message-expiry.py @@ -40,9 +40,9 @@ def do_test(proto_ver): port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack1_packet, timeout=20, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") sock.close() @@ -63,18 +63,7 @@ def do_test(proto_ver): break sock.close() - except mosq_test.TestError: - pass - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + assert rc == 0 do_test(proto_ver=5) -exit(0) diff --git a/test/broker/02-subpub-qos1-nolocal.py b/test/broker/02-subpub-qos1-nolocal.py index c5360520..64cd0503 100755 --- a/test/broker/02-subpub-qos1-nolocal.py +++ b/test/broker/02-subpub-qos1-nolocal.py @@ -6,8 +6,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): connect_packet = mqtt_packets.gen_connect("02-subpub-qos1-nolocal", proto_ver=5) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -32,10 +31,9 @@ def do_test(start_broker): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: 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") @@ -45,25 +43,10 @@ def do_test(start_broker): sock.send(publish2_packet) mosq_test.receive_unordered(sock, puback2_packet, publish3_packet, "puback2/publish3") - rc = 0 sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker) if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/02-subpub-qos1.py b/test/broker/02-subpub-qos1.py index a072d201..8a0d820a 100755 --- a/test/broker/02-subpub-qos1.py +++ b/test/broker/02-subpub-qos1.py @@ -4,8 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(port, proto_ver): mid = 530 connect_packet = mqtt_packets.gen_connect("subpub-qos1-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -20,39 +19,17 @@ def do_test(start_broker, proto_ver): mid = 1 publish_packet2 = mqtt_packets.gen_publish("subpub/qos1", qos=1, mid=mid, payload="message", proto_ver=proto_ver) + 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") + sock.send(publish_packet) + mosq_test.receive_unordered(sock, puback_packet, publish_packet2, "puback/publish2") + sock.close() - port = mosq_test.get_port() - if start_broker: - 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") - - sock.send(publish_packet) - mosq_test.receive_unordered(sock, puback_packet, publish_packet2, "puback/publish2") - rc = 0 - - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) - - -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) if __name__ == '__main__': - all_tests(True) + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + + with broker: + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/broker/02-subpub-qos2-1322.py b/test/broker/02-subpub-qos2-1322.py index 1f2fe4ca..bfbb3bc0 100755 --- a/test/broker/02-subpub-qos2-1322.py +++ b/test/broker/02-subpub-qos2-1322.py @@ -36,7 +36,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): +def do_test(proto_ver): rc = 1 pub_connect_packet = mqtt_packets.gen_connect("02-subpub-qos2-1322-pub", clean_session=False, proto_ver=proto_ver, session_expiry=60) pub_connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -76,10 +76,9 @@ def do_test(start_broker, proto_ver): publish5r_packet = mqtt_packets.gen_publish("02/subpub/qos2/1322/topic1", qos=0, payload="message5", proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sub1 = mosq_test.do_client_connect(sub1_connect_packet, sub1_connack_packet, timeout=10, port=port) mosq_test.do_send_receive(sub1, subscribe1_packet, suback1_packet, "suback1") @@ -124,32 +123,14 @@ def do_test(start_broker, proto_ver): mosq_test.do_ping(sub2, error_string="pingresp2") mosq_test.expect_packet(sub1, "publish5", publish5r_packet) - rc = 0 - sub2.close() sub1.close() # Clear session pub = mosq_test.do_client_connect(pub_connect_packet_clear, pub_connack1_packet, timeout=10, port=port) pub.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/02-subpub-qos2-pubrec-error.py b/test/broker/02-subpub-qos2-pubrec-error.py index fca60b3f..10d2dbab 100755 --- a/test/broker/02-subpub-qos2-pubrec-error.py +++ b/test/broker/02-subpub-qos2-pubrec-error.py @@ -31,7 +31,6 @@ def helper(port): def do_test(proto_ver): - rc = 1 keepalive = 60 connect_packet = mqtt_packets.gen_connect("pub-qo2-timeout-test", keepalive=keepalive, proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -51,9 +50,9 @@ def do_test(proto_ver): pubcomp_2_packet = mqtt_packets.gen_pubcomp(mid, proto_ver=proto_ver) port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") @@ -66,20 +65,7 @@ def do_test(proto_ver): mosq_test.expect_packet(sock, "publish 2", publish_2_packet) mosq_test.do_send_receive(sock, pubrec_2_packet, pubrel_2_packet, "pubrel 2") sock.send(pubcomp_2_packet) - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - exit(rc) do_test(proto_ver=5) diff --git a/test/broker/02-subpub-qos2-receive-maximum-1.py b/test/broker/02-subpub-qos2-receive-maximum-1.py index 6b5104ca..5a10aacf 100755 --- a/test/broker/02-subpub-qos2-receive-maximum-1.py +++ b/test/broker/02-subpub-qos2-receive-maximum-1.py @@ -6,7 +6,6 @@ from mosq_test_helper import * def helper(port): - rc = 1 connect_packet = mqtt_packets.gen_connect("subpub-qos2-recv-max1-helper", proto_ver=5) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -42,8 +41,7 @@ def helper(port): sock.close() -def do_test(start_broker): - rc = 1 +def do_test(): props = mqtt5_props.gen_uint16_prop(mqtt5_props.RECEIVE_MAXIMUM, 1) connect_packet = mqtt_packets.gen_connect("subpub-qos2-receive-max1", proto_ver=5, properties=props) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -72,10 +70,9 @@ def do_test(start_broker): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: 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") @@ -93,26 +90,8 @@ def do_test(start_broker): mosq_test.expect_packet(sock, "publish3", publish_packet3) mosq_test.do_send_receive(sock, pubrec_packet3, pubrel_packet3, "pubrel3") sock.send(pubcomp_packet3) - - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/02-subpub-qos2-receive-maximum-2.py b/test/broker/02-subpub-qos2-receive-maximum-2.py index 76b0083f..82d2490f 100755 --- a/test/broker/02-subpub-qos2-receive-maximum-2.py +++ b/test/broker/02-subpub-qos2-receive-maximum-2.py @@ -42,7 +42,7 @@ def helper(port): sock.close() -def do_test(start_broker, proto_ver): +def do_test(proto_ver): if proto_ver == 4: exit(0) @@ -75,10 +75,9 @@ def do_test(start_broker, proto_ver): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: 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") @@ -96,27 +95,8 @@ def do_test(start_broker, proto_ver): mosq_test.do_send_receive(sock, pubrec_packet3, pubrel_packet3, "pubrel3") sock.send(pubcomp_packet3) - - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=5) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=5) diff --git a/test/broker/02-subpub-qos2.py b/test/broker/02-subpub-qos2.py index 646bb7ea..2229cc4d 100755 --- a/test/broker/02-subpub-qos2.py +++ b/test/broker/02-subpub-qos2.py @@ -4,8 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(port, proto_ver): mid = 530 connect_packet = mqtt_packets.gen_connect("subpub-qos2-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -25,45 +24,20 @@ def do_test(start_broker, proto_ver): pubrel_packet2 = mqtt_packets.gen_pubrel(mid, proto_ver=proto_ver) pubcomp_packet2 = mqtt_packets.gen_pubcomp(mid, proto_ver=proto_ver) + 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") + sock.send(pubrel_packet) + mosq_test.receive_unordered(sock, pubcomp_packet, publish_packet2, "pubcomp/publish2") + mosq_test.do_send_receive(sock, pubrec_packet2, pubrel_packet2, "pubrel2") + sock.send(pubcomp_packet2) + # Broker side of flow complete so can quit here. + sock.close() - port = mosq_test.get_port() - if start_broker: - 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") - sock.send(pubrel_packet) - - mosq_test.receive_unordered(sock, pubcomp_packet, publish_packet2, "pubcomp/publish2") - - mosq_test.do_send_receive(sock, pubrec_packet2, pubrel_packet2, "pubrel2") - sock.send(pubcomp_packet2) - # Broker side of flow complete so can quit here. - rc = 0 - - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) - - -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - exit(0) if __name__ == '__main__': - all_tests(True) + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/broker/02-subpub-recover-subscriptions.py b/test/broker/02-subpub-recover-subscriptions.py index 88bcbb44..3a9cc53b 100755 --- a/test/broker/02-subpub-recover-subscriptions.py +++ b/test/broker/02-subpub-recover-subscriptions.py @@ -16,7 +16,6 @@ def publish_helper(port): def do_test(proto_ver): - rc = 1 if proto_ver == 5: props = mqtt5_props.gen_uint32_prop(mqtt5_props.SESSION_EXPIRY_INTERVAL, 60) connect_packet = mqtt_packets.gen_connect("subpub-sub-test", proto_ver=proto_ver, clean_session=False, properties=props) @@ -37,9 +36,9 @@ def do_test(proto_ver): publish2_packet = mqtt_packets.gen_publish("shared/sub", qos=0, payload="message2", proto_ver=proto_ver) port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack1_packet, timeout=2, port=port, connack_error="connack 1") mosq_test.do_send_receive(sock, subscribe1_packet, suback1_packet, "suback1") @@ -60,23 +59,6 @@ def do_test(proto_ver): mosq_test.expect_packet(sock, "publish2", publish2_packet) sock.close() - rc = 0 - - sock.close() - except mosq_test.TestError: - pass - except Exception as err: - print(err) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - - -do_test(proto_ver=4) -do_test(proto_ver=5) -exit(0) +if __name__ == '__main__': + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/02-subscribe-dollar-v5.py b/test/broker/02-subscribe-dollar-v5.py index 6969c953..60343476 100755 --- a/test/broker/02-subscribe-dollar-v5.py +++ b/test/broker/02-subscribe-dollar-v5.py @@ -4,8 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(port, proto_ver): connect_packet = mqtt_packets.gen_connect("subscribe-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -17,36 +16,15 @@ def do_test(start_broker, proto_ver): subscribe2_packet = mqtt_packets.gen_subscribe(mid, "$share/share/#", 0, proto_ver=proto_ver) suback2_packet = mqtt_packets.gen_suback(mid, 0, proto_ver=proto_ver) - port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) + mosq_test.do_send_receive(sock, subscribe1_packet, suback1_packet, "suback1") + mosq_test.do_send_receive(sock, subscribe2_packet, suback2_packet, "suback2") + sock.close() - try: - sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) - mosq_test.do_send_receive(sock, subscribe1_packet, suback1_packet, "suback1") - mosq_test.do_send_receive(sock, subscribe2_packet, suback2_packet, "suback2") - - rc = 0 - - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) - - -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - exit(0) if __name__ == '__main__': - all_tests(True) + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/broker/02-subscribe-invalid-utf8.py b/test/broker/02-subscribe-invalid-utf8.py index 910042c3..70293192 100755 --- a/test/broker/02-subscribe-invalid-utf8.py +++ b/test/broker/02-subscribe-invalid-utf8.py @@ -4,8 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(port, proto_ver): mid = 53 connect_packet = mqtt_packets.gen_connect("subscribe-invalid-utf8", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -15,44 +14,23 @@ def do_test(start_broker, proto_ver): b[13] = 0 # Topic should never have a 0x0000 subscribe_packet = struct.pack("B"*len(b), *b) - port = mosq_test.get_port() - broker = None - if start_broker: - 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) - if proto_ver == 4: - try: - mosq_test.do_send_receive(sock, subscribe_packet, b"", "suback") - except BrokenPipeError: - rc = 0 - else: - disconnect_packet = mqtt_packets.gen_disconnect(proto_ver=5, reason_code = mqtt5_rc.MALFORMED_PACKET) - mosq_test.do_send_receive(sock, subscribe_packet, disconnect_packet, "suback") - rc = 0 + sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) + if proto_ver == 4: + try: + mosq_test.do_send_receive(sock, subscribe_packet, b"", "suback") + except BrokenPipeError: + pass + else: + disconnect_packet = mqtt_packets.gen_disconnect(proto_ver=5, reason_code = mqtt5_rc.MALFORMED_PACKET) + mosq_test.do_send_receive(sock, subscribe_packet, disconnect_packet, "suback") - sock.close() - finally: - if broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - return rc + sock.close() -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4) - if rc: - return rc - rc = do_test(start_broker, proto_ver=5) - if rc: - return rc - return 0 - if __name__ == '__main__': - sys.exit(all_tests(True)) + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/broker/02-subscribe-long-topic.py b/test/broker/02-subscribe-long-topic.py index b3aa531c..77a08dcc 100755 --- a/test/broker/02-subscribe-long-topic.py +++ b/test/broker/02-subscribe-long-topic.py @@ -6,52 +6,29 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(port, proto_ver): mid = 1 connect_packet = mqtt_packets.gen_connect("subscribe-long-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) subscribe_packet = mqtt_packets.gen_subscribe(mid, "/"*65535, 0, proto_ver=proto_ver) - port = mosq_test.get_port() - broker = None - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) + if proto_ver == 4: + try: + mosq_test.do_send_receive(sock, subscribe_packet, b"", "suback") + except BrokenPipeError: + pass + else: + disconnect_packet = mqtt_packets.gen_disconnect(proto_ver=5, reason_code = mqtt5_rc.MALFORMED_PACKET) + mosq_test.do_send_receive(sock, subscribe_packet, disconnect_packet, "suback") - try: - sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) - if proto_ver == 4: - try: - mosq_test.do_send_receive(sock, subscribe_packet, b"", "suback") - except BrokenPipeError: - rc = 0 - else: - disconnect_packet = mqtt_packets.gen_disconnect(proto_ver=5, reason_code = mqtt5_rc.MALFORMED_PACKET) - mosq_test.do_send_receive(sock, subscribe_packet, disconnect_packet, "suback") - rc = 0 + sock.close() - sock.close() - finally: - if broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - return rc - - -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4) - if rc: - return rc - rc = do_test(start_broker, proto_ver=5) - if rc: - return rc - return 0 if __name__ == '__main__': - sys.exit(all_tests(True)) + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/broker/02-subscribe-persistence-flipflop.py b/test/broker/02-subscribe-persistence-flipflop.py index 91e9f01c..e7551ba5 100755 --- a/test/broker/02-subscribe-persistence-flipflop.py +++ b/test/broker/02-subscribe-persistence-flipflop.py @@ -24,8 +24,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): connect_packet_sub_persistent = mqtt_packets.gen_connect("flipflop-test", clean_session=False, proto_ver=proto_ver) connect_packet_sub_clean = mqtt_packets.gen_connect("flipflop-test", clean_session=True, proto_ver=proto_ver) connack_packet_sub = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -43,10 +42,9 @@ def do_test(start_broker, proto_ver): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: # mosquitto_sub -i sub -t 'topic' -q 1 -d -c sub_sock = mosq_test.do_client_connect(connect_packet_sub_persistent, connack_packet_sub, port=port) mosq_test.do_send_receive(sub_sock, subscribe_packet, suback_packet, "subscribe persistent 1") @@ -70,31 +68,12 @@ def do_test(start_broker, proto_ver): mosq_test.do_send_receive(pub_sock, publish_packet, puback_packet, "publish") mosq_test.expect_packet(sub_sock, "publish receive", publish_packet) - rc = 0 - sub_sock.close() sub_sock = mosq_test.do_client_connect(connect_packet_sub_clean, connack_packet_sub, port=port) sub_sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - exit(0) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/03-pattern-matching.py b/test/broker/03-pattern-matching.py index 4f42b37e..8428656b 100755 --- a/test/broker/03-pattern-matching.py +++ b/test/broker/03-pattern-matching.py @@ -14,7 +14,6 @@ def helper(port, pub_topic): def pattern_test(sub_topic, pub_topic): - rc = 1 connect_packet = mqtt_packets.gen_connect("pattern-sub-test") connack_packet = mqtt_packets.gen_connack(rc=0) @@ -30,9 +29,9 @@ def pattern_test(sub_topic, pub_topic): unsuback_packet = mqtt_packets.gen_unsuback(mid) port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: 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") @@ -42,21 +41,8 @@ def pattern_test(sub_topic, pub_topic): mosq_test.do_send_receive(sock, unsubscribe_packet, unsuback_packet, "unsuback") mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") mosq_test.expect_packet(sock, "publish retained", publish_retained_packet) - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - sys.exit(rc) - return rc pattern_test("#", "test/topic") pattern_test("#", "/test/topic") @@ -82,6 +68,3 @@ pattern_test("foo/+/baz/#", "foo//baz/bar") pattern_test("foo//baz/#", "foo//baz/bar") pattern_test("foo/foo/baz/#", "foo/foo/baz/bar") pattern_test("/#", "////foo///bar") - -exit(0) - diff --git a/test/broker/03-publish-b2c-disconnect-qos1.py b/test/broker/03-publish-b2c-disconnect-qos1.py index 7bd9fa97..4295cd0e 100755 --- a/test/broker/03-publish-b2c-disconnect-qos1.py +++ b/test/broker/03-publish-b2c-disconnect-qos1.py @@ -16,7 +16,7 @@ def helper(port): sock.close() -def do_test(start_broker, proto_ver): +def do_test(proto_ver): port = mosq_test.get_port() rc = 1 @@ -38,10 +38,8 @@ def do_test(start_broker, proto_ver): publish2_packet = mqtt_packets.gen_publish("03/b2c/qos1/outgoing", qos=1, mid=mid, payload="outgoing-message", proto_ver=proto_ver) puback2_packet = mqtt_packets.gen_puback(mid, proto_ver=proto_ver) - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack1_packet, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") @@ -58,32 +56,13 @@ def do_test(start_broker, proto_ver): sock = mosq_test.do_client_connect(connect_packet, connack2_packet, port=port) mosq_test.expect_packet(sock, "dup publish", publish_dup_packet) sock.send(puback_packet) - rc = 0 - sock.close() # clear session sock = mosq_test.do_client_connect(connect_packet_clear, connack1_packet, port=port) sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - exit(0) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/03-publish-b2c-disconnect-qos2.py b/test/broker/03-publish-b2c-disconnect-qos2.py index 0a4c6fdd..ab6b6972 100755 --- a/test/broker/03-publish-b2c-disconnect-qos2.py +++ b/test/broker/03-publish-b2c-disconnect-qos2.py @@ -23,8 +23,7 @@ def helper(port): sock.close() -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): mid = 3265 connect_packet = mqtt_packets.gen_connect("03-b2c-disco-qos2-test", clean_session=False, proto_ver=proto_ver, session_expiry=60) connack1_packet = mqtt_packets.gen_connack(flags=0, rc=0, proto_ver=proto_ver) @@ -46,10 +45,8 @@ def do_test(start_broker, proto_ver): puback2_packet = mqtt_packets.gen_puback(mid, proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack1_packet, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") @@ -72,31 +69,13 @@ def do_test(start_broker, proto_ver): sock = mosq_test.do_client_connect(connect_packet, connack2_packet, port=port) mosq_test.expect_packet(sock, "dup pubrel", pubrel_packet) sock.send(pubcomp_packet) - rc = 0 sock.close() # Clear session sock = mosq_test.do_client_connect(connect_packet_clear, connack1_packet, port=port) sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - exit(0) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/03-publish-b2c-qos1-len.py b/test/broker/03-publish-b2c-qos1-len.py index 6020742d..ecf14d46 100755 --- a/test/broker/03-publish-b2c-qos1-len.py +++ b/test/broker/03-publish-b2c-qos1-len.py @@ -16,8 +16,7 @@ def helper(port): sock.close() -def do_test(start_broker, test, puback_packet): - rc = 1 +def do_test(test, puback_packet): mid = 3265 connect_packet = mqtt_packets.gen_connect("03-b2c-qos1-len", clean_session=False, proto_ver=5) connack_packet = mqtt_packets.gen_connack(flags=0, rc=0, proto_ver=5) @@ -29,10 +28,8 @@ def do_test(start_broker, test, puback_packet): publish_packet = mqtt_packets.gen_publish("03/b2c/qos1/len/test", qos=1, mid=mid, payload="len-message", proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") @@ -44,43 +41,23 @@ def do_test(start_broker, test, puback_packet): sock.send(puback_packet) mosq_test.do_ping(sock) - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print(test) - if rc: - exit(rc) -def all_tests(start_broker=False): +if __name__ == '__main__': # No reason code, no properties puback_packet = mqtt_packets.gen_puback(1) - do_test(start_broker, "qos1 len 2", puback_packet) + do_test("qos1 len 2", puback_packet) # Reason code, no properties puback_packet = mqtt_packets.gen_puback(1, proto_ver=5, reason_code=0x00) - do_test(start_broker, "qos1 len 3", puback_packet) + do_test("qos1 len 3", puback_packet) # Reason code, empty properties puback_packet = mqtt_packets.gen_puback(1, proto_ver=5, reason_code=0x00, properties="") - do_test(start_broker, "qos1 len 4", puback_packet) + do_test("qos1 len 4", puback_packet) # Reason code, one property props = mqtt5_props.gen_string_pair_prop(mqtt5_props.USER_PROPERTY, "key", "value") puback_packet = mqtt_packets.gen_puback(1, proto_ver=5, reason_code=0x00, properties=props) - do_test(start_broker, "qos1 len >5", puback_packet) - -if __name__ == '__main__': - all_tests(True) - - + do_test("qos1 len >5", puback_packet) diff --git a/test/broker/03-publish-b2c-qos2-len.py b/test/broker/03-publish-b2c-qos2-len.py index 3a0b9892..0db57333 100755 --- a/test/broker/03-publish-b2c-qos2-len.py +++ b/test/broker/03-publish-b2c-qos2-len.py @@ -22,8 +22,7 @@ def helper(port): sock.close() -def do_test(start_broker, test, pubrec_packet, pubcomp_packet): - rc = 1 +def do_test(test, pubrec_packet, pubcomp_packet): mid = 3265 connect_packet = mqtt_packets.gen_connect("03-b2c-qos2-len-test", clean_session=False, proto_ver=5) connack_packet = mqtt_packets.gen_connack(flags=0, rc=0, proto_ver=5) @@ -36,10 +35,9 @@ def do_test(start_broker, test, pubrec_packet, pubcomp_packet): pubrel_packet = mqtt_packets.gen_pubrel(mid) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") @@ -52,46 +50,28 @@ def do_test(start_broker, test, pubrec_packet, pubcomp_packet): sock.send(pubcomp_packet) mosq_test.do_ping(sock) - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print(test) - if rc: - exit(rc) -def all_tests(start_broker=False): +if __name__ == '__main__': # No reason code, no properties pubrec_packet = mqtt_packets.gen_pubrec(1) pubcomp_packet = mqtt_packets.gen_pubcomp(1) - do_test(start_broker, "qos2 len 2", pubrec_packet, pubcomp_packet) + do_test("qos2 len 2", pubrec_packet, pubcomp_packet) # Reason code, no properties pubrec_packet = mqtt_packets.gen_pubrec(1, proto_ver=5, reason_code=0x00) pubcomp_packet = mqtt_packets.gen_pubcomp(1, proto_ver=5, reason_code=0x00) - do_test(start_broker, "qos2 len 3", pubrec_packet, pubcomp_packet) + do_test("qos2 len 3", pubrec_packet, pubcomp_packet) # Reason code, empty properties pubrec_packet = mqtt_packets.gen_pubrec(1, proto_ver=5, reason_code=0x00, properties="") pubcomp_packet = mqtt_packets.gen_pubcomp(1, proto_ver=5, reason_code=0x00, properties="") - do_test(start_broker, "qos2 len 4", pubrec_packet, pubcomp_packet) + do_test("qos2 len 4", pubrec_packet, pubcomp_packet) # Reason code, one property props = mqtt5_props.gen_string_pair_prop(mqtt5_props.USER_PROPERTY, "key", "value") pubrec_packet = mqtt_packets.gen_pubrec(1, proto_ver=5, reason_code=0x00, properties=props) props = mqtt5_props.gen_string_pair_prop(mqtt5_props.USER_PROPERTY, "key", "value") pubcomp_packet = mqtt_packets.gen_pubcomp(1, proto_ver=5, reason_code=0x00, properties=props) - do_test(start_broker, "qos2 len >5", pubrec_packet, pubcomp_packet) - -if __name__ == '__main__': - all_tests(True) + do_test("qos2 len >5", pubrec_packet, pubcomp_packet) diff --git a/test/broker/03-publish-c2b-disconnect-qos2.py b/test/broker/03-publish-c2b-disconnect-qos2.py index 9f7bdddb..a38437c6 100755 --- a/test/broker/03-publish-c2b-disconnect-qos2.py +++ b/test/broker/03-publish-c2b-disconnect-qos2.py @@ -3,8 +3,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): mid = 3265 connect_packet = mqtt_packets.gen_connect("03-c2b-qos2-disco-test", clean_session=False, proto_ver=proto_ver, session_expiry=60) connack1_packet = mqtt_packets.gen_connack(flags=0, rc=0, proto_ver=proto_ver) @@ -32,10 +31,9 @@ def do_test(start_broker, proto_ver): pubcomp_packet = mqtt_packets.gen_pubcomp(mid, proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: # Add a subscriber, so we ensure that the QoS 2 flow must be completed helper = mosq_test.do_client_connect(helper_connect_packet, helper_connack_packet, port=port) mosq_test.do_send_receive(helper, subscribe_packet, suback_packet) @@ -58,34 +56,15 @@ def do_test(start_broker, proto_ver): sock = mosq_test.do_client_connect(connect_packet, connack2_packet, port=port) mosq_test.do_send_receive(sock, pubrel_dup_packet, pubcomp_packet, "pubcomp") - - rc = 0 - sock.close() helper.close() # Clear session sock = mosq_test.do_client_connect(connect_packet_clear, connack1_packet, port=port, connack_error="connack clear") sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=3) - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=3) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/03-publish-c2b-qos2-len.py b/test/broker/03-publish-c2b-qos2-len.py index 3e0be2ac..5c6b7a15 100755 --- a/test/broker/03-publish-c2b-qos2-len.py +++ b/test/broker/03-publish-c2b-qos2-len.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker, test, pubrel_packet): - rc = 1 +def do_test(test, pubrel_packet): mid = 3265 connect_packet = mqtt_packets.gen_connect("03-c2b-qos2-len", clean_session=False, proto_ver=5) connack_packet = mqtt_packets.gen_connack(flags=0, rc=0, proto_ver=5) @@ -17,51 +16,32 @@ def do_test(start_broker, test, pubrel_packet): pubcomp_packet = mqtt_packets.gen_pubcomp(mid) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, publish_packet, pubrec_packet, "pubrec") mosq_test.do_send_receive(sock, pubrel_packet, pubcomp_packet, "pubcomp") mosq_test.do_ping(sock) - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print(test) - if rc: - exit(rc) -def all_tests(start_broker=False): +if __name__ == '__main__': # No reason code, no properties pubrel_packet = mqtt_packets.gen_pubrel(1) - do_test(start_broker, "qos2 len 2", pubrel_packet) + do_test("qos2 len 2", pubrel_packet) # Reason code, no properties pubrel_packet = mqtt_packets.gen_pubrel(1, proto_ver=5, reason_code=0x00) - do_test(start_broker, "qos2 len 3", pubrel_packet) + do_test("qos2 len 3", pubrel_packet) # Reason code, empty properties pubrel_packet = mqtt_packets.gen_pubrel(1, proto_ver=5, reason_code=0x00, properties="") - do_test(start_broker, "qos2 len 4", pubrel_packet) + do_test("qos2 len 4", pubrel_packet) # Reason code, one property props = mqtt5_props.gen_string_pair_prop(mqtt5_props.USER_PROPERTY, "key", "value") pubrel_packet = mqtt_packets.gen_pubrel(1, proto_ver=5, reason_code=0x00, properties=props) - do_test(start_broker, "qos2 len >5", pubrel_packet) - -if __name__ == '__main__': - all_tests(True) + do_test("qos2 len >5", pubrel_packet) diff --git a/test/broker/03-publish-dollar-v5.py b/test/broker/03-publish-dollar-v5.py index d6d86740..f67d4de2 100755 --- a/test/broker/03-publish-dollar-v5.py +++ b/test/broker/03-publish-dollar-v5.py @@ -22,36 +22,16 @@ def helper(port, topic, reason_code): mid += 1 -def do_test(start_broker): - rc = 1 - +def do_test(): port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: helper(port, "$SYS/broker/uptime", mqtt5_rc.NOT_AUTHORIZED) helper(port, "$SYS/broker/connection/me", mqtt5_rc.NOT_AUTHORIZED) helper(port, "$SYS/broker/connection/me/state", mqtt5_rc.NO_MATCHING_SUBSCRIBERS) helper(port, "$share/share/03/publish/dollar/v5/topic", mqtt5_rc.NOT_AUTHORIZED) - rc = 0 - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) - - -def all_tests(start_broker=False): - do_test(start_broker) if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/03-publish-dollar.py b/test/broker/03-publish-dollar.py index 77724ddc..a74497d5 100755 --- a/test/broker/03-publish-dollar.py +++ b/test/broker/03-publish-dollar.py @@ -4,8 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): mid = 19 connect_packet = mqtt_packets.gen_connect("pub-dollar-test") connack_packet = mqtt_packets.gen_connack(rc=0) @@ -14,32 +13,12 @@ def do_test(start_broker): puback_packet = mqtt_packets.gen_puback(mid) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, publish_packet, puback_packet, "puback") - - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/03-publish-invalid-utf8.py b/test/broker/03-publish-invalid-utf8.py index 573199f6..c90897fd 100755 --- a/test/broker/03-publish-invalid-utf8.py +++ b/test/broker/03-publish-invalid-utf8.py @@ -4,7 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): +def do_test(proto_ver): rc = 1 mid = 53 connect_packet = mqtt_packets.gen_connect("03-publish-invalid-utf8", proto_ver=proto_ver) @@ -16,11 +16,8 @@ def do_test(start_broker, proto_ver): publish_packet = struct.pack("B"*len(b), *b) port = mosq_test.get_port() - broker = None - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) if proto_ver == 4: try: @@ -33,26 +30,9 @@ def do_test(start_broker, proto_ver): rc = 0 sock.close() - finally: - if broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - return rc + assert rc == 0 -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4) - if rc: - return rc - rc = do_test(start_broker, proto_ver=5) - if rc: - return rc - return 0 - if __name__ == '__main__': - sys.exit(all_tests(True)) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/03-publish-long-topic.py b/test/broker/03-publish-long-topic.py index fc0b35db..6a85a7ee 100755 --- a/test/broker/03-publish-long-topic.py +++ b/test/broker/03-publish-long-topic.py @@ -7,7 +7,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): +def do_test(proto_ver): rc = 1 mid = 19 connect_packet = mqtt_packets.gen_connect("03-pub-long-test", proto_ver=proto_ver) @@ -16,11 +16,9 @@ def do_test(start_broker, proto_ver): publish_packet = mqtt_packets.gen_publish("/"*65535, qos=1, mid=mid, payload="message", proto_ver=proto_ver) port = mosq_test.get_port() - broker = None - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) if proto_ver == 4: try: @@ -33,26 +31,9 @@ def do_test(start_broker, proto_ver): rc = 0 sock.close() - finally: - if broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - return rc + assert rc == 0 -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4) - if rc: - return rc - rc = do_test(start_broker, proto_ver=5) - if rc: - return rc - return 0 - if __name__ == '__main__': - sys.exit(all_tests(True)) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/03-publish-qos1-no-subscribers-v5.py b/test/broker/03-publish-qos1-no-subscribers-v5.py index 0454f3df..a759d06d 100755 --- a/test/broker/03-publish-qos1-no-subscribers-v5.py +++ b/test/broker/03-publish-qos1-no-subscribers-v5.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): connect_packet = mqtt_packets.gen_connect("03-pub-qos1-no-subs", proto_ver=5) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -39,10 +38,8 @@ def do_test(start_broker): puback3b_packet = mqtt_packets.gen_puback(mid, proto_ver=5, reason_code=mqtt5_rc.NO_MATCHING_SUBSCRIBERS) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) # None of the pub/qos1/test topic tree exists here @@ -57,25 +54,8 @@ def do_test(start_broker): mosq_test.do_send_receive(sock, publish1b_packet, puback1b_packet, "puback1b") mosq_test.do_send_receive(sock, publish2b_packet, puback2b_packet, "puback2b") mosq_test.do_send_receive(sock, publish3b_packet, puback3b_packet, "puback3b") - - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/03-publish-qos1-queued-bytes.py b/test/broker/03-publish-qos1-queued-bytes.py index 3ca9b635..652cd1a2 100755 --- a/test/broker/03-publish-qos1-queued-bytes.py +++ b/test/broker/03-publish-qos1-queued-bytes.py @@ -32,7 +32,7 @@ def registerOfflineSubscriber(): client.disconnect() -broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) +broker = MosquittoBroker(port=port) class BrokerMonitor(threading.Thread): def __init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None): diff --git a/test/broker/03-publish-qos1.py b/test/broker/03-publish-qos1.py index 256b2f03..d25c9c52 100755 --- a/test/broker/03-publish-qos1.py +++ b/test/broker/03-publish-qos1.py @@ -4,8 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): mid = 19 connect_packet = mqtt_packets.gen_connect("03-pub-qos1-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -17,35 +16,13 @@ def do_test(start_broker, proto_ver): puback_packet = mqtt_packets.gen_puback(mid, proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, publish_packet, puback_packet, "puback") - - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) - - -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/03-publish-qos2-dup.py b/test/broker/03-publish-qos2-dup.py index 7ff11f52..2089a0f1 100755 --- a/test/broker/03-publish-qos2-dup.py +++ b/test/broker/03-publish-qos2-dup.py @@ -3,7 +3,6 @@ from mosq_test_helper import * def do_test(proto_ver): - rc = 1 connect_packet = mqtt_packets.gen_connect("03-pub-qos2-dup-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -14,44 +13,23 @@ def do_test(proto_ver): disconnect_packet = mqtt_packets.gen_disconnect(reason_code=130, proto_ver=proto_ver) port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, publish_packet, pubrec_packet, "pubrec 1") mosq_test.do_send_receive(sock, publish_packet, pubrec_packet, "pubrec 2") if proto_ver == 5: mosq_test.do_send_receive(sock, publish_packet, disconnect_packet, "disconnect") - rc = 0 else: try: mosq_test.do_send_receive(sock, publish_packet, b"", "disconnect1") - rc = 0 except BrokenPipeError: - rc = 0 + pass sock.close() - except Exception as e: - print(e) - except mosq_test.TestError: - pass - finally: - mosq_test.terminate_broker(broker) - broker.wait() - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - exit(rc) -def all_tests(): - rc = do_test(proto_ver=4) - if rc: - return rc; - rc = do_test(proto_ver=5) - if rc: - return rc; - return 0 - if __name__ == '__main__': - all_tests() + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/03-publish-qos2-max-inflight-exceeded.py b/test/broker/03-publish-qos2-max-inflight-exceeded.py index afe23a1b..048121e3 100755 --- a/test/broker/03-publish-qos2-max-inflight-exceeded.py +++ b/test/broker/03-publish-qos2-max-inflight-exceeded.py @@ -7,13 +7,12 @@ from mosq_test_helper import * def do_test(proto_ver): port = mosq_test.get_port() - rc = 1 connect_packet = mqtt_packets.gen_connect("pub-qos2-inflight-exceeded", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port, timeout=10) for i in range(1, 21): @@ -31,27 +30,9 @@ def do_test(proto_ver): mosq_test.do_send_receive(sock, publish_packet, disconnect_packet, "disconnect") except BrokenPipeError: pass - - rc = 0 - sock.close() - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - return rc -def all_test(): - rc = do_test(proto_ver=4) - if rc: - return rc - rc = do_test(proto_ver=5) - return rc - if __name__ == "__main__": - sys.exit(all_test()) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/03-publish-qos2-reuse-mid.py b/test/broker/03-publish-qos2-reuse-mid.py index 30ecd575..986b5d06 100755 --- a/test/broker/03-publish-qos2-reuse-mid.py +++ b/test/broker/03-publish-qos2-reuse-mid.py @@ -5,7 +5,6 @@ from mosq_test_helper import * def do_test(proto_ver): - rc = 1 connect_packet = mqtt_packets.gen_connect("pub-qos2-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -27,9 +26,8 @@ def do_test(proto_ver): publish_packet_expected = mqtt_packets.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: + broker = MosquittoBroker(port=port) + with broker: 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") @@ -39,23 +37,9 @@ def do_test(proto_ver): 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: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - exit(rc) -do_test(proto_ver=4) -do_test(proto_ver=5) -exit(0) +if __name__ == '__main__': + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/03-publish-qos2.py b/test/broker/03-publish-qos2.py index a9209d35..cd87208e 100755 --- a/test/broker/03-publish-qos2.py +++ b/test/broker/03-publish-qos2.py @@ -4,8 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(port, proto_ver): connect_packet = mqtt_packets.gen_connect("03-pub-qos2-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -15,36 +14,16 @@ def do_test(start_broker, proto_ver): pubrel_packet = mqtt_packets.gen_pubrel(mid, proto_ver=proto_ver) pubcomp_packet = mqtt_packets.gen_pubcomp(mid, proto_ver=proto_ver) - port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) + mosq_test.do_send_receive(sock, publish_packet, pubrec_packet, "pubrec") + mosq_test.do_send_receive(sock, pubrel_packet, pubcomp_packet, "pubcomp") + sock.close() - try: - sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) - mosq_test.do_send_receive(sock, publish_packet, pubrec_packet, "pubrec") - mosq_test.do_send_receive(sock, pubrel_packet, pubcomp_packet, "pubcomp") - - rc = 0 - - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) - - -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) if __name__ == '__main__': - all_tests(True) + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + + with broker: + do_test(port=port, proto_ver=4) + do_test(port=port, proto_ver=5) diff --git a/test/broker/04-retain-clear-multiple.py b/test/broker/04-retain-clear-multiple.py index c12572a1..ee55e80f 100755 --- a/test/broker/04-retain-clear-multiple.py +++ b/test/broker/04-retain-clear-multiple.py @@ -16,7 +16,6 @@ def send_retain(port, topic, payload): sock.close() def do_test(): - rc = 1 connect_packet = mqtt_packets.gen_connect("retain-clear-test") connack_packet = mqtt_packets.gen_connack(rc=0) @@ -28,9 +27,8 @@ def do_test(): retain3_packet = mqtt_packets.gen_publish("1", qos=0, payload="retained message", retain=True) port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: send_retain(port, "1/2/3/4/5/6/7", "retained message") send_retain(port, "1/2/3/4", "retained message") send_retain(port, "1", "retained message") @@ -64,16 +62,6 @@ def do_test(): mosq_test.do_ping(sock) sock.close() - rc = 0 - except mosq_test.TestError: - pass - finally: - mosq_test.terminate_broker(broker) - broker.wait() - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - -do_test() -exit(0) +if __name__ == '__main__': + do_test() diff --git a/test/broker/04-retain-qos0-clear.py b/test/broker/04-retain-qos0-clear.py index 85190837..53a583eb 100755 --- a/test/broker/04-retain-qos0-clear.py +++ b/test/broker/04-retain-qos0-clear.py @@ -6,8 +6,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): connect_packet = mqtt_packets.gen_connect("retain-qos0-clear-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -22,10 +21,8 @@ def do_test(start_broker, proto_ver): unsuback_packet = mqtt_packets.gen_unsuback(mid_unsub, proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=4, port=port) # Send retained message sock.send(publish_packet) @@ -47,28 +44,9 @@ def do_test(start_broker, proto_ver): # If we do get something back, it should be before this ping, so if # this succeeds then we're ok. mosq_test.do_ping(sock) - # This is the expected event - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/04-retain-qos0-fresh.py b/test/broker/04-retain-qos0-fresh.py index 374b12ab..a82f4f8a 100755 --- a/test/broker/04-retain-qos0-fresh.py +++ b/test/broker/04-retain-qos0-fresh.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): mid = 16 connect_packet = mqtt_packets.gen_connect("retain-qos0-fresh", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -18,36 +17,15 @@ def do_test(start_broker, proto_ver): publish_packet_clear = mqtt_packets.gen_publish("retain/qos0/fresh", qos=0, payload=None, retain=True, proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") mosq_test.do_send_receive(sock, publish_packet, publish_fresh_packet, "publish") sock.send(publish_packet_clear) - - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/04-retain-qos0-repeated.py b/test/broker/04-retain-qos0-repeated.py index a5927631..168351f2 100755 --- a/test/broker/04-retain-qos0-repeated.py +++ b/test/broker/04-retain-qos0-repeated.py @@ -6,8 +6,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): mid = 16 connect_packet = mqtt_packets.gen_connect("retain-qos0-rep-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -21,10 +20,9 @@ def do_test(start_broker, proto_ver): unsuback_packet = mqtt_packets.gen_unsuback(unsub_mid, proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=20, port=port) sock.send(publish_packet) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") @@ -34,27 +32,9 @@ def do_test(start_broker, proto_ver): mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") mosq_test.expect_packet(sock, "publish", publish_packet) - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/04-retain-qos0.py b/test/broker/04-retain-qos0.py index 68cb8371..fe956be9 100755 --- a/test/broker/04-retain-qos0.py +++ b/test/broker/04-retain-qos0.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): mid = 16 connect_packet = mqtt_packets.gen_connect("retain-qos0-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -16,36 +15,15 @@ def do_test(start_broker, proto_ver): suback_packet = mqtt_packets.gen_suback(mid, 0, proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) sock.send(publish_packet) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") - mosq_test.expect_packet(sock, "publish", publish_packet) - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/04-retain-qos1-qos0.py b/test/broker/04-retain-qos1-qos0.py index 10f81b4d..d2fc4dfb 100755 --- a/test/broker/04-retain-qos1-qos0.py +++ b/test/broker/04-retain-qos1-qos0.py @@ -6,8 +6,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): connect_packet = mqtt_packets.gen_connect("retain-qos1-qos0-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -24,36 +23,15 @@ def do_test(start_broker, proto_ver): publish0_packet = mqtt_packets.gen_publish("retain/qos1/qos0/test", qos=0, payload="retained message", retain=True, proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, publish_packet, puback_packet, "puback") mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") - mosq_test.expect_packet(sock, "publish0", publish0_packet) - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/05-clean-session-qos1.py b/test/broker/05-clean-session-qos1.py index 9b1c4663..b6e91539 100755 --- a/test/broker/05-clean-session-qos1.py +++ b/test/broker/05-clean-session-qos1.py @@ -18,8 +18,7 @@ def helper(port): sock.close() -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): mid = 109 connect_packet = mqtt_packets.gen_connect("05-clean-session", clean_session=False, proto_ver=proto_ver, session_expiry=60) connack1_packet = mqtt_packets.gen_connack(flags=0, rc=0, proto_ver=proto_ver) @@ -37,10 +36,8 @@ def do_test(start_broker, proto_ver): connect_packet_clear = mqtt_packets.gen_connect("05-clean-session", clean_session=True, proto_ver=proto_ver, session_expiry=0) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack1_packet, port=port, connack_error="connack 1") mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") @@ -53,31 +50,13 @@ def do_test(start_broker, proto_ver): sock = mosq_test.do_client_connect(connect_packet, connack2_packet, timeout=30, port=port, connack_error="connack 2") mosq_test.expect_packet(sock, "publish", publish_packet) sock.send(puback_packet) - rc = 0 - sock.close() # Clear the session sock = mosq_test.do_client_connect(connect_packet_clear, connack1_packet, port=port, connack_error="connack clear") sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - if rc: - exit(rc) -def all_tests(start_broker=False): - do_test(start_broker, proto_ver=4) - do_test(start_broker, proto_ver=5) - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/05-session-expiry-v5.py b/test/broker/05-session-expiry-v5.py index abd040bc..3a7c55fd 100755 --- a/test/broker/05-session-expiry-v5.py +++ b/test/broker/05-session-expiry-v5.py @@ -4,9 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 - +def do_test(): # This client exists to test possible fixed size int overflow and sorting of the session intervals # https://github.com/eclipse/mosquitto/issues/1525 props = mqtt5_props.gen_uint32_prop(mqtt5_props.SESSION_EXPIRY_INTERVAL, 4294967294) @@ -27,10 +25,9 @@ def do_test(start_broker): disconnect2_packet = mqtt_packets.gen_disconnect(proto_ver=5, properties=props) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: # Connect client with wildly different session expiry, this should impact # on the test if all is well sock0 = mosq_test.do_client_connect(connect0_packet, connack0_packet, port=port, connack_error="connack 0") @@ -87,25 +84,7 @@ def do_test(start_broker): # Immediate reconnect, session should have been removed. sock = mosq_test.do_client_connect(connect_packet, connack1_packet, port=port, connack_error="connack 7") sock.close() - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - if rc: - exit(rc) - - -def all_tests(start_broker=False): - do_test(start_broker) if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/06-bridge-no-local.py b/test/broker/06-bridge-no-local.py index bbffa699..feef2ed8 100755 --- a/test/broker/06-bridge-no-local.py +++ b/test/broker/06-bridge-no-local.py @@ -7,8 +7,7 @@ from mosq_test_helper import * mosq_test.require_features(["INC_BRIDGE_SUPPORT"]) -def do_test(start_broker, proto_ver_connect, proto_ver_msgs, sub_opts): - rc = 1 +def do_test(proto_ver_connect, proto_ver_msgs, sub_opts): connect_packet = mqtt_packets.gen_connect("bridge-test", proto_ver=proto_ver_connect) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver_msgs) @@ -19,45 +18,16 @@ def do_test(start_broker, proto_ver_connect, proto_ver_msgs, sub_opts): publish_packet = mqtt_packets.gen_publish("loop/test", qos=0, payload="message", proto_ver=proto_ver_msgs) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: 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") - sock.send(publish_packet) mosq_test.do_ping(sock) - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - rc = do_test(start_broker, 128+3, 3, 0) - if rc: - return rc; - rc = do_test(start_broker, 128+4, 4, 0) - if rc: - return rc; - rc = do_test(start_broker, 5, 5, mqtt5_opts.MQTT_SUB_OPT_NO_LOCAL) - if rc: - return rc; - return 0 - if __name__ == '__main__': - all_tests(True) + do_test(128+3, 3, 0) + do_test(128+4, 4, 0) + do_test(5, 5, mqtt5_opts.MQTT_SUB_OPT_NO_LOCAL) diff --git a/test/broker/07-will-control.py b/test/broker/07-will-control.py index f36e0e25..7308ca0b 100755 --- a/test/broker/07-will-control.py +++ b/test/broker/07-will-control.py @@ -5,46 +5,21 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): mid = 1 connect_packet = mqtt_packets.gen_connect("will", will_topic="$CONTROL/dynamic-security/v1", will_payload=b"will-message", proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.client_connect_only(port=port) sock.send(connect_packet) d = sock.recv(1) - if d == b"": - rc = 0 - + if d != b"": + raise ValueError(d) sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - if start_broker: - mosq_test.terminate_broker(broker) - broker.wait() - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4) - if rc: - return rc; - rc = do_test(start_broker, proto_ver=5) - if rc: - return rc; - return 0 - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/07-will-delay-invalid-573191.py b/test/broker/07-will-delay-invalid-573191.py index a76c1bd5..215c374c 100755 --- a/test/broker/07-will-delay-invalid-573191.py +++ b/test/broker/07-will-delay-invalid-573191.py @@ -6,27 +6,21 @@ from mosq_test_helper import * def do_test(): - rc = 1 - props = mqtt5_props.gen_uint32_prop(mqtt5_props.WILL_DELAY_INTERVAL, 3) connect_packet = mqtt_packets.gen_connect("will-573191-test", proto_ver=5, will_topic="", will_properties=props) connack_packet = mqtt_packets.gen_connack(rc=mqtt5_rc.PROTOCOL_ERROR, proto_ver=5) port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) + with broker: + rc = 1 + try: + sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=30, port=port) + sock.close() + except BrokenPipeError: + rc = 0 + assert rc == 0 - try: - sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=30, port=port) - sock.close() - except BrokenPipeError: - rc = 0 - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - return rc -sys.exit(do_test()) +if __name__ == '__main__': + do_test() diff --git a/test/broker/07-will-delay-reconnect.py b/test/broker/07-will-delay-reconnect.py index 457688f9..4a4e1472 100755 --- a/test/broker/07-will-delay-reconnect.py +++ b/test/broker/07-will-delay-reconnect.py @@ -7,9 +7,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 - +def do_test(): mid = 1 connect1_packet = mqtt_packets.gen_connect("will-delay-reconnect-test", proto_ver=5) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -26,10 +24,8 @@ def do_test(start_broker): suback_packet = mqtt_packets.gen_suback(mid, 0, proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=30, port=port) mosq_test.do_send_receive(sock1, subscribe_packet, suback_packet, "suback") @@ -46,27 +42,8 @@ def do_test(start_broker): sock2.close() mosq_test.do_ping(sock1) - rc = 0 - sock1.close() - sock2.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/07-will-delay-recover.py b/test/broker/07-will-delay-recover.py index bd2128d0..c5cd6987 100755 --- a/test/broker/07-will-delay-recover.py +++ b/test/broker/07-will-delay-recover.py @@ -6,9 +6,7 @@ from mosq_test_helper import * -def do_test(start_broker, clean_session): - rc = 1 - +def do_test(clean_session): mid = 1 connect1_packet = mqtt_packets.gen_connect("will-delay-recovery", proto_ver=5) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -30,10 +28,8 @@ def do_test(start_broker, clean_session): will_packet = mqtt_packets.gen_publish(topic="will/delay/recovery/test", payload="will delay", qos=0, proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=30, port=port) mosq_test.do_send_receive(sock1, subscribe_packet, suback_packet, "suback") @@ -52,36 +48,14 @@ def do_test(start_broker, clean_session): else: # We should not have received the will at this point. mosq_test.do_ping(sock1) - rc = 0 sock1.close() sock2.close() sock2 = mosq_test.do_client_connect(connect2_packet_clear, connack1_packet, timeout=30, port=port) sock2.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - rc = do_test(start_broker, clean_session=True) - if rc: - return rc - rc = do_test(start_broker, clean_session=False) - if rc: - return rc - return 0 - if __name__ == '__main__': - all_tests(True) + do_test(clean_session=True) + do_test(clean_session=False) diff --git a/test/broker/07-will-delay-session-expiry-0.py b/test/broker/07-will-delay-session-expiry-0.py index b28782de..c5d737fa 100755 --- a/test/broker/07-will-delay-session-expiry-0.py +++ b/test/broker/07-will-delay-session-expiry-0.py @@ -7,9 +7,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 - +def do_test(): mid = 1 connect1_packet = mqtt_packets.gen_connect("will-session-exp", proto_ver=5) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -26,10 +24,8 @@ def do_test(start_broker): publish_packet = mqtt_packets.gen_publish("will/session-expiry/test", qos=0, payload="will delay", proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=5, port=port, connack_error="connack1") mosq_test.do_send_receive(sock1, subscribe_packet, suback_packet, "suback") @@ -39,26 +35,8 @@ def do_test(start_broker): # Will should be sent immediately due to session-expiry-interval=0. If not, the read will timeout mosq_test.expect_packet(sock1, "publish", publish_packet) - rc = 0 - sock1.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/07-will-delay-session-expiry.py b/test/broker/07-will-delay-session-expiry.py index 68fc5bbc..e6028d1b 100755 --- a/test/broker/07-will-delay-session-expiry.py +++ b/test/broker/07-will-delay-session-expiry.py @@ -7,9 +7,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 - +def do_test(): mid = 1 connect1_packet = mqtt_packets.gen_connect("will-session-exp", proto_ver=5) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -26,10 +24,8 @@ def do_test(start_broker): publish_packet = mqtt_packets.gen_publish("will/session-expiry/test", qos=0, payload="will delay", proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=30, port=port, connack_error="connack1") mosq_test.do_send_receive(sock1, subscribe_packet, suback_packet, "suback") @@ -40,26 +36,8 @@ def do_test(start_broker): # Wait for session to expire time.sleep(3) mosq_test.expect_packet(sock1, "publish", publish_packet) - rc = 0 - sock1.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/07-will-delay-session-expiry2.py b/test/broker/07-will-delay-session-expiry2.py index 273a4826..1c0af82a 100755 --- a/test/broker/07-will-delay-session-expiry2.py +++ b/test/broker/07-will-delay-session-expiry2.py @@ -7,9 +7,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 - +def do_test(): mid = 1 connect1_packet = mqtt_packets.gen_connect("will-session-exp2", proto_ver=5) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -26,10 +24,8 @@ def do_test(start_broker): publish_packet = mqtt_packets.gen_publish("will/session/expiry2/test", qos=0, payload="will delay", proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=30, port=port, connack_error="connack1") mosq_test.do_send_receive(sock1, subscribe_packet, suback_packet, "suback") @@ -40,26 +36,8 @@ def do_test(start_broker): # Wait for session to expire time.sleep(3) mosq_test.expect_packet(sock1, "publish", publish_packet) - rc = 0 - sock1.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/07-will-delay.py b/test/broker/07-will-delay.py index 2a9232e8..340e9473 100755 --- a/test/broker/07-will-delay.py +++ b/test/broker/07-will-delay.py @@ -1,13 +1,10 @@ #!/usr/bin/env python3 - # Test whether a client will is transmitted with a delay correctly. # MQTT 5 from mosq_test_helper import * -def do_test(start_broker, clean_session): - rc = 1 - +def do_test(clean_session): mid = 1 connect1_packet = mqtt_packets.gen_connect("will-delay-test", proto_ver=5) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -23,10 +20,9 @@ def do_test(start_broker, clean_session): publish_packet = mqtt_packets.gen_publish("will/delay/test", qos=0, payload="will delay", proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=30, port=port) mosq_test.do_send_receive(sock1, subscribe_packet, suback_packet, "suback") @@ -36,33 +32,13 @@ def do_test(start_broker, clean_session): t_start = time.time() mosq_test.expect_packet(sock1, "publish", publish_packet) t_finish = time.time() + sock1.close() if t_finish - t_start > 2 and t_finish - t_start < 5: rc = 0 - - sock1.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) else: - return rc + raise ValueError(f"{t_finish - t_start}") -def all_tests(start_broker=False): - rc = do_test(start_broker, clean_session=True) - if rc: - return rc - rc = do_test(start_broker, clean_session=False) - if rc: - return rc - return 0 - if __name__ == '__main__': - all_tests(True) + do_test(clean_session=True) + do_test(clean_session=False) diff --git a/test/broker/07-will-disconnect-with-will.py b/test/broker/07-will-disconnect-with-will.py index 463b3f6b..79c6fd1c 100755 --- a/test/broker/07-will-disconnect-with-will.py +++ b/test/broker/07-will-disconnect-with-will.py @@ -5,9 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 - +def do_test(): mid = 1 connect1_packet = mqtt_packets.gen_connect("will-with-disconnect-test", proto_ver=5) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -22,10 +20,8 @@ def do_test(start_broker): publish_packet = mqtt_packets.gen_publish("will/with/disconnect/test", qos=0, payload="will delay", proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=30, port=port) mosq_test.do_send_receive(sock1, subscribe_packet, suback_packet, "suback") @@ -33,27 +29,9 @@ def do_test(start_broker): sock2.send(disconnect_packet) mosq_test.expect_packet(sock1, "publish", publish_packet) - rc = 0 - sock2.close() sock1.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/07-will-invalid-utf8.py b/test/broker/07-will-invalid-utf8.py index d8cfc45c..32970a50 100755 --- a/test/broker/07-will-invalid-utf8.py +++ b/test/broker/07-will-invalid-utf8.py @@ -4,8 +4,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): connect_packet = mqtt_packets.gen_connect("will-invalid-utf8", will_topic="will/invalid/utf8", proto_ver=proto_ver) b = list(struct.unpack("B"*len(connect_packet), connect_packet)) @@ -13,32 +12,17 @@ def do_test(start_broker, proto_ver): connect_packet = struct.pack("B"*len(b), *b) port = mosq_test.get_port() - broker = None - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) + with broker: + rc = 1 + try: + sock = mosq_test.do_client_connect(connect_packet, b"", timeout=30, port=port) + sock.close() + except BrokenPipeError: + rc = 0 + assert rc == 0 - try: - sock = mosq_test.do_client_connect(connect_packet, b"", timeout=30, port=port) - sock.close() - except BrokenPipeError: - rc = 0 - finally: - if broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - return rc - - -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4) - if rc: - return rc - return do_test(start_broker, proto_ver=5) if __name__ == '__main__': - sys.exit(all_tests(True)) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/07-will-no-flag.py b/test/broker/07-will-no-flag.py index 502ae676..ade99c03 100755 --- a/test/broker/07-will-no-flag.py +++ b/test/broker/07-will-no-flag.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): connect_packet = mqtt_packets.gen_connect("will-no-payload", will_topic="will/topic", will_qos=1, will_retain=True, proto_ver=proto_ver) b = list(struct.unpack("B"*len(connect_packet), connect_packet)) @@ -17,32 +16,17 @@ def do_test(start_broker, proto_ver): connack_packet = mqtt_packets.gen_connack(mqtt5_rc.PROTOCOL_ERROR, proto_ver=5) port = mosq_test.get_port() - broker = None - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) + with broker: + rc = 1 + try: + sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) + sock.close() + except BrokenPipeError: + rc = 0 + assert rc == 0 - try: - sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) - sock.close() - except BrokenPipeError: - rc = 0 - finally: - if broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - return rc - - -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4) - if rc: - return rc - return do_test(start_broker, proto_ver=5) if __name__ == '__main__': - sys.exit(all_tests(True)) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/07-will-null-topic.py b/test/broker/07-will-null-topic.py index 46e91bf5..70a2a84c 100755 --- a/test/broker/07-will-null-topic.py +++ b/test/broker/07-will-null-topic.py @@ -4,8 +4,7 @@ import struct from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): connect_packet = mqtt_packets.gen_connect("will-null-topic", will_topic="", will_payload=struct.pack("!4sB7s", b"will", 0, b"message"), proto_ver=proto_ver) if proto_ver == 5: @@ -14,35 +13,17 @@ def do_test(start_broker, proto_ver): connack_packet = b"" port = mosq_test.get_port() - broker = None - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) + with broker: + rc = 1 + try: + sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=30, port=port) + sock.close() + except BrokenPipeError: + rc = 0 + assert rc == 0 - try: - sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=30, port=port) - sock.close() - except BrokenPipeError: - rc = 0 - finally: - if broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - return rc - - -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4) - if rc: - return rc - rc = do_test(start_broker, proto_ver=5) - if rc: - return rc - return 0 if __name__ == '__main__': - sys.exit(all_tests(True)) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/07-will-null.py b/test/broker/07-will-null.py index 033c0ebf..10a8660f 100755 --- a/test/broker/07-will-null.py +++ b/test/broker/07-will-null.py @@ -10,8 +10,7 @@ def helper(port, proto_ver): sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) sock.close() -def do_test(start_broker, proto_ver): - rc = 1 +def do_test(proto_ver): mid = 53 connect_packet = mqtt_packets.gen_connect("07-will-null-test", proto_ver=proto_ver) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -22,43 +21,15 @@ def do_test(start_broker, proto_ver): publish_packet = mqtt_packets.gen_publish("will/null/test", qos=0, proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, timeout=30, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") - helper(port, proto_ver) - mosq_test.expect_packet(sock, "publish", publish_packet) - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4) - if rc: - return rc; - rc = do_test(start_broker, proto_ver=5) - if rc: - return rc; - return 0 - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/07-will-properties.py b/test/broker/07-will-properties.py index 32a7b609..36a9d6f8 100755 --- a/test/broker/07-will-properties.py +++ b/test/broker/07-will-properties.py @@ -8,9 +8,7 @@ from mosq_test_helper import * -def do_test(start_broker, will_props, recvd_props): - rc = 1 - +def do_test(will_props, recvd_props): mid = 1 connect1_packet = mqtt_packets.gen_connect("07-will-properties-helper", proto_ver=5) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -24,10 +22,8 @@ def do_test(start_broker, will_props, recvd_props): publish_packet = mqtt_packets.gen_publish("07/will/properties/will/test", qos=0, payload="will payload", proto_ver=5, properties=recvd_props) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=30, port=port) mosq_test.do_send_receive(sock1, subscribe1_packet, suback1_packet, "suback") @@ -35,37 +31,18 @@ def do_test(start_broker, will_props, recvd_props): sock2.close() mosq_test.expect_packet(sock1, "publish", publish_packet) - rc = 0 - sock1.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): +if __name__ == '__main__': # Single test property will_props = mqtt5_props.gen_string_prop(mqtt5_props.RESPONSE_TOPIC, "response/topic") - rc = do_test(start_broker, will_props, will_props) - if rc: - return rc; + do_test(will_props, will_props) # Multiple test properties will_props = mqtt5_props.gen_string_prop(mqtt5_props.RESPONSE_TOPIC, "response/topic") will_props += mqtt5_props.gen_byte_prop(mqtt5_props.PAYLOAD_FORMAT_INDICATOR, 0) - rc = do_test(start_broker, will_props, will_props) - if rc: - return rc; + do_test(will_props, will_props) # Multiple test properties, with property that is removed will_props = mqtt5_props.gen_string_prop(mqtt5_props.RESPONSE_TOPIC, "response/topic") @@ -74,9 +51,7 @@ def all_tests(start_broker=False): recv_props = mqtt5_props.gen_string_prop(mqtt5_props.RESPONSE_TOPIC, "response/topic") recv_props += mqtt5_props.gen_byte_prop(mqtt5_props.PAYLOAD_FORMAT_INDICATOR, 0) - rc = do_test(start_broker, will_props, recv_props) - if rc: - return rc; + do_test(will_props, recv_props) # Multiple test properties, with property that is removed *first* will_props = mqtt5_props.gen_uint32_prop(mqtt5_props.WILL_DELAY_INTERVAL, 0) @@ -85,9 +60,7 @@ def all_tests(start_broker=False): recv_props = mqtt5_props.gen_string_prop(mqtt5_props.RESPONSE_TOPIC, "response/topic") recv_props += mqtt5_props.gen_string_prop(mqtt5_props.CORRELATION_DATA, "data") - rc = do_test(start_broker, will_props, recv_props) - if rc: - return rc; + do_test(will_props, recv_props) # All properties, plus multiple user properties (excluding # message-expiry-interval, for ease of testing reasons) @@ -105,10 +78,4 @@ def all_tests(start_broker=False): recv_props += mqtt5_props.gen_byte_prop(mqtt5_props.PAYLOAD_FORMAT_INDICATOR, 1) recv_props += mqtt5_props.gen_string_prop(mqtt5_props.CONTENT_TYPE, "application/test") recv_props += mqtt5_props.gen_string_pair_prop(mqtt5_props.USER_PROPERTY, "key2", "value2") - rc = do_test(start_broker, will_props, recv_props) - if rc: - return rc; - return 0 - -if __name__ == '__main__': - all_tests(True) + do_test(will_props, recv_props) diff --git a/test/broker/07-will-qos0.py b/test/broker/07-will-qos0.py index e6e64466..210f576b 100755 --- a/test/broker/07-will-qos0.py +++ b/test/broker/07-will-qos0.py @@ -5,8 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver, clean_session): - rc = 1 +def do_test(proto_ver, clean_session): mid = 53 connect1_packet = mqtt_packets.gen_connect("will-qos0-test", proto_ver=proto_ver) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -22,10 +21,8 @@ def do_test(start_broker, proto_ver, clean_session): connect2_packet_clear = mqtt_packets.gen_connect("will-qos0-helper", proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=5, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet, "suback") @@ -33,41 +30,14 @@ def do_test(start_broker, proto_ver, clean_session): sock2.close() mosq_test.expect_packet(sock, "publish", publish_packet) - rc = 0 - sock.close() sock = mosq_test.do_client_connect(connect2_packet_clear, connack1_packet, timeout=5, port=port) sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4, clean_session=True) - if rc: - return rc; - rc = do_test(start_broker, proto_ver=4, clean_session=False) - if rc: - return rc; - rc = do_test(start_broker, proto_ver=5, clean_session=True) - if rc: - return rc; - rc = do_test(start_broker, proto_ver=5, clean_session=False) - if rc: - return rc; - return 0 - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4, clean_session=True) + do_test(proto_ver=4, clean_session=False) + do_test(proto_ver=5, clean_session=True) + do_test(proto_ver=5, clean_session=False) diff --git a/test/broker/07-will-reconnect-1273.py b/test/broker/07-will-reconnect-1273.py index fd92f0fd..d87cba68 100755 --- a/test/broker/07-will-reconnect-1273.py +++ b/test/broker/07-will-reconnect-1273.py @@ -7,9 +7,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver): - rc = 1 - +def do_test(proto_ver): connect1_packet = mqtt_packets.gen_connect("will-reconnect-helper", proto_ver=proto_ver) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -28,10 +26,8 @@ def do_test(start_broker, proto_ver): connect2_packet_clear = mqtt_packets.gen_connect("will-1273", proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: # Connect and subscribe will-sub sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=30, port=port, connack_error="connack1") mosq_test.do_send_receive(sock1, subscribe1_packet, suback1_packet, "suback") @@ -55,37 +51,13 @@ def do_test(start_broker, proto_ver): mosq_test.expect_packet(sock1, "publish2", publish_packet) # Do a ping to make sure there are no other packets received. mosq_test.do_ping(sock1) - rc = 0 - sock1.close() sock2.close() sock2 = mosq_test.do_client_connect(connect2_packet_clear, connack1_packet, timeout=30, port=port, connack_error="connack clear") sock2.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc - -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4) - if rc: - return rc; - rc = do_test(start_broker, proto_ver=5) - if rc: - return rc; - return 0 - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4) + do_test(proto_ver=5) diff --git a/test/broker/07-will-takeover.py b/test/broker/07-will-takeover.py index 90eac9fc..99f2b3b0 100755 --- a/test/broker/07-will-takeover.py +++ b/test/broker/07-will-takeover.py @@ -5,9 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker, proto_ver, clean_session1, clean_session2): - rc = 1 - +def do_test(proto_ver, clean_session1, clean_session2): mid = 1 connect1_packet = mqtt_packets.gen_connect("will-takeover-helper", proto_ver=proto_ver) connack1_packet = mqtt_packets.gen_connack(rc=0, proto_ver=proto_ver) @@ -44,10 +42,8 @@ def do_test(start_broker, proto_ver, clean_session1, clean_session2): connect2_packet_clear = mqtt_packets.gen_connect("will-takeover-test", proto_ver=proto_ver) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: # Connect helper to look for will being published sock1 = mosq_test.do_client_connect(connect1_packet, connack1_packet, timeout=5, port=port) mosq_test.do_send_receive(sock1, subscribe_packet, suback_packet, "suback") @@ -73,7 +69,6 @@ def do_test(start_broker, proto_ver, clean_session1, clean_session2): mosq_test.expect_packet(sock1, "publish 2", publish_packet) # If the helper has received a will message, then the ping test will fail mosq_test.do_ping(sock1) - rc = 0 sock1.close() sock2.close() @@ -81,56 +76,14 @@ def do_test(start_broker, proto_ver, clean_session1, clean_session2): sock2 = mosq_test.do_client_connect(connect2_packet_clear, connack2_packet, timeout=5, port=port) sock2.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d clean_session1=%d clean_session2=%d" % (proto_ver, clean_session1, clean_session2)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - rc = do_test(start_broker, proto_ver=4, clean_session1=True, clean_session2=True) - if rc: - print("1") - return rc; - rc = do_test(start_broker, proto_ver=4, clean_session1=False, clean_session2=True) - if rc: - print("2") - return rc; - rc = do_test(start_broker, proto_ver=4, clean_session1=True, clean_session2=False) - if rc: - print("3") - return rc; - rc = do_test(start_broker, proto_ver=4, clean_session1=False, clean_session2=False) - if rc: - print("4") - return rc; - rc = do_test(start_broker, proto_ver=5, clean_session1=True, clean_session2=True) - if rc: - print("5") - return rc; - rc = do_test(start_broker, proto_ver=5, clean_session1=False, clean_session2=True) - if rc: - print("6") - return rc; - rc = do_test(start_broker, proto_ver=5, clean_session1=True, clean_session2=False) - if rc: - print("7") - return rc; - rc = do_test(start_broker, proto_ver=5, clean_session1=False, clean_session2=False) - if rc: - print("8") - return rc; - return 0 - if __name__ == '__main__': - all_tests(True) + do_test(proto_ver=4, clean_session1=True, clean_session2=True) + do_test(proto_ver=4, clean_session1=False, clean_session2=True) + do_test(proto_ver=4, clean_session1=True, clean_session2=False) + do_test(proto_ver=4, clean_session1=False, clean_session2=False) + do_test(proto_ver=5, clean_session1=True, clean_session2=True) + do_test(proto_ver=5, clean_session1=False, clean_session2=True) + do_test(proto_ver=5, clean_session1=True, clean_session2=False) + do_test(proto_ver=5, clean_session1=False, clean_session2=False) diff --git a/test/broker/09-auth-bad-method.py b/test/broker/09-auth-bad-method.py index b7f5e7be..a9f0401d 100755 --- a/test/broker/09-auth-bad-method.py +++ b/test/broker/09-auth-bad-method.py @@ -5,36 +5,17 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 +def do_test(): props = mqtt5_props.gen_string_prop(mqtt5_props.AUTHENTICATION_METHOD, "basic") connect_packet = mqtt_packets.gen_connect("connect-test", proto_ver=5, properties=props) connack_packet = mqtt_packets.gen_connack(rc=mqtt5_rc.BAD_AUTHENTICATION_METHOD, proto_ver=5, properties=None) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) sock.close() - rc = 0 - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - return do_test(start_broker) if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/12-prop-assigned-client-identifier.py b/test/broker/12-prop-assigned-client-identifier.py index 49ad1554..21807e97 100755 --- a/test/broker/12-prop-assigned-client-identifier.py +++ b/test/broker/12-prop-assigned-client-identifier.py @@ -6,8 +6,7 @@ from mosq_test_helper import * -def do_test(start_broker, clean_start): - rc = 1 +def do_test(clean_start): connect_packet = mqtt_packets.gen_connect(None, proto_ver=5, clean_session=clean_start) props = mqtt5_props.gen_string_prop(mqtt5_props.ASSIGNED_CLIENT_IDENTIFIER, "auto-00000000-0000-0000-0000-000000000000") @@ -19,45 +18,23 @@ def do_test(start_broker, clean_start): disconnect_server_packet = mqtt_packets.gen_disconnect(proto_ver=5, reason_code=130) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(10) sock.connect(("localhost", port)) sock.send(connect_packet) connack_recvd = sock.recv(len(connack_packet)) + sock.close() if connack_recvd[0:12] == connack_packet[0:12]: # FIXME - this test could be tightened up a lot - rc = 0 - - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) + pass else: - return rc + raise ValueError(connack_recvd) -def all_tests(start_broker=False): - rc = do_test(start_broker, True) - if rc: - return rc; - rc = do_test(start_broker, False) - if rc: - return rc; - return 0 - if __name__ == '__main__': - all_tests(True) + do_test(True) + do_test(False) diff --git a/test/broker/12-prop-maximum-packet-size-publish-qos1.py b/test/broker/12-prop-maximum-packet-size-publish-qos1.py index 56e6465b..a60ce137 100755 --- a/test/broker/12-prop-maximum-packet-size-publish-qos1.py +++ b/test/broker/12-prop-maximum-packet-size-publish-qos1.py @@ -5,9 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 - +def do_test(): props = mqtt5_props.gen_uint32_prop(mqtt5_props.MAXIMUM_PACKET_SIZE, 40) connect_packet = mqtt_packets.gen_connect("12-max-publish-qos1", proto_ver=5, properties=props) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -30,10 +28,8 @@ def do_test(start_broker): puback3_packet = mqtt_packets.gen_puback(mid, proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet) @@ -47,23 +43,7 @@ def do_test(start_broker): sock.send(publish3_packet) mosq_test.receive_unordered(sock, puback3_packet, publish3_packet, "puback 3/publish3") - rc = 0 - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc; -def all_tests(start_broker=False): - return do_test(start_broker) if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/12-prop-maximum-packet-size-publish-qos2.py b/test/broker/12-prop-maximum-packet-size-publish-qos2.py index af615be2..8d50960b 100755 --- a/test/broker/12-prop-maximum-packet-size-publish-qos2.py +++ b/test/broker/12-prop-maximum-packet-size-publish-qos2.py @@ -5,9 +5,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 - +def do_test(): props = mqtt5_props.gen_uint32_prop(mqtt5_props.MAXIMUM_PACKET_SIZE, 40) connect_packet = mqtt_packets.gen_connect("12-max-publish-qos2", proto_ver=5, properties=props) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -29,10 +27,8 @@ def do_test(start_broker): pubcomp2_packet = mqtt_packets.gen_pubcomp(mid, proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) mosq_test.do_send_receive(sock, subscribe_packet, suback_packet) @@ -45,24 +41,7 @@ def do_test(start_broker): mosq_test.do_send_receive(sock, publish2_packet, pubrec2_packet, "pubrec 2") sock.send(pubrel2_packet) mosq_test.receive_unordered(sock, pubcomp2_packet, publish2_packet, "pubcomp 2/publish2") - rc = 0 - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/12-prop-response-topic-correlation-data.py b/test/broker/12-prop-response-topic-correlation-data.py index cf7810dd..d436ea20 100755 --- a/test/broker/12-prop-response-topic-correlation-data.py +++ b/test/broker/12-prop-response-topic-correlation-data.py @@ -8,9 +8,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 - +def do_test(): connect_packet1 = mqtt_packets.gen_connect("client1", proto_ver=5) connect_packet2 = mqtt_packets.gen_connect("client2", proto_ver=5) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -30,10 +28,8 @@ def do_test(start_broker): disconnect_server_packet = mqtt_packets.gen_disconnect(proto_ver=5, reason_code=130) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock1 = mosq_test.do_client_connect(connect_packet1, connack_packet, port=port) sock2 = mosq_test.do_client_connect(connect_packet2, connack_packet, port=port) @@ -45,27 +41,9 @@ def do_test(start_broker): # FIXME - it would be better to extract the property and payload, even though we know them sock1.send(publish_packet1) mosq_test.expect_packet(sock2, "publish2", publish_packet1) - rc = 0 - sock1.close() sock2.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/12-prop-response-topic.py b/test/broker/12-prop-response-topic.py index 9103022b..fdb34c10 100755 --- a/test/broker/12-prop-response-topic.py +++ b/test/broker/12-prop-response-topic.py @@ -8,9 +8,7 @@ from mosq_test_helper import * -def do_test(start_broker): - rc = 1 - +def do_test(): connect_packet1 = mqtt_packets.gen_connect("12-response-topic-client1", proto_ver=5) connect_packet2 = mqtt_packets.gen_connect("12-response-topic-client2", proto_ver=5) connack_packet = mqtt_packets.gen_connack(rc=0, proto_ver=5) @@ -29,10 +27,8 @@ def do_test(start_broker): disconnect_server_packet = mqtt_packets.gen_disconnect(proto_ver=5, reason_code=130) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: sock1 = mosq_test.do_client_connect(connect_packet1, connack_packet, port=port) sock2 = mosq_test.do_client_connect(connect_packet2, connack_packet, port=port) @@ -44,27 +40,9 @@ def do_test(start_broker): # FIXME - it would be better to extract the property and payload, even though we know them sock1.send(publish_packet1) mosq_test.expect_packet(sock2, "publish2", publish_packet1) - rc = 0 - sock1.close() sock2.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) - else: - return rc -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/12-prop-subpub-content-type.py b/test/broker/12-prop-subpub-content-type.py index 6ac17d91..ad5904c3 100755 --- a/test/broker/12-prop-subpub-content-type.py +++ b/test/broker/12-prop-subpub-content-type.py @@ -7,17 +7,14 @@ import prop_subpub_helper as helper from mosq_test_helper import * -def do_test(start_broker): +def do_test(): props_out = mqtt5_props.gen_string_prop(mqtt5_props.CONTENT_TYPE, "text") props_out = props_out+mqtt5_props.gen_uint16_prop(mqtt5_props.TOPIC_ALIAS, 1) props_in = mqtt5_props.gen_string_prop(mqtt5_props.CONTENT_TYPE, "text") - return helper.prop_subpub_helper(start_broker, "12-prop-subpub-content-type", props_out, props_in) + return helper.prop_subpub_helper("12-prop-subpub-content-type", props_out, props_in) -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/12-prop-subpub-payload-format.py b/test/broker/12-prop-subpub-payload-format.py index 3235d675..1eff3e92 100755 --- a/test/broker/12-prop-subpub-payload-format.py +++ b/test/broker/12-prop-subpub-payload-format.py @@ -7,17 +7,14 @@ import prop_subpub_helper as helper from mosq_test_helper import * -def do_test(start_broker): +def do_test(): props_out = mqtt5_props.gen_byte_prop(mqtt5_props.PAYLOAD_FORMAT_INDICATOR, 0xed) props_out = props_out+mqtt5_props.gen_uint16_prop(mqtt5_props.TOPIC_ALIAS, 1) props_in = mqtt5_props.gen_byte_prop(mqtt5_props.PAYLOAD_FORMAT_INDICATOR, 0xed) - return helper.prop_subpub_helper(start_broker, "12-prop-subpub-payload-format", props_out, props_in, expect_proto_error=True) + return helper.prop_subpub_helper("12-prop-subpub-payload-format", props_out, props_in, expect_proto_error=True) -def all_tests(start_broker=False): - return do_test(start_broker) - if __name__ == '__main__': - all_tests(True) + do_test() diff --git a/test/broker/20-sparkplug-compliance.py b/test/broker/20-sparkplug-compliance.py index d8f30e5f..e02661fc 100755 --- a/test/broker/20-sparkplug-compliance.py +++ b/test/broker/20-sparkplug-compliance.py @@ -58,9 +58,8 @@ def tck_id_conformance_mqtt_retained(port, proto_ver): def do_tests(): rc = 1 port = mosq_test.get_port() - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: tck_id_conformance_mqtt_qos0(port, 4) tck_id_conformance_mqtt_qos0(port, 5) @@ -73,17 +72,6 @@ def do_tests(): tck_id_conformance_mqtt_retained(port, 4) tck_id_conformance_mqtt_retained(port, 5) - rc = 0 - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) if __name__ == '__main__': do_tests() diff --git a/test/broker/mosq_test_helper.py b/test/broker/mosq_test_helper.py index 96e44a13..fcfd85e5 100644 --- a/test/broker/mosq_test_helper.py +++ b/test/broker/mosq_test_helper.py @@ -15,6 +15,7 @@ import mqtt5_opts import mqtt5_props import mqtt5_rc import mqtt_packets +from mosquitto_broker import MosquittoBroker import socket import ssl diff --git a/test/broker/ntest.py b/test/broker/ntest.py deleted file mode 100755 index 714ac45b..00000000 --- a/test/broker/ntest.py +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env python3 - -import mosq_test_helper -import mosq_test -import os -import ptest -import threading -import importlib -import time - -tests = [ - '01-connect-bad-packet', - '01-connect-disconnect-v5', - '01-connect-duplicate', - '01-connect-invalid-id-0', - '01-connect-invalid-id-missing', - '01-connect-invalid-id-utf8', - '01-connect-invalid-protonum', - '01-connect-invalid-reserved', - '01-connect-success', - '01-connect-uname-invalid-utf8', - '01-connect-uname-no-flag', - '01-connect-uname-pwd-no-flag', - - '02-shared-nolocal', - '02-shared-qos0-v5', - '02-subhier-crash', - '02-subpub-b2c-topic-alias', - '02-subpub-qos0-long-topic', - '02-subpub-qos0-retain-as-publish', - '02-subpub-qos0-send-retain', - '02-subpub-qos0-subscription-id', - '02-subpub-qos0-topic-alias-unknown', - '02-subpub-qos0-topic-alias', - '02-subpub-qos0', - '02-subpub-qos1-bad-pubcomp', - '02-subpub-qos1-bad-pubrec', - '02-subpub-qos1-message-expiry-retain', - '02-subpub-qos1-message-expiry-will', - '02-subpub-qos1-message-expiry', - '02-subpub-qos1-nolocal', - '02-subpub-qos1', - '02-subpub-qos2-1322', - '02-subpub-qos2-bad-puback-1', - '02-subpub-qos2-bad-puback-2', - '02-subpub-qos2-bad-pubcomp', - '02-subpub-qos2-pubrec-error', - '02-subpub-qos2-receive-maximum-1', - '02-subpub-qos2-receive-maximum-2', - '02-subpub-qos2', - '02-subscribe-dollar-v5', - '02-subscribe-invalid-utf8', - '02-subscribe-long-topic', - '02-subscribe-persistence-flipflop', - '02-subscribe-qos0', - '02-subscribe-qos1', - '02-subscribe-qos2', - '02-unsubscribe-invalid-no-topic', - '02-unsubscribe-qos0', - '02-unsubscribe-qos1', - '02-unsubscribe-qos2-multiple', - '02-unsubscribe-qos2', - - ##'03-pattern-matching', - '03-publish-b2c-disconnect-qos1', - '03-publish-b2c-disconnect-qos2', - '03-publish-b2c-qos1-len', - '03-publish-b2c-qos2-len', - '03-publish-c2b-disconnect-qos2', - '03-publish-c2b-qos2-len', - '03-publish-dollar-v5', - '03-publish-dollar', - '03-publish-invalid-utf8', - '03-publish-long-topic', - '03-publish-qos1-no-subscribers-v5', - '03-publish-qos1', - '03-publish-qos2', - - '04-retain-qos0-clear', - '04-retain-qos0-fresh', - '04-retain-qos0-repeated', - '04-retain-qos0', - '04-retain-qos1-qos0', - - '05-clean-session-qos1', - '05-session-expiry-v5', - - '06-bridge-no-local', - - '07-will-delay', - '07-will-delay-reconnect', - '07-will-delay-recover', - '07-will-delay-session-expiry', - '07-will-delay-session-expiry2', - '07-will-disconnect-with-will', - '07-will-invalid-utf8', - '07-will-no-flag', - '07-will-null', - '07-will-null-topic', - '07-will-properties', - '07-will-qos0', - '07-will-reconnect-1273', - '07-will-takeover', - - '09-auth-bad-method', - '09-extended-auth-unsupported', - - '12-prop-assigned-client-identifier', - '12-prop-maximum-packet-size-connect', - '12-prop-maximum-packet-size-publish', - '12-prop-maximum-packet-size-publish-qos1', - '12-prop-maximum-packet-size-publish-qos2', - '12-prop-response-topic', - '12-prop-response-topic-correlation-data', - '12-prop-session-expiry-invalid', - '12-prop-subpub-content-type', - '12-prop-subpub-payload-format', - '12-prop-topic-alias-invalid', - - '13-malformed-subscribe-v5', - '13-malformed-unsubscribe-v5', - ] - -def single_test(name): - start_time = time.time() - try: - mod = importlib.import_module(name) - except ModuleNotFoundError: - print("------ : \033[31m%s\033[0m test not found" % (name)) - return 1 - - rc = mod.all_tests() - runtime = time.time() - start_time - if rc: - print("%0.3fs : \033[31m%s\033[0m" % (runtime, name)) - else: - print("%0.3fs : \033[32m%s\033[0m" % (runtime, name)) - return rc - - -port = mosq_test.get_port() -broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port, nolog=True) - -rc = 0 -try: - # FIXME - use Queue instead to limit max threads - threads = [] - for test in tests: - t = threading.Thread(target=single_test, args=(test,), name=test) - threads.append(t) - t.start() - - # FIXME - return code - for t in threads: - t.join() - -finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) diff --git a/test/broker/prop_subpub_helper.py b/test/broker/prop_subpub_helper.py index 42d81555..434df8f3 100755 --- a/test/broker/prop_subpub_helper.py +++ b/test/broker/prop_subpub_helper.py @@ -6,7 +6,7 @@ from mosq_test_helper import * -def prop_subpub_helper(start_broker, test_name, props_out, props_in, expect_proto_error=False): +def prop_subpub_helper(test_name, props_out, props_in, expect_proto_error=False): rc = 1 mid = 53 connect_packet = mqtt_packets.gen_connect(test_name, proto_ver=5) @@ -22,10 +22,8 @@ def prop_subpub_helper(start_broker, test_name, props_out, props_in, expect_prot disconnect_packet = mqtt_packets.gen_disconnect(reason_code=mqtt5_rc.PROTOCOL_ERROR, proto_ver=5) port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: + broker = MosquittoBroker(port=port) + with broker: 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") @@ -33,21 +31,4 @@ def prop_subpub_helper(start_broker, test_name, props_out, props_in, expect_prot mosq_test.do_send_receive(sock, publish_packet_out, disconnect_packet, "publish") else: mosq_test.do_send_receive(sock, publish_packet_out, publish_packet_expected, "publish") - - rc = 0 - sock.close() - except mosq_test.TestError: - pass - finally: - if start_broker: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - exit(rc) - else: - return rc diff --git a/test/client/02-subscribe-filter-out.py b/test/client/02-subscribe-filter-out.py index adf9bcd4..4152d720 100755 --- a/test/client/02-subscribe-filter-out.py +++ b/test/client/02-subscribe-filter-out.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -34,43 +32,32 @@ def do_test(proto_ver): publish_packet1 = mqtt_packets.gen_publish("02/sub/filter-out/recv", qos=0, payload="recv", proto_ver=proto_ver) publish_packet2 = mqtt_packets.gen_publish("02/sub/filter-out/filtered", qos=0, payload="filtered", proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - try: - sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - - sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - time.sleep(0.1) - sock.send(publish_packet1) - sock.send(publish_packet2) - sock.send(publish_packet1) - sock.send(publish_packet2) - sub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(sub): - print("sub not terminated") - sub_terminate_rc = 1 - (stdo, stde) = sub.communicate() - if stdo.decode('utf-8') == 'recv\nrecv\n': - rc = sub_terminate_rc - else: - print(stdo.decode('utf-8')) - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + time.sleep(0.1) + sock.send(publish_packet1) + sock.send(publish_packet2) + sock.send(publish_packet1) + sock.send(publish_packet2) + sub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(sub): + print("sub not terminated") + sub_terminate_rc = 1 + (stdo, stde) = sub.communicate() + if stdo.decode('utf-8') == 'recv\nrecv\n': + rc = sub_terminate_rc + else: + print(stdo.decode('utf-8')) + sock.close() + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/02-subscribe-format-json-properties.py b/test/client/02-subscribe-format-json-properties.py index 8c96f220..900fdab3 100755 --- a/test/client/02-subscribe-format-json-properties.py +++ b/test/client/02-subscribe-format-json-properties.py @@ -7,11 +7,9 @@ import json mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -44,8 +42,6 @@ def do_test(proto_ver): props += mqtt5_props.gen_string_pair_prop(mqtt5_props.USER_PROPERTY, "name", "value2") publish_packet = mqtt_packets.gen_publish("02/sub/format/json/properties/test", mid=1, qos=1, payload="message", proto_ver=proto_ver, properties=props) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - expected = { "tst": "", "topic": "02/sub/format/json/properties/test", @@ -70,40 +66,31 @@ def do_test(proto_ver): "payload": "message" } - try: - sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) + sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - time.sleep(0.1) - sock.send(publish_packet) - sub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(sub): - print("sub not terminated") - sub_terminate_rc = 1 - (stdo, stde) = sub.communicate() - j = json.loads(stdo.decode('utf-8')) - j['tst'] = "" + sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + time.sleep(0.1) + sock.send(publish_packet) + sub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(sub): + print("sub not terminated") + sub_terminate_rc = 1 + (stdo, stde) = sub.communicate() + j = json.loads(stdo.decode('utf-8')) + j['tst'] = "" + sock.close() - if j == expected: - rc = sub_terminate_rc - else: - print(json.dumps(j)) - print(json.dumps(expected)) - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + if j == expected: + rc = sub_terminate_rc + else: + print(json.dumps(j)) + print(json.dumps(expected)) + if rc: + raise ValueError(rc) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=5) diff --git a/test/client/02-subscribe-format-json-qos0.py b/test/client/02-subscribe-format-json-qos0.py index b21b9a10..bec0b7be 100755 --- a/test/client/02-subscribe-format-json-qos0.py +++ b/test/client/02-subscribe-format-json-qos0.py @@ -7,11 +7,9 @@ import json mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -33,45 +31,35 @@ def do_test(proto_ver): publish_packet = mqtt_packets.gen_publish("02/sub/format/json/test", qos=0, payload="message", proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - expected = {"tst": "", "topic": "02/sub/format/json/test", "qos": 0, "retain": 0, "payloadlen": 7, "payload": "message"} - try: - sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) + sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - time.sleep(0.1) - sock.send(publish_packet) - sub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(sub): - print("sub not terminated") - sub_terminate_rc = 1 - (stdo, stde) = sub.communicate() - j = json.loads(stdo.decode('utf-8')) - j['tst'] = "" + sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + time.sleep(0.1) + sock.send(publish_packet) + sub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(sub): + print("sub not terminated") + sub_terminate_rc = 1 + (stdo, stde) = sub.communicate() + j = json.loads(stdo.decode('utf-8')) + j['tst'] = "" - if j == expected: - rc = sub_terminate_rc - else: - print(json.dumps(j)) - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + sock.close() + + if j == expected: + rc = sub_terminate_rc + else: + print(json.dumps(j)) + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/02-subscribe-format-json-qos1.py b/test/client/02-subscribe-format-json-qos1.py index 9482561a..955d9f04 100755 --- a/test/client/02-subscribe-format-json-qos1.py +++ b/test/client/02-subscribe-format-json-qos1.py @@ -7,11 +7,9 @@ import json mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -34,46 +32,35 @@ def do_test(proto_ver): publish_packet = mqtt_packets.gen_publish("02/sub/format/json/qos1/test", mid=1, qos=1, payload="message", proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - expected = {"tst": "", "topic": "02/sub/format/json/qos1/test", "qos": 1, "mid": 1, "retain": 0, "payloadlen": 7, "payload": "message"} - try: - sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) + sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - time.sleep(0.1) - sock.send(publish_packet) - sub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(sub): - print("sub not terminated") - sub_terminate_rc = 1 - (stdo, stde) = sub.communicate() - j = json.loads(stdo.decode('utf-8')) - j['tst'] = "" + sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + time.sleep(0.1) + sock.send(publish_packet) + sub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(sub): + print("sub not terminated") + sub_terminate_rc = 1 + (stdo, stde) = sub.communicate() + j = json.loads(stdo.decode('utf-8')) + j['tst'] = "" + sock.close() - if j == expected: - rc = sub_terminate_rc - else: - print(json.dumps(expected)) - print(json.dumps(j)) - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + if j == expected: + rc = sub_terminate_rc + else: + print(json.dumps(expected)) + print(json.dumps(j)) + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/02-subscribe-format-json-retain.py b/test/client/02-subscribe-format-json-retain.py index 50da3bf9..9415f085 100755 --- a/test/client/02-subscribe-format-json-retain.py +++ b/test/client/02-subscribe-format-json-retain.py @@ -7,11 +7,9 @@ import json mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -33,44 +31,33 @@ def do_test(proto_ver): publish_packet = mqtt_packets.gen_publish("02/sub/format/json/retain/test", qos=0, payload="message", proto_ver=proto_ver, retain=True) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - expected = {"tst": "", "topic": "02/sub/format/json/retain/test", "qos": 0, "retain": 1, "payloadlen": 7, "payload": "message"} - try: - sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - sock.send(publish_packet) + sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) + sock.send(publish_packet) - sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - sub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(sub): - print("sub not terminated") - sub_terminate_rc = 1 - (stdo, stde) = sub.communicate() - j = json.loads(stdo.decode('utf-8')) - j['tst'] = "" + sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + sub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(sub): + print("sub not terminated") + sub_terminate_rc = 1 + (stdo, stde) = sub.communicate() + j = json.loads(stdo.decode('utf-8')) + j['tst'] = "" + sock.close() - if j == expected: - rc = sub_terminate_rc - else: - print(json.dumps(j)) - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + if j == expected: + rc = sub_terminate_rc + else: + print(json.dumps(j)) + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/02-subscribe-format.py b/test/client/02-subscribe-format.py index ca3e0bf7..81405c10 100755 --- a/test/client/02-subscribe-format.py +++ b/test/client/02-subscribe-format.py @@ -7,11 +7,9 @@ import platform mosq_test.require_features(["WITH_BROKER"]) -def do_test(format_str, expected_outputs, proto_ver=4, payload="message"): +def do_test(port, format_str, expected_outputs, proto_ver=4, payload="message"): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -49,88 +47,78 @@ def do_test(format_str, expected_outputs, proto_ver=4, payload="message"): else: publish_packet = mqtt_packets.gen_publish("02/sub/format/test", qos=0, payload=payload, proto_ver=proto_ver, retain=True) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) + sock.send(publish_packet) - try: - sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - sock.send(publish_packet) + sub = subprocess.run(cmd, capture_output=True, env=env) - sub = subprocess.run(cmd, capture_output=True, env=env) - - have_match = False - for expected_output in expected_outputs: - stdout = sub.stdout.decode('utf-8') - if stdout.startswith(expected_output): - rc = sub.returncode - have_match = True - break - if have_match == False: - print(f"input: {format_str}") - print("expected: (%d) %s" % (len(expected_outputs), expected_outputs)) - print("actual: (%d) %s" % (len(stdout), stdout)) - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - exit(rc) + have_match = False + for expected_output in expected_outputs: + stdout = sub.stdout.decode('utf-8') + if stdout.startswith(expected_output): + rc = sub.returncode + have_match = True + break + sock.close() + if have_match == False: + print(f"input: {format_str}") + print("expected: (%d) %s" % (len(expected_outputs), expected_outputs)) + print("actual: (%d) %s" % (len(stdout), stdout)) + raise ValueError("no match") -do_test('%%', ['%']) -do_test('%A', ['']) # missing -do_test('%C', ['']) # missing -do_test('%2C', [' ']) # missing -do_test('%C', ['plain/text'], proto_ver=5) -do_test('%D', ['']) # missing -do_test('%E', ['']) # missing -do_test('%E', ['3600','3599'], proto_ver=5) -do_test('%F', ['']) # missing -do_test('%F', ['1'], proto_ver=5) -do_test('%l', ['7']) # strlen("message") -do_test('%02l', ['07']) # strlen("message") -do_test('%2l', [' 7']) # strlen("message") -do_test('%-2l', ['7 ']) # strlen("message") -do_test('%m', ['0']) -do_test('%P', ['']) # missing -do_test('%P', ['name1:value1 name2:value2 name3:value3 name4:value4'], proto_ver=5) -do_test('%p', ['message']) -do_test('%-12p', ['message ']) -do_test('%q', ['0']) -do_test('%R', ['']) # missing -do_test('%r', ['1']) -do_test('%S', ['']) # missing -do_test('%S', ['56'], proto_ver=5) -do_test('%t', ['02/sub/format/test']) -do_test('%.20t', ['02/sub/format/test']) -do_test('%-.20t', ['02/sub/format/test']) -do_test('%20t', [' 02/sub/format/test']) -do_test('%-20t', ['02/sub/format/test ']) -do_test('%10.10t', ['02/sub/for']) -do_test('%20.10t', [' 02/sub/for']) -do_test('%-20.10t', ['02/sub/for ']) -do_test('%x', ['6d657373616765']) -do_test('%.1x', ['6 d 6 5 7 3 7 3 6 1 6 7 6 5']) -do_test('%.2x', ['6d 65 73 73 61 67 65']) -do_test('%.2:x', ['6d:65:73:73:61:67:65']) -do_test('%18x', [' 6d657373616765']) -do_test('%-18x', ['6d657373616765 ']) -do_test('%X', ['6D657373616765']) -do_test('\\\\', ['\\']) -do_test('\\a', ['\a']) -#do_test('\\e', ['\e') -do_test('\\n', ['\n']) -do_test('\\r', ['\r']) -do_test('\\t', ['\t']) -do_test('\\v', ['\v']) -do_test('@@', ['@']) -do_test('text', ['text']) -if platform.system() != 'Darwin' and platform.system() != 'Windows': - do_test('%.3d', ['2.718'], payload=struct.pack('BBBBBBBB', 0x58, 0x39, 0xB4, 0xC8, 0x76, 0xBE, 0x05, 0x40)) - do_test('%.3f', ['0.707'], payload=struct.pack('BBBB', 0xF4, 0xFD, 0x34, 0x3F)) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, '%%', ['%']) + do_test(port, '%A', ['']) # missing + do_test(port, '%C', ['']) # missing + do_test(port, '%2C', [' ']) # missing + do_test(port, '%C', ['plain/text'], proto_ver=5) + do_test(port, '%D', ['']) # missing + do_test(port, '%E', ['']) # missing + do_test(port, '%E', ['3600','3599'], proto_ver=5) + do_test(port, '%F', ['']) # missing + do_test(port, '%F', ['1'], proto_ver=5) + do_test(port, '%l', ['7']) # strlen("message") + do_test(port, '%02l', ['07']) # strlen("message") + do_test(port, '%2l', [' 7']) # strlen("message") + do_test(port, '%-2l', ['7 ']) # strlen("message") + do_test(port, '%m', ['0']) + do_test(port, '%P', ['']) # missing + do_test(port, '%P', ['name1:value1 name2:value2 name3:value3 name4:value4'], proto_ver=5) + do_test(port, '%p', ['message']) + do_test(port, '%-12p', ['message ']) + do_test(port, '%q', ['0']) + do_test(port, '%R', ['']) # missing + do_test(port, '%r', ['1']) + do_test(port, '%S', ['']) # missing + do_test(port, '%S', ['56'], proto_ver=5) + do_test(port, '%t', ['02/sub/format/test']) + do_test(port, '%.20t', ['02/sub/format/test']) + do_test(port, '%-.20t', ['02/sub/format/test']) + do_test(port, '%20t', [' 02/sub/format/test']) + do_test(port, '%-20t', ['02/sub/format/test ']) + do_test(port, '%10.10t', ['02/sub/for']) + do_test(port, '%20.10t', [' 02/sub/for']) + do_test(port, '%-20.10t', ['02/sub/for ']) + do_test(port, '%x', ['6d657373616765']) + do_test(port, '%.1x', ['6 d 6 5 7 3 7 3 6 1 6 7 6 5']) + do_test(port, '%.2x', ['6d 65 73 73 61 67 65']) + do_test(port, '%.2:x', ['6d:65:73:73:61:67:65']) + do_test(port, '%18x', [' 6d657373616765']) + do_test(port, '%-18x', ['6d657373616765 ']) + do_test(port, '%X', ['6D657373616765']) + do_test(port, '\\\\', ['\\']) + do_test(port, '\\a', ['\a']) + #do_test(port, '\\e', ['\e') + do_test(port, '\\n', ['\n']) + do_test(port, '\\r', ['\r']) + do_test(port, '\\t', ['\t']) + do_test(port, '\\v', ['\v']) + do_test(port, '@@', ['@']) + do_test(port, 'text', ['text']) + if platform.system() != 'Darwin' and platform.system() != 'Windows': + do_test(port, '%.3d', ['2.718'], payload=struct.pack('BBBBBBBB', 0x58, 0x39, 0xB4, 0xC8, 0x76, 0xBE, 0x05, 0x40)) + do_test(port, '%.3f', ['0.707'], payload=struct.pack('BBBB', 0xF4, 0xFD, 0x34, 0x3F)) diff --git a/test/client/02-subscribe-null.py b/test/client/02-subscribe-null.py index 53de4782..8075c174 100755 --- a/test/client/02-subscribe-null.py +++ b/test/client/02-subscribe-null.py @@ -6,7 +6,7 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 port = mosq_test.get_port() @@ -38,43 +38,32 @@ def do_test(proto_ver): puback_packet_s = mqtt_packets.gen_puback(1, proto_ver=proto_ver) puback_packet_r = mqtt_packets.gen_puback(2, proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - try: - sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - - sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - time.sleep(0.1) - sock.send(publish_packet_s) - mosq_test.expect_packet(sock, "puback", puback_packet_s) - sub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(sub): - print("sub not terminated") - sub_terminate_rc = 1 - (stdo, stde) = sub.communicate() - expected_output = topic + ' (null)\n' - if stdo.decode('utf-8') == expected_output: - rc = sub_terminate_rc - else: - print("expected: %s" % expected_output) - print("actual: %s" % stdo.decode('utf-8')) - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + time.sleep(0.1) + sock.send(publish_packet_s) + mosq_test.expect_packet(sock, "puback", puback_packet_s) + sub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(sub): + print("sub not terminated") + sub_terminate_rc = 1 + (stdo, stde) = sub.communicate() + sock.close() + expected_output = topic + ' (null)\n' + if stdo.decode('utf-8') == expected_output: + rc = sub_terminate_rc + else: + print("expected: %s" % expected_output) + print("actual: %s" % stdo.decode('utf-8')) + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/02-subscribe-qos1.py b/test/client/02-subscribe-qos1.py index 7e7ecab0..841c1aea 100755 --- a/test/client/02-subscribe-qos1.py +++ b/test/client/02-subscribe-qos1.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -36,39 +34,28 @@ def do_test(proto_ver): puback_packet_s = mqtt_packets.gen_puback(1, proto_ver=proto_ver) puback_packet_r = mqtt_packets.gen_puback(2, proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - try: - sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - - sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - time.sleep(0.1) - sock.send(publish_packet_s) - mosq_test.expect_packet(sock, "puback", puback_packet_s) - sub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(sub): - print("sub not terminated") - sub_terminate_rc = 1 - (stdo, stde) = sub.communicate() - if stdo.decode('utf-8') == payload + '\n': - rc = sub_terminate_rc - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + time.sleep(0.1) + sock.send(publish_packet_s) + mosq_test.expect_packet(sock, "puback", puback_packet_s) + sub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(sub): + print("sub not terminated") + sub_terminate_rc = 1 + sock.close() + (stdo, stde) = sub.communicate() + if stdo.decode('utf-8') == payload + '\n': + rc = sub_terminate_rc + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/02-subscribe-verbose.py b/test/client/02-subscribe-verbose.py index 2f98cc82..71ecda44 100755 --- a/test/client/02-subscribe-verbose.py +++ b/test/client/02-subscribe-verbose.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -38,43 +36,32 @@ def do_test(proto_ver): puback_packet_s = mqtt_packets.gen_puback(1, proto_ver=proto_ver) puback_packet_r = mqtt_packets.gen_puback(2, proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - try: - sock = mosq_test.pub_helper(port=port, proto_ver=proto_ver) - - sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - time.sleep(0.1) - sock.send(publish_packet_s) - mosq_test.expect_packet(sock, "puback", puback_packet_s) - sub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(sub): - print("sub not terminated") - sub_terminate_rc = 1 - (stdo, stde) = sub.communicate() - expected_output = topic + ' ' + payload + '\n' - if stdo.decode('utf-8') == expected_output: - rc = sub_terminate_rc - else: - print("expected: %s" % expected_output) - print("actual: %s" % stdo.decode('utf-8')) - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + sub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + time.sleep(0.1) + sock.send(publish_packet_s) + mosq_test.expect_packet(sock, "puback", puback_packet_s) + sub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(sub): + print("sub not terminated") + sub_terminate_rc = 1 + (stdo, stde) = sub.communicate() + expected_output = topic + ' ' + payload + '\n' + if stdo.decode('utf-8') == expected_output: + rc = sub_terminate_rc + else: + print("expected: %s" % expected_output) + print("actual: %s" % stdo.decode('utf-8')) + sock.close() + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/03-publish-env.py b/test/client/03-publish-env.py index 5e76d095..8b9e8097 100755 --- a/test/client/03-publish-env.py +++ b/test/client/03-publish-env.py @@ -40,9 +40,9 @@ def do_test(proto_ver, configenv): else: puback_packet = mqtt_packets.gen_puback(mid, proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.sub_helper(port=port, topic="#", qos=1, proto_ver=proto_ver) pub = subprocess.run(cmd, capture_output=True, text=True, env=env) @@ -50,21 +50,11 @@ def do_test(proto_ver, configenv): mosq_test.expect_packet(sock, "publish", publish_packet) rc = pub.returncode sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 + if rc: print(pub.stdout) print(pub.stderr) - print(mosq_test.broker_log(broker)) print("proto_ver=%d" % (proto_ver)) - exit(rc) if platform.system() == 'Windows': diff --git a/test/client/03-publish-qos0-empty.py b/test/client/03-publish-qos0-empty.py index 162a3eea..75817cd5 100755 --- a/test/client/03-publish-qos0-empty.py +++ b/test/client/03-publish-qos0-empty.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -37,37 +35,28 @@ def do_test(proto_ver): else: puback_packet = mqtt_packets.gen_puback(mid, proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.sub_helper(port=port, topic="#", qos=0, proto_ver=proto_ver) - try: - sock = mosq_test.sub_helper(port=port, topic="#", qos=0, proto_ver=proto_ver) + pub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + pub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(pub): + print("pub not terminated") + pub_terminate_rc = 1 + (stdo, stde) = pub.communicate() - pub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - pub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(pub): - print("pub not terminated") - pub_terminate_rc = 1 - (stdo, stde) = pub.communicate() + mosq_test.expect_packet(sock, "publish", publish_packet) + rc = pub_terminate_rc + sock.close() - mosq_test.expect_packet(sock, "publish", publish_packet) - rc = pub_terminate_rc - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + if rc: + print(stde.decode('utf-8')) + print("proto_ver=%d" % (proto_ver)) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/03-publish-qos1-properties.py b/test/client/03-publish-qos1-properties.py index 37a163c3..57ca46dc 100755 --- a/test/client/03-publish-qos1-properties.py +++ b/test/client/03-publish-qos1-properties.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - env = { 'XDG_CONFIG_HOME':'/tmp/missing' } @@ -47,35 +45,26 @@ def do_test(proto_ver): publish_packet = mqtt_packets.gen_publish("03/pub/qos1/test/properties", qos=1, mid=mid, payload="message", proto_ver=proto_ver, properties=props) puback_packet = mqtt_packets.gen_puback(mid, proto_ver=proto_ver, reason_code=mqtt5_rc.NO_MATCHING_SUBSCRIBERS) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.sub_helper(port=port, topic="#", qos=1, proto_ver=5) - try: - sock = mosq_test.sub_helper(port=port, topic="#", qos=1, proto_ver=5) + pub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + pub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(pub): + print("pub not terminated") + pub_terminate_rc = 1 + (stdo, stde) = pub.communicate() - pub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - pub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(pub): - print("pub not terminated") - pub_terminate_rc = 1 - (stdo, stde) = pub.communicate() + mosq_test.expect_packet(sock, "publish", publish_packet) + rc = pub_terminate_rc + sock.close() - mosq_test.expect_packet(sock, "publish", publish_packet) - rc = pub_terminate_rc - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + if rc: + print(stde.decode('utf-8')) + print("proto_ver=%d" % (proto_ver)) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=5) diff --git a/test/client/03-publish-qos1.py b/test/client/03-publish-qos1.py index 0bbee65f..5e51c1ba 100755 --- a/test/client/03-publish-qos1.py +++ b/test/client/03-publish-qos1.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -37,37 +35,29 @@ def do_test(proto_ver): else: puback_packet = mqtt_packets.gen_puback(mid, proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.sub_helper(port=port, topic="#", qos=1, proto_ver=proto_ver) - try: - sock = mosq_test.sub_helper(port=port, topic="#", qos=1, proto_ver=proto_ver) + pub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + pub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(pub): + print("pub not terminated") + pub_terminate_rc = 1 + (stdo, stde) = pub.communicate() - pub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - pub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(pub): - print("pub not terminated") - pub_terminate_rc = 1 - (stdo, stde) = pub.communicate() + mosq_test.expect_packet(sock, "publish", publish_packet) + rc = pub_terminate_rc + sock.close() - mosq_test.expect_packet(sock, "publish", publish_packet) - rc = pub_terminate_rc - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + if rc: + print(stde.decode('utf-8')) + print("proto_ver=%d" % (proto_ver)) + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/03-publish-repeat.py b/test/client/03-publish-repeat.py index f8186e57..fdb19d8a 100755 --- a/test/client/03-publish-repeat.py +++ b/test/client/03-publish-repeat.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -35,37 +33,27 @@ def do_test(proto_ver): mid = 1 publish_packet = mqtt_packets.gen_publish("03/pub/repeat/test", qos=0, mid=mid, payload="message", proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.sub_helper(port=port, topic="#", qos=0, proto_ver=proto_ver) - try: - sock = mosq_test.sub_helper(port=port, topic="#", qos=0, proto_ver=proto_ver) + pub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + pub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(pub): + print("pub not terminated") + pub_terminate_rc = 1 - pub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - pub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(pub): - print("pub not terminated") - pub_terminate_rc = 1 + mosq_test.expect_packet(sock, "publish 1", publish_packet) + mosq_test.expect_packet(sock, "publish 2", publish_packet) + rc = pub_terminate_rc + sock.close() - mosq_test.expect_packet(sock, "publish 1", publish_packet) - mosq_test.expect_packet(sock, "publish 2", publish_packet) - rc = pub_terminate_rc - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/03-publish-stdin-file.py b/test/client/03-publish-stdin-file.py index 0faf74f5..fe03ef44 100755 --- a/test/client/03-publish-stdin-file.py +++ b/test/client/03-publish-stdin-file.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -32,38 +30,25 @@ def do_test(proto_ver): publish_packet = mqtt_packets.gen_publish("03/pub/stdin/file/test", qos=0, payload="message1\nmessage2", proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.sub_helper(port=port, topic="#", qos=0, proto_ver=proto_ver) - try: - sock = mosq_test.sub_helper(port=port, topic="#", qos=0, proto_ver=proto_ver) + pub = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, env=env) + pub.stdin.write(b'message1\nmessage2') + pub.stdin.close() + pub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(pub): + print("pub not terminated") + pub_terminate_rc = 1 - pub = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, env=env) - pub.stdin.write(b'message1\nmessage2') - pub.stdin.close() - pub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(pub): - print("pub not terminated") - pub_terminate_rc = 1 - - mosq_test.expect_packet(sock, "publish", publish_packet) - rc = pub_terminate_rc - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + mosq_test.expect_packet(sock, "publish", publish_packet) + rc = pub_terminate_rc + sock.close() -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/03-publish-stdin-line.py b/test/client/03-publish-stdin-line.py index b6bb24c7..4905b284 100755 --- a/test/client/03-publish-stdin-line.py +++ b/test/client/03-publish-stdin-line.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER", "WITH_THREADING"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -33,39 +31,28 @@ def do_test(proto_ver): publish_packet1 = mqtt_packets.gen_publish("03/pub/stdin/line/test", qos=0, payload="message1", proto_ver=proto_ver) publish_packet2 = mqtt_packets.gen_publish("03/pub/stdin/line/test", qos=0, payload="message2", proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.sub_helper(port=port, topic="#", qos=0, proto_ver=proto_ver) - try: - sock = mosq_test.sub_helper(port=port, topic="#", qos=0, proto_ver=proto_ver) + pub = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, env=env) + pub.stdin.write(b'message1\nmessage2') + pub.stdin.close() + pub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(pub): + print("pub not terminated") + pub_terminate_rc = 1 - pub = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, env=env) - pub.stdin.write(b'message1\nmessage2') - pub.stdin.close() - pub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(pub): - print("pub not terminated") - pub_terminate_rc = 1 - - mosq_test.expect_packet(sock, "publish", publish_packet1) - mosq_test.expect_packet(sock, "publish", publish_packet2) - rc = pub_terminate_rc - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + mosq_test.expect_packet(sock, "publish", publish_packet1) + mosq_test.expect_packet(sock, "publish", publish_packet2) + rc = pub_terminate_rc + sock.close() + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/03-publish-url.py b/test/client/03-publish-url.py index 1f115384..6b1c15cf 100755 --- a/test/client/03-publish-url.py +++ b/test/client/03-publish-url.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -30,37 +28,26 @@ def do_test(proto_ver): publish_packet = mqtt_packets.gen_publish("03/pub/url/test", qos=0, payload="message", proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.sub_helper(port=port, topic="#", qos=0, proto_ver=proto_ver) - try: - sock = mosq_test.sub_helper(port=port, topic="#", qos=0, proto_ver=proto_ver) + pub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + pub_terminate_rc = 0 + if mosq_test.wait_for_subprocess(pub): + print("pub not terminated") + pub_terminate_rc = 1 + (stdo, stde) = pub.communicate() - pub = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - pub_terminate_rc = 0 - if mosq_test.wait_for_subprocess(pub): - print("pub not terminated") - pub_terminate_rc = 1 - (stdo, stde) = pub.communicate() - - mosq_test.expect_packet(sock, "publish", publish_packet) - rc = pub_terminate_rc - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - (stdo, stde) = broker.communicate() - if rc: - print(stde.decode('utf-8')) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + mosq_test.expect_packet(sock, "publish", publish_packet) + rc = pub_terminate_rc + sock.close() + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/04-rr-env.py b/test/client/04-rr-env.py index a2107746..aae4251c 100755 --- a/test/client/04-rr-env.py +++ b/test/client/04-rr-env.py @@ -46,9 +46,9 @@ def do_test(proto_ver, configenv): puback_packet_req = mqtt_packets.gen_puback(1, proto_ver=proto_ver) puback_packet_resp = mqtt_packets.gen_puback(2, proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + broker = MosquittoBroker(port=port) - try: + with broker: sock = mosq_test.sub_helper(port=port, topic="04/rr/qos1/test/request", qos=1, proto_ver=proto_ver) rr = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, env=env) @@ -68,22 +68,11 @@ def do_test(proto_ver, configenv): if payload in stdo: rc = rr_terminate_rc sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 + if rc: (stdo, stde) = rr.communicate() print(stdo) print(stde) - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - exit(rc) if platform.system() == 'Windows': diff --git a/test/client/04-rr-qos1.py b/test/client/04-rr-qos1.py index f6252c1c..91f37ab7 100755 --- a/test/client/04-rr-qos1.py +++ b/test/client/04-rr-qos1.py @@ -6,11 +6,9 @@ from mosq_test_helper import * mosq_test.require_features(["WITH_BROKER"]) -def do_test(proto_ver): +def do_test(port, proto_ver): rc = 1 - port = mosq_test.get_port() - if proto_ver == 5: V = 'mqttv5' elif proto_ver == 4: @@ -42,43 +40,33 @@ def do_test(proto_ver): puback_packet_req = mqtt_packets.gen_puback(1, proto_ver=proto_ver) puback_packet_resp = mqtt_packets.gen_puback(2, proto_ver=proto_ver) - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) + sock = mosq_test.sub_helper(port=port, topic="04/rr/qos1/test/request", qos=1, proto_ver=proto_ver) - try: - sock = mosq_test.sub_helper(port=port, topic="04/rr/qos1/test/request", qos=1, proto_ver=proto_ver) + rr = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) - rr = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) + mosq_test.expect_packet(sock, "publish", publish_packet_req) + sock.send(puback_packet_req) - mosq_test.expect_packet(sock, "publish", publish_packet_req) - sock.send(puback_packet_req) + sock.send(publish_packet_resp) + mosq_test.expect_packet(sock, "puback", puback_packet_resp) - sock.send(publish_packet_resp) - mosq_test.expect_packet(sock, "puback", puback_packet_resp) - - time.sleep(0.1) - rr_terminate_rc = 0 - if mosq_test.wait_for_subprocess(rr): - print("rr not terminated") - rr_terminate_rc = 1 - (stdo, stde) = rr.communicate() - if payload in stdo.decode('utf-8'): - rc = rr_terminate_rc - sock.close() - except mosq_test.TestError: - pass - except Exception as e: - print(e) - finally: - mosq_test.terminate_broker(broker) - if mosq_test.wait_for_subprocess(broker): - print("broker not terminated") - if rc == 0: rc=1 - if rc: - print(mosq_test.broker_log(broker)) - print("proto_ver=%d" % (proto_ver)) - exit(rc) + time.sleep(0.1) + rr_terminate_rc = 0 + if mosq_test.wait_for_subprocess(rr): + print("rr not terminated") + rr_terminate_rc = 1 + (stdo, stde) = rr.communicate() + if payload in stdo.decode('utf-8'): + rc = rr_terminate_rc + sock.close() + if rc: + raise ValueError(rc) -do_test(proto_ver=3) -do_test(proto_ver=4) -do_test(proto_ver=5) +if __name__ == '__main__': + port = mosq_test.get_port() + broker = MosquittoBroker(port=port) + with broker: + do_test(port, proto_ver=3) + do_test(port, proto_ver=4) + do_test(port, proto_ver=5) diff --git a/test/client/mosq_test_helper.py b/test/client/mosq_test_helper.py index 2599229e..c9c08a9a 100644 --- a/test/client/mosq_test_helper.py +++ b/test/client/mosq_test_helper.py @@ -11,6 +11,7 @@ import mqtt5_opts import mqtt5_props import mqtt5_rc import mqtt_packets +from mosquitto_broker import MosquittoBroker import socket import ssl diff --git a/test/mosquitto_broker.py b/test/mosquitto_broker.py new file mode 100644 index 00000000..363ba13b --- /dev/null +++ b/test/mosquitto_broker.py @@ -0,0 +1,89 @@ +""" +""" + +from subprocess import Popen +from typing import Optional, Union + +import logging +import os + +import mosq_test + +class MosquittoBroker: + def __init__( + self, + port: Optional[int] = None, + use_conf=False, + config_file_name=None, + env=None, + termination_timeout = 10, + ): + assert port is not None + self._port = port + self._use_conf = use_conf + + if config_file_name is None or config_file_name == "": + config_file_name = f"{str(self._port)}.conf" + self._config_file_name = config_file_name + self._process :Optional[Popen]= None + self.env = env + self._termination_timeout = termination_timeout + + def __str__(self): + return f"{self.__class__.__name__}:{self._port}" + + @property + def port(self): + return self._port + + @property + def process(self): + if self._process is None: + raise RuntimeError("process not started yet") + return self._process + + def start(self, expect_fail=False, check_port=True, start_timeout=0.1): + logging.info(f"Starting {self}") + self._process = mosq_test.start_broker( + use_conf=self._use_conf, + filename = self._config_file_name, + port=self._port, + env=self.env, + expect_fail=expect_fail, + check_port=check_port, + timeout=start_timeout + ) + logging.info(f"{self} "+ "Started" if self.is_running() else f"Terminated rc={self._process.returncode}") + + def is_running(self): + return self._process and self._process.poll() is None + + def get_log(self): + return mosq_test.broker_log(self._process) + + def terminate(self): + if self._process: + mosq_test.terminate_broker(self._process) + + def __enter__(self): + self.start() + return self + + def __exit__(self, ex_type, value, tb): + self.stop(ex_type) + + def stop(self, ex_type=None): + if self._process: + timed_out, _ = mosq_test.terminate_broker(self._process) + logging.info(f"Stopping {self}") + logging.info(f"Stopped {self}") + if ex_type is not None or timed_out or self._process.returncode != 0: + print(f"\n{self} log:") + print(self.get_log()) + else: + logging.debug(f"\n{self} log:") + logging.debug(self.get_log()) + if timed_out: + raise RuntimeError(f"{self} timed out when shutting down") + if self._process.returncode != 0: + raise RuntimeError(f"{self} exited with {self._process.returncode}")