123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648 |
- #include <CUnit/CUnit.h>
- #include <CUnit/Basic.h>
- #include "mqtt_protocol.h"
- #include "property_mosq.h"
- #include "packet_mosq.h"
- /* ========================================================================
- * BAD IDENTIFIER
- * ======================================================================== */
- static void bad_add_byte_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_byte(&proplist, identifier, 1);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
- CU_ASSERT_PTR_NULL(proplist);
- }
- static void bad_add_int16_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_int16(&proplist, identifier, 1);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
- CU_ASSERT_PTR_NULL(proplist);
- }
- static void bad_add_int32_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_int32(&proplist, identifier, 1);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
- CU_ASSERT_PTR_NULL(proplist);
- }
- static void bad_add_varint_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_varint(&proplist, identifier, 1);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
- CU_ASSERT_PTR_NULL(proplist);
- }
- static void bad_add_binary_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_binary(&proplist, identifier, "test", 4);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
- CU_ASSERT_PTR_NULL(proplist);
- }
- static void bad_add_string_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_string(&proplist, identifier, "test");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
- CU_ASSERT_PTR_NULL(proplist);
- }
- static void bad_add_string_pair_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_string_pair(&proplist, identifier, "key", "value");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_INVAL);
- CU_ASSERT_PTR_NULL(proplist);
- }
- static void TEST_add_bad_byte(void)
- {
- bad_add_byte_helper(MQTT_PROP_MESSAGE_EXPIRY_INTERVAL);
- bad_add_byte_helper(MQTT_PROP_CONTENT_TYPE);
- bad_add_byte_helper(MQTT_PROP_RESPONSE_TOPIC);
- bad_add_byte_helper(MQTT_PROP_CORRELATION_DATA);
- bad_add_byte_helper(MQTT_PROP_SUBSCRIPTION_IDENTIFIER);
- bad_add_byte_helper(MQTT_PROP_SESSION_EXPIRY_INTERVAL);
- bad_add_byte_helper(MQTT_PROP_ASSIGNED_CLIENT_IDENTIFIER);
- bad_add_byte_helper(MQTT_PROP_SERVER_KEEP_ALIVE);
- bad_add_byte_helper(MQTT_PROP_AUTHENTICATION_METHOD);
- bad_add_byte_helper(MQTT_PROP_AUTHENTICATION_DATA);
- bad_add_byte_helper(MQTT_PROP_WILL_DELAY_INTERVAL);
- bad_add_byte_helper(MQTT_PROP_RESPONSE_INFORMATION);
- bad_add_byte_helper(MQTT_PROP_SERVER_REFERENCE);
- bad_add_byte_helper(MQTT_PROP_REASON_STRING);
- bad_add_byte_helper(MQTT_PROP_RECEIVE_MAXIMUM);
- bad_add_byte_helper(MQTT_PROP_TOPIC_ALIAS_MAXIMUM);
- bad_add_byte_helper(MQTT_PROP_TOPIC_ALIAS);
- bad_add_byte_helper(MQTT_PROP_USER_PROPERTY);
- bad_add_byte_helper(MQTT_PROP_MAXIMUM_PACKET_SIZE);
- }
- static void TEST_add_bad_int16(void)
- {
- bad_add_int16_helper(MQTT_PROP_PAYLOAD_FORMAT_INDICATOR);
- bad_add_int16_helper(MQTT_PROP_MESSAGE_EXPIRY_INTERVAL);
- bad_add_int16_helper(MQTT_PROP_CONTENT_TYPE);
- bad_add_int16_helper(MQTT_PROP_RESPONSE_TOPIC);
- bad_add_int16_helper(MQTT_PROP_CORRELATION_DATA);
- bad_add_int16_helper(MQTT_PROP_SUBSCRIPTION_IDENTIFIER);
- bad_add_int16_helper(MQTT_PROP_SESSION_EXPIRY_INTERVAL);
- bad_add_int16_helper(MQTT_PROP_ASSIGNED_CLIENT_IDENTIFIER);
- bad_add_int16_helper(MQTT_PROP_AUTHENTICATION_METHOD);
- bad_add_int16_helper(MQTT_PROP_AUTHENTICATION_DATA);
- bad_add_int16_helper(MQTT_PROP_REQUEST_PROBLEM_INFORMATION);
- bad_add_int16_helper(MQTT_PROP_WILL_DELAY_INTERVAL);
- bad_add_int16_helper(MQTT_PROP_REQUEST_RESPONSE_INFORMATION);
- bad_add_int16_helper(MQTT_PROP_RESPONSE_INFORMATION);
- bad_add_int16_helper(MQTT_PROP_SERVER_REFERENCE);
- bad_add_int16_helper(MQTT_PROP_REASON_STRING);
- bad_add_int16_helper(MQTT_PROP_MAXIMUM_QOS);
- bad_add_int16_helper(MQTT_PROP_RETAIN_AVAILABLE);
- bad_add_int16_helper(MQTT_PROP_USER_PROPERTY);
- bad_add_int16_helper(MQTT_PROP_MAXIMUM_PACKET_SIZE);
- bad_add_int16_helper(MQTT_PROP_WILDCARD_SUB_AVAILABLE);
- bad_add_int16_helper(MQTT_PROP_SUBSCRIPTION_ID_AVAILABLE);
- bad_add_int16_helper(MQTT_PROP_SHARED_SUB_AVAILABLE);
- }
- static void TEST_add_bad_int32(void)
- {
- bad_add_int32_helper(MQTT_PROP_PAYLOAD_FORMAT_INDICATOR);
- bad_add_int32_helper(MQTT_PROP_CONTENT_TYPE);
- bad_add_int32_helper(MQTT_PROP_RESPONSE_TOPIC);
- bad_add_int32_helper(MQTT_PROP_CORRELATION_DATA);
- bad_add_int32_helper(MQTT_PROP_SUBSCRIPTION_IDENTIFIER);
- bad_add_int32_helper(MQTT_PROP_ASSIGNED_CLIENT_IDENTIFIER);
- bad_add_int32_helper(MQTT_PROP_SERVER_KEEP_ALIVE);
- bad_add_int32_helper(MQTT_PROP_AUTHENTICATION_METHOD);
- bad_add_int32_helper(MQTT_PROP_AUTHENTICATION_DATA);
- bad_add_int32_helper(MQTT_PROP_REQUEST_PROBLEM_INFORMATION);
- bad_add_int32_helper(MQTT_PROP_REQUEST_RESPONSE_INFORMATION);
- bad_add_int32_helper(MQTT_PROP_RESPONSE_INFORMATION);
- bad_add_int32_helper(MQTT_PROP_SERVER_REFERENCE);
- bad_add_int32_helper(MQTT_PROP_REASON_STRING);
- bad_add_int32_helper(MQTT_PROP_RECEIVE_MAXIMUM);
- bad_add_int32_helper(MQTT_PROP_TOPIC_ALIAS_MAXIMUM);
- bad_add_int32_helper(MQTT_PROP_TOPIC_ALIAS);
- bad_add_int32_helper(MQTT_PROP_MAXIMUM_QOS);
- bad_add_int32_helper(MQTT_PROP_RETAIN_AVAILABLE);
- bad_add_int32_helper(MQTT_PROP_USER_PROPERTY);
- bad_add_int32_helper(MQTT_PROP_WILDCARD_SUB_AVAILABLE);
- bad_add_int32_helper(MQTT_PROP_SUBSCRIPTION_ID_AVAILABLE);
- bad_add_int32_helper(MQTT_PROP_SHARED_SUB_AVAILABLE);
- }
- static void TEST_add_bad_varint(void)
- {
- bad_add_varint_helper(MQTT_PROP_PAYLOAD_FORMAT_INDICATOR);
- bad_add_varint_helper(MQTT_PROP_MESSAGE_EXPIRY_INTERVAL);
- bad_add_varint_helper(MQTT_PROP_CONTENT_TYPE);
- bad_add_varint_helper(MQTT_PROP_RESPONSE_TOPIC);
- bad_add_varint_helper(MQTT_PROP_CORRELATION_DATA);
- bad_add_varint_helper(MQTT_PROP_SESSION_EXPIRY_INTERVAL);
- bad_add_varint_helper(MQTT_PROP_ASSIGNED_CLIENT_IDENTIFIER);
- bad_add_varint_helper(MQTT_PROP_SERVER_KEEP_ALIVE);
- bad_add_varint_helper(MQTT_PROP_AUTHENTICATION_METHOD);
- bad_add_varint_helper(MQTT_PROP_AUTHENTICATION_DATA);
- bad_add_varint_helper(MQTT_PROP_REQUEST_PROBLEM_INFORMATION);
- bad_add_varint_helper(MQTT_PROP_WILL_DELAY_INTERVAL);
- bad_add_varint_helper(MQTT_PROP_REQUEST_RESPONSE_INFORMATION);
- bad_add_varint_helper(MQTT_PROP_RESPONSE_INFORMATION);
- bad_add_varint_helper(MQTT_PROP_SERVER_REFERENCE);
- bad_add_varint_helper(MQTT_PROP_REASON_STRING);
- bad_add_varint_helper(MQTT_PROP_RECEIVE_MAXIMUM);
- bad_add_varint_helper(MQTT_PROP_TOPIC_ALIAS_MAXIMUM);
- bad_add_varint_helper(MQTT_PROP_TOPIC_ALIAS);
- bad_add_varint_helper(MQTT_PROP_MAXIMUM_QOS);
- bad_add_varint_helper(MQTT_PROP_RETAIN_AVAILABLE);
- bad_add_varint_helper(MQTT_PROP_USER_PROPERTY);
- bad_add_varint_helper(MQTT_PROP_MAXIMUM_PACKET_SIZE);
- bad_add_varint_helper(MQTT_PROP_WILDCARD_SUB_AVAILABLE);
- bad_add_varint_helper(MQTT_PROP_SUBSCRIPTION_ID_AVAILABLE);
- bad_add_varint_helper(MQTT_PROP_SHARED_SUB_AVAILABLE);
- }
- static void TEST_add_bad_binary(void)
- {
- bad_add_binary_helper(MQTT_PROP_PAYLOAD_FORMAT_INDICATOR);
- bad_add_binary_helper(MQTT_PROP_MESSAGE_EXPIRY_INTERVAL);
- bad_add_binary_helper(MQTT_PROP_CONTENT_TYPE);
- bad_add_binary_helper(MQTT_PROP_RESPONSE_TOPIC);
- bad_add_binary_helper(MQTT_PROP_SUBSCRIPTION_IDENTIFIER);
- bad_add_binary_helper(MQTT_PROP_SESSION_EXPIRY_INTERVAL);
- bad_add_binary_helper(MQTT_PROP_ASSIGNED_CLIENT_IDENTIFIER);
- bad_add_binary_helper(MQTT_PROP_SERVER_KEEP_ALIVE);
- bad_add_binary_helper(MQTT_PROP_AUTHENTICATION_METHOD);
- bad_add_binary_helper(MQTT_PROP_REQUEST_PROBLEM_INFORMATION);
- bad_add_binary_helper(MQTT_PROP_WILL_DELAY_INTERVAL);
- bad_add_binary_helper(MQTT_PROP_REQUEST_RESPONSE_INFORMATION);
- bad_add_binary_helper(MQTT_PROP_RESPONSE_INFORMATION);
- bad_add_binary_helper(MQTT_PROP_SERVER_REFERENCE);
- bad_add_binary_helper(MQTT_PROP_REASON_STRING);
- bad_add_binary_helper(MQTT_PROP_RECEIVE_MAXIMUM);
- bad_add_binary_helper(MQTT_PROP_TOPIC_ALIAS_MAXIMUM);
- bad_add_binary_helper(MQTT_PROP_TOPIC_ALIAS);
- bad_add_binary_helper(MQTT_PROP_MAXIMUM_QOS);
- bad_add_binary_helper(MQTT_PROP_RETAIN_AVAILABLE);
- bad_add_binary_helper(MQTT_PROP_USER_PROPERTY);
- bad_add_binary_helper(MQTT_PROP_MAXIMUM_PACKET_SIZE);
- bad_add_binary_helper(MQTT_PROP_WILDCARD_SUB_AVAILABLE);
- bad_add_binary_helper(MQTT_PROP_SUBSCRIPTION_ID_AVAILABLE);
- bad_add_binary_helper(MQTT_PROP_SHARED_SUB_AVAILABLE);
- }
- static void TEST_add_bad_string(void)
- {
- bad_add_string_helper(MQTT_PROP_PAYLOAD_FORMAT_INDICATOR);
- bad_add_string_helper(MQTT_PROP_MESSAGE_EXPIRY_INTERVAL);
- bad_add_string_helper(MQTT_PROP_CORRELATION_DATA);
- bad_add_string_helper(MQTT_PROP_SUBSCRIPTION_IDENTIFIER);
- bad_add_string_helper(MQTT_PROP_SESSION_EXPIRY_INTERVAL);
- bad_add_string_helper(MQTT_PROP_SERVER_KEEP_ALIVE);
- bad_add_string_helper(MQTT_PROP_AUTHENTICATION_DATA);
- bad_add_string_helper(MQTT_PROP_REQUEST_PROBLEM_INFORMATION);
- bad_add_string_helper(MQTT_PROP_WILL_DELAY_INTERVAL);
- bad_add_string_helper(MQTT_PROP_REQUEST_RESPONSE_INFORMATION);
- bad_add_string_helper(MQTT_PROP_RECEIVE_MAXIMUM);
- bad_add_string_helper(MQTT_PROP_TOPIC_ALIAS_MAXIMUM);
- bad_add_string_helper(MQTT_PROP_TOPIC_ALIAS);
- bad_add_string_helper(MQTT_PROP_MAXIMUM_QOS);
- bad_add_string_helper(MQTT_PROP_RETAIN_AVAILABLE);
- bad_add_string_helper(MQTT_PROP_USER_PROPERTY);
- bad_add_string_helper(MQTT_PROP_MAXIMUM_PACKET_SIZE);
- bad_add_string_helper(MQTT_PROP_WILDCARD_SUB_AVAILABLE);
- bad_add_string_helper(MQTT_PROP_SUBSCRIPTION_ID_AVAILABLE);
- bad_add_string_helper(MQTT_PROP_SHARED_SUB_AVAILABLE);
- }
- static void TEST_add_bad_string_pair(void)
- {
- bad_add_string_pair_helper(MQTT_PROP_PAYLOAD_FORMAT_INDICATOR);
- bad_add_string_pair_helper(MQTT_PROP_MESSAGE_EXPIRY_INTERVAL);
- bad_add_string_pair_helper(MQTT_PROP_CONTENT_TYPE);
- bad_add_string_pair_helper(MQTT_PROP_RESPONSE_TOPIC);
- bad_add_string_pair_helper(MQTT_PROP_CORRELATION_DATA);
- bad_add_string_pair_helper(MQTT_PROP_SUBSCRIPTION_IDENTIFIER);
- bad_add_string_pair_helper(MQTT_PROP_SESSION_EXPIRY_INTERVAL);
- bad_add_string_pair_helper(MQTT_PROP_ASSIGNED_CLIENT_IDENTIFIER);
- bad_add_string_pair_helper(MQTT_PROP_SERVER_KEEP_ALIVE);
- bad_add_string_pair_helper(MQTT_PROP_AUTHENTICATION_METHOD);
- bad_add_string_pair_helper(MQTT_PROP_AUTHENTICATION_DATA);
- bad_add_string_pair_helper(MQTT_PROP_REQUEST_PROBLEM_INFORMATION);
- bad_add_string_pair_helper(MQTT_PROP_WILL_DELAY_INTERVAL);
- bad_add_string_pair_helper(MQTT_PROP_REQUEST_RESPONSE_INFORMATION);
- bad_add_string_pair_helper(MQTT_PROP_RESPONSE_INFORMATION);
- bad_add_string_pair_helper(MQTT_PROP_SERVER_REFERENCE);
- bad_add_string_pair_helper(MQTT_PROP_REASON_STRING);
- bad_add_string_pair_helper(MQTT_PROP_RECEIVE_MAXIMUM);
- bad_add_string_pair_helper(MQTT_PROP_TOPIC_ALIAS_MAXIMUM);
- bad_add_string_pair_helper(MQTT_PROP_TOPIC_ALIAS);
- bad_add_string_pair_helper(MQTT_PROP_MAXIMUM_QOS);
- bad_add_string_pair_helper(MQTT_PROP_RETAIN_AVAILABLE);
- bad_add_string_pair_helper(MQTT_PROP_MAXIMUM_PACKET_SIZE);
- bad_add_string_pair_helper(MQTT_PROP_WILDCARD_SUB_AVAILABLE);
- bad_add_string_pair_helper(MQTT_PROP_SUBSCRIPTION_ID_AVAILABLE);
- bad_add_string_pair_helper(MQTT_PROP_SHARED_SUB_AVAILABLE);
- }
- /* ========================================================================
- * SINGLE ADD
- * ======================================================================== */
- static void single_add_byte_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_byte(&proplist, identifier, 1);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- if(proplist){
- CU_ASSERT_EQUAL(proplist->identifier, identifier);
- CU_ASSERT_EQUAL(proplist->value.i8, 1);
- CU_ASSERT_PTR_NULL(proplist->next);
- mosquitto_property_free_all(&proplist);
- }
- }
- static void single_add_int16_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_int16(&proplist, identifier, 11234);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- if(proplist){
- CU_ASSERT_EQUAL(proplist->identifier, identifier);
- CU_ASSERT_EQUAL(proplist->value.i16, 11234);
- CU_ASSERT_PTR_NULL(proplist->next);
- mosquitto_property_free_all(&proplist);
- }
- }
- static void single_add_int32_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_int32(&proplist, identifier, 765432);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- if(proplist){
- CU_ASSERT_EQUAL(proplist->identifier, identifier);
- CU_ASSERT_EQUAL(proplist->value.i32, 765432);
- CU_ASSERT_PTR_NULL(proplist->next);
- mosquitto_property_free_all(&proplist);
- }
- }
- static void single_add_varint_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_varint(&proplist, identifier, 139123999);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- if(proplist){
- CU_ASSERT_EQUAL(proplist->identifier, identifier);
- CU_ASSERT_EQUAL(proplist->value.varint, 139123999);
- CU_ASSERT_PTR_NULL(proplist->next);
- mosquitto_property_free_all(&proplist);
- }
- }
- static void single_add_binary_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_binary(&proplist, identifier, "test", 4);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- if(proplist){
- CU_ASSERT_EQUAL(proplist->identifier, identifier);
- CU_ASSERT_EQUAL(proplist->value.bin.len, 4);
- CU_ASSERT_NSTRING_EQUAL(proplist->value.bin.v, "test", 4);
- CU_ASSERT_PTR_NULL(proplist->next);
- mosquitto_property_free_all(&proplist);
- }
- }
- static void single_add_string_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_string(&proplist, identifier, "string");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- if(proplist){
- CU_ASSERT_EQUAL(proplist->identifier, identifier);
- CU_ASSERT_STRING_EQUAL(proplist->value.s.v, "string");
- CU_ASSERT_EQUAL(proplist->value.s.len, strlen("string"));
- CU_ASSERT_PTR_NULL(proplist->next);
- mosquitto_property_free_all(&proplist);
- }
- }
- static void single_add_string_pair_helper(int identifier)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- rc = mosquitto_property_add_string_pair(&proplist, identifier, "key", "value");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- if(proplist){
- CU_ASSERT_EQUAL(proplist->identifier, identifier);
- CU_ASSERT_STRING_EQUAL(proplist->name.v, "key");
- CU_ASSERT_EQUAL(proplist->name.len, strlen("key"));
- CU_ASSERT_STRING_EQUAL(proplist->value.s.v, "value");
- CU_ASSERT_EQUAL(proplist->value.s.len, strlen("value"));
- CU_ASSERT_PTR_NULL(proplist->next);
- mosquitto_property_free_all(&proplist);
- }
- }
- static void TEST_add_single_byte(void)
- {
- single_add_byte_helper(MQTT_PROP_PAYLOAD_FORMAT_INDICATOR);
- single_add_byte_helper(MQTT_PROP_REQUEST_PROBLEM_INFORMATION);
- single_add_byte_helper(MQTT_PROP_REQUEST_RESPONSE_INFORMATION);
- single_add_byte_helper(MQTT_PROP_MAXIMUM_QOS);
- single_add_byte_helper(MQTT_PROP_RETAIN_AVAILABLE);
- single_add_byte_helper(MQTT_PROP_WILDCARD_SUB_AVAILABLE);
- single_add_byte_helper(MQTT_PROP_SUBSCRIPTION_ID_AVAILABLE);
- single_add_byte_helper(MQTT_PROP_SHARED_SUB_AVAILABLE);
- }
- static void TEST_add_single_int16(void)
- {
- single_add_int16_helper(MQTT_PROP_SERVER_KEEP_ALIVE);
- single_add_int16_helper(MQTT_PROP_RECEIVE_MAXIMUM);
- single_add_int16_helper(MQTT_PROP_TOPIC_ALIAS_MAXIMUM);
- single_add_int16_helper(MQTT_PROP_TOPIC_ALIAS);
- }
- static void TEST_add_single_int32(void)
- {
- single_add_int32_helper(MQTT_PROP_MESSAGE_EXPIRY_INTERVAL);
- single_add_int32_helper(MQTT_PROP_SESSION_EXPIRY_INTERVAL);
- single_add_int32_helper(MQTT_PROP_WILL_DELAY_INTERVAL);
- single_add_int32_helper(MQTT_PROP_MAXIMUM_PACKET_SIZE);
- }
- static void TEST_add_single_varint(void)
- {
- single_add_varint_helper(MQTT_PROP_SUBSCRIPTION_IDENTIFIER);
- }
- static void TEST_add_single_binary(void)
- {
- single_add_binary_helper(MQTT_PROP_CORRELATION_DATA);
- single_add_binary_helper(MQTT_PROP_AUTHENTICATION_DATA);
- }
- static void TEST_add_single_string(void)
- {
- single_add_string_helper(MQTT_PROP_CONTENT_TYPE);
- single_add_string_helper(MQTT_PROP_RESPONSE_TOPIC);
- single_add_string_helper(MQTT_PROP_ASSIGNED_CLIENT_IDENTIFIER);
- single_add_string_helper(MQTT_PROP_AUTHENTICATION_METHOD);
- single_add_string_helper(MQTT_PROP_RESPONSE_INFORMATION);
- single_add_string_helper(MQTT_PROP_SERVER_REFERENCE);
- single_add_string_helper(MQTT_PROP_REASON_STRING);
- }
- static void TEST_add_single_string_pair(void)
- {
- single_add_string_pair_helper(MQTT_PROP_USER_PROPERTY);
- }
- /* ========================================================================
- * ADD ALL PROPERTIES FOR A COMMAND
- * ======================================================================== */
- static void TEST_add_all_connect(void)
- {
- mosquitto_property *proplist = NULL;
- mosquitto_property *p;
- int count;
- int rc;
- rc = mosquitto_property_add_int32(&proplist, MQTT_PROP_SESSION_EXPIRY_INTERVAL, 86400);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_string(&proplist, MQTT_PROP_AUTHENTICATION_METHOD, "basic");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_binary(&proplist, MQTT_PROP_AUTHENTICATION_DATA, "password", strlen("password"));
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_byte(&proplist, MQTT_PROP_REQUEST_PROBLEM_INFORMATION, 1);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_byte(&proplist, MQTT_PROP_REQUEST_RESPONSE_INFORMATION, 1);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_int16(&proplist, MQTT_PROP_RECEIVE_MAXIMUM, 1024);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_int16(&proplist, MQTT_PROP_TOPIC_ALIAS_MAXIMUM, 64);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_string_pair(&proplist, MQTT_PROP_USER_PROPERTY, "user-agent", "mosquitto/test");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_int32(&proplist, MQTT_PROP_MAXIMUM_PACKET_SIZE, 200000000);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- p = proplist;
- count = 0;
- while(p){
- count++;
- p = p->next;
- }
- CU_ASSERT_EQUAL(count, 9);
- mosquitto_property_free_all(&proplist);
- }
- static void TEST_add_all_connack(void)
- {
- mosquitto_property *proplist = NULL;
- mosquitto_property *p;
- int count;
- int rc;
- rc = mosquitto_property_add_int32(&proplist, MQTT_PROP_SESSION_EXPIRY_INTERVAL, 86400);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_string(&proplist, MQTT_PROP_ASSIGNED_CLIENT_IDENTIFIER, "clientid");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_int16(&proplist, MQTT_PROP_SERVER_KEEP_ALIVE, 900);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_string(&proplist, MQTT_PROP_AUTHENTICATION_METHOD, "basic");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_binary(&proplist, MQTT_PROP_AUTHENTICATION_DATA, "password", strlen("password"));
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_string(&proplist, MQTT_PROP_RESPONSE_INFORMATION, "response");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_string(&proplist, MQTT_PROP_SERVER_REFERENCE, "localhost");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_string(&proplist, MQTT_PROP_REASON_STRING, "reason");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_int16(&proplist, MQTT_PROP_RECEIVE_MAXIMUM, 1024);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_int16(&proplist, MQTT_PROP_TOPIC_ALIAS_MAXIMUM, 64);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_byte(&proplist, MQTT_PROP_MAXIMUM_QOS, 1);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_byte(&proplist, MQTT_PROP_RETAIN_AVAILABLE, 0);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_string_pair(&proplist, MQTT_PROP_USER_PROPERTY, "user-agent", "mosquitto/test");
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_int32(&proplist, MQTT_PROP_MAXIMUM_PACKET_SIZE, 200000000);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_byte(&proplist, MQTT_PROP_WILDCARD_SUB_AVAILABLE, 0);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_byte(&proplist, MQTT_PROP_SUBSCRIPTION_ID_AVAILABLE, 0);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- rc = mosquitto_property_add_byte(&proplist, MQTT_PROP_SHARED_SUB_AVAILABLE, 0);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- p = proplist;
- count = 0;
- while(p){
- count++;
- p = p->next;
- }
- CU_ASSERT_EQUAL(count, 17);
- mosquitto_property_free_all(&proplist);
- }
- static void TEST_check_length(void)
- {
- mosquitto_property *proplist = NULL;
- int rc;
- unsigned int len;
- int varbytes;
- int i;
- len = property__get_remaining_length(proplist);
- CU_ASSERT_EQUAL(len, 1);
- for(i=1; i<10000; i++){
- rc = mosquitto_property_add_byte(&proplist, MQTT_PROP_SHARED_SUB_AVAILABLE, 0);
- CU_ASSERT_EQUAL(rc, MOSQ_ERR_SUCCESS);
- CU_ASSERT_PTR_NOT_NULL(proplist);
- if(proplist){
- len = property__get_remaining_length(proplist);
- if(i < 64){
- varbytes = 1;
- }else if(i < 8192){
- varbytes = 2;
- }else{
- varbytes = 3;
- }
- CU_ASSERT_EQUAL(len, varbytes+2*i);
- }else{
- break;
- }
- }
- mosquitto_property_free_all(&proplist);
- }
- /* ========================================================================
- * TEST SUITE SETUP
- * ======================================================================== */
- int init_property_add_tests(void)
- {
- CU_pSuite test_suite = NULL;
- test_suite = CU_add_suite("Property add", NULL, NULL);
- if(!test_suite){
- printf("Error adding CUnit Property add test suite.\n");
- return 1;
- }
- if(0
- || !CU_add_test(test_suite, "Add nothing, check length", TEST_check_length)
- || !CU_add_test(test_suite, "Add bad byte", TEST_add_bad_byte)
- || !CU_add_test(test_suite, "Add bad int16", TEST_add_bad_int16)
- || !CU_add_test(test_suite, "Add bad int32", TEST_add_bad_int32)
- || !CU_add_test(test_suite, "Add bad varint", TEST_add_bad_varint)
- || !CU_add_test(test_suite, "Add bad binary", TEST_add_bad_binary)
- || !CU_add_test(test_suite, "Add bad string", TEST_add_bad_string)
- || !CU_add_test(test_suite, "Add bad string pair", TEST_add_bad_string_pair)
- || !CU_add_test(test_suite, "Add single byte", TEST_add_single_byte)
- || !CU_add_test(test_suite, "Add single int16", TEST_add_single_int16)
- || !CU_add_test(test_suite, "Add single int32", TEST_add_single_int32)
- || !CU_add_test(test_suite, "Add single varint", TEST_add_single_varint)
- || !CU_add_test(test_suite, "Add single binary", TEST_add_single_binary)
- || !CU_add_test(test_suite, "Add single string", TEST_add_single_string)
- || !CU_add_test(test_suite, "Add single string pair", TEST_add_single_string_pair)
- || !CU_add_test(test_suite, "Add all CONNECT", TEST_add_all_connect)
- || !CU_add_test(test_suite, "Add all CONNACK", TEST_add_all_connack)
- ){
- printf("Error adding Property Add CUnit tests.\n");
- return 1;
- }
- return 0;
- }
|