diff --git a/test/broker/13-malformed-publish-v5.py b/test/broker/03-publish-bad-flags.py similarity index 54% rename from test/broker/13-malformed-publish-v5.py rename to test/broker/03-publish-bad-flags.py index d68c8370..5d092542 100755 --- a/test/broker/13-malformed-publish-v5.py +++ b/test/broker/03-publish-bad-flags.py @@ -42,14 +42,6 @@ write_config(conf_file, port) broker = mosq_test.start_broker(filename=os.path.basename(__file__), use_conf=True, port=port) try: - # mid == 0 - publish_packet = mosq_test.gen_publish(topic="test/topic", qos=1, mid=0, proto_ver=5) - do_test(publish_packet, mqtt5_rc.MQTT_RC_PROTOCOL_ERROR, "mid == 0") - - # qos > 2 - publish_packet = mosq_test.gen_publish(topic="test/topic", qos=3, mid=1, proto_ver=5) - do_test(publish_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "qos > 2") - # qos > maximum qos publish_packet = mosq_test.gen_publish(topic="test/topic", qos=2, mid=1, proto_ver=5) do_test(publish_packet, mqtt5_rc.MQTT_RC_QOS_NOT_SUPPORTED, "qos > maximum qos") @@ -57,35 +49,6 @@ try: # retain not supported publish_packet = mosq_test.gen_publish(topic="test/topic", qos=0, retain=True, proto_ver=5, payload="a") do_test(publish_packet, mqtt5_rc.MQTT_RC_RETAIN_NOT_SUPPORTED, "retain not supported") - - # Incorrect property - props = mqtt5_props.gen_uint32_prop(mqtt5_props.PROP_SESSION_EXPIRY_INTERVAL, 0) - publish_packet = mosq_test.gen_publish(topic="test/topic", qos=1, mid=1, proto_ver=5, properties=props) - do_test(publish_packet, mqtt5_rc.MQTT_RC_PROTOCOL_ERROR, "Incorrect property") - - # Truncated packet, remaining length only - publish_packet = struct.pack("!BB", 48, 0) - do_test(publish_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, remaining length only") - - # Truncated packet, empty topic - publish_packet = struct.pack("!BBH", 48, 2, 0) - do_test(publish_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, empty topic") - - # Truncated packet, with topic, no properties - publish_packet = struct.pack("!BBH1s", 48, 3, 1, b"a") - do_test(publish_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, with topic, no properties") - - # Truncated packet, with topic, no mid - publish_packet = struct.pack("!BBH1s", 48+2, 3, 1, b"a") - do_test(publish_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, with topic, no mid") - - # Truncated packet, with topic, with mid, no properties - publish_packet = struct.pack("!BBH1sH", 48+2, 5, 1, b"a", 1) - do_test(publish_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, with topic, with mid, no properties") - - # Bad topic - publish_packet = mosq_test.gen_publish(topic="#/test/topic", qos=1, mid=1, proto_ver=5) - do_test(publish_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Bad topic") except mosq_test.TestError: pass finally: diff --git a/test/broker/13-malformed-subscribe-v5.py b/test/broker/13-malformed-subscribe-v5.py deleted file mode 100755 index 219e06ea..00000000 --- a/test/broker/13-malformed-subscribe-v5.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python3 - -# Test whether the broker handles malformed packets correctly - SUBSCRIBE -# MQTTv5 - -from mosq_test_helper import * - -rc = 1 - -def do_test(subscribe_packet, reason_code, error_string, port): - global rc - rc = 1 - - connect_packet = mosq_test.gen_connect("13-malformed-subscribe-v5", proto_ver=5) - connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5) - - mid = 0 - disconnect_packet = mosq_test.gen_disconnect(proto_ver=5, reason_code=reason_code) - - sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) - mosq_test.do_send_receive(sock, subscribe_packet, disconnect_packet, error_string=error_string) - rc = 0 - - -def all_tests(start_broker=False): - global rc - port = mosq_test.get_port() - - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: - # mid == 0 - subscribe_packet = mosq_test.gen_subscribe(topic="13-malformed-subscribe/test/topic", qos=1, mid=0, proto_ver=5) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "mid == 0", port) - - # qos > 2 - subscribe_packet = mosq_test.gen_subscribe(topic="13-malformed-subscribe/test/topic", qos=3, mid=1, proto_ver=5) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "qos > 2", port) - - # retain handling = 0x30 - subscribe_packet = mosq_test.gen_subscribe(topic="13-malformed-subscribe/test/topic", qos=0x30, mid=1, proto_ver=5) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "retain handling = 0x30", port) - - # subscription options = 0xC0 - subscribe_packet = mosq_test.gen_subscribe(topic="13-malformed-subscribe/test/topic", qos=0xC0, mid=1, proto_ver=5) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "subscription options = 0xC0", port) - - # command flags != 0x02 - subscribe_packet = mosq_test.gen_subscribe(topic="13-malformed-subscribe/test/topic", qos=1, mid=1, proto_ver=5, cmd=128) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "command flags != 0x02", port) - - # Incorrect property - props = mqtt5_props.gen_uint32_prop(mqtt5_props.PROP_SESSION_EXPIRY_INTERVAL, 0) - subscribe_packet = mosq_test.gen_subscribe(topic="13-malformed-subscribe/test/topic", qos=1, mid=1, proto_ver=5, properties=props) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Incorrect property", port) - - # Truncated packet, no mid - subscribe_packet = struct.pack("!BB", 130, 0) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, no mid", port) - - # Truncated packet, no properties - subscribe_packet = struct.pack("!BBH", 130, 2, 1) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, no properties", port) - - # Truncated packet, with properties field - subscribe_packet = struct.pack("!BBHB", 130, 3, 1, 0) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, with properties field", port) - - # Truncated packet, with properties field, empty topic - subscribe_packet = struct.pack("!BBHBH", 130, 5, 1, 0, 0) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, with properties field, empty topic", port) - - # Truncated packet, with properties field, empty topic, with qos - subscribe_packet = struct.pack("!BBHBHB", 130, 6, 1, 0, 0, 1) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, with properties field, empty topic, with qos", port) - - # Truncated packet, with properties field, with topic, no qos - subscribe_packet = struct.pack("!BBHBH1s", 130, 6, 1, 0, 1, b"a") - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, with properties field, with topic, no qos", port) - - # Truncated packet, with properties field, with 1st topic and qos ok, second topic ok, no second qos - subscribe_packet = struct.pack("!BBHHH1sBH1s", 130, 10, 1, 0, 1, b"a", 0, 1, b"b") - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, with properties field, with 1st topic and qos ok, second topic ok, no second qos", port) - - # Bad topic - subscribe_packet = mosq_test.gen_subscribe(topic="#/13-malformed-subscribe/test/topic", qos=1, mid=1, proto_ver=5) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Bad topic", port) - - # Subscription ID set to 0 - props = mqtt5_props.gen_varint_prop(mqtt5_props.PROP_SUBSCRIPTION_IDENTIFIER, 0) - subscribe_packet = mosq_test.gen_subscribe(topic="13-malformed-subscribe/test/topic", qos=1, mid=1, proto_ver=5, properties=props) - do_test(subscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Subscription ID set to 0", port) - except mosq_test.TestError: - pass - finally: - if start_broker: - broker.terminate() - 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 - -if __name__ == '__main__': - all_tests(True) diff --git a/test/broker/13-malformed-unsubscribe-v5.py b/test/broker/13-malformed-unsubscribe-v5.py deleted file mode 100755 index 8b2412f1..00000000 --- a/test/broker/13-malformed-unsubscribe-v5.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env python3 - -# Test whether the broker handles malformed packets correctly - UNSUBSCRIBE -# MQTTv5 - -from mosq_test_helper import * - -rc = 1 - -def do_test(unsubscribe_packet, reason_code, error_string, port): - global rc - - rc = 1 - - connect_packet = mosq_test.gen_connect("13-malformed-unsubscribe", proto_ver=5) - connack_packet = mosq_test.gen_connack(rc=0, proto_ver=5) - - mid = 0 - disconnect_packet = mosq_test.gen_disconnect(proto_ver=5, reason_code=reason_code) - - sock = mosq_test.do_client_connect(connect_packet, connack_packet, port=port) - mosq_test.do_send_receive(sock, unsubscribe_packet, disconnect_packet, error_string=error_string) - rc = 0 - - -def all_tests(start_broker=False): - global rc - - port = mosq_test.get_port() - if start_broker: - broker = mosq_test.start_broker(filename=os.path.basename(__file__), port=port) - - try: - # mid == 0 - unsubscribe_packet = mosq_test.gen_unsubscribe(topic="13-malformed-unsubscribe/test/topic", mid=0, proto_ver=5) - do_test(unsubscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "mid == 0", port) - - # command flags != 0x02 - unsubscribe_packet = mosq_test.gen_unsubscribe(topic="13-malformed-unsubscribe/test/topic", mid=1, proto_ver=5, cmd=160) - do_test(unsubscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "command flags != 0x02", port) - - # Incorrect property - props = mqtt5_props.gen_uint32_prop(mqtt5_props.PROP_SESSION_EXPIRY_INTERVAL, 0) - unsubscribe_packet = mosq_test.gen_unsubscribe(topic="13-malformed-unsubscribe/test/topic", mid=1, proto_ver=5, properties=props) - do_test(unsubscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Incorrect property", port) - - # Truncated packet, no mid - unsubscribe_packet = struct.pack("!BB", 162, 0) - do_test(unsubscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, no mid", port) - - # Truncated packet, no properties - unsubscribe_packet = struct.pack("!BBH", 162, 2, 1) - do_test(unsubscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, no properties", port) - - # Truncated packet, with properties field, no topic - unsubscribe_packet = struct.pack("!BBHH", 162, 4, 1, 0) - do_test(unsubscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, with properties field, no topic", port) - - # Truncated packet, with properties field, empty topic - unsubscribe_packet = struct.pack("!BBHHH", 162, 5, 1, 0, 0) - do_test(unsubscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Truncated packet, with properties field, empty topic", port) - - # Bad topic - unsubscribe_packet = mosq_test.gen_unsubscribe(topic="#/13-malformed-unsubscribe/test/topic", mid=1, proto_ver=5) - do_test(unsubscribe_packet, mqtt5_rc.MQTT_RC_MALFORMED_PACKET, "Bad topic", port) - except mosq_test.TestError: - pass - finally: - if start_broker: - broker.terminate() - 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 - - -if __name__ == '__main__': - all_tests(True) diff --git a/test/broker/Makefile b/test/broker/Makefile index f1e99392..7c1879da 100644 --- a/test/broker/Makefile +++ b/test/broker/Makefile @@ -76,6 +76,7 @@ msg_sequence_test: 03 : #./03-publish-qos1-queued-bytes.py ./03-pattern-matching.py + ./03-publish-bad-flags.py ./03-publish-b2c-disconnect-qos1.py ./03-publish-b2c-disconnect-qos2.py ./03-publish-b2c-qos1-len.py @@ -235,9 +236,6 @@ endif ./12-prop-subpub-payload-format.py 13 : - ./13-malformed-publish-v5.py - ./13-malformed-subscribe-v5.py - ./13-malformed-unsubscribe-v5.py 14 : ifeq ($(WITH_TLS),yes) diff --git a/test/broker/data/SUBSCRIBE.json b/test/broker/data/SUBSCRIBE.json index 27f172ef..19eec386 100644 --- a/test/broker/data/SUBSCRIBE.json +++ b/test/broker/data/SUBSCRIBE.json @@ -33,6 +33,7 @@ { "name": "82 multiple topic 1 len 0", "ver":4, "msgs": [{"type":"send", "payload":"82 09 1234 0000 00 0001 71 00"}]}, { "name": "82 multiple topic 2 len 0", "ver":4, "msgs": [{"type":"send", "payload":"82 09 1234 0001 71 00 0000 00"}]}, { "name": "82 multiple topic 1,2 len 0", "ver":4, "msgs": [{"type":"send", "payload":"82 08 1234 0000 00 0000 00"}]}, + { "name": "82 mid 0", "ver":4, "msgs": [{"type":"send", "payload":"82 06 0000 0001 70 00"}]}, { "name": "82 single ok QoS 0 [MQTT-3.8.4-1]", "ver":4, "expect_disconnect":false, "msgs": [ {"type":"send", "payload":"82 06 1234 0001 70 00"}, {"type":"recv", "payload":"90 03 1234 00"} @@ -210,6 +211,10 @@ { "name": "82 multiple ok [MQTT-3.8.4-4]", "ver":5, "expect_disconnect":false, "msgs": [ {"type":"send", "payload":"82 0B 1234 00 0001 70 00 0001 71 00"}, {"type":"recv", "payload":"90 05 1234 00 00 00"} + ]}, + { "name": "82 mid 0", "ver":5, "msgs": [ + {"type":"send", "payload":"82 07 0000 00 0001 70 00"}, + {"type":"recv", "payload":"E0 01 81"} ]} ] }, diff --git a/test/broker/data/UNSUBSCRIBE.json b/test/broker/data/UNSUBSCRIBE.json index 8df4f977..46ec051d 100644 --- a/test/broker/data/UNSUBSCRIBE.json +++ b/test/broker/data/UNSUBSCRIBE.json @@ -35,7 +35,8 @@ { "name": "A2 topic with U+001F", "ver":4, "msgs": [{"type":"send", "payload":"A2 09 1234 0005 746F701F70"}]}, { "name": "A2 topic with U+007F", "ver":4, "msgs": [{"type":"send", "payload":"A2 09 1234 0005 746F707F70"}]}, { "name": "A2 topic with U+009F", "ver":4, "msgs": [{"type":"send", "payload":"A2 09 1234 0005 746FC29F70"}]}, - { "name": "A2 topic with U+FFFF", "ver":4, "msgs": [{"type":"send", "payload":"A2 09 1234 0005 746FEDBFBF"}]} + { "name": "A2 topic with U+FFFF", "ver":4, "msgs": [{"type":"send", "payload":"A2 09 1234 0005 746FEDBFBF"}]}, + { "name": "A2 zero mid", "ver":4, "msgs": [ {"type":"send", "payload":"A2 08 0000 0001 70 0001 71"}]} ] }, { @@ -135,6 +136,10 @@ { "name": "A2 multiple [MQTT-3.10.4-6]", "ver":5, "expect_disconnect":false, "msgs": [ {"type":"send", "payload":"A2 09 1234 00 0001 70 0001 71"}, {"type":"recv", "payload":"B0 05 1234 00 11 11"} + ]}, + { "name": "A2 zero mid", "ver":5, "msgs": [ + {"type":"send", "payload":"A2 06 0000 00 0001 70"}, + {"type":"recv", "payload":"E0 01 81"} ]} ] }, diff --git a/test/broker/test.py b/test/broker/test.py index f8f9be52..9c351003 100755 --- a/test/broker/test.py +++ b/test/broker/test.py @@ -54,6 +54,7 @@ tests = [ #(1, './03-publish-qos1-queued-bytes.py'), (1, './03-pattern-matching.py'), + (1, './03-publish-bad-flags.py'), (1, './03-publish-b2c-disconnect-qos1.py'), (1, './03-publish-b2c-disconnect-qos2.py'), (1, './03-publish-b2c-qos1-len.py'), @@ -200,10 +201,6 @@ tests = [ (1, './12-prop-subpub-content-type.py'), (1, './12-prop-subpub-payload-format.py'), - (1, './13-malformed-publish-v5.py'), - (1, './13-malformed-subscribe-v5.py'), - (1, './13-malformed-unsubscribe-v5.py'), - (1, './14-dynsec-acl.py'), (1, './14-dynsec-allow-wildcard.py'), (1, './14-dynsec-anon-group.py'),