diff --git a/test/unit/property_read.c b/test/unit/property_read.c index 1d803e4b..0cfbceb3 100644 --- a/test/unit/property_read.c +++ b/test/unit/property_read.c @@ -196,6 +196,69 @@ static void duplicate_string_helper(int identifier) string_prop_read_helper(payload, 9, MOSQ_ERR_PROTOCOL, identifier, ""); } +static void bad_string_helper(int identifier) +{ + uint8_t payload[20]; + + memset(&payload, 0, sizeof(payload)); + payload[0] = 6; + payload[1] = identifier; + payload[2] = 0; + payload[3] = 3; /* 1 length string */ + payload[4] = 'h'; + payload[5] = 0; /* 0 in string not allowed */ + payload[6] = 'h'; + + string_prop_read_helper(payload, 7, MOSQ_ERR_MALFORMED_UTF8, identifier, ""); +} + +static void binary_prop_read_helper( + uint8_t *payload, + int remaining_length, + int rc_expected, + int identifier, + const uint8_t *value_expected, + int len_expected) +{ + struct mosquitto__packet packet; + struct mqtt5__property *properties; + int rc; + + memset(&packet, 0, sizeof(struct mosquitto__packet)); + packet.payload = payload; + packet.remaining_length = remaining_length; + rc = property__read_all(&packet, &properties); + + CU_ASSERT_EQUAL(rc, rc_expected); + CU_ASSERT_EQUAL(packet.pos, remaining_length); + if(properties){ + CU_ASSERT_EQUAL(properties->identifier, identifier); + CU_ASSERT_EQUAL(properties->value.bin.len, len_expected); + CU_ASSERT_EQUAL(memcmp(properties->value.bin.v, value_expected, len_expected), 0); + CU_ASSERT_PTR_EQUAL(properties->next, NULL); + property__free_all(&properties); + } + CU_ASSERT_PTR_EQUAL(properties, NULL); +} + +static void duplicate_binary_helper(int identifier) +{ + uint8_t payload[20]; + + memset(&payload, 0, sizeof(payload)); + payload[0] = 8; + payload[1] = identifier; + payload[2] = 0; + payload[3] = 1; /* 2 length binary */ + payload[4] = 'h'; + payload[5] = identifier; + payload[6] = 0; + payload[7] = 1; + payload[8] = 'h'; + + string_prop_read_helper(payload, 9, MOSQ_ERR_PROTOCOL, identifier, ""); +} + /* ======================================================================== * NO PROPERTIES * ======================================================================== */ @@ -631,6 +694,42 @@ static void TEST_single_reason_string(void) string_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_REASON_STRING, "hello"); } +static void TEST_single_correlation_data(void) +{ + uint8_t payload[20]; + + memset(&payload, 0, sizeof(payload)); + payload[0] = 8; + payload[1] = PROP_CORRELATION_DATA; + payload[2] = 0x00; + payload[3] = 0x05; + payload[4] = 1; + payload[5] = 'e'; + payload[6] = 0; + payload[7] = 'l'; + payload[8] = 9; + + binary_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_CORRELATION_DATA, &payload[4], 5); +} + +static void TEST_single_authentication_data(void) +{ + uint8_t payload[20]; + + memset(&payload, 0, sizeof(payload)); + payload[0] = 8; + payload[1] = PROP_AUTHENTICATION_DATA; + payload[2] = 0x00; + payload[3] = 0x05; + payload[4] = 1; + payload[5] = 'e'; + payload[6] = 0; + payload[7] = 'l'; + payload[8] = 9; + + binary_prop_read_helper(payload, 9, MOSQ_ERR_SUCCESS, PROP_AUTHENTICATION_DATA, &payload[4], 5); +} + /* ======================================================================== * DUPLICATE PROPERTIES * ======================================================================== */ @@ -750,6 +849,16 @@ static void TEST_duplicate_reason_string(void) duplicate_string_helper(PROP_REASON_STRING); } +static void TEST_duplicate_correlation_data(void) +{ + duplicate_binary_helper(PROP_CORRELATION_DATA); +} + +static void TEST_duplicate_authentication_data(void) +{ + duplicate_binary_helper(PROP_AUTHENTICATION_DATA); +} + /* ======================================================================== * BAD PROPERTY VALUES * ======================================================================== */ @@ -830,6 +939,11 @@ static void TEST_bad_topic_alias(void) int32_prop_read_helper(payload, 4, MOSQ_ERR_PROTOCOL, PROP_TOPIC_ALIAS, 0); } +static void TEST_bad_content_type(void) +{ + bad_string_helper(PROP_CONTENT_TYPE); +} + /* ======================================================================== * TEST SUITE SETUP * ======================================================================== */ @@ -871,6 +985,8 @@ int init_property_read_tests(void) || !CU_add_test(test_suite, "Single Response Information", TEST_single_response_information) || !CU_add_test(test_suite, "Single Server Reference", TEST_single_server_reference) || !CU_add_test(test_suite, "Single Reason String", TEST_single_reason_string) + || !CU_add_test(test_suite, "Single Correlation Data", TEST_single_correlation_data) + || !CU_add_test(test_suite, "Single Authentication Data", TEST_single_authentication_data) || !CU_add_test(test_suite, "Duplicate Payload Format Indicator", TEST_duplicate_payload_format_indicator) || !CU_add_test(test_suite, "Duplicate Request Problem Information", TEST_duplicate_request_problem_information) || !CU_add_test(test_suite, "Duplicate Request Response Information", TEST_duplicate_request_response_information) @@ -894,6 +1010,8 @@ int init_property_read_tests(void) || !CU_add_test(test_suite, "Duplicate Response Information", TEST_duplicate_response_information) || !CU_add_test(test_suite, "Duplicate Server Reference", TEST_duplicate_server_reference) || !CU_add_test(test_suite, "Duplicate Reason String", TEST_duplicate_reason_string) + || !CU_add_test(test_suite, "Duplicate Correlation Data", TEST_duplicate_correlation_data) + || !CU_add_test(test_suite, "Duplicate Authentication Data", TEST_duplicate_authentication_data) || !CU_add_test(test_suite, "Bad Request Problem Information", TEST_bad_request_problem_information) || !CU_add_test(test_suite, "Bad Request Response Information", TEST_bad_request_response_information) || !CU_add_test(test_suite, "Bad Maximum QoS", TEST_bad_maximum_qos) @@ -904,6 +1022,7 @@ int init_property_read_tests(void) || !CU_add_test(test_suite, "Bad Maximum Packet Size", TEST_bad_maximum_packet_size) || !CU_add_test(test_suite, "Bad Receive Maximum", TEST_bad_receive_maximum) || !CU_add_test(test_suite, "Bad Topic Alias", TEST_bad_topic_alias) + || !CU_add_test(test_suite, "Bad Content Type", TEST_bad_content_type) ){ printf("Error adding Property read CUnit tests.\n");