AWS IoT Device SDK C: MQTT
MQTT 3.1.1 client library
Return to main page ↑
iot_tests_mqtt_receive.c File Reference

Tests for the function IotMqtt_ReceiveCallback. More...

#include "iot_config.h"
#include <string.h>
#include "iot_init.h"
#include "platform/iot_threads.h"
#include "private/iot_mqtt_internal.h"
#include "unity_fixture.h"
#include "iot_test_access_mqtt.h"

Data Structures

struct  _receiveContext_t
 Context for calls to the network receive function. More...
 

Macros

#define AWS_IOT_MQTT_SERVER   true
 Determine which MQTT server mode to test (AWS IoT or Mosquitto).
 
#define TEST_TOPIC_NAME   "/test/topic"
 Topic name and filter used in the tests.
 
#define TEST_TOPIC_LENGTH   ( ( uint16_t ) ( sizeof( TEST_TOPIC_NAME ) - 1 ) )
 Length of TEST_TOPIC_NAME.
 
#define PUBLISH_CALLBACK_TIMEOUT   ( 1000 )
 Timeout for waiting on a PUBLISH callback.
 
#define DECLARE_PACKET(pTemplate, bufferName, sizeName)
 Declare a buffer holding a packet and its size. More...
 
#define INITIALIZE_OPERATION(name)
 Initializer for operations in the tests. More...
 

Functions

static uint8_t _getPacketType (IotNetworkConnection_t pNetworkConnection, const IotNetworkInterface_t *pNetworkInterface)
 Get packet type function override.
 
static size_t _getRemainingLength (IotNetworkConnection_t pNetworkConnection, const IotNetworkInterface_t *pNetworkInterface)
 Get remaining length function override.
 
static IotMqttError_t _serializePuback (uint16_t packetIdentifier, uint8_t **pPubackPacket, size_t *pPacketSize)
 Serializer override for PUBACK.
 
static IotMqttError_t _deserializeConnack (_mqttPacket_t *pConnack)
 Deserializer override for CONNACK.
 
static IotMqttError_t _deserializePublish (_mqttPacket_t *pPublish)
 Deserializer override for PUBLISH.
 
static IotMqttError_t _deserializePuback (_mqttPacket_t *pPuback)
 Deserializer override for PUBACK.
 
static IotMqttError_t _deserializeSuback (_mqttPacket_t *pSuback)
 Deserializer override for SUBACK.
 
static IotMqttError_t _deserializeUnsuback (_mqttPacket_t *pUnsuback)
 Deserializer override for UNSUBACK.
 
static IotMqttError_t _deserializePingresp (_mqttPacket_t *pPingresp)
 Deserializer override for PINGRESP.
 
static void _operationResetAndPush (_mqttOperation_t *pOperation)
 Reset the status of an _mqttOperation_t and push it to the list of MQTT operations awaiting network response.
 
static bool _processBuffer (const _mqttOperation_t *pOperation, const uint8_t *pBuffer, size_t bufferSize, IotMqttError_t expectedResult)
 Process a non-PUBLISH buffer and check the result.
 
static bool _processPublish (const uint8_t *pPublish, size_t publishSize, uint32_t expectedInvokeCount)
 Process a PUBLISH message and check the result.
 
static void _publishCallback (void *pCallbackContext, IotMqttCallbackParam_t *pPublish)
 Called when a PUBLISH message is "received".
 
static size_t _receive (IotNetworkConnection_t pConnection, uint8_t *pBuffer, size_t bytesRequested)
 Simulates a network receive function.
 
static size_t _checkPuback (IotNetworkConnection_t pConnection, const uint8_t *pMessage, size_t messageLength)
 A network send function that checks the message is a PUBACK.
 
static IotNetworkError_t _close (IotNetworkConnection_t pConnection)
 A network close function that reports if it was invoked.
 
static void _disconnectCallback (void *pCallbackContext, IotMqttCallbackParam_t *pCallbackParam)
 A disconnect callback function that checks for a "bad packet" reason and reports if it was invoked.
 
static void _publishMallocFail (IotMqttQos_t qos)
 Common code for PUBLISH malloc failure tests.
 
 TEST_GROUP (MQTT_Unit_Receive)
 Test group for MQTT Receive tests.
 
 TEST_SETUP (MQTT_Unit_Receive)
 Test setup for MQTT Receive tests.
 
 TEST_TEAR_DOWN (MQTT_Unit_Receive)
 Test tear down for MQTT Receive tests.
 
 TEST_GROUP_RUNNER (MQTT_Unit_Receive)
 Test group runner for MQTT Receive tests.
 
void TEST_MQTT_Unit_Receive_DecodeRemainingLength_ (void)
 Tests the function for decoding MQTT remaining length.
 
void TEST_MQTT_Unit_Receive_InvalidPacket_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with an invalid control packet type.
 
void TEST_MQTT_Unit_Receive_ReceiveMallocFail_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback when memory allocation fails.
 
void TEST_MQTT_Unit_Receive_ConnackValid_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with a spec-compliant CONNACK.
 
void TEST_MQTT_Unit_Receive_ConnackInvalid_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with a CONNACK that doesn't comply to MQTT spec.
 
void TEST_MQTT_Unit_Receive_PublishValid_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with a spec-compliant PUBLISH.
 
void TEST_MQTT_Unit_Receive_PublishInvalid_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with a PUBLISH that doesn't comply to MQTT spec.
 
void TEST_MQTT_Unit_Receive_PublishResourceFailure_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with errors such as memory allocation failure and closed connections.
 
void TEST_MQTT_Unit_Receive_PubackValid_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with a spec-compliant PUBACK.
 
void TEST_MQTT_Unit_Receive_PubackInvalid_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with a PUBACK that doesn't comply to MQTT spec.
 
void TEST_MQTT_Unit_Receive_SubackValid_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with a spec-compliant SUBACK.
 
void TEST_MQTT_Unit_Receive_SubackInvalid_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with a SUBACK that doesn't comply to MQTT spec.
 
void TEST_MQTT_Unit_Receive_UnsubackValid_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with a spec-compliant UNSUBACK.
 
void TEST_MQTT_Unit_Receive_UnsubackInvalid_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback with an UNSUBACK that doesn't comply to MQTT spec.
 
void TEST_MQTT_Unit_Receive_Pingresp_ (void)
 Tests the behavior of IotMqtt_ReceiveCallback when receiving a PINGRESP packet (both compliant and non-compliant packets).
 

Variables

static const uint8_t _pConnackTemplate [] = { 0x20, 0x02, 0x00, 0x00 }
 Default CONNACK packet for the receive tests.
 
static const uint8_t _pPublishTemplate []
 Default PUBLISH packet for the receive tests. More...
 
static const uint8_t _pPubackTemplate [] = { 0x40, 0x02, 0x00, 0x01 }
 Default PUBACK packet for the receive tests.
 
static const uint8_t _pSubackTemplate [] = { 0x90, 0x05, 0x00, 0x01, 0x00, 0x01, 0x02 }
 Default SUBACK packet for the receive tests.
 
static const uint8_t _pUnsubackTemplate [] = { 0xb0, 0x02, 0x00, 0x01 }
 Default UNSUBACK packet for the receive tests.
 
static const uint8_t _pPingrespTemplate [] = { 0xd0, 0x00 }
 Default PINGRESP packet for the receive tests.
 
static _mqttConnection_t_pMqttConnection = IOT_MQTT_CONNECTION_INITIALIZER
 The MQTT connection shared by all the tests.
 
static IotNetworkInterface_t _networkInterface = { 0 }
 The network interface shared by all the tests.
 
static IotMqttSubscription_t _subscription = IOT_MQTT_SUBSCRIPTION_INITIALIZER
 The subscription shared by all the tests.
 
static bool _deserializeOverrideCalled = false
 Tracks whether a deserializer override was called for a test.
 
static bool _getPacketTypeCalled = false
 Tracks whether _getPacketType has been called.
 
static bool _getRemainingLengthCalled = false
 Tracks whether _getRemainingLength has been called.
 
static bool _networkCloseCalled = false
 Tracks whether _close has been called.
 
static bool _disconnectCallbackCalled = false
 Tracks whether _disconnectCallback has been called.
 

Detailed Description

Tests for the function IotMqtt_ReceiveCallback.

Macro Definition Documentation

◆ DECLARE_PACKET

#define DECLARE_PACKET (   pTemplate,
  bufferName,
  sizeName 
)
Value:
uint8_t bufferName[ sizeof( pTemplate ) ] = { 0 }; \
const size_t sizeName = sizeof( pTemplate ); \
( void ) memcpy( bufferName, pTemplate, sizeName );

Declare a buffer holding a packet and its size.

◆ INITIALIZE_OPERATION

#define INITIALIZE_OPERATION (   name)
Value:
{ \
.link = { 0 }, .incomingPublish = false, .pMqttConnection = NULL, \
.u.operation = \
{ \
.jobReference = 1, .type = name, .flags = IOT_MQTT_FLAG_WAITABLE, \
.packetIdentifier = 1, .pMqttPacket = NULL, .packetSize = 0, \
.notify = { .callback = { 0 } },.status = IOT_MQTT_STATUS_PENDING, \
.periodic = { .retry = { 0 } } \
} \
}
#define IOT_TASKPOOL_JOB_STORAGE_INITIALIZER
MQTT operation queued, awaiting result.
Definition: iot_mqtt_types.h:132
#define IOT_MQTT_FLAG_WAITABLE
Allows the use of IotMqtt_Wait for blocking until completion.
Definition: iot_mqtt_types.h:1179
#define IOT_TASKPOOL_JOB_INITIALIZER

Initializer for operations in the tests.

Variable Documentation

◆ _pPublishTemplate

const uint8_t _pPublishTemplate[]
static
Initial value:
=
{
0x30, 0x8d, 0x02, 0x00, 0x0b, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
}

Default PUBLISH packet for the receive tests.