diff --git a/ChangeLog.txt b/ChangeLog.txt index 9e1d91b2..21de29d9 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -159,6 +159,8 @@ Client library: - TLS v1.1 now not enabled by default. It is still possible to explicitly choose TLS v1.1, but this is not recommended and will be removed in a future version. +- Add `mosquitto_unsubscribe2_v5_callback_set`, which provides a callback that + gives access to reason codes for each of the unsubscription requests. Clients: - Add `-W` timeout support to Windows. diff --git a/include/mqtt_protocol.h b/include/mqtt_protocol.h index a8b0056c..c0ac3f27 100644 --- a/include/mqtt_protocol.h +++ b/include/mqtt_protocol.h @@ -222,7 +222,7 @@ enum mqtt5_property { MQTT_PROP_REQUEST_RESPONSE_INFORMATION = 25,/* Byte : CONNECT */ MQTT_PROP_RESPONSE_INFORMATION = 26, /* UTF-8 string : CONNACK */ MQTT_PROP_SERVER_REFERENCE = 28, /* UTF-8 string : CONNACK, DISCONNECT */ - MQTT_PROP_REASON_STRING = 31, /* UTF-8 string : All except Will properties */ + MQTT_PROP_REASON_STRING = 31, /* UTF-8 string : CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBACK, UNSUBACK, DISCONNECT, AUTH */ MQTT_PROP_RECEIVE_MAXIMUM = 33, /* 2 byte int : CONNECT, CONNACK */ MQTT_PROP_TOPIC_ALIAS_MAXIMUM = 34, /* 2 byte int : CONNECT, CONNACK */ MQTT_PROP_TOPIC_ALIAS = 35, /* 2 byte int : PUBLISH */ diff --git a/lib/handle_unsuback.c b/lib/handle_unsuback.c index 223e8c82..ee979a0c 100644 --- a/lib/handle_unsuback.c +++ b/lib/handle_unsuback.c @@ -72,6 +72,9 @@ int handle__unsuback(struct mosquitto *mosq) rc = property__read_all(CMD_UNSUBACK, &mosq->in_packet, &properties); if(rc) return rc; } + if(mosq->in_packet.pos < mosq->in_packet.remaining_length){ + return MOSQ_ERR_MALFORMED_PACKET; + } #ifdef WITH_BROKER /* Immediately free, we don't do anything with Reason String or User Property at the moment */ diff --git a/test/broker/data/UNSUBACK.json b/test/broker/data/UNSUBACK.json index 67bc8740..4bb9a910 100644 --- a/test/broker/data/UNSUBACK.json +++ b/test/broker/data/UNSUBACK.json @@ -4,7 +4,7 @@ "ver":4, "tests": [ { "name": "B0 [MQTT-3.1.0-1]", "connect":false, "msgs": [{"type":"send", "payload":"B0 02 0001"}]}, - { "name": "B0 long", "msgs": [{"type":"send", "payload":"B0 03 0001 00"}]}, + { "name": "B0 multi", "msgs": [{"type":"send", "payload":"B0 03 0001 00"}]}, { "name": "B0 short 0", "msgs": [{"type":"send", "payload":"B0 00"}]}, { "name": "B0 short 1", "msgs": [{"type":"send", "payload":"B0 01 01"}]}, { "name": "B0", "msgs": [{"type":"send", "payload":"B0 02 0001"}]}, @@ -19,7 +19,7 @@ "ver":5, "tests": [ { "name": "B0 [MQTT-3.1.0-1]", "connect":false, "msgs": [{"type":"send", "payload":"B0 03 0001 00"}]}, - { "name": "B0 long", "msgs": [ + { "name": "B0 multi", "msgs": [ {"type":"send", "payload":"B0 04 0001 00 00"}, {"type":"recv", "payload":"E0 01 82"} ]}, diff --git a/test/lib/CMakeLists.txt b/test/lib/CMakeLists.txt index 60be580f..b70c696f 100644 --- a/test/lib/CMakeLists.txt +++ b/test/lib/CMakeLists.txt @@ -3,6 +3,7 @@ add_subdirectory(cpp) file(GLOB PY_TEST_FILES [0-9][0-9]-*.py) +list(APPEND PY_TEST_FILES "${CMAKE_CURRENT_SOURCE_DIR}/msg_sequence_test.py") set(EXCLUDE_LIST 03-publish-c2b-qos1-timeout diff --git a/test/lib/Makefile b/test/lib/Makefile index 80b3168b..a37dbc85 100644 --- a/test/lib/Makefile +++ b/test/lib/Makefile @@ -13,7 +13,7 @@ check : test ptest : test-compile msg_sequence_test ./test.py -test : c cpp +test : c cpp msg_sequence_test msg_sequence_test: test-compile-c ./msg_sequence_test.py diff --git a/test/lib/c/fuzzish.c b/test/lib/c/fuzzish.c index 210e6523..3770acd5 100644 --- a/test/lib/c/fuzzish.c +++ b/test/lib/c/fuzzish.c @@ -7,6 +7,7 @@ #include static int run = -1; +static int proto_ver; static void signal_handler(int s) { @@ -16,8 +17,11 @@ static void signal_handler(int s) static void prop_test(const mosquitto_property *props) { mosquitto_property *dest = NULL; + int rc; - if(mosquitto_property_copy_all(&dest, props)){ + rc = mosquitto_property_copy_all(&dest, props); + if(rc){ + printf("bad prop_test: %s\n", mosquitto_strerror(rc)); exit(1); } mosquitto_property_free_all(&dest); @@ -25,12 +29,16 @@ static void prop_test(const mosquitto_property *props) static void msg_test(const struct mosquitto_message *msg) { - struct mosquitto_message *dest = NULL; + struct mosquitto_message dest; + int rc; - if(mosquitto_message_copy(dest, msg)){ + memset(&dest, 0, sizeof(dest)); + rc = mosquitto_message_copy(&dest, msg); + if(rc){ + printf("bad msg_test: %s\n", mosquitto_strerror(rc)); exit(1); } - mosquitto_message_free(&dest); + mosquitto_message_free_contents(&dest); } static void on_pre_connect(struct mosquitto *mosq, void *obj) @@ -43,59 +51,123 @@ static void on_connect(struct mosquitto *mosq, void *obj, int rc) int mid; mosquitto_property *props = NULL; - if(rc || obj != mosquitto_userdata(mosq)){ - exit(1); - }else{ - //mosquitto_disconnect(mosq); - } if(command){ + if(proto_ver == 5){ + if(!strncmp(command, "subscribe", strlen("subscribe"))){ + rc = mosquitto_property_add_varint(&props, MQTT_PROP_SUBSCRIPTION_IDENTIFIER, 268435455); + if(rc){ + printf("bad on_connect prop add: %s\n", mosquitto_strerror(rc)); + exit(1); + } + rc = mosquitto_property_add_string_pair(&props, MQTT_PROP_USER_PROPERTY, "key", "value"); + if(rc){ + printf("bad on_connect prop add: %s\n", mosquitto_strerror(rc)); + exit(1); + } + }else if(!strncmp(command, "unsubscribe", strlen("unsubscribe"))){ + rc = mosquitto_property_add_string_pair(&props, MQTT_PROP_USER_PROPERTY, "key", "value"); + if(rc){ + printf("bad on_connect prop add: %s\n", mosquitto_strerror(rc)); + exit(1); + } + }else if(!strncmp(command, "publish", strlen("publish"))){ + rc = mosquitto_property_add_byte(&props, MQTT_PROP_PAYLOAD_FORMAT_INDICATOR, 1); + if(rc){ + printf("bad on_connect prop add: %s\n", mosquitto_strerror(rc)); + exit(1); + } + rc = mosquitto_property_add_int32(&props, MQTT_PROP_MESSAGE_EXPIRY_INTERVAL, UINT32_MAX); + if(rc){ + printf("bad on_connect prop add: %s\n", mosquitto_strerror(rc)); + exit(1); + } + rc = mosquitto_property_add_int16(&props, MQTT_PROP_TOPIC_ALIAS, UINT16_MAX); + if(rc){ + printf("bad on_connect prop add: %s\n", mosquitto_strerror(rc)); + exit(1); + } + rc = mosquitto_property_add_string(&props, MQTT_PROP_RESPONSE_TOPIC, "response/topic"); + if(rc){ + printf("bad on_connect prop add: %s\n", mosquitto_strerror(rc)); + exit(1); + } + rc = mosquitto_property_add_binary(&props, MQTT_PROP_CORRELATION_DATA, "7deac5c5-8802-44ff-86ce-11479f337419", strlen("7deac5c5-8802-44ff-86ce-11479f337419")); + if(rc){ + printf("bad on_connect prop add: %s\n", mosquitto_strerror(rc)); + exit(1); + } + rc = mosquitto_property_add_string(&props, MQTT_PROP_CONTENT_TYPE, "text/plain"); + if(rc){ + printf("bad on_connect prop add: %s\n", mosquitto_strerror(rc)); + exit(1); + } + rc = mosquitto_property_add_string_pair(&props, MQTT_PROP_USER_PROPERTY, "key", "value"); + if(rc){ + printf("bad on_connect prop add: %s\n", mosquitto_strerror(rc)); + exit(1); + } + } + } + if(!strcmp(command, "subscribe-2")){ - mosquitto_subscribe_v5(mosq, &mid, "test/subscribe", 2, 0, props); - if(mid != 1){ + rc = mosquitto_subscribe_v5(mosq, &mid, "test/subscribe", 2, 0, props); + if(rc || mid != 1){ + printf("bad on_connect subscribe-2 %d || %d\n", rc, mid); exit(1); } }else if(!strcmp(command, "subscribe-1")){ - mosquitto_subscribe_v5(mosq, &mid, "test/subscribe", 1, 0, props); - if(mid != 1){ + rc = mosquitto_subscribe_v5(mosq, &mid, "test/subscribe", 1, 0, props); + if(rc || mid != 1){ + printf("bad on_connect subscribe-1 %d || %d\n", rc, mid); exit(1); } }else if(!strcmp(command, "subscribe-0")){ - mosquitto_subscribe_v5(mosq, &mid, "test/subscribe", 0, 0, props); - if(mid != 1){ + rc = mosquitto_subscribe_v5(mosq, &mid, "test/subscribe", 0, 0, props); + if(rc || mid != 1){ + printf("bad on_connect subscribe-0 %d || %d\n", rc, mid); exit(1); } }else if(!strcmp(command, "subscribe-multiple")){ char *subs[] = {"test/subscribe1", "test/subscribe2"}; - mosquitto_subscribe_multiple(mosq, &mid, 2, subs, 2, 0, props); - if(mid != 1){ + rc = mosquitto_subscribe_multiple(mosq, &mid, 2, subs, 2, 0, props); + if(rc || mid != 1){ + printf("bad on_connect subscribe-multiple %d || %d\n", rc, mid); exit(1); } }else if(!strcmp(command, "unsubscribe")){ - mosquitto_unsubscribe_v5(mosq, &mid, "test/subscribe", props); - if(mid != 1){ + rc = mosquitto_unsubscribe_v5(mosq, &mid, "test/subscribe", props); + if(rc || mid != 1){ + printf("bad on_connect unsubscribe %d || %d\n", rc, mid); exit(1); } }else if(!strcmp(command, "unsubscribe-multiple")){ char *subs[] = {"test/subscribe1", "test/subscribe2"}; - mosquitto_unsubscribe_multiple(mosq, &mid, 2, subs, props); - if(mid != 1){ + rc = mosquitto_unsubscribe_multiple(mosq, &mid, 2, subs, props); + if(rc || mid != 1){ + printf("bad on_connect unsubscribe-multiple %d || %d\n", rc, mid); exit(1); } }else if(!strcmp(command, "publish-2")){ - mosquitto_publish_v5(mosq, &mid, "test/publish", strlen("message"), "message", 2, 0, props); - if(mid != 1){ + rc = mosquitto_publish_v5(mosq, &mid, "test/publish", strlen("message"), "message", 2, 0, props); + if(rc || mid != 1){ + printf("bad on_connect publish-2 %d || %d\n", rc, mid); exit(1); } }else if(!strcmp(command, "publish-1")){ - mosquitto_publish_v5(mosq, &mid, "test/publish", strlen("message"), "message", 1, 0, props); - if(mid != 1){ + rc = mosquitto_publish_v5(mosq, &mid, "test/publish", strlen("message"), "message", 1, 0, props); + if(rc || mid != 1){ + printf("bad on_connect publish-1 %d || %d\n", rc, mid); exit(1); } }else if(!strcmp(command, "publish-0")){ - mosquitto_publish_v5(mosq, &mid, "test/publish", strlen("message"), "message", 0, 0, props); - if(mid != 1){ + rc = mosquitto_publish_v5(mosq, &mid, "test/publish", strlen("message"), "message", 0, 0, props); + if(rc || mid != 1){ + printf("bad on_connect publish-0 %d || %d\n", rc, mid); exit(1); } + }else{ + printf("bad on_connect command '%s'\n", command); + exit(1); } } } @@ -176,6 +248,7 @@ static void on_unsubscribe_v5(struct mosquitto *mosq, void *obj, int reason_code static void on_log(struct mosquitto *mosq, void *obj, int level, const char *str) { if(str == NULL){ + printf("bad on_log\n"); exit(1); } int i = strlen(str); @@ -197,7 +270,6 @@ int main(int argc, char *argv[]) int rc; struct mosquitto *mosq; int port; - int proto_ver; bool clean_start; char *command = NULL; @@ -247,7 +319,10 @@ int main(int argc, char *argv[]) mosquitto_int_option(mosq, MOSQ_OPT_PROTOCOL_VERSION, proto_ver); rc = mosquitto_connect(mosq, "localhost", port, 60); - if(rc != MOSQ_ERR_SUCCESS) return rc; + if(rc != MOSQ_ERR_SUCCESS){ + printf("bad connect\n"); + return rc; + } while(run == -1){ mosquitto_loop(mosq, -1, 1); @@ -256,5 +331,5 @@ int main(int argc, char *argv[]) mosquitto_destroy(mosq); mosquitto_lib_cleanup(); - return run; + return 0; } diff --git a/test/lib/data/AUTH.json b/test/lib/data/AUTH.json new file mode 100644 index 00000000..67b3204d --- /dev/null +++ b/test/lib/data/AUTH.json @@ -0,0 +1,27 @@ +[ + { + "comment": "AUTH TESTS ARE INCOMPLETE", + "group": "v3.1.1 AUTH", + "ver":4, + "tests": [ + { "name": "F0 [MQTT-3.1.0-1]", "connack":false, "msgs": [{"type":"send", "payload":"F0 00"}]}, + { "name": "F0 long", "msgs": [{"type":"send", "payload":"F0 01 00"}]}, + { "name": "F1", "msgs": [{"type":"send", "payload":"F1 00"}]}, + { "name": "F2", "msgs": [{"type":"send", "payload":"F2 00"}]}, + { "name": "F4", "msgs": [{"type":"send", "payload":"F4 00"}]}, + { "name": "F8", "msgs": [{"type":"send", "payload":"F8 00"}]} + ] + }, + { + "group": "v5.0 AUTH", + "ver":5, + "tests": [ + { "name": "F0 [MQTT-3.1.0-1]", "connack":false, "msgs": [{"type":"send", "payload":"F0 00"}]}, + { "name": "F0 long", "msgs": [{"type":"send", "payload":"F0 01 00"}]}, + { "name": "F1", "msgs": [{"type":"send", "payload":"F1 00"}]}, + { "name": "F2", "msgs": [{"type":"send", "payload":"F2 00"}]}, + { "name": "F4", "msgs": [{"type":"send", "payload":"F4 00"}]}, + { "name": "F8", "msgs": [{"type":"send", "payload":"F8 00"}]} + ] + } +] diff --git a/test/lib/data/CONNACK.json b/test/lib/data/CONNACK.json index cd21dbf1..d6855546 100644 --- a/test/lib/data/CONNACK.json +++ b/test/lib/data/CONNACK.json @@ -76,50 +76,58 @@ ] }, { - "group": "v5.0 CONNACK ALLOWED PROPERTIES", + "group": "v5.0 CONNACK ALLOWED PROPERTIES VALID", "comment": "CMD RL FLAG RC PROPLEN PROPS", "ver":5, "connack": false, - "disable":true, + "expect_disconnect":false, "tests": [ { "name": "20 with session-expiry-interval (four byte integer)", "msgs": [{"type":"send", "payload":"20 08 00 00 05 1100000001"}]}, - { "name": "20 with session-expiry-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 11"}]}, { "name": "20 with receive-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"20 06 00 00 03210101"}]}, - { "name": "20 with receive-maximum (two byte integer) 0 value", "msgs": [{"type":"send", "payload":"20 06 00 00 03 21 0000"}]}, - { "name": "20 with receive-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 21"}]}, { "name": "20 with maximum-qos (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 2400"}]}, - { "name": "20 with maximum-qos (byte) 2 value", "msgs": [{"type":"send", "payload":"20 05 00 00 02 2402"}]}, - { "name": "20 with maximum-qos (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 24"}]}, { "name": "20 with retain-available (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 2500"}]}, - { "name": "20 with retain-available (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 25"}]}, { "name": "20 with maximum-packet-size (four byte integer)", "msgs": [{"type":"send", "payload":"20 08 00 00 05 2700000001"}]}, { "name": "20 with maximum-packet-size (four byte integer)", "msgs": [{"type":"send", "payload":"20 08 00 00 05 2700000001"}]}, - { "name": "20 with maximum-packet-size (four byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 27"}]}, - { "name": "20 with assigned-client-identifier (UTF-8 string)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 12000170"}]}, - { "name": "20 with assigned-client-identifier (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 12"}]}, - { "name": "20 with assigned-client-identifier (UTF-8 string) empty", "msgs": [{"type":"send", "payload":"20 06 00 00 03 12 0000"}]}, { "name": "20 with topic-alias-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"20 06 00 00 03 220101"}]}, - { "name": "20 with topic-alias-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 22"}]}, { "name": "20 with reason-string property", "msgs": [{"type":"send", "payload":"20 07 00 00 04 1F000170"}]}, - { "name": "20 with reason-string property missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 1F"}]}, { "name": "20 with reason-string property empty", "msgs": [{"type":"send", "payload":"20 06 00 00 03 1F 0000"}]}, { "name": "20 with wildcard-subscription-available (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 2800"}]}, - { "name": "20 with wildcard-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 28"}]}, { "name": "20 with subscription-identifier-available (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 2900"}]}, - { "name": "20 with subscription-identifier-available (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 29"}]}, { "name": "20 with server-keep-alive (two byte integer)", "msgs": [{"type":"send", "payload":"20 06 00 00 03 130101"}]}, - { "name": "20 with server-keep-alive (two byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 13"}]}, { "name": "20 with shared-subscription-available (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 2A00"}]}, - { "name": "20 with shared-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 2A"}]}, { "name": "20 with response-information (UTF-8 string)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 1A000170"}]}, - { "name": "20 with response-information (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 1A"}]}, { "name": "20 with server-reference (UTF-8 string)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 1C000170"}]}, - { "name": "20 with server-reference (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 1C"}]}, { "name": "20 with authentication-method (UTF-8 string)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 15000170"}]}, - { "name": "20 with authentication-method (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 15"}]}, { "name": "20 with authentication-data (binary data)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 16000170"}]}, + { "name": "20 with user-property", "msgs": [{"type":"send", "payload":"20 0A 00 00 07 26000170000171"}]} + ] + }, + { + "group": "v5.0 CONNACK ALLOWED PROPERTIES INVALID", + "comment": "CMD RL FLAG RC PROPLEN PROPS", + "ver":5, + "connack": false, + "expect_disconnect":true, + "tests": [ + { "name": "20 with session-expiry-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 11"}]}, + { "name": "20 with receive-maximum (two byte integer) 0 value", "msgs": [{"type":"send", "payload":"20 06 00 00 03 21 0000"}]}, + { "name": "20 with receive-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 21"}]}, + { "name": "20 with assigned-client-identifier (UTF-8 string)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 12000170"}]}, + { "name": "20 with maximum-qos (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 24"}]}, + { "name": "20 with maximum-qos (byte) 2 value", "msgs": [{"type":"send", "payload":"20 05 00 00 02 2402"}]}, + { "name": "20 with retain-available (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 25"}]}, + { "name": "20 with maximum-packet-size (four byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 27"}]}, + { "name": "20 with assigned-client-identifier (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 12"}]}, + { "name": "20 with topic-alias-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 22"}]}, + { "name": "20 with reason-string property missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 1F"}]}, + { "name": "20 with wildcard-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 28"}]}, + { "name": "20 with subscription-identifier-available (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 29"}]}, + { "name": "20 with server-keep-alive (two byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 13"}]}, + { "name": "20 with shared-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 2A"}]}, + { "name": "20 with response-information (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 1A"}]}, + { "name": "20 with server-reference (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 1C"}]}, + { "name": "20 with authentication-method (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 15"}]}, { "name": "20 with authentication-data (binary data) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 16"}]}, - { "name": "20 with user-property", "msgs": [{"type":"send", "payload":"20 0A 00 00 07 26000170000171"}]}, { "name": "20 with user-property missing value", "msgs": [{"type":"send", "payload":"20 07 00 00 04 26000170"}]}, { "name": "20 with user-property missing key,value", "msgs": [{"type":"send", "payload":"20 04 00 00 01 26"}]} ] @@ -129,184 +137,49 @@ "comment": "CMD RL FLAG RC PROPLEN PROPS", "ver":5, "connack": false, - "disable": true, "tests": [ - { "name": "20 with payload-format-indicator (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0100"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with request-problem-information (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 1700"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with payload-format-indicator (byte) missing", "msgs": [ - {"type":"send", "payload":"20 04 00 00 01 01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with request-problem-information (byte) missing", "msgs": [ - {"type":"send", "payload":"20 04 00 00 01 17"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - - { "name": "20 with message-expiry-interval (four byte integer)", "msgs": [ - {"type":"send", "payload":"20 08 00 00 05 0200000001"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with will-delay-interval (four byte integer)", "msgs": [ - {"type":"send", "payload":"20 08 00 00 05 1800000001"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with message-expiry-interval (four byte integer) missing", "msgs": [ - {"type":"send", "payload":"20 04 00 00 01 02"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with will-delay-interval (four byte integer) missing", "msgs": [ - {"type":"send", "payload":"20 04 00 00 01 18"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with content-type (UTF-8 string)", "msgs": [ - {"type":"send", "payload":"20 07 00 00 04 03000170"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with response-topic (UTF-8 string)", "msgs": [ - {"type":"send", "payload":"20 07 00 00 04 08000170"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - - { "name": "20 with content-type (UTF-8 string) missing", "msgs": [ - {"type":"send", "payload":"20 04 00 00 01 03"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with response-topic (UTF-8 string) missing", "msgs": [ - {"type":"send", "payload":"20 04 00 00 01 08"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - - { "name": "20 with correlation-data (binary data)", "msgs": [ - {"type":"send", "payload":"20 07 00 00 04 09000170"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with correlation-data (binary data) missing", "msgs": [ - {"type":"send", "payload":"20 04 00 00 01 09"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - - { "name": "20 with subscription-identifier (variable byte integer)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0B01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - - { "name": "20 with subscription-identifier (variable byte integer) missing", "msgs": [ - {"type":"send", "payload":"20 04 00 00 01 0B"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - - { "name": "20 with topic-alias (two byte integer)", "msgs": [ - {"type":"send", "payload":"20 06 00 00 03 230101"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - - { "name": "20 with topic-alias (two byte integer) missing", "msgs": [ - {"type":"send", "payload":"20 04 00 00 01 23"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - - { "name": "20 with invalid-property 0x00 (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0001"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x04 (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0401"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x05 (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0501"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x06 (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0601"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x07 (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0701"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x0A (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0A01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x0C (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0C01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x0D (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0D01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x0E (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0E01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x0F (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 0F01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x10 (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 1001"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x14 (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 1401"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x1B (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 1B01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x1D (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 1D01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x1E (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 1E01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x20 (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 2001"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x7F (byte)", "msgs": [ - {"type":"send", "payload":"20 05 00 00 02 7F01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with invalid-property 0x8000 (byte)", "msgs": [ - {"type":"send", "payload":"20 06 00 00 03 800001"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x8001 (byte)", "msgs": [ - {"type":"send", "payload":"20 06 00 00 03 800101"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0xFF7F (byte)", "msgs": [ - {"type":"send", "payload":"20 06 00 00 03 FF7F01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x808001 (byte)", "msgs": [ - {"type":"send", "payload":"20 07 00 00 04 80800101"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0xFFFF7F (byte)", "msgs": [ - {"type":"send", "payload":"20 07 00 00 04 FFFF7F01"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0x80808001 (byte)", "msgs": [ - {"type":"send", "payload":"20 08 00 00 05 8080800101"}, - {"type":"recv", "payload":"E0 01 82"} - ]}, - { "name": "20 with unknown-property 0xFFFFFF7F (byte)", "msgs": [ - {"type":"send", "payload":"20 08 00 00 05 FFFFFF7F01"}, - {"type":"recv", "payload":"E0 01 82"} - ]} + { "name": "20 with payload-format-indicator (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0100"}]}, + { "name": "20 with request-problem-information (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 1700"}]}, + { "name": "20 with payload-format-indicator (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 01"}]}, + { "name": "20 with request-problem-information (byte) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 17"}]}, + { "name": "20 with message-expiry-interval (four byte integer)", "msgs": [{"type":"send", "payload":"20 08 00 00 05 0200000001"}]}, + { "name": "20 with will-delay-interval (four byte integer)", "msgs": [{"type":"send", "payload":"20 08 00 00 05 1800000001"}]}, + { "name": "20 with message-expiry-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 02"}]}, + { "name": "20 with will-delay-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 18"}]}, + { "name": "20 with content-type (UTF-8 string)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 03000170"}]}, + { "name": "20 with response-topic (UTF-8 string)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 08000170"}]}, + { "name": "20 with content-type (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 03"}]}, + { "name": "20 with response-topic (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 08"}]}, + { "name": "20 with correlation-data (binary data)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 09000170"}]}, + { "name": "20 with correlation-data (binary data) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 09"}]}, + { "name": "20 with subscription-identifier (variable byte integer)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0B01"}]}, + { "name": "20 with subscription-identifier (variable byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 0B"}]}, + { "name": "20 with topic-alias (two byte integer)", "msgs": [{"type":"send", "payload":"20 06 00 00 03 230101"}]}, + { "name": "20 with topic-alias (two byte integer) missing", "msgs": [{"type":"send", "payload":"20 04 00 00 01 23"}]}, + { "name": "20 with invalid-property 0x00 (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0001"}]}, + { "name": "20 with unknown-property 0x04 (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0401"}]}, + { "name": "20 with unknown-property 0x05 (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0501"}]}, + { "name": "20 with unknown-property 0x06 (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0601"}]}, + { "name": "20 with unknown-property 0x07 (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0701"}]}, + { "name": "20 with unknown-property 0x0A (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0A01"}]}, + { "name": "20 with unknown-property 0x0C (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0C01"}]}, + { "name": "20 with unknown-property 0x0D (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0D01"}]}, + { "name": "20 with unknown-property 0x0E (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0E01"}]}, + { "name": "20 with unknown-property 0x0F (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 0F01"}]}, + { "name": "20 with unknown-property 0x10 (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 1001"}]}, + { "name": "20 with unknown-property 0x14 (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 1401"}]}, + { "name": "20 with unknown-property 0x1B (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 1B01"}]}, + { "name": "20 with unknown-property 0x1D (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 1D01"}]}, + { "name": "20 with unknown-property 0x1E (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 1E01"}]}, + { "name": "20 with unknown-property 0x20 (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 2001"}]}, + { "name": "20 with unknown-property 0x7F (byte)", "msgs": [{"type":"send", "payload":"20 05 00 00 02 7F01"}]}, + { "name": "20 with invalid-property 0x8000 (byte)", "msgs": [{"type":"send", "payload":"20 06 00 00 03 800001"}]}, + { "name": "20 with unknown-property 0x8001 (byte)", "msgs": [{"type":"send", "payload":"20 06 00 00 03 800101"}]}, + { "name": "20 with unknown-property 0xFF7F (byte)", "msgs": [{"type":"send", "payload":"20 06 00 00 03 FF7F01"}]}, + { "name": "20 with unknown-property 0x808001 (byte)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 80800101"}]}, + { "name": "20 with unknown-property 0xFFFF7F (byte)", "msgs": [{"type":"send", "payload":"20 07 00 00 04 FFFF7F01"}]}, + { "name": "20 with unknown-property 0x80808001 (byte)", "msgs": [{"type":"send", "payload":"20 08 00 00 05 8080800101"}]}, + { "name": "20 with unknown-property 0xFFFFFF7F (byte)", "msgs": [{"type":"send", "payload":"20 08 00 00 05 FFFFFF7F01"}]} ] } ] diff --git a/test/lib/data/CONNECT.json b/test/lib/data/CONNECT.json new file mode 100644 index 00000000..d5f1aec1 --- /dev/null +++ b/test/lib/data/CONNECT.json @@ -0,0 +1,435 @@ +[ + { + "group": "v3.1 CONNECT", + "ver":3, + "tests": [ + { "name": "10 ok ", "msgs":[{"type":"send", "payload":"10 0F 0006 4D5149736470 03 01 000A 0001 70", "comment":"minimal valid CONNECT"}]}, + { "name": "14 ok ", "msgs":[{"type":"send", "payload":"14 0F 0006 4D5149736470 03 01 000A 0001 70", "comment":"CONNECT with QoS=1"}]}, + { "name": "10 proto ver 2", "msgs":[{"type":"send", "payload":"10 0F 0006 4D5149736470 02 00 000A 0001 70", "comment":"CONNECT"}]}, + { "name": "10 proto ver 6", "msgs":[{"type":"send", "payload":"10 0F 0006 4D5149736470 06 00 000A 0001 70", "comment":"CONNECT"}]}, + { "name": "10 empty client ID", "msgs":[{"type":"send", "payload":"10 0E 0006 4D5149736470 03 02 000A 0000", "comment":"CONNECT clean session true, no client id"}]}, + { "name": "10 ok", "msgs":[{"type":"send", "payload":"10 0F 0006 4D5149736470 03 02 000A 0001 70", "comment":"CONNECT clean session true, no client id"}]} + ] + }, + { + "group": "v3.1 CONNECT instead of CONNACK", + "ver":3, + "connack":false, + "tests": [ + { "name": "10 ok ", "msgs":[{"type":"send", "payload":"10 0F 0006 4D5149736470 03 01 000A 0001 70", "comment":"minimal valid CONNECT"}]}, + { "name": "14 ok ", "msgs":[{"type":"send", "payload":"14 0F 0006 4D5149736470 03 01 000A 0001 70", "comment":"CONNECT with QoS=1"}]}, + { "name": "10 proto ver 2", "msgs":[{"type":"send", "payload":"10 0F 0006 4D5149736470 02 00 000A 0001 70", "comment":"CONNECT"}]}, + { "name": "10 proto ver 6", "msgs":[{"type":"send", "payload":"10 0F 0006 4D5149736470 06 00 000A 0001 70", "comment":"CONNECT"}]}, + { "name": "10 empty client ID", "msgs":[{"type":"send", "payload":"10 0E 0006 4D5149736470 03 02 000A 0000", "comment":"CONNECT clean session true, no client id"}]}, + { "name": "10 ok", "msgs":[{"type":"send", "payload":"10 0F 0006 4D5149736470 03 02 000A 0001 70", "comment":"CONNECT clean session true, no client id"}]} + ] + }, + { + "group": "v3.1.1 CONNECT", + "ver":4, + "tests": [ + { "name": "10 ok ", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 02 000A 0001 70", "comment":"minimal valid CONNECT"}]}, + { "name": "10 missing client ID", "msgs":[{"type":"send", "payload":"10 08 0004 4D515454 04 02 000A"}]}, + { "name": "10 empty client ID", "msgs":[{"type":"send", "payload":"10 0C 0004 4D515454 04 02 000A 0000", "comment":"CONNECT clean session true, no client id"}]}, + { "name": "10 empty client ID clean false [MQTT-3.1.3-7]", "msgs":[{"type":"send", "payload":"10 0C 0004 4D515454 04 00 000A 0000", "comment":"CONNECT clean session false, no client id"}]}, + { "name": "10 proto ver 2 [MQTT-3.1.2-2]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 02 00 000A 0001 70", "comment":"CONNECT"}]}, + { "name": "10 proto ver 6 [MQTT-3.1.2-2]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 06 00 000A 0001 70", "comment":"CONNECT"}]}, + { "name": "10 remaining length 5 bytes", "msgs":[{"type":"send", "payload":"10 FFFFFFFF7F 0004 4D515454 06 00 000A 0001 70", "comment":"CONNECT"}]}, + { "name": "11", "msgs":[{"type":"send", "payload":"11 0D 0004 4D515454 04 02 000A 0001 70"}]}, + { "name": "12", "msgs":[{"type":"send", "payload":"12 0D 0004 4D515454 04 02 000A 0001 70"}]}, + { "name": "14", "msgs":[{"type":"send", "payload":"14 0D 0004 4D515454 04 02 000A 0001 70"}]}, + { "name": "18", "msgs":[{"type":"send", "payload":"18 0D 0004 4D515454 04 02 000A 0001 70"}]}, + { "name": "10 short proto", "msgs":[{"type":"send", "payload":"10 0C 0003 4D5154 04 02 000A 0001 70"}]}, + { "name": "10 zero proto", "msgs":[{"type":"send", "payload":"10 09 0000 04 02 000A 0001 70"}]}, + { "name": "10 long proto", "msgs":[{"type":"send", "payload":"10 0E 0005 4D51545454 04 02 000A 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-1]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515455 04 02 000A 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-3] ", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 01 000A 0001 70"}]}, + { "name": "10 Will flag 0 Will QoS 1 [MQTT-3.1.2-11]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 0A 000A 0001 70"}]}, + { "name": "10 Will flag 0 Will retain 1 [MQTT-3.1.2-11]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 12 000A 0001 70"}]}, + { "name": "10 Will flag 1 no Will topic no Will message [MQTT-3.1.2-9]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 06 000A 0001 70"}]}, + { "name": "10 Will flag 1 no Will topic [MQTT-3.1.2-9]", "msgs":[{"type":"send", "payload":"10 10 0004 4D515454 04 06 000A 0001 70 0001 70"}]}, + { "name": "10 Will flag 1 ok", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 04 06 000A 0001 70 0001 70 0001 70"}]}, + { "name": "10 Will flag 1 Will Qos 3 [MQTT-3.1.2-14]", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 04 1E 000A 0001 70 0001 70 0001 70"}]}, + { "name": "10 Will topic with 0x0000", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746F700000 0001 70"}]}, + { "name": "10 Will topic with U+D800", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746FEDA080 0001 70"}]}, + { "name": "10 Will topic with U+0001", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746F700170 0001 70"}]}, + { "name": "10 Will topic with U+001F", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746F701F70 0001 70"}]}, + { "name": "10 Will topic with U+007F", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746F707F70 0001 70"}]}, + { "name": "10 Will topic with U+009F", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746FC29F70 0001 70"}]}, + { "name": "10 Will topic with U+FFFF", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746FEDBFBF 0001 70"}]}, + { "name": "10 Client ID with 0x0000", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746F700000"}]}, + { "name": "10 Client ID with U+D800", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746FEDA080"}]}, + { "name": "10 Client ID with U+0001", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746F700170"}]}, + { "name": "10 Client ID with U+001F", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746F701F70"}]}, + { "name": "10 Client ID with U+007F", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746F707F70"}]}, + { "name": "10 Client ID with U+009F", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746FC29F70"}]}, + { "name": "10 Client ID with U+FFFF", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746FEDBFBF"}]}, + { "name": "10 [MQTT-3.1.2-18]", "msgs":[{"type":"send", "payload":"10 10 0004 4D515454 04 02 000A 0001 70 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-19]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 82 000A 0001 70"}]}, + { "name": "10 Username with 0x0000", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746F700000"}]}, + { "name": "10 Username with 0xD800", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746FEDA080"}]}, + { "name": "10 Username with 0x0001", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746F700170"}]}, + { "name": "10 Username with 0x001F", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746F701F70"}]}, + { "name": "10 Username with 0x007F", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746F707F70"}]}, + { "name": "10 Username with 0x009F", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746FC29F70"}]}, + { "name": "10 Username with 0xFFFF", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746FEDBFBF"}]}, + { "name": "10 Username zero length ok", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 04 82 000A 0001 70 0000"}]}, + { "name": "10 Username flag 1 Password flag 1 ok", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 04 C2 000A 0001 70 0001 70 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-20]", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 04 82 000A 0001 70 0001 70 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-21]", "msgs":[{"type":"send", "payload":"10 10 0004 4D515454 04 C2 000A 0001 70 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-22]", "msgs":[{"type":"send", "payload":"10 10 0004 4D515454 04 42 000A 0001 70 0001 70"}]}, + { "name": "10 Password with 0x0000", "msgs":[{"type":"send", "payload":"10 17 00 04 4D515454 04 C2 000A 0001 70 0001 70 0005 746F700000"}]}, + { "name": "NanoMQ CWE-119", "msgs":[{"type":"send", "payload":"10 07 0004 4D515454 04 C2 003C 000B 746573742D707974686F6E 0005 61646d696E 0008 70617373776F7264"}]} + ] + }, + { + "group": "v3.1.1 CONNECT instead of CONNACK", + "ver":4, + "connack":false, + "tests": [ + { "name": "10 ok ", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 02 000A 0001 70", "comment":"minimal valid CONNECT"}]}, + { "name": "10 missing client ID", "msgs":[{"type":"send", "payload":"10 08 0004 4D515454 04 02 000A"}]}, + { "name": "10 empty client ID", "msgs":[{"type":"send", "payload":"10 0C 0004 4D515454 04 02 000A 0000", "comment":"CONNECT clean session true, no client id"}]}, + { "name": "10 empty client ID clean false [MQTT-3.1.3-7]", "msgs":[{"type":"send", "payload":"10 0C 0004 4D515454 04 00 000A 0000", "comment":"CONNECT clean session false, no client id"}]}, + { "name": "10 proto ver 2 [MQTT-3.1.2-2]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 02 00 000A 0001 70", "comment":"CONNECT"}]}, + { "name": "10 proto ver 6 [MQTT-3.1.2-2]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 06 00 000A 0001 70", "comment":"CONNECT"}]}, + { "name": "10 remaining length 5 bytes", "msgs":[{"type":"send", "payload":"10 FFFFFFFF7F 0004 4D515454 06 00 000A 0001 70", "comment":"CONNECT"}]}, + { "name": "11", "msgs":[{"type":"send", "payload":"11 0D 0004 4D515454 04 02 000A 0001 70"}]}, + { "name": "12", "msgs":[{"type":"send", "payload":"12 0D 0004 4D515454 04 02 000A 0001 70"}]}, + { "name": "14", "msgs":[{"type":"send", "payload":"14 0D 0004 4D515454 04 02 000A 0001 70"}]}, + { "name": "18", "msgs":[{"type":"send", "payload":"18 0D 0004 4D515454 04 02 000A 0001 70"}]}, + { "name": "10 short proto", "msgs":[{"type":"send", "payload":"10 0C 0003 4D5154 04 02 000A 0001 70"}]}, + { "name": "10 zero proto", "msgs":[{"type":"send", "payload":"10 09 0000 04 02 000A 0001 70"}]}, + { "name": "10 long proto", "msgs":[{"type":"send", "payload":"10 0E 0005 4D51545454 04 02 000A 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-1]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515455 04 02 000A 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-3] ", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 01 000A 0001 70"}]}, + { "name": "10 Will flag 0 Will QoS 1 [MQTT-3.1.2-11]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 0A 000A 0001 70"}]}, + { "name": "10 Will flag 0 Will retain 1 [MQTT-3.1.2-11]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 12 000A 0001 70"}]}, + { "name": "10 Will flag 1 no Will topic no Will message [MQTT-3.1.2-9]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 06 000A 0001 70"}]}, + { "name": "10 Will flag 1 no Will topic [MQTT-3.1.2-9]", "msgs":[{"type":"send", "payload":"10 10 0004 4D515454 04 06 000A 0001 70 0001 70"}]}, + { "name": "10 Will flag 1 ok", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 04 06 000A 0001 70 0001 70 0001 70"}]}, + { "name": "10 Will flag 1 Will Qos 3 [MQTT-3.1.2-14]", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 04 1E 000A 0001 70 0001 70 0001 70"}]}, + { "name": "10 Will topic with 0x0000", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746F700000 0001 70"}]}, + { "name": "10 Will topic with U+D800", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746FEDA080 0001 70"}]}, + { "name": "10 Will topic with U+0001", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746F700170 0001 70"}]}, + { "name": "10 Will topic with U+001F", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746F701F70 0001 70"}]}, + { "name": "10 Will topic with U+007F", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746F707F70 0001 70"}]}, + { "name": "10 Will topic with U+009F", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746FC29F70 0001 70"}]}, + { "name": "10 Will topic with U+FFFF", "msgs": [{"type":"send", "payload":"10 17 0004 4D515454 04 06 000A 0001 70 0005 746FEDBFBF 0001 70"}]}, + { "name": "10 Client ID with 0x0000", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746F700000"}]}, + { "name": "10 Client ID with U+D800", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746FEDA080"}]}, + { "name": "10 Client ID with U+0001", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746F700170"}]}, + { "name": "10 Client ID with U+001F", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746F701F70"}]}, + { "name": "10 Client ID with U+007F", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746F707F70"}]}, + { "name": "10 Client ID with U+009F", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746FC29F70"}]}, + { "name": "10 Client ID with U+FFFF", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 04 02 000A 0005 746FEDBFBF"}]}, + { "name": "10 [MQTT-3.1.2-18]", "msgs":[{"type":"send", "payload":"10 10 0004 4D515454 04 02 000A 0001 70 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-19]", "msgs":[{"type":"send", "payload":"10 0D 0004 4D515454 04 82 000A 0001 70"}]}, + { "name": "10 Username with 0x0000", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746F700000"}]}, + { "name": "10 Username with 0xD800", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746FEDA080"}]}, + { "name": "10 Username with 0x0001", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746F700170"}]}, + { "name": "10 Username with 0x001F", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746F701F70"}]}, + { "name": "10 Username with 0x007F", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746F707F70"}]}, + { "name": "10 Username with 0x009F", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746FC29F70"}]}, + { "name": "10 Username with 0xFFFF", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 04 82 000A 0001 70 0005 746FEDBFBF"}]}, + { "name": "10 Username zero length ok", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 04 82 000A 0001 70 0000"}]}, + { "name": "10 Username flag 1 Password flag 1 ok", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 04 C2 000A 0001 70 0001 70 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-20]", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 04 82 000A 0001 70 0001 70 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-21]", "msgs":[{"type":"send", "payload":"10 10 0004 4D515454 04 C2 000A 0001 70 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-22]", "msgs":[{"type":"send", "payload":"10 10 0004 4D515454 04 42 000A 0001 70 0001 70"}]}, + { "name": "10 Password with 0x0000", "msgs":[{"type":"send", "payload":"10 17 00 04 4D515454 04 C2 000A 0001 70 0001 70 0005 746F700000"}]}, + { "name": "NanoMQ CWE-119", "msgs":[{"type":"send", "payload":"10 07 0004 4D515454 04 C2 003C 000B 746573742D707974686F6E 0005 61646d696E 0008 70617373776F7264"}]} + ] + }, + { + "group": "v5.0 CONNECT", + "ver":5, + "tests": [ + { "name": "10 ok ", "msgs":[{"type":"send", "payload":"10 0E 0004 4D515454 05 02 000A 00 0001 70", "comment":"minimal valid CONNECT"}]}, + { "name": "10 Username flag 1 ok", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 82 000A 00 0001 70 0001 70"}]}, + { "name": "10 Client ID with 0x0000", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746F700000"}]}, + { "name": "10 Client ID with U+D800", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746FEDA080"}]}, + { "name": "10 Client ID with U+0001", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746F700170"}]}, + { "name": "10 Client ID with U+001F", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746F701F70"}]}, + { "name": "10 Client ID with U+007F", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746F707F70"}]}, + { "name": "10 Client ID with U+009F", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746FC29F70"}]}, + { "name": "10 Client ID with U+FFFF", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746FEDBFBF"}]}, + { "name": "10 [MQTT-3.1.2-16]", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 00 0001 71 0001 71"}]}, + { "name": "10 [MQTT-3.1.2-17]", "msgs":[{"type":"send", "payload":"10 0E 0004 4D515454 05 82 000A 00 0001 70"}]}, + { "name": "10 Username with 0x0000", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746F700000"}]}, + { "name": "10 Username with 0xD800", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746FEDA080"}]}, + { "name": "10 Username with 0x0001", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746F700170"}]}, + { "name": "10 Username with 0x001F", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746F701F70"}]}, + { "name": "10 Username with 0x007F", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746F707F70"}]}, + { "name": "10 Username with 0x009F", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746FC29F70"}]}, + { "name": "10 Username with 0xFFFF", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746FEDBFBF"}]}, + { "name": "10 [MQTT-3.1.2-18]", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 05 82 000A 00 0001 70 0001 70 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-19]", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 C2 000A 00 0001 70 0001 70"}]}, + { "name": "10 Will flag 1 ok", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 06 000A 00 0001 70 00 0001 70 0001 70"}]}, + { "name": "tiny max packet", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 2700000002 0001 70"}]} + ] + }, + { + "group": "v5.0 CONNECT instead of CONNACK", + "ver":5, + "connack":false, + "tests": [ + { "name": "10 ok ", "msgs":[{"type":"send", "payload":"10 0E 0004 4D515454 05 02 000A 00 0001 70", "comment":"minimal valid CONNECT"}]}, + { "name": "10 Username flag 1 ok", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 82 000A 00 0001 70 0001 70"}]}, + { "name": "10 Client ID with 0x0000", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746F700000"}]}, + { "name": "10 Client ID with U+D800", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746FEDA080"}]}, + { "name": "10 Client ID with U+0001", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746F700170"}]}, + { "name": "10 Client ID with U+001F", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746F701F70"}]}, + { "name": "10 Client ID with U+007F", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746F707F70"}]}, + { "name": "10 Client ID with U+009F", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746FC29F70"}]}, + { "name": "10 Client ID with U+FFFF", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 00 0005 746FEDBFBF"}]}, + { "name": "10 [MQTT-3.1.2-16]", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 00 0001 71 0001 71"}]}, + { "name": "10 [MQTT-3.1.2-17]", "msgs":[{"type":"send", "payload":"10 0E 0004 4D515454 05 82 000A 00 0001 70"}]}, + { "name": "10 Username with 0x0000", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746F700000"}]}, + { "name": "10 Username with 0xD800", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746FEDA080"}]}, + { "name": "10 Username with 0x0001", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746F700170"}]}, + { "name": "10 Username with 0x001F", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746F701F70"}]}, + { "name": "10 Username with 0x007F", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746F707F70"}]}, + { "name": "10 Username with 0x009F", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746FC29F70"}]}, + { "name": "10 Username with 0xFFFF", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 82 000A 00 0001 70 0005 746FEDBFBF"}]}, + { "name": "10 [MQTT-3.1.2-18]", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 05 82 000A 00 0001 70 0001 70 0001 70"}]}, + { "name": "10 [MQTT-3.1.2-19]", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 C2 000A 00 0001 70 0001 70"}]}, + { "name": "10 Will flag 1 ok", "msgs":[{"type":"send", "payload":"10 15 0004 4D515454 05 06 000A 00 0001 70 00 0001 70 0001 70"}]}, + { "name": "tiny max packet", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 2700000002 0001 70"}]} + ] + }, + { + "group": "v5.0 CONNECT EXTENDED AUTH", + "ver":5, + "tests": [ + { "name": "unsupported authentication method", "msgs":[ + {"type":"send", "payload":"10 23 0004 4D515454 05 02 000A 15 15000B756E737570706F7274656416000474657374 0001 70", "comment":"auth-method:unsupported, auth-data:test"} + ]} + ] + }, + { + "group": "v5.0 CONNECT ALLOWED PROPERTIES", + "ver":5, + "tests": [ + { "name": "session-expiry-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 11 00000001 0001 70"}]}, + { "name": "2*session-expiry-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 02 000A 0A 11 00000001 11 00000001 0001 70"}]}, + { "name": "session-expiry-interval (four byte integer) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 11 0001 70"}]}, + { "name": "receive-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 21 0101 0001 70"}]}, + { "name": "receive-maximum (two byte integer) 0 value", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 21 0000 0001 70"}]}, + { "name": "2*receive-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"10 14 0004 4D515454 05 02 000A 06 21 0101 21 0101 0001 70"}]}, + { "name": "receive-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 21 0001 70"}]}, + { "name": "maximum-packet-size (four byte integer)", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 27 10000001 0001 70"}]}, + { "name": "2*maximum-packet-size (four byte integer)", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 02 000A 0A 27 10000001 27 10000001 0001 70"}]}, + { "name": "maximum-packet-size (four byte integer) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 27 0001 70"}]}, + { "name": "maximum-packet-size (four byte integer) 0 value", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 27 00000000 0001 70"}]}, + { "name": "maximum-packet-size (four byte integer) FFFFFFFF value", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 27 FFFFFFFF 0001 70"}]}, + { "name": "topic-alias-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 22 0101 0001 70"}]}, + { "name": "topic-alias-maximum (two byte integer) 0 value", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 22 0000 0001 70"}]}, + { "name": "2*topic-alias-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"10 14 0004 4D515454 05 02 000A 06 22 0101 22 0101 0001 70"}]}, + { "name": "topic-alias-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 22 0001 70"}]}, + { "name": "request-response-information (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 19 01 0001 70"}]}, + { "name": "2*request-response-information (byte)", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 19 01 19 01 0001 70"}]}, + { "name": "request-response-information (byte) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 19 0001 70"}]}, + { "name": "request-response-information (byte) 2 value", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 19 02 0001 70"}]}, + { "name": "request-problem-information (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 17 01 0001 70"}]}, + { "name": "2*request-problem-information (byte)", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 17 01 17 01 0001 70"}]}, + { "name": "request-problem-information (byte) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 17 0001 70"}]}, + { "name": "request-problem-information (byte) 2 value", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 17 02 0001 70"}]}, + { "name": "user-property", "msgs": [{"type":"send", "payload":"10 15 0004 4D515454 05 02 000A 07 26 0001 70 0001 70 0001 70"}]}, + { "name": "2*user-property", "msgs": [{"type":"send", "payload":"10 1C 0004 4D515454 05 02 000A 0E 26 0001 70 0001 70 26 0001 70 0001 70 0001 70"}]}, + { "name": "user-property missing value", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 26 0001 70 0001 70"}]}, + { "name": "user-property missing key,value", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 26 0001 70"}]}, + { "name": "user-property empty key", "msgs": [{"type":"send", "payload":"10 14 0004 4D515454 05 02 000A 06 26 0000 0001 70 0001 70"}]}, + { "name": "user-property empty value", "msgs": [{"type":"send", "payload":"10 14 0004 4D515454 05 02 000A 06 26 0001 70 0000 0001 70"}]}, + { "name": "user-property empty key,value", "msgs": [{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 26 0000 0000 0001 70"}]}, + { "name": "authentication-method (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 15 0001 70"}]}, + { "name": "2*authentication-method (UTF-8 string)", "msgs": [{"type":"send", "payload":"10 16 0004 4D515454 05 02 000A 08 15 0001 70 15 0001 70 0001 70"}]}, + { "name": "authentication-data (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 15 0001 70 16 0001 70"}]}, + { "name": "authentication-data (UTF-8 string) no authentication-method", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 16 0001 70 0001 70"}]}, + { "name": "2*authentication-data (UTF-8 string)", "msgs": [{"type":"send", "payload":"10 1A 0004 4D515454 05 02 000A 0C 15 0001 70 16 0001 70 16 0001 70 0001 70"}]} + ] + }, + { + "group": "v5.0 CONNECT DISALLOWED PROPERTIES", + "ver":5, + "connect":false, + "tests": [ + { "name": "payload-format-indicator (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 01 01 0001 70"}]}, + { "name": "payload-format-indicator (byte) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 01 0001 70"}]}, + { "name": "maximum-qos (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 24 01 0001 70"}]}, + { "name": "maximum-qos (byte) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 24 01 0001 70"}]}, + { "name": "retain-available (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 25 01 0001 70"}]}, + { "name": "retain-available (byte) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 25 01 0001 70"}]}, + { "name": "wildcard-subscription-available (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 28 01 0001 70"}]}, + { "name": "wildcard-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 28 01 0001 70"}]}, + { "name": "subscription-identifier-available (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 29 01 0001 70"}]}, + { "name": "subscription-identifier-available (byte) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 29 01 0001 70"}]}, + { "name": "shared-subscription-available (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 2A 01 0001 70"}]}, + { "name": "shared-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 2A 01 0001 70"}]}, + { "name": "invalid-property 0x00 (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 00 01 0001 70"}]}, + { "name": "unknown-property 0x04 (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 04 01 0001 70"}]}, + { "name": "unknown-property 0x05 (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 05 01 0001 70"}]}, + { "name": "unknown-property 0x06 (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 06 01 0001 70"}]}, + { "name": "unknown-property 0x07 (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 07 01 0001 70"}]}, + { "name": "unknown-property 0x0A (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 0A 01 0001 70"}]}, + { "name": "unknown-property 0x0C (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 0C 01 0001 70"}]}, + { "name": "unknown-property 0x0D (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 0D 01 0001 70"}]}, + { "name": "unknown-property 0x0E (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 0E 01 0001 70"}]}, + { "name": "unknown-property 0x0F (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 0F 01 0001 70"}]}, + { "name": "unknown-property 0x10 (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 10 01 0001 70"}]}, + { "name": "unknown-property 0x14 (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 14 01 0001 70"}]}, + { "name": "unknown-property 0x1B (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 1B 01 0001 70"}]}, + { "name": "unknown-property 0x1D (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 1D 01 0001 70"}]}, + { "name": "unknown-property 0x1E (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 1E 01 0001 70"}]}, + { "name": "unknown-property 0x20 (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 20 01 0001 70"}]}, + { "name": "unknown-property 0x7F (byte)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 7F 01 0001 70"}]}, + { "name": "invalid-property 0x8000 (byte)", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 8000 01 0001 70"}]}, + { "name": "unknown-property 0x8001 (byte)", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 8001 01 0001 70"}]}, + { "name": "unknown-property 0xFF7F (byte)", "msgs": [{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 FF7F 01 0001 70"}]}, + { "name": "unknown-property 0x808001 (byte)", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 808001 01 0001 70"}]}, + { "name": "unknown-property 0xFFFF7F (byte)", "msgs": [{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 FFFF7F 01 0001 70"}]}, + { "name": "unknown-property 0x80808001 (byte)", "msgs": [{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 80808001 01 0001 70"}]}, + { "name": "unknown-property 0xFFFFFF7F (byte)", "msgs": [{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 FFFFFF7F 01 0001 70"}]}, + { "name": "unknown-property 0x8080808001 (byte)", "msgs": [{"type":"send", "payload":"10 14 0004 4D515454 05 02 000A 06 8080808001 01 0001 70"}]}, + { "name": "message-expiry-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 02 10000001 0001 70"}]}, + { "name": "2*message-expiry-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 02 000A 0A 02 10000001 02 10000001 0001 70"}]}, + { "name": "message-expiry-interval (four byte integer) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 02 0001 70"}]}, + { "name": "message-expiry-interval (four byte integer) 0 value", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 02 00000000 0001 70"}]}, + { "name": "message-expiry-interval (four byte integer) FFFFFFFF value", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 02 FFFFFFFF 0001 70"}]}, + { "name": "will-delay-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 18 10000001 0001 70"}]}, + { "name": "2*will-delay-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 02 000A 0A 18 10000001 18 10000001 0001 70"}]}, + { "name": "will-delay-interval (four byte integer) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 18 0001 70"}]}, + { "name": "will-delay-interval (four byte integer) 0 value", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 18 00000000 0001 70"}]}, + { "name": "will-delay-interval (four byte integer) FFFFFFFF value", "msgs":[{"type":"send", "payload":"10 13 0004 4D515454 05 02 000A 05 18 FFFFFFFF 0001 70"}]}, + { "name": "server-keep-alive (two byte integer)", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 13 0001 0001 70"}]}, + { "name": "2*server-keep-alive (two byte integer)", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 05 02 000A 06 13 0001 13 0001 0001 70"}]}, + { "name": "server-keep-alive (two byte integer) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 13 0001 70"}]}, + { "name": "topic-alias (two byte integer)", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 23 0001 0001 70"}]}, + { "name": "2*topic-alias (two byte integer)", "msgs":[{"type":"send", "payload":"10 14 0004 4D515454 05 02 000A 06 23 0001 23 0001 0001 70"}]}, + { "name": "topic-alias (two byte integer) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 23 0001 70"}]}, + { "name": "content-type (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 03 0001 70 0001 70"}]}, + { "name": "content-type (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 03 0001 70"}]}, + { "name": "content-type (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 03 0000 0001 70"}]}, + { "name": "response-topic (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 08 0001 70 0001 70"}]}, + { "name": "response-topic (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 08 0001 70"}]}, + { "name": "response-topic (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 08 0000 0001 70"}]}, + { "name": "assigned-client-identifier (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 12 0001 70 0001 70"}]}, + { "name": "assigned-client-identifier (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 12 0001 70"}]}, + { "name": "assigned-client-identifier (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 12 0000 0001 70"}]}, + { "name": "response-information (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 1A 0001 70 0001 70"}]}, + { "name": "response-information (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 1A 0001 70"}]}, + { "name": "response-information (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 1A 0000 0001 70"}]}, + { "name": "correlation-data (binary)", "msgs":[{"type":"send", "payload":"10 12 0004 4D515454 05 02 000A 04 09 0001 70 0001 70"}]}, + { "name": "correlation-data (binary) missing", "msgs":[{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 09 0001 70"}]}, + { "name": "correlation-data (binary) empty", "msgs":[{"type":"send", "payload":"10 11 0004 4D515454 05 02 000A 03 09 0000 0001 70"}]}, + {"name": "subscription-identifier (variable byte integer)", "msgs": [{"type":"send", "payload":"10 10 0004 4D515454 05 02 000A 02 0B 01 0001 70"}]}, + {"name": "subscription-identifier (variable byte integer) missing", "msgs": [{"type":"send", "payload":"10 0F 0004 4D515454 05 02 000A 01 0B 0001 70"}]} + ] + }, + { + "group": "v5.0 WILL ALLOWED PROPERTIES", + "ver":5, + "connect":false, + "tests": [ + { "name": "payload-format-indicator (byte)", "msgs":[{"type":"send", "payload":"10 17 0004 4D515454 05 06 000A 00 0001 70 02 01 01 0001 70 0001 70"}]}, + { "name": "payload-format-indicator (byte) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 01 0001 70 0001 70"}]}, + { "name": "2*payload-format-indicator (byte)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 01 01 01 01 0001 70 0001 70"}]}, + { "name": "message-expiry-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 1A 0004 4D515454 05 06 000A 00 0001 70 05 02 00000001 0001 70 0001 70"}]}, + { "name": "2*message-expiry-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 1F 0004 4D515454 05 06 000A 00 0001 70 0A 02 00000001 02 00000001 0001 70 0001 70"}]}, + { "name": "message-expiry-interval (four byte integer) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 02 0001 70 0001 70"}]}, + { "name": "will-delay-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 1A 0004 4D515454 05 06 000A 00 0001 70 05 18 00000001 0001 70 0001 70"}]}, + { "name": "will-delay-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 1F 0004 4D515454 05 06 000A 00 0001 70 0A 18 00000001 18 00000001 0001 70 0001 70"}]}, + { "name": "will-delay-interval (four byte integer) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 18 0001 70 0001 70"}]}, + { "name": "content-type (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 03 0001 70 0001 70 0001 70"}]}, + { "name": "2*content-type (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 1D 0004 4D515454 05 06 000A 00 0001 70 08 03 0001 70 03 0001 70 0001 70 0001 70"}]}, + { "name": "content-type (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 03 0001 70 0001 70"}]}, + { "name": "content-type (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 03 0000 0001 70 0001 70"}]}, + { "name": "response-topic (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 08 0001 70 0001 70 0001 70"}]}, + { "name": "2*response-topic (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 1D 0004 4D515454 05 06 000A 00 0001 70 08 08 0001 70 08 0001 70 0001 70 0001 70"}]}, + { "name": "response-topic (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 08 0001 70 0001 70"}]}, + { "name": "response-topic (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 08 0000 0001 70 0001 70"}]}, + { "name": "correlation-data (binary)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 09 0001 70 0001 70 0001 70"}]}, + { "name": "2*correlation-data (binary)", "msgs":[{"type":"send", "payload":"10 1D 0004 4D515454 05 06 000A 00 0001 70 08 09 0001 70 09 0001 70 0001 70 0001 70"}]}, + { "name": "correlation-data (binary) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 09 0001 70 0001 70"}]}, + { "name": "correlation-data (binary) empty", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 09 0000 0001 70 0001 70"}]}, + { "name": "user-property", "msgs":[{"type":"send", "payload":"10 1C 0004 4D515454 05 06 000A 00 0001 70 07 26 0001 70 0001 70 0001 70 0001 70"}]}, + { "name": "2*user-property", "msgs":[{"type":"send", "payload":"10 23 0004 4D515454 05 06 000A 00 0001 70 0E 26 0001 70 0001 70 26 0001 70 0001 70 0001 70 0001 70"}]}, + { "name": "user-property missing value", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 26 0001 70 0001 70 0001 70"}]}, + { "name": "user-property missing key,value", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 26 0001 70 0001 70"}]}, + { "name": "user-property empty key", "msgs":[{"type":"send", "payload":"10 1B 0004 4D515454 05 06 000A 00 0001 70 06 26 0000 0001 70 0001 70 0001 70"}]}, + { "name": "user-property empty value", "msgs":[{"type":"send", "payload":"10 1B 0004 4D515454 05 06 000A 00 0001 70 06 26 0001 70 0000 0001 70 0001 70"}]}, + { "name": "user-property empty key,value", "msgs":[{"type":"send", "payload":"10 1A 0004 4D515454 05 06 000A 00 0001 70 05 26 0000 0000 0001 70 0001 70"}]} + ] + }, + { + "group": "v5.0 WILL DISALLOWED PROPERTIES", + "ver":5, + "tests": [ + { "name": "request-problem-information (byte)", "msgs":[{"type":"send", "payload":"10 17 0004 4D515454 05 06 000A 00 0001 70 02 17 01 0001 70 0001 70"}]}, + { "name": "request-problem-information (byte) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 17 0001 70 0001 70"}]}, + { "name": "2*request-problem-information (byte)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 17 01 17 01 0001 70 0001 70"}]}, + { "name": "request-response-information (byte)", "msgs":[{"type":"send", "payload":"10 17 0004 4D515454 05 06 000A 00 0001 70 02 19 01 0001 70 0001 70"}]}, + { "name": "request-response-information (byte) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 19 0001 70 0001 70"}]}, + { "name": "2*request-response-information (byte)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 19 01 19 01 0001 70 0001 70"}]}, + { "name": "maximum-qos (byte)", "msgs":[{"type":"send", "payload":"10 17 0004 4D515454 05 06 000A 00 0001 70 02 24 01 0001 70 0001 70"}]}, + { "name": "maximum-qos (byte) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 24 0001 70 0001 70"}]}, + { "name": "2*maximum-qos (byte)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 24 01 24 01 0001 70 0001 70"}]}, + { "name": "retain-available (byte)", "msgs":[{"type":"send", "payload":"10 17 0004 4D515454 05 06 000A 00 0001 70 02 25 01 0001 70 0001 70"}]}, + { "name": "retain-available (byte) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 25 0001 70 0001 70"}]}, + { "name": "2*retain-available (byte)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 25 01 25 01 0001 70 0001 70"}]}, + { "name": "wildcard-subscription-available (byte)", "msgs":[{"type":"send", "payload":"10 17 0004 4D515454 05 06 000A 00 0001 70 02 28 01 0001 70 0001 70"}]}, + { "name": "wildcard-subscription-available (byte) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 28 0001 70 0001 70"}]}, + { "name": "2*wildcard-subscription-available (byte)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 28 01 28 01 0001 70 0001 70"}]}, + { "name": "subscription-identifier-available (byte)", "msgs":[{"type":"send", "payload":"10 17 0004 4D515454 05 06 000A 00 0001 70 02 29 01 0001 70 0001 70"}]}, + { "name": "subscription-identifier-available (byte) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 29 0001 70 0001 70"}]}, + { "name": "2*subscription-identifier-available (byte)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 29 01 29 01 0001 70 0001 70"}]}, + { "name": "shared-subscription-available (byte)", "msgs":[{"type":"send", "payload":"10 17 0004 4D515454 05 06 000A 00 0001 70 02 2A 01 0001 70 0001 70"}]}, + { "name": "shared-subscription-available (byte) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 2A 0001 70 0001 70"}]}, + { "name": "2*shared-subscription-available (byte)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 2A 01 2A 01 0001 70 0001 70"}]}, + { "name": "server-keep-alive (two byte integer)", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 13 0001 0001 70 0001 70"}]}, + { "name": "server-keep-alive (two byte integer) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 13 0001 70 0001 70"}]}, + { "name": "2*server-keep-alive (two byte integer)", "msgs":[{"type":"send", "payload":"10 1B 0004 4D515454 05 06 000A 00 0001 70 06 13 0001 13 0001 0001 70 0001 70"}]}, + { "name": "receive-maximum (two byte integer)", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 21 0001 0001 70 0001 70"}]}, + { "name": "receive-maximum (two byte integer) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 21 0001 70 0001 70"}]}, + { "name": "2*receive-maximum (two byte integer)", "msgs":[{"type":"send", "payload":"10 1B 0004 4D515454 05 06 000A 00 0001 70 06 21 0001 21 0001 0001 70 0001 70"}]}, + { "name": "topic-alias-maximum (two byte integer)", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 22 0001 0001 70 0001 70"}]}, + { "name": "topic-alias-maximum (two byte integer) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 22 0001 70 0001 70"}]}, + { "name": "2*topic-alias-maximum (two byte integer)", "msgs":[{"type":"send", "payload":"10 1B 0004 4D515454 05 06 000A 00 0001 70 06 22 0001 22 0001 0001 70 0001 70"}]}, + { "name": "topic-alias (two byte integer)", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 23 0001 0001 70 0001 70"}]}, + { "name": "topic-alias (two byte integer) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 23 0001 70 0001 70"}]}, + { "name": "2*topic-alias (two byte integer)", "msgs":[{"type":"send", "payload":"10 1B 0004 4D515454 05 06 000A 00 0001 70 06 23 0001 23 0001 0001 70 0001 70"}]}, + { "name": "session-expiry-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 1A 0004 4D515454 05 06 000A 00 0001 70 05 11 00000001 0001 70 0001 70"}]}, + { "name": "session-expiry-interval (four byte integer) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 11 0001 70 0001 70"}]}, + { "name": "2*session-expiry-interval (four byte integer)", "msgs":[{"type":"send", "payload":"10 1F 0004 4D515454 05 06 000A 00 0001 70 0A 11 00000001 11 00000001 0001 70 0001 70"}]}, + { "name": "maximum-packet-size (four byte integer)", "msgs":[{"type":"send", "payload":"10 1A 0004 4D515454 05 06 000A 00 0001 70 05 27 00000001 0001 70 0001 70"}]}, + { "name": "maximum-packet-size (four byte integer) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 27 0001 70 0001 70"}]}, + { "name": "2*maximum-packet-size (four byte integer)", "msgs":[{"type":"send", "payload":"10 1F 0004 4D515454 05 06 000A 00 0001 70 0A 27 00000001 27 00000001 0001 70 0001 70"}]}, + { "name": "assigned-client-identifier (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 12 0001 70 0001 70 0001 70"}]}, + { "name": "2*assigned-client-identifier (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 1D 0004 4D515454 05 06 000A 00 0001 70 08 12 0001 70 12 0001 70 0001 70 0001 70"}]}, + { "name": "assigned-client-identifier (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 12 0001 70 0001 70"}]}, + { "name": "assigned-client-identifier (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 12 0000 0001 70 0001 70"}]}, + { "name": "authentication-method (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 15 0001 70 0001 70 0001 70"}]}, + { "name": "2*authentication-method (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 1D 0004 4D515454 05 06 000A 00 0001 70 08 15 0001 70 15 0001 70 0001 70 0001 70"}]}, + { "name": "authentication-method (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 15 0001 70 0001 70"}]}, + { "name": "authentication-method (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 15 0000 0001 70 0001 70"}]}, + { "name": "response-information (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 1A 0001 70 0001 70 0001 70"}]}, + { "name": "2*response-information (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 1D 0004 4D515454 05 06 000A 00 0001 70 08 1A 0001 70 1A 0001 70 0001 70 0001 70"}]}, + { "name": "response-information (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 1A 0001 70 0001 70"}]}, + { "name": "response-information (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 1A 0000 0001 70 0001 70"}]}, + { "name": "server-reference (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 1C 0001 70 0001 70 0001 70"}]}, + { "name": "2*server-reference (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 1D 0004 4D515454 05 06 000A 00 0001 70 08 1C 0001 70 1C 0001 70 0001 70 0001 70"}]}, + { "name": "server-reference (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 1C 0001 70 0001 70"}]}, + { "name": "server-reference (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 1C 0000 0001 70 0001 70"}]}, + { "name": "reason-string (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 1F 0001 70 0001 70 0001 70"}]}, + { "name": "2*reason-string (UTF-8 string)", "msgs":[{"type":"send", "payload":"10 1D 0004 4D515454 05 06 000A 00 0001 70 08 1F 0001 70 1F 0001 70 0001 70 0001 70"}]}, + { "name": "reason-string (UTF-8 string) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 1F 0001 70 0001 70"}]}, + { "name": "reason-string (UTF-8 string) empty", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 1F 0000 0001 70 0001 70"}]}, + { "name": "authentication-data (binary)", "msgs":[{"type":"send", "payload":"10 19 0004 4D515454 05 06 000A 00 0001 70 04 16 0001 70 0001 70 0001 70"}]}, + { "name": "2*authentication-data (binary)", "msgs":[{"type":"send", "payload":"10 1D 0004 4D515454 05 06 000A 00 0001 70 08 16 0001 70 16 0001 70 0001 70 0001 70"}]}, + { "name": "authentication-data (binary) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 16 0001 70 0001 70"}]}, + { "name": "authentication-data (binary) empty", "msgs":[{"type":"send", "payload":"10 18 0004 4D515454 05 06 000A 00 0001 70 03 16 0000 0001 70 0001 70"}]}, + { "name": "subscription-identifier (variable byte integer)", "msgs":[{"type":"send", "payload":"10 17 0004 4D515454 05 06 000A 00 0001 70 02 0B 01 0001 70 0001 70"}]}, + { "name": "subscription-identifier (variable byte integer) missing", "msgs":[{"type":"send", "payload":"10 16 0004 4D515454 05 06 000A 00 0001 70 01 0B 0001 70 0001 70"}]} + ] + } +] diff --git a/test/lib/data/PUBACK.json b/test/lib/data/PUBACK.json index bde67ef1..1de9d287 100644 --- a/test/lib/data/PUBACK.json +++ b/test/lib/data/PUBACK.json @@ -19,41 +19,32 @@ "group": "v3.1.1 PUBACK", "ver":4, "command":"publish-1", + "group_msgs": [ + {"type":"recv", "payload":"32 17 000C 746573742f7075626c697368 0001 6d657373616765"} + ], "tests": [ - { "name": "40 [MQTT-3.1.0-1]", "expect_disconnect":false, "msgs": [ - {"type":"recv", "payload":"32 17 000C 746573742f7075626c697368 0001 6d657373616765"}, - {"type":"send", "payload":"40 02 0001"} - ]}, { "name": "40 long", "msgs": [ - {"type":"recv", "payload":"32 17 000C 746573742f7075626c697368 0001 6d657373616765"}, {"type":"send", "payload":"40 03 0001 00"} ]}, { "name": "40 mid 0", "msgs": [ - {"type":"recv", "payload":"32 17 000C 746573742f7075626c697368 0001 6d657373616765"}, {"type":"send", "payload":"40 02 0000"} ]}, { "name": "40 short 0", "msgs": [ - {"type":"recv", "payload":"32 17 000C 746573742f7075626c697368 0001 6d657373616765"}, {"type":"send", "payload":"40 00"} ]}, { "name": "40 short 1", "msgs": [ - {"type":"recv", "payload":"32 17 000C 746573742f7075626c697368 0001 6d657373616765"}, {"type":"send", "payload":"40 01 01"} ]}, { "name": "41", "msgs": [ - {"type":"recv", "payload":"32 17 000C 746573742f7075626c697368 0001 6d657373616765"}, {"type":"send", "payload":"41 02 0001"} ]}, { "name": "42", "msgs": [ - {"type":"recv", "payload":"32 17 000C 746573742f7075626c697368 0001 6d657373616765"}, {"type":"send", "payload":"42 02 0001"} ]}, { "name": "44", "msgs": [ - {"type":"recv", "payload":"32 17 000C 746573742f7075626c697368 0001 6d657373616765"}, {"type":"send", "payload":"44 02 0001"} ]}, { "name": "48", "msgs": [ - {"type":"recv", "payload":"32 17 000C 746573742f7075626c697368 0001 6d657373616765"}, {"type":"send", "payload":"48 02 0001"} ]} ] @@ -85,65 +76,53 @@ "group": "v5.0 PUBACK", "ver":5, "command": "publish-1", + "group_msgs": [ + {"type":"recv", "payload":"32 74 000c 746573742f7075626c697368 0001 5c 01 01 02 ffffffff 23 ffff 08 000e 726573706f6e73652f746f706963 09 0024 37646561633563352d383830322d343466662d383663652d313134373966333337343139 03 000a 746578742f706c61696e 26 0003 6b6579 0005 76616c7565 6d657373616765"} + ], "tests": [ { "name": "40 long", "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 05 0001 00 00 00"} ]}, { "name": "40 mid 0", "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 03 0000 00"} ]}, { "name": "40 short 0", "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 00"} ]}, { "name": "40 short 1", "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 01 01"} ]}, { "name": "40 len=2", "expect_disconnect":false, "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 02 0001"} ]}, { "name": "40 len=3", "expect_disconnect":false, "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 03 0001 00"} ]}, { "name": "40 len=3 fail", "expect_disconnect":false, "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 03 0001 80"} ]}, { "name": "40 len=4 ok", "expect_disconnect":false, "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 04 0001 00 00"} ]}, { "name": "40 len=4 rc=fail", "expect_disconnect":false, "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 04 0001 80 00"} ]}, { "name": "40 len=4 rc=unknown", "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 04 0001 FF 00"} ]}, { "name": "40 len=4 short", "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"40 04 0001 00 01"} ]}, { "name": "41", "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"41 03 0001 00"} ]}, { "name": "42", "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"42 03 0001 00"} ]}, { "name": "44", "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"44 03 0001 00"} ]}, { "name": "48", "msgs": [ - {"type":"recv", "payload":"32 18 000C 746573742f7075626c697368 0001 00 6d657373616765"}, {"type":"send", "payload":"48 03 0001 00"} ]} ] @@ -153,98 +132,271 @@ "ver":5, "expect_disconnect":false, "command":"publish-1", + "group_msgs": [ + {"type":"recv", "payload":"32 74 000c 746573742f7075626c697368 0001 5c 01 01 02 ffffffff 23 ffff 08 000e 726573706f6e73652f746f706963 09 0024 37646561633563352d383830322d343466662d383663652d313134373966333337343139 03 000a 746578742f706c61696e 26 0003 6b6579 0005 76616c7565 6d657373616765"} + ], "tests": [ - { "name": "40 with reason-string property", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 1F000170"}]}, - { "name": "40 with 2*reason-string property", "expect_disconnect":true, "msgs": [{"type":"send", "payload":"40 0C 0001 00 08 1F000170 1F000171"}]}, - { "name": "40 with reason-string property missing", "expect_disconnect":true, "msgs": [{"type":"send", "payload":"40 05 0001 00 01 1F"}]}, - { "name": "40 with reason-string property incomplete string", "expect_disconnect":true, "msgs": [{"type":"send", "payload":"40 06 0001 00 02 1F 00"}]}, - { "name": "40 with reason-string property empty string", "expect_disconnect":true, "msgs": [{"type":"send", "payload":"40 07 0001 00 03 1F 0000"}]}, - { "name": "40 with user-property", "msgs": [{"type":"send", "payload":"40 0B 0001 00 07 26000170000171"}]}, - { "name": "40 with 2*user-property", "msgs": [{"type":"send", "payload":"40 12 0001 00 0E 26000170000171 26000170000171"}]}, - { "name": "40 with user-property missing value", "expect_disconnect":true, "msgs": [{"type":"send", "payload":"40 08 0001 00 04 26000170"}]}, - { "name": "40 with user-property missing key,value", "expect_disconnect":true, "msgs": [{"type":"send", "payload":"40 05 0001 00 01 26"}]}, - { "name": "40 with user-property empty key", "msgs": [{"type":"send", "payload":"40 0A 0001 00 06 26 0000 0001 70"}]}, - { "name": "40 with user-property empty value", "msgs": [{"type":"send", "payload":"40 0A 0001 00 06 26 0001 70 0000"}]}, - { "name": "40 with user-property empty key,value", "msgs": [{"type":"send", "payload":"40 09 0001 00 05 26 0000 0000"}]} + { "name": "40 with reason-string property", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 1F000170"} + ]}, + { "name": "40 with 2*reason-string property", "expect_disconnect":true, "msgs": [ + {"type":"send", "payload":"40 0C 0001 00 08 1F000170 1F000171"} + ]}, + { "name": "40 with reason-string property missing", "expect_disconnect":true, "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 1F"} + ]}, + { "name": "40 with reason-string property incomplete string", "expect_disconnect":true, "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 1F 00"} + ]}, + { "name": "40 with reason-string property empty string", "msgs": [ + {"type":"send", "payload":"40 07 0001 00 03 1F 0000"} + ]}, + { "name": "40 with user-property", "msgs": [ + {"type":"send", "payload":"40 0B 0001 00 07 26000170000171"} + ]}, + { "name": "40 with 2*user-property", "msgs": [ + {"type":"send", "payload":"40 12 0001 00 0E 26000170000171 26000170000171"} + ]}, + { "name": "40 with user-property missing value", "expect_disconnect":true, "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 26000170"} + ]}, + { "name": "40 with user-property missing key,value", "expect_disconnect":true, "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 26"} + ]}, + { "name": "40 with user-property empty key", "msgs": [ + {"type":"send", "payload":"40 0A 0001 00 06 26 0000 0001 70"} + ]}, + { "name": "40 with user-property empty value", "msgs": [ + {"type":"send", "payload":"40 0A 0001 00 06 26 0001 70 0000"} + ]}, + { "name": "40 with user-property empty key,value", "msgs": [ + {"type":"send", "payload":"40 09 0001 00 05 26 0000 0000"}]} ] }, { "group": "v5.0 PUBACK DISALLOWED PROPERTIES", "ver":5, "command":"publish-1", + "group_msgs": [ + {"type":"recv", "payload":"32 74 000c 746573742f7075626c697368 0001 5c 01 01 02 ffffffff 23 ffff 08 000e 726573706f6e73652f746f706963 09 0024 37646561633563352d383830322d343466662d383663652d313134373966333337343139 03 000a 746578742f706c61696e 26 0003 6b6579 0005 76616c7565 6d657373616765"} + ], "tests": [ - { "name": "40 with payload-format-indicator (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0100"}]}, - { "name": "40 with request-problem-information (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 1700"}]}, - { "name": "40 with maximum-qos (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 2400"}]}, - { "name": "40 with retain-available (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 2500"}]}, - { "name": "40 with wildcard-subscription-available (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 2800"}]}, - { "name": "40 with subscription-identifier-available (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 2900"}]}, - { "name": "40 with shared-subscription-available (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 2A00"}]}, - { "name": "40 with payload-format-indicator (byte) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 01"}]}, - { "name": "40 with request-problem-information (byte) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 17"}]}, - { "name": "40 with maximum-qos (byte) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 24"}]}, - { "name": "40 with retain-available (byte) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 25"}]}, - { "name": "40 with wildcard-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 28"}]}, - { "name": "40 with subscription-identifier-available (byte) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 29"}]}, - { "name": "40 with shared-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 2A"}]}, - { "name": "40 with message-expiry-interval (four byte integer)", "msgs": [{"type":"send", "payload":"40 09 0001 00 05 0200000001"}]}, - { "name": "40 with session-expiry-interval (four byte integer)", "msgs": [{"type":"send", "payload":"40 09 0001 00 05 1100000001"}]}, - { "name": "40 with will-delay-interval (four byte integer)", "msgs": [{"type":"send", "payload":"40 09 0001 00 05 1800000001"}]}, - { "name": "40 with maximum-packet-size (four byte integer)", "msgs": [{"type":"send", "payload":"40 09 0001 00 05 2700000001"}]}, - { "name": "40 with message-expiry-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 02"}]}, - { "name": "40 with session-expiry-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 11"}]}, - { "name": "40 with will-delay-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 18"}]}, - { "name": "40 with maximum-packet-size (four byte integer) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 27"}]}, - { "name": "40 with content-type (UTF-8 string)", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 03000170"}]}, - { "name": "40 with response-topic (UTF-8 string)", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 08000170"}]}, - { "name": "40 with assigned-client-identifier (UTF-8 string)", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 12000170"}]}, - { "name": "40 with authentication-method (UTF-8 string)", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 15000170"}]}, - { "name": "40 with response-information (UTF-8 string)", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 1A000170"}]}, - { "name": "40 with server-reference (UTF-8 string)", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 1C000170"}]}, - { "name": "40 with content-type (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 03"}]}, - { "name": "40 with response-topic (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 08"}]}, - { "name": "40 with assigned-client-identifier (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 12"}]}, - { "name": "40 with authentication-method (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 15"}]}, - { "name": "40 with response-information (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 1A"}]}, - { "name": "40 with server-reference (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 1C"}]}, - { "name": "40 with correlation-data (binary data)", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 09000170"}]}, - { "name": "40 with authentication-data (binary data)", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 16000170"}]}, - { "name": "40 with correlation-data (binary data) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 09"}]}, - { "name": "40 with authentication-data (binary data) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 16"}]}, - { "name": "40 with subscription-identifier (variable byte integer)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0B01"}]}, - { "name": "40 with subscription-identifier (variable byte integer) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 0B"}]}, - { "name": "40 with server-keep-alive (two byte integer)", "msgs": [{"type":"send", "payload":"40 07 0001 00 03 130101"}]}, - { "name": "40 with receive-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"40 07 0001 00 03 210101"}]}, - { "name": "40 with topic-alias-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"40 07 0001 00 03 220101"}]}, - { "name": "40 with topic-alias (two byte integer)", "msgs": [{"type":"send", "payload":"40 07 0001 00 03 230101"}]}, - { "name": "40 with server-keep-alive (two byte integer) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 13"}]}, - { "name": "40 with receive-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 21"}]}, - { "name": "40 with topic-alias-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 22"}]}, - { "name": "40 with topic-alias (two byte integer) missing", "msgs": [{"type":"send", "payload":"40 05 0001 00 01 23"}]}, - { "name": "40 with invalid-property 0x00 (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0001"}]}, - { "name": "40 with unknown-property 0x04 (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0401"}]}, - { "name": "40 with unknown-property 0x05 (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0501"}]}, - { "name": "40 with unknown-property 0x06 (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0601"}]}, - { "name": "40 with unknown-property 0x07 (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0701"}]}, - { "name": "40 with unknown-property 0x0A (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0A01"}]}, - { "name": "40 with unknown-property 0x0C (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0C01"}]}, - { "name": "40 with unknown-property 0x0D (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0D01"}]}, - { "name": "40 with unknown-property 0x0E (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0E01"}]}, - { "name": "40 with unknown-property 0x0F (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 0F01"}]}, - { "name": "40 with unknown-property 0x10 (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 1001"}]}, - { "name": "40 with unknown-property 0x14 (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 1401"}]}, - { "name": "40 with unknown-property 0x1B (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 1B01"}]}, - { "name": "40 with unknown-property 0x1D (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 1D01"}]}, - { "name": "40 with unknown-property 0x1E (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 1E01"}]}, - { "name": "40 with unknown-property 0x20 (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 2001"}]}, - { "name": "40 with unknown-property 0x7F (byte)", "msgs": [{"type":"send", "payload":"40 06 0001 00 02 7F01"}]}, - { "name": "40 with invalid-property 0x8000 (byte)", "msgs": [{"type":"send", "payload":"40 07 0001 00 03 800001"}]}, - { "name": "40 with unknown-property 0x8001 (byte)", "msgs": [{"type":"send", "payload":"40 07 0001 00 03 800101"}]}, - { "name": "40 with unknown-property 0xFF7F (byte)", "msgs": [{"type":"send", "payload":"40 07 0001 00 03 FF7F01"}]}, - { "name": "40 with unknown-property 0x808001 (byte)", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 80800101"}]}, - { "name": "40 with unknown-property 0xFFFF7F (byte)", "msgs": [{"type":"send", "payload":"40 08 0001 00 04 FFFF7F01"}]}, - { "name": "40 with unknown-property 0x80808001 (byte)", "msgs": [{"type":"send", "payload":"40 09 0001 00 05 8080800101"}]}, - { "name": "40 with unknown-property 0xFFFFFF7F (byte)", "msgs": [{"type":"send", "payload":"40 09 0001 00 05 FFFFFF7F01"}]} + { "name": "40 with payload-format-indicator (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0100"} + ]}, + { "name": "40 with request-problem-information (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 1700"} + ]}, + { "name": "40 with maximum-qos (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 2400"} + ]}, + { "name": "40 with retain-available (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 2500"} + ]}, + { "name": "40 with wildcard-subscription-available (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 2800"} + ]}, + { "name": "40 with subscription-identifier-available (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 2900"} + ]}, + { "name": "40 with shared-subscription-available (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 2A00"} + ]}, + { "name": "40 with payload-format-indicator (byte) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 01"} + ]}, + { "name": "40 with request-problem-information (byte) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 17"} + ]}, + { "name": "40 with maximum-qos (byte) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 24"} + ]}, + { "name": "40 with retain-available (byte) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 25"} + ]}, + { "name": "40 with wildcard-subscription-available (byte) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 28"} + ]}, + { "name": "40 with subscription-identifier-available (byte) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 29"} + ]}, + { "name": "40 with shared-subscription-available (byte) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 2A"} + ]}, + { "name": "40 with message-expiry-interval (four byte integer)", "msgs": [ + {"type":"send", "payload":"40 09 0001 00 05 0200000001"} + ]}, + { "name": "40 with session-expiry-interval (four byte integer)", "msgs": [ + {"type":"send", "payload":"40 09 0001 00 05 1100000001"} + ]}, + { "name": "40 with will-delay-interval (four byte integer)", "msgs": [ + {"type":"send", "payload":"40 09 0001 00 05 1800000001"} + ]}, + { "name": "40 with maximum-packet-size (four byte integer)", "msgs": [ + {"type":"send", "payload":"40 09 0001 00 05 2700000001"} + ]}, + { "name": "40 with message-expiry-interval (four byte integer) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 02"} + ]}, + { "name": "40 with session-expiry-interval (four byte integer) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 11"} + ]}, + { "name": "40 with will-delay-interval (four byte integer) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 18"} + ]}, + { "name": "40 with maximum-packet-size (four byte integer) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 27"} + ]}, + { "name": "40 with content-type (UTF-8 string)", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 03000170"} + ]}, + { "name": "40 with response-topic (UTF-8 string)", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 08000170"} + ]}, + { "name": "40 with assigned-client-identifier (UTF-8 string)", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 12000170"} + ]}, + { "name": "40 with authentication-method (UTF-8 string)", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 15000170"} + ]}, + { "name": "40 with response-information (UTF-8 string)", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 1A000170"} + ]}, + { "name": "40 with server-reference (UTF-8 string)", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 1C000170"} + ]}, + { "name": "40 with content-type (UTF-8 string) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 03"} + ]}, + { "name": "40 with response-topic (UTF-8 string) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 08"} + ]}, + { "name": "40 with assigned-client-identifier (UTF-8 string) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 12"} + ]}, + { "name": "40 with authentication-method (UTF-8 string) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 15"} + ]}, + { "name": "40 with response-information (UTF-8 string) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 1A"} + ]}, + { "name": "40 with server-reference (UTF-8 string) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 1C"} + ]}, + { "name": "40 with correlation-data (binary data)", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 09000170"} + ]}, + { "name": "40 with authentication-data (binary data)", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 16000170"} + ]}, + { "name": "40 with correlation-data (binary data) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 09"} + ]}, + { "name": "40 with authentication-data (binary data) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 16"} + ]}, + { "name": "40 with subscription-identifier (variable byte integer)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0B01"} + ]}, + { "name": "40 with subscription-identifier (variable byte integer) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 0B"} + ]}, + { "name": "40 with server-keep-alive (two byte integer)", "msgs": [ + {"type":"send", "payload":"40 07 0001 00 03 130101"} + ]}, + { "name": "40 with receive-maximum (two byte integer)", "msgs": [ + {"type":"send", "payload":"40 07 0001 00 03 210101"} + ]}, + { "name": "40 with topic-alias-maximum (two byte integer)", "msgs": [ + {"type":"send", "payload":"40 07 0001 00 03 220101"} + ]}, + { "name": "40 with topic-alias (two byte integer)", "msgs": [ + {"type":"send", "payload":"40 07 0001 00 03 230101"} + ]}, + { "name": "40 with server-keep-alive (two byte integer) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 13"} + ]}, + { "name": "40 with receive-maximum (two byte integer) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 21"} + ]}, + { "name": "40 with topic-alias-maximum (two byte integer) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 22"} + ]}, + { "name": "40 with topic-alias (two byte integer) missing", "msgs": [ + {"type":"send", "payload":"40 05 0001 00 01 23"} + ]}, + { "name": "40 with invalid-property 0x00 (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0001"} + ]}, + { "name": "40 with unknown-property 0x04 (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0401"} + ]}, + { "name": "40 with unknown-property 0x05 (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0501"} + ]}, + { "name": "40 with unknown-property 0x06 (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0601"} + ]}, + { "name": "40 with unknown-property 0x07 (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0701"} + ]}, + { "name": "40 with unknown-property 0x0A (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0A01"} + ]}, + { "name": "40 with unknown-property 0x0C (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0C01"} + ]}, + { "name": "40 with unknown-property 0x0D (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0D01"} + ]}, + { "name": "40 with unknown-property 0x0E (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0E01"} + ]}, + { "name": "40 with unknown-property 0x0F (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 0F01"} + ]}, + { "name": "40 with unknown-property 0x10 (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 1001"} + ]}, + { "name": "40 with unknown-property 0x14 (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 1401"} + ]}, + { "name": "40 with unknown-property 0x1B (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 1B01"} + ]}, + { "name": "40 with unknown-property 0x1D (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 1D01"} + ]}, + { "name": "40 with unknown-property 0x1E (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 1E01"} + ]}, + { "name": "40 with unknown-property 0x20 (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 2001"} + ]}, + { "name": "40 with unknown-property 0x7F (byte)", "msgs": [ + {"type":"send", "payload":"40 06 0001 00 02 7F01"} + ]}, + { "name": "40 with invalid-property 0x8000 (byte)", "msgs": [ + {"type":"send", "payload":"40 07 0001 00 03 800001"} + ]}, + { "name": "40 with unknown-property 0x8001 (byte)", "msgs": [ + {"type":"send", "payload":"40 07 0001 00 03 800101"} + ]}, + { "name": "40 with unknown-property 0xFF7F (byte)", "msgs": [ + {"type":"send", "payload":"40 07 0001 00 03 FF7F01"} + ]}, + { "name": "40 with unknown-property 0x808001 (byte)", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 80800101"} + ]}, + { "name": "40 with unknown-property 0xFFFF7F (byte)", "msgs": [ + {"type":"send", "payload":"40 08 0001 00 04 FFFF7F01"} + ]}, + { "name": "40 with unknown-property 0x80808001 (byte)", "msgs": [ + {"type":"send", "payload":"40 09 0001 00 05 8080800101"} + ]}, + { "name": "40 with unknown-property 0xFFFFFF7F (byte)", "msgs": [ + {"type":"send", "payload":"40 09 0001 00 05 FFFFFF7F01"} + ]} ] } ] diff --git a/test/lib/data/PUBREC.json b/test/lib/data/PUBREC.json new file mode 100644 index 00000000..43e3ddba --- /dev/null +++ b/test/lib/data/PUBREC.json @@ -0,0 +1,241 @@ +[ + { + "group": "v3.1.1 PUBREC unsolicited", + "ver":4, + "tests": [ + { "name": "50 [MQTT-3.1.0-1]", "connack":false, "msgs": [{"type":"send", "payload":"50 02 0001"}]}, + { "name": "50", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 02 0001"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 long", "msgs": [{"type":"send", "payload":"50 03 0001 00"}]}, + { "name": "50 mid 0", "msgs": [{"type":"send", "payload":"50 02 0000"}]}, + { "name": "50 short 0", "msgs": [{"type":"send", "payload":"50 00"}]}, + { "name": "50 short 1", "msgs": [{"type":"send", "payload":"50 01 01"}]}, + { "name": "51", "msgs": [{"type":"send", "payload":"51 02 0001"}]}, + { "name": "52", "msgs": [{"type":"send", "payload":"52 02 0001"}]}, + { "name": "54", "msgs": [{"type":"send", "payload":"54 02 0001"}]}, + { "name": "58", "msgs": [{"type":"send", "payload":"58 02 0001"}]} + ] + }, + { + "group": "v3.1.1 PUBREC", + "ver":4, + "command":"publish-2", + "group_msgs":[ + {"type":"recv", "payload":"34 17 000C 746573742f7075626c697368 0001 6d657373616765"} + ], + "tests": [ + { "name": "50", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 02 0001"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 long", "msgs": [{"type":"send", "payload":"50 03 0001 00"}]}, + { "name": "50 mid 0", "msgs": [{"type":"send", "payload":"50 02 0000"}]}, + { "name": "50 short 0", "msgs": [{"type":"send", "payload":"50 00"}]}, + { "name": "50 short 1", "msgs": [{"type":"send", "payload":"50 01 01"}]}, + { "name": "51", "msgs": [{"type":"send", "payload":"51 02 0001"}]}, + { "name": "52", "msgs": [{"type":"send", "payload":"52 02 0001"}]}, + { "name": "54", "msgs": [{"type":"send", "payload":"54 02 0001"}]}, + { "name": "58", "msgs": [{"type":"send", "payload":"58 02 0001"}]} + ] + }, + { + "group": "v5.0 PUBREC unsolicited", + "ver":5, + "tests": [ + { "name": "50 [MQTT-3.1.0-1] (no reason code)", "connack":false, "msgs": [{"type":"send", "payload":"50 02 0001"}]}, + { "name": "50 [MQTT-3.1.0-1]", "connack":false, "msgs": [{"type":"send", "payload":"50 03 0001 00"}]}, + { "name": "50 long", "msgs": [{"type":"send", "payload":"50 05 0001 00 00 00"}]}, + { "name": "50 mid 0", "msgs": [{"type":"send", "payload":"50 03 0000 00"}]}, + { "name": "50 short 0", "msgs": [{"type":"send", "payload":"50 00"}]}, + { "name": "50 short 1", "msgs": [{"type":"send", "payload":"50 01 01"}]}, + { "name": "50 len=2", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 02 0001"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 len=3", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 03 0001 00"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 len=3 fail", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"50 03 0001 80"}]}, + { "name": "50 len=4 ok", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 04 0001 00 00"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 len=4 rc=fail", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"50 04 0001 80 00"}]}, + { "name": "50 len=4 rc=unknown", "msgs": [{"type":"send", "payload":"50 04 0001 FF 00"}]}, + { "name": "50 len=4 short", "msgs": [{"type":"send", "payload":"50 04 0001 00 01"}]}, + { "name": "51", "msgs": [{"type":"send", "payload":"51 03 0001 00"}]}, + { "name": "52", "msgs": [{"type":"send", "payload":"52 03 0001 00"}]}, + { "name": "54", "msgs": [{"type":"send", "payload":"54 03 0001 00"}]}, + { "name": "58", "msgs": [{"type":"send", "payload":"58 03 0001 00"}]} + ] + }, + { + "group": "v5.0 PUBREC valid", + "ver":5, + "expect_disconnect":false, + "command":"publish-2", + "group_msgs":[ + {"type":"recv", "payload":"34 74 000C 746573742F7075626C697368 0001 5C 01 01 02 FFFFFFFF 23 FFFF 08 000E 726573706F6E73652F746F706963 09 0024 37646561633563352D383830322D343466662D383663652D313134373966333337343139 03 000A 746578742F706C61696E 26 00036B6579 000576616C7565 6D657373616765"} + ], + "tests": [ + { "name": "50 len=2", "msgs": [ + {"type":"send", "payload":"50 02 0001"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 len=3", "msgs": [ + {"type":"send", "payload":"50 03 0001 00"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 len=3 fail", "msgs": [{"type":"send", "payload":"50 03 0001 80"}]}, + { "name": "50 len=4 ok", "msgs": [ + {"type":"send", "payload":"50 04 0001 00 00"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 len=4 rc=fail", "msgs": [{"type":"send", "payload":"50 04 0001 80 00"}]} + ] + }, + { + "group": "v5.0 PUBREC invalid", + "ver":5, + "command":"publish-2", + "expect_disconnect":true, + "group_msgs":[ + {"type":"recv", "payload":"34 74 000C 746573742F7075626C697368 0001 5C 01 01 02 FFFFFFFF 23 FFFF 08 000E 726573706F6E73652F746F706963 09 0024 37646561633563352D383830322D343466662D383663652D313134373966333337343139 03 000A 746578742F706C61696E 26 00036B6579 000576616C7565 6D657373616765"} + ], + "tests": [ + { "name": "50 long", "msgs": [{"type":"send", "payload":"50 05 0001 00 00 00"}]}, + { "name": "50 mid 0", "msgs": [{"type":"send", "payload":"50 03 0000 00"}]}, + { "name": "50 short 0", "msgs": [{"type":"send", "payload":"50 00"}]}, + { "name": "50 short 1", "msgs": [{"type":"send", "payload":"50 01 01"}]}, + { "name": "50 len=4 rc=unknown", "msgs": [{"type":"send", "payload":"50 04 0001 FF 00"}]}, + { "name": "50 len=4 short", "msgs": [{"type":"send", "payload":"50 04 0001 00 01"}]}, + { "name": "51 ", "msgs": [{"type":"send", "payload":"51 03 0001 00"}]}, + { "name": "52", "msgs": [{"type":"send", "payload":"52 03 0001 00"}]}, + { "name": "54", "msgs": [{"type":"send", "payload":"54 03 0001 00"}]}, + { "name": "58", "msgs": [{"type":"send", "payload":"58 03 0001 00"}]} + ] + }, + { + "group": "v5.0 PUBREC ALLOWED PROPERTIES", + "ver":5, + "command":"publish-2", + "group_msgs":[ + {"type":"recv", "payload":"34 74 000C 746573742F7075626C697368 0001 5C 01 01 02 FFFFFFFF 23 FFFF 08 000E 726573706F6E73652F746F706963 09 0024 37646561633563352D383830322D343466662D383663652D313134373966333337343139 03 000A 746578742F706C61696E 26 00036B6579 000576616C7565 6D657373616765"} + ], + "tests": [ + { "name": "50 with reason-string property", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 08 0001 00 04 1F000170"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 with 2*reason-string property", "msgs": [{"type":"send", "payload":"50 0C 0001 00 08 1F000170 1F000171"}]}, + { "name": "50 with reason-string property missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 1F"}]}, + { "name": "50 with reason-string property empty", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 07 0001 00 03 1F 0000"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 with user-property", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 0B 0001 00 07 26000170000171"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 with 2*user-property", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 12 0001 00 0E 26000170000171 26000170000171"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 with user-property missing value", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 26000170"}]}, + { "name": "50 with user-property missing key,value", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 26"}]}, + { "name": "50 with user-property empty key", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 0A 0001 00 06 26 0000 0001 70"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 with user-property empty value", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 0A 0001 00 06 26 0001 70 0000"}, + {"type":"recv", "payload":"62 02 0001"} + ]}, + { "name": "50 with user-property empty key,value", "expect_disconnect":false, "msgs": [ + {"type":"send", "payload":"50 09 0001 00 05 26 0000 0000"}, + {"type":"recv", "payload":"62 02 0001"} + ]} + ] + }, + { + "group": "v5.0 PUBREC DISALLOWED PROPERTIES", + "ver":5, + "tests": [ + { "name": "50 with payload-format-indicator (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0100"}]}, + { "name": "50 with request-problem-information (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 1700"}]}, + { "name": "50 with maximum-qos (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 2400"}]}, + { "name": "50 with retain-available (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 2500"}]}, + { "name": "50 with wildcard-subscription-available (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 2800"}]}, + { "name": "50 with subscription-identifier-available (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 2900"}]}, + { "name": "50 with shared-subscription-available (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 2A00"}]}, + { "name": "50 with payload-format-indicator (byte) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 01"}]}, + { "name": "50 with request-problem-information (byte) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 17"}]}, + { "name": "50 with maximum-qos (byte) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 24"}]}, + { "name": "50 with retain-available (byte) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 25"}]}, + { "name": "50 with wildcard-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 28"}]}, + { "name": "50 with subscription-identifier-available (byte) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 29"}]}, + { "name": "50 with shared-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 2A"}]}, + { "name": "50 with message-expiry-interval (four byte integer)", "msgs": [{"type":"send", "payload":"50 09 0001 00 05 0200000001"}]}, + { "name": "50 with session-expiry-interval (four byte integer)", "msgs": [{"type":"send", "payload":"50 09 0001 00 05 1100000001"}]}, + { "name": "50 with will-delay-interval (four byte integer)", "msgs": [{"type":"send", "payload":"50 09 0001 00 05 1800000001"}]}, + { "name": "50 with maximum-packet-size (four byte integer)", "msgs": [{"type":"send", "payload":"50 09 0001 00 05 2700000001"}]}, + { "name": "50 with message-expiry-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 02"}]}, + { "name": "50 with session-expiry-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 11"}]}, + { "name": "50 with will-delay-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 18"}]}, + { "name": "50 with maximum-packet-size (four byte integer) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 27"}]}, + { "name": "50 with content-type (UTF-8 string)", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 03000170"}]}, + { "name": "50 with response-topic (UTF-8 string)", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 08000170"}]}, + { "name": "50 with assigned-client-identifier (UTF-8 string)", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 12000170"}]}, + { "name": "50 with authentication-method (UTF-8 string)", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 15000170"}]}, + { "name": "50 with response-information (UTF-8 string)", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 1A000170"}]}, + { "name": "50 with server-reference (UTF-8 string)", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 1C000170"}]}, + { "name": "50 with content-type (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 03"}]}, + { "name": "50 with response-topic (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 08"}]}, + { "name": "50 with assigned-client-identifier (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 12"}]}, + { "name": "50 with authentication-method (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 15"}]}, + { "name": "50 with response-information (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 1A"}]}, + { "name": "50 with server-reference (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 1C"}]}, + { "name": "50 with correlation-data (binary data)", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 09000170"}]}, + { "name": "50 with authentication-data (binary data)", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 16000170"}]}, + { "name": "50 with correlation-data (binary data) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 09"}]}, + { "name": "50 with authentication-data (binary data) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 16"}]}, + { "name": "50 with subscription-identifier (variable byte integer)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0B01"}]}, + { "name": "50 with subscription-identifier (variable byte integer) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 0B"}]}, + { "name": "50 with server-keep-alive (two byte integer)", "msgs": [{"type":"send", "payload":"50 07 0001 00 03 130101"}]}, + { "name": "50 with receive-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"50 07 0001 00 03 210101"}]}, + { "name": "50 with topic-alias-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"50 07 0001 00 03 220101"}]}, + { "name": "50 with topic-alias (two byte integer)", "msgs": [{"type":"send", "payload":"50 07 0001 00 03 230101"}]}, + { "name": "50 with server-keep-alive (two byte integer) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 13"}]}, + { "name": "50 with receive-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 21"}]}, + { "name": "50 with topic-alias-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 22"}]}, + { "name": "50 with topic-alias (two byte integer) missing", "msgs": [{"type":"send", "payload":"50 05 0001 00 01 23"}]}, + { "name": "50 with invalid-property 0x00 (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0001"}]}, + { "name": "50 with unknown-property 0x04 (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0401"}]}, + { "name": "50 with unknown-property 0x05 (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0501"}]}, + { "name": "50 with unknown-property 0x06 (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0601"}]}, + { "name": "50 with unknown-property 0x07 (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0701"}]}, + { "name": "50 with unknown-property 0x0A (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0A01"}]}, + { "name": "50 with unknown-property 0x0C (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0C01"}]}, + { "name": "50 with unknown-property 0x0D (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0D01"}]}, + { "name": "50 with unknown-property 0x0E (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0E01"}]}, + { "name": "50 with unknown-property 0x0F (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 0F01"}]}, + { "name": "50 with unknown-property 0x10 (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 1001"}]}, + { "name": "50 with unknown-property 0x14 (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 1401"}]}, + { "name": "50 with unknown-property 0x1B (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 1B01"}]}, + { "name": "50 with unknown-property 0x1D (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 1D01"}]}, + { "name": "50 with unknown-property 0x1E (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 1E01"}]}, + { "name": "50 with unknown-property 0x20 (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 2001"}]}, + { "name": "50 with unknown-property 0x7F (byte)", "msgs": [{"type":"send", "payload":"50 06 0001 00 02 7F01"}]}, + { "name": "50 with invalid-property 0x8000 (byte)", "msgs": [{"type":"send", "payload":"50 07 0001 00 03 800001"}]}, + { "name": "50 with unknown-property 0x8001 (byte)", "msgs": [{"type":"send", "payload":"50 07 0001 00 03 800101"}]}, + { "name": "50 with unknown-property 0xFF7F (byte)", "msgs": [{"type":"send", "payload":"50 07 0001 00 03 FF7F01"}]}, + { "name": "50 with unknown-property 0x808001 (byte)", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 80800101"}]}, + { "name": "50 with unknown-property 0xFFFF7F (byte)", "msgs": [{"type":"send", "payload":"50 08 0001 00 04 FFFF7F01"}]}, + { "name": "50 with unknown-property 0x80808001 (byte)", "msgs": [{"type":"send", "payload":"50 09 0001 00 05 8080800101"}]}, + { "name": "50 with unknown-property 0xFFFFFF7F (byte)", "msgs": [{"type":"send", "payload":"50 09 0001 00 05 FFFFFF7F01"}]} + ] + } +] diff --git a/test/lib/data/SUBSCRIBE.json b/test/lib/data/SUBSCRIBE.json index 1bf29768..dd775458 100644 --- a/test/lib/data/SUBSCRIBE.json +++ b/test/lib/data/SUBSCRIBE.json @@ -91,7 +91,6 @@ { "group": "v5.0 SUBSCRIBE ALLOWED PROPERTIES", "ver":5, - "disable":true, "tests": [ { "name": "82 with user-property", "msgs": [{"type":"send", "payload":"82 0E 0001 07 26000170000171 0001 70 00"}]}, { "name": "82 with 2*user-property", "msgs": [{"type":"send", "payload":"82 15 0001 0E 26000170000171 26000170000171 0001 70 00"}]}, @@ -118,7 +117,6 @@ { "group": "v5.0 SUBSCRIBE DISALLOWED PROPERTIES", "ver":5, - "disable":true, "tests": [ { "name": "82 with payload-format-indicator (byte)", "msgs": [{"type":"send", "payload":"82 09 0001 02 0100 0001 70 00"}]}, { "name": "82 with request-problem-information (byte)", "msgs": [{"type":"send", "payload":"82 09 0001 02 1700 0001 70 00"}]}, diff --git a/test/lib/data/UNSUBACK.json b/test/lib/data/UNSUBACK.json new file mode 100644 index 00000000..b71f5577 --- /dev/null +++ b/test/lib/data/UNSUBACK.json @@ -0,0 +1,184 @@ +[ + { + "group": "v3.1.1 UNSUBACK unsolicited", + "ver":4, + "tests": [ + { "name": "B0 [MQTT-3.1.0-1]", "connack":false, "msgs": [{"type":"send", "payload":"B0 02 0001"}]}, + { "name": "B0 short 0", "msgs": [{"type":"send", "payload":"B0 00"}]}, + { "name": "B0 short 1", "msgs": [{"type":"send", "payload":"B0 01 01"}]}, + { "name": "B0", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 02 0001"}]}, + { "name": "B1", "msgs": [{"type":"send", "payload":"B1 02 0001"}]}, + { "name": "B2", "msgs": [{"type":"send", "payload":"B2 02 0001"}]}, + { "name": "B4", "msgs": [{"type":"send", "payload":"B4 02 0001"}]}, + { "name": "B8", "msgs": [{"type":"send", "payload":"B8 02 0001"}]} + ] + }, + { + "group": "v3.1.1 UNSUBACK", + "ver":4, + "command":"unsubscribe", + "group_msgs":[ + {"type":"recv", "payload":"A2 12 0001 000E 746573742F737562736372696265"} + ], + "tests": [ + { "name": "B0 short 0", "msgs": [{"type":"send", "payload":"B0 00"}]}, + { "name": "B0 short 1", "msgs": [{"type":"send", "payload":"B0 01 01"}]}, + { "name": "B0", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 02 0001"}]}, + { "name": "B1", "msgs": [{"type":"send", "payload":"B1 02 0001"}]}, + { "name": "B2", "msgs": [{"type":"send", "payload":"B2 02 0001"}]}, + { "name": "B4", "msgs": [{"type":"send", "payload":"B4 02 0001"}]}, + { "name": "B8", "msgs": [{"type":"send", "payload":"B8 02 0001"}]} + ] + }, + { + "group": "v5.0 UNSUBACK unsolicited", + "ver":5, + "tests": [ + { "name": "B0 [MQTT-3.1.0-1]", "connack":false, "msgs": [{"type":"send", "payload":"B0 03 0001 00"}]}, + { "name": "B0 short 0", "msgs": [{"type":"send", "payload":"B0 00"}]}, + { "name": "B0 short 1", "msgs": [{"type":"send", "payload":"B0 01 01"}]}, + { "name": "B0 short 2", "msgs": [{"type":"send", "payload":"B0 02 0001"}]}, + { "name": "B0", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 03 0001 00"}]}, + { "name": "B1", "msgs": [{"type":"send", "payload":"B1 03 0001 00"}]}, + { "name": "B2", "msgs": [{"type":"send", "payload":"B2 03 0001 00"}]}, + { "name": "B4", "msgs": [{"type":"send", "payload":"B4 03 0001 00"}]}, + { "name": "B8", "msgs": [{"type":"send", "payload":"B8 03 0001 00"}]}, + { "name": "B0 with property", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 07 0001 04 1F000170"}]}, + { "name": "B0 reason code 0x11 no sub", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 11"}]}, + { "name": "B0 reason code 0x80 unspecified error", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 80"}]}, + { "name": "B0 reason code 0x83 implementation specific error", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 83"}]}, + { "name": "B0 reason code 0x87 not authorised", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 87"}]}, + { "name": "B0 reason code 0x8F topic filter invalid", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 8F"}]}, + { "name": "B0 reason code 0x91 packet identifier in use", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 91"}]}, + { "name": "B0 reason code 0xFF unknown", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 FF"}]} + ] + }, + { + + + "group": "v5.0 UNSUBACK", + "ver":5, + "command":"unsubscribe", + "group_msgs":[ + {"type":"recv", "payload":"A2 20 0001 0D 26 0003 6B6579 0005 76616C7565 000E 746573742F737562736372696265"} + ], + "tests": [ + { "name": "B0 short 0", "msgs": [{"type":"send", "payload":"B0 00"}]}, + { "name": "B0 short 1", "msgs": [{"type":"send", "payload":"B0 01 01"}]}, + { "name": "B0 short 2", "msgs": [{"type":"send", "payload":"B0 02 0001"}]}, + { "name": "B0", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 03 0001 00"}]}, + { "name": "B1", "msgs": [{"type":"send", "payload":"B1 03 0001 00"}]}, + { "name": "B2", "msgs": [{"type":"send", "payload":"B2 03 0001 00"}]}, + { "name": "B4", "msgs": [{"type":"send", "payload":"B4 03 0001 00"}]}, + { "name": "B8", "msgs": [{"type":"send", "payload":"B8 03 0001 00"}]}, + { "name": "B0 with property", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 07 0001 04 1F000170"}]}, + { "name": "B0 reason code 0x11 no sub", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 11"}]}, + { "name": "B0 reason code 0x80 unspecified error", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 80"}]}, + { "name": "B0 reason code 0x83 implementation specific error", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 83"}]}, + { "name": "B0 reason code 0x87 not authorised", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 87"}]}, + { "name": "B0 reason code 0x8F topic filter invalid", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 8F"}]}, + { "name": "B0 reason code 0x91 packet identifier in use", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 91"}]}, + { "name": "B0 reason code 0xFF unknown", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 04 0001 00 FF"}]} + ] + }, + { + "group": "v5.0 UNSUBACK ALLOWED PROPERTIES", + "ver":5, + "command":"unsubscribe", + "group_msgs":[ + {"type":"recv", "payload":"A2 20 0001 0D 26 0003 6B6579 0005 76616C7565 000E 746573742F737562736372696265"} + ], + "tests": [ + { "name": "B0 with reason-string property", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 08 0001 04 1F000170 00"}]}, + { "name": "B0 with reason-string property missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 1F 00"}]}, + { "name": "B0 with user-property", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 0B 0001 07 26000170000171 00"}]}, + { "name": "B0 with user-property missing value", "msgs": [{"type":"send", "payload":"B0 08 0001 04 26000170 00"}]}, + { "name": "B0 with user-property missing key,value", "msgs": [{"type":"send", "payload":"B0 05 0001 01 26 00"}]}, + { "name": "B0 with user-property empty key", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 0A 0001 06 26 0000 0001 70 00"}]}, + { "name": "B0 with user-property empty value", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 0A 0001 06 26 0001 70 0000 00"}]}, + { "name": "B0 with user-property empty key,value", "expect_disconnect":false, "msgs": [{"type":"send", "payload":"B0 09 0001 05 26 0000 0000 00"}]} + ] + }, + { + "group": "v5.0 UNSUBACK DISALLOWED PROPERTIES", + "ver":5, + "group_msgs":[ + {"type":"recv", "payload":"A2 20 0001 0D 26 0003 6B6579 0005 76616C7565 000E 746573742F737562736372696265"} + ], + "command":"unsubscribe", + "tests": [ + { "name": "B0 with payload-format-indicator (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0100 00"}]}, + { "name": "B0 with request-problem-information (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 1700 00"}]}, + { "name": "B0 with maximum-qos (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 2400 00"}]}, + { "name": "B0 with retain-available (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 2500 00"}]}, + { "name": "B0 with wildcard-subscription-available (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 2800 00"}]}, + { "name": "B0 with subscription-identifier-available (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 2900 00"}]}, + { "name": "B0 with shared-subscription-available (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 2A00 00"}]}, + { "name": "B0 with payload-format-indicator (byte) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 01 00"}]}, + { "name": "B0 with request-problem-information (byte) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 17 00"}]}, + { "name": "B0 with maximum-qos (byte) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 24 00"}]}, + { "name": "B0 with retain-available (byte) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 25 00"}]}, + { "name": "B0 with wildcard-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 28 00"}]}, + { "name": "B0 with subscription-identifier-available (byte) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 29 00"}]}, + { "name": "B0 with shared-subscription-available (byte) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 2A 00"}]}, + { "name": "B0 with message-expiry-interval (four byte integer)", "msgs": [{"type":"send", "payload":"B0 09 0001 05 0200000001 00"}]}, + { "name": "B0 with session-expiry-interval (four byte integer)", "msgs": [{"type":"send", "payload":"B0 09 0001 05 1100000001 00"}]}, + { "name": "B0 with will-delay-interval (four byte integer)", "msgs": [{"type":"send", "payload":"B0 09 0001 05 1800000001 00"}]}, + { "name": "B0 with maximum-packet-size (four byte integer)", "msgs": [{"type":"send", "payload":"B0 09 0001 05 2700000001 00"}]}, + { "name": "B0 with message-expiry-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 02 00"}]}, + { "name": "B0 with session-expiry-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 11 00"}]}, + { "name": "B0 with will-delay-interval (four byte integer) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 18 00"}]}, + { "name": "B0 with maximum-packet-size (four byte integer) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 27 00"}]}, + { "name": "B0 with content-type (UTF-8 string)", "msgs": [{"type":"send", "payload":"B0 08 0001 04 03000170 00"}]}, + { "name": "B0 with response-topic (UTF-8 string)", "msgs": [{"type":"send", "payload":"B0 08 0001 04 08000170 00"}]}, + { "name": "B0 with assigned-client-identifier (UTF-8 string)", "msgs": [{"type":"send", "payload":"B0 08 0001 04 12000170 00"}]}, + { "name": "B0 with authentication-method (UTF-8 string)", "msgs": [{"type":"send", "payload":"B0 08 0001 04 15000170 00"}]}, + { "name": "B0 with response-information (UTF-8 string)", "msgs": [{"type":"send", "payload":"B0 08 0001 04 1A000170 00"}]}, + { "name": "B0 with server-reference (UTF-8 string)", "msgs": [{"type":"send", "payload":"B0 08 0001 04 1C000170 00"}]}, + { "name": "B0 with content-type (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 03 00"}]}, + { "name": "B0 with response-topic (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 08 00"}]}, + { "name": "B0 with assigned-client-identifier (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 12 00"}]}, + { "name": "B0 with authentication-method (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 15 00"}]}, + { "name": "B0 with response-information (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 1A 00"}]}, + { "name": "B0 with server-reference (UTF-8 string) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 1C 00"}]}, + { "name": "B0 with correlation-data (binary data)", "msgs": [{"type":"send", "payload":"B0 08 0001 04 09000170 00"}]}, + { "name": "B0 with authentication-data (binary data)", "msgs": [{"type":"send", "payload":"B0 08 0001 04 16000170 00"}]}, + { "name": "B0 with correlation-data (binary data) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 09 00"}]}, + { "name": "B0 with authentication-data (binary data) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 16 00"}]}, + { "name": "B0 with subscription-identifier (variable byte integer)", "msgs": [{"type":"send", "payload":"B0 05 0001 02 0B01"}]}, + { "name": "B0 with subscription-identifier (variable byte integer) missing", "msgs": [{"type":"send", "payload":"B0 04 0001 01 0B"}]}, + { "name": "B0 with server-keep-alive (two byte integer)", "msgs": [{"type":"send", "payload":"B0 07 0001 03 130101 00"}]}, + { "name": "B0 with receive-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"B0 07 0001 03 210101 00"}]}, + { "name": "B0 with topic-alias-maximum (two byte integer)", "msgs": [{"type":"send", "payload":"B0 07 0001 03 220101 00"}]}, + { "name": "B0 with topic-alias (two byte integer)", "msgs": [{"type":"send", "payload":"B0 07 0001 03 230101 00"}]}, + { "name": "B0 with server-keep-alive (two byte integer) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 13 00"}]}, + { "name": "B0 with receive-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 21 00"}]}, + { "name": "B0 with topic-alias-maximum (two byte integer) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 22 00"}]}, + { "name": "B0 with topic-alias (two byte integer) missing", "msgs": [{"type":"send", "payload":"B0 05 0001 01 23 00"}]}, + { "name": "B0 with invalid-property 0x00 (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0001 00"}]}, + { "name": "B0 with unknown-property 0x04 (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0401 00"}]}, + { "name": "B0 with unknown-property 0x05 (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0501 00"}]}, + { "name": "B0 with unknown-property 0x06 (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0601 00"}]}, + { "name": "B0 with unknown-property 0x07 (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0701 00"}]}, + { "name": "B0 with unknown-property 0x0A (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0A01 00"}]}, + { "name": "B0 with unknown-property 0x0C (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0C01 00"}]}, + { "name": "B0 with unknown-property 0x0D (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0D01 00"}]}, + { "name": "B0 with unknown-property 0x0E (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0E01 00"}]}, + { "name": "B0 with unknown-property 0x0F (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 0F01 00"}]}, + { "name": "B0 with unknown-property 0x10 (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 1001 00"}]}, + { "name": "B0 with unknown-property 0x14 (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 1401 00"}]}, + { "name": "B0 with unknown-property 0x1B (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 1B01 00"}]}, + { "name": "B0 with unknown-property 0x1D (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 1D01 00"}]}, + { "name": "B0 with unknown-property 0x1E (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 1E01 00"}]}, + { "name": "B0 with unknown-property 0x20 (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 2001 00"}]}, + { "name": "B0 with unknown-property 0x7F (byte)", "msgs": [{"type":"send", "payload":"B0 06 0001 02 7F01 00"}]}, + { "name": "B0 with invalid-property 0x8000 (byte)", "msgs": [{"type":"send", "payload":"B0 07 0001 03 800001 00"}]}, + { "name": "B0 with unknown-property 0x8001 (byte)", "msgs": [{"type":"send", "payload":"B0 07 0001 03 800101 00"}]}, + { "name": "B0 with unknown-property 0xFF7F (byte)", "msgs": [{"type":"send", "payload":"B0 07 0001 03 FF7F01 00"}]}, + { "name": "B0 with unknown-property 0x808001 (byte)", "msgs": [{"type":"send", "payload":"B0 08 0001 04 80800101 00"}]}, + { "name": "B0 with unknown-property 0xFFFF7F (byte)", "msgs": [{"type":"send", "payload":"B0 08 0001 04 FFFF7F01 00"}]}, + { "name": "B0 with unknown-property 0x80808001 (byte)", "msgs": [{"type":"send", "payload":"B0 09 0001 05 8080800101 00"}]}, + { "name": "B0 with unknown-property 0xFFFFFF7F (byte)", "msgs": [{"type":"send", "payload":"B0 09 0001 05 FFFFFF7F01 00"}]} + ] + } +] diff --git a/test/lib/msg_sequence_test.py b/test/lib/msg_sequence_test.py index 819137d4..04d5d1ef 100755 --- a/test/lib/msg_sequence_test.py +++ b/test/lib/msg_sequence_test.py @@ -2,6 +2,7 @@ # Test whether a valid CONNECT results in the correct CONNACK packet. +import atexit from mosq_test_helper import * import importlib from os import walk @@ -19,6 +20,17 @@ publish = 5 vg_index = 1 vg_logfiles = [] +@atexit.register +def test_cleanup(): + global vg_logfiles + + for f in vg_logfiles: + try: + if os.stat(f).st_size == 0: + os.remove(f) + except OSError: + pass + class SingleMsg(object): __slots__ = 'action', 'message', 'comment' def __init__(self, action, message, comment=''): @@ -45,6 +57,17 @@ class MsgSequence(object): properties = mqtt5_props.gen_uint16_prop(mqtt5_props.PROP_RECEIVE_MAXIMUM, 20) self.add_send(mosq_test.gen_connack(rc=0, proto_ver=proto_ver, properties=properties, property_helper=False), "default connack") + def add_msg(self, message): + try: + c = message["comment"] + except KeyError: + c = "" + if message["type"] == "send": + self.add_send(bytes.fromhex(message["payload"].replace(" ", "")), c) + elif message["type"] == "recv": + self.add_recv(bytes.fromhex(message["payload"].replace(" ", "")), c) + elif message["type"] == "publish": + self.add_publish(message, c) def add_send(self, message, comment=""): self._add(send, message, comment) @@ -85,10 +108,10 @@ class MsgSequence(object): def kill_client(self): self.sock.close() self.client.terminate() - if self.client.returncode == 139: + self.client.wait() + if self.client.returncode != 0: raise RuntimeError - def _add(self, action, message, comment=""): msg = SingleMsg(action, message, comment) self.msgs.append(msg) @@ -125,8 +148,8 @@ class MsgSequence(object): def _puback_check(self): - publish_packet = mosq_test.gen_publish(mid=1, qos=1, topic="alive check", payload="payload", proto_ver=self.proto_ver) - puback_packet = mosq_test.gen_puback(mid=1, proto_ver=self.proto_ver) + publish_packet = mosq_test.gen_publish(mid=65535, qos=1, topic="alive check", payload="payload", proto_ver=self.proto_ver) + puback_packet = mosq_test.gen_puback(mid=65535, proto_ver=self.proto_ver) self.sock.send(publish_packet) packet = self.sock.recv(len(puback_packet)) return packet == puback_packet @@ -220,6 +243,15 @@ def do_test(hostname, port): g_connack = g["connack"] except KeyError: g_connack = True + try: + g_expect_disconnect = g["expect_disconnect"] + except KeyError: + g_expect_disconnect = True + + try: + group_msgs = g["group_msgs"] + except KeyError: + group_msgs = None tests = g["tests"] @@ -248,7 +280,7 @@ def do_test(hostname, port): try: expect_disconnect = t["expect_disconnect"] except KeyError: - expect_disconnect = True + expect_disconnect = g_expect_disconnect this_test = MsgSequence(tname, port, proto_ver=proto_ver, @@ -258,39 +290,31 @@ def do_test(hostname, port): default_connack=connack, command=command) + if group_msgs is not None: + for m in group_msgs: + this_test.add_msg(m) + for m in t["msgs"]: - try: - c = m["comment"] - except KeyError: - c = "" - if m["type"] == "send": - this_test.add_send(bytes.fromhex(m["payload"].replace(" ", "")), c) - elif m["type"] == "recv": - this_test.add_recv(bytes.fromhex(m["payload"].replace(" ", "")), c) - elif m["type"] == "publish": - this_test.add_publish(m, c) + this_test.add_msg(m) this_test.run_client(server_sock, port) total += 1 try: this_test.process_all() - print("\033[32m" + tname + "\033[0m") + this_test.kill_client() + this_test = None + #print("\033[32m" + tname + "\033[0m") succeeded += 1 - except ValueError as e: - print("\033[31m" + tname + " failed: " + str(e) + "\033[0m") - rc = 1 - except ConnectionResetError as e: - print("\033[31m" + tname + " failed: " + str(e) + "\033[0m") - rc = 1 - except socket.timeout as e: - print("\033[31m" + tname + " failed: " + str(e) + "\033[0m") - rc = 1 - except mosq_test.TestError as e: + except (ValueError, ConnectionResetError, socket.timeout, mosq_test.TestError, RuntimeError) as e: print("\033[31m" + tname + " failed: " + str(e) + "\033[0m") rc = 1 finally: - this_test.kill_client() + if this_test is not None: + try: + this_test.kill_client() + except RuntimeError: + pass print("%d tests total\n%d tests succeeded" % (total, succeeded)) return rc @@ -300,14 +324,3 @@ port = mosq_test.get_port() rc = do_test(hostname=hostname, port=port) exit(rc) - -@atexit.register -def test_cleanup(): - global vg_logfiles - - for f in vg_logfiles: - try: - if os.stat(f).st_size == 0: - os.remove(f) - except OSError: - pass