Skip to content

Commit 4b3b64b

Browse files
committed
Add unit tests for GetStaticBuffer functions
Add unit tests for the various ...GetStaticBuffer() functions added in FreeRTOS/FreeRTOS-Kernel#641.
1 parent 4483c16 commit 4b3b64b

File tree

7 files changed

+314
-0
lines changed

7 files changed

+314
-0
lines changed

FreeRTOS/Test/CMock/event_groups/event_groups_utest.c

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -791,3 +791,52 @@ void test_xEventGroupSetBitsFromISR_Success( void )
791791
/* API to Test */
792792
( void ) xEventGroupSetBitsFromISR( NULL, BIT_0, &xHigherPriorityTaskWoken );
793793
}
794+
795+
/*!
796+
* @brief validate xEventGroupGetStaticBuffer on a statically created event group
797+
* @details Test xEventGroupGetStaticBuffer returns the buffer of a statically created event group
798+
* @coverage xEventGroupGetStaticBuffer
799+
*/
800+
void test_xEventGroupGetStaticBuffer_Success( void )
801+
{
802+
/* Expectation of Function: xEventGroupCreate */
803+
vListInitialise_Expect( 0 );
804+
vListInitialise_IgnoreArg_pxList();
805+
vListInitialise_ReturnThruPtr_pxList( pxListTemp );
806+
807+
/* Set-up */
808+
StaticEventGroup_t *pxEventGroupBufferRet = NULL;
809+
StaticEventGroup_t xCreatedEventGroup = { 0 };
810+
xEventGroupHandle = xEventGroupCreateStatic( &xCreatedEventGroup );
811+
812+
TEST_ASSERT_EQUAL( pdTRUE, xEventGroupGetStaticBuffer( xEventGroupHandle, &pxEventGroupBufferRet ) );
813+
TEST_ASSERT_EQUAL( &xCreatedEventGroup, pxEventGroupBufferRet );
814+
}
815+
816+
/*!
817+
* @brief validate xEventGroupGetStaticBuffer on a dynamically created event group
818+
* @details Test xEventGroupGetStaticBuffer returns an error when called on a dynamically created event group
819+
* @coverage xEventGroupGetStaticBuffer
820+
*/
821+
void test_xEventGroupGetStaticBuffer_Fail( void )
822+
{
823+
/* Expectation of Function: xEventGroupCreate */
824+
vListInitialise_Expect( 0 );
825+
vListInitialise_IgnoreArg_pxList();
826+
vListInitialise_ReturnThruPtr_pxList( pxListTemp );
827+
/* Expectation of Function: vEventGroupDelete */
828+
vTaskSuspendAll_Ignore();
829+
listCURRENT_LIST_LENGTH_ExpectAnyArgsAndReturn( 1 );
830+
vTaskRemoveFromUnorderedEventList_Ignore();
831+
listCURRENT_LIST_LENGTH_ExpectAnyArgsAndReturn( 0 );
832+
xTaskResumeAll_IgnoreAndReturn( 1 );
833+
834+
/* Set-up */
835+
StaticEventGroup_t *pxEventGroupBufferRet = NULL;
836+
xEventGroupHandle = xEventGroupCreate();
837+
838+
TEST_ASSERT_EQUAL( pdFALSE, xEventGroupGetStaticBuffer( xEventGroupHandle, &pxEventGroupBufferRet ) );
839+
TEST_ASSERT_EQUAL( NULL, pxEventGroupBufferRet );
840+
841+
vEventGroupDelete( xEventGroupHandle );
842+
}

FreeRTOS/Test/CMock/message_buffer/message_buffer/message_buffer_utest.c

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,3 +798,42 @@ void test_xMessageBufferReceiveFromISR_success( void )
798798

799799
vStreamBufferDelete( xMessageBuffer );
800800
}
801+
802+
/**
803+
* @brief validate xMessageBufferGetStaticBuffers on a statically created message buffer
804+
* @details Test xMessageBufferGetStaticBuffers returns the buffers of a statically created message buffer
805+
*/
806+
void test_xMessageBufferGetStaticBuffers_Success( void )
807+
{
808+
StaticMessageBuffer_t messageBufferStruct;
809+
/* The size of message buffer array should be one greater than the required size of message buffer. */
810+
uint8_t messageBufferArray[ TEST_MESSAGE_BUFFER_SIZE + 1 ] = { 0 };
811+
uint8_t * pucMessageBufferStorageAreaRet = NULL;
812+
StaticMessageBuffer_t * pxStaticMessageBuffer = NULL;
813+
814+
xMessageBuffer = xMessageBufferCreateStatic( sizeof( messageBufferArray ), messageBufferArray, &messageBufferStruct );
815+
816+
TEST_ASSERT_EQUAL( pdTRUE, xMessageBufferGetStaticBuffers( xMessageBuffer, &pucMessageBufferStorageAreaRet, &pxStaticMessageBuffer ) );
817+
TEST_ASSERT_EQUAL( messageBufferArray, pucMessageBufferStorageAreaRet );
818+
TEST_ASSERT_EQUAL( &messageBufferStruct, pxStaticMessageBuffer );
819+
820+
vMessageBufferDelete( xMessageBuffer );
821+
}
822+
823+
/**
824+
* @brief validate xMessageBufferGetStaticBuffers on a dynamically created message buffer
825+
* @details Test xMessageBufferGetStaticBuffers returns an error when called on a dynamically created message buffer
826+
*/
827+
void test_xMessageBufferGetStaticBuffers_Fail( void )
828+
{
829+
uint8_t * pucMessageBufferStorageAreaRet = NULL;
830+
StaticMessageBuffer_t * pxStaticMessageBuffer = NULL;
831+
832+
xMessageBuffer = xMessageBufferCreate( TEST_MESSAGE_BUFFER_SIZE );
833+
834+
TEST_ASSERT_EQUAL( pdFALSE, xMessageBufferGetStaticBuffers( xMessageBuffer, &pucMessageBufferStorageAreaRet, &pxStaticMessageBuffer ) );
835+
TEST_ASSERT_EQUAL( NULL, pucMessageBufferStorageAreaRet );
836+
TEST_ASSERT_EQUAL( NULL, pxStaticMessageBuffer );
837+
838+
vMessageBufferDelete( xMessageBuffer );
839+
}

FreeRTOS/Test/CMock/queue/generic/queue_status_utest.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,3 +326,43 @@ void test_vQueueWaitForMessageRestricted_locked( void )
326326

327327
vQueueDelete( xQueue );
328328
}
329+
330+
/**
331+
* @brief xQueueGetStaticBuffers with a statically allocated queue.
332+
* @details Test xQueueGetStaticBuffers returns the buffers of a statically allocated queue
333+
* @coverage xQueueGetStaticBuffers
334+
*/
335+
void test_macro_xQueueGetStaticBuffers_static( void )
336+
{
337+
uint32_t queueStorage[ 5 ];
338+
StaticQueue_t queueBuffer;
339+
uint8_t * pucQueueStorageRet = NULL;
340+
StaticQueue_t * pxStaticQueueRet = NULL;
341+
342+
QueueHandle_t xQueue = xQueueCreateStatic( 5, sizeof( uint32_t ), ( void * ) queueStorage, &queueBuffer );
343+
344+
TEST_ASSERT_EQUAL( pdTRUE, xQueueGetStaticBuffers( xQueue, &pucQueueStorageRet, &pxStaticQueueRet ) );
345+
TEST_ASSERT_EQUAL( queueStorage, ( uint32_t * ) pucQueueStorageRet );
346+
TEST_ASSERT_EQUAL( &queueBuffer, pxStaticQueueRet );
347+
348+
vQueueDelete( xQueue );
349+
}
350+
351+
/**
352+
* @brief xQueueGetStaticBuffers with a dynamically allocated queue.
353+
* @details Test xQueueGetStaticBuffers returns an error when called on a dynamically allocated queue.
354+
* @coverage xQueueGetStaticBuffers
355+
*/
356+
void test_macro_xQueueGetStaticBuffers_dynamic( void )
357+
{
358+
uint8_t * pucQueueStorageRet = NULL;
359+
StaticQueue_t * pxStaticQueueRet = NULL;
360+
361+
QueueHandle_t xQueue = xQueueCreate( 5, sizeof( uint32_t ) );
362+
363+
TEST_ASSERT_EQUAL( pdFALSE, xQueueGetStaticBuffers( xQueue, &pucQueueStorageRet, &pxStaticQueueRet ) );
364+
TEST_ASSERT_EQUAL( NULL, pucQueueStorageRet );
365+
TEST_ASSERT_EQUAL( NULL, pxStaticQueueRet );
366+
367+
vQueueDelete( xQueue );
368+
}

FreeRTOS/Test/CMock/queue/semaphore/semaphore_common_utest.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,38 @@ void test_macro_xSemaphoreGiveFromISR_queue_handle( void )
167167

168168
vQueueDelete( xQueue );
169169
}
170+
171+
/**
172+
* @brief Test xSemaphoreGetStaticBuffer with a Semaphore
173+
* @details Test xSemaphoreGetStaticBuffer returns the buffers of a statically allocated Semaphore
174+
* @coverage xSemaphoreGetStaticBuffer
175+
*/
176+
void test_macro_xSemaphoreGetStaticBuffer_success( void )
177+
{
178+
SemaphoreHandle_t xSemaphore = NULL;
179+
StaticSemaphore_t xSemaphoreBuffer;
180+
StaticSemaphore_t * pxSemaphoreBufferRet = NULL;
181+
182+
xSemaphore = xSemaphoreCreateBinaryStatic( &xSemaphoreBuffer );
183+
184+
TEST_ASSERT_EQUAL( pdTRUE, xSemaphoreGetStaticBuffer( xSemaphore, &pxSemaphoreBufferRet ) );
185+
TEST_ASSERT_EQUAL( &xSemaphoreBuffer, pxSemaphoreBufferRet );
186+
187+
vSemaphoreDelete( xSemaphore );
188+
}
189+
190+
/**
191+
* @brief Test xSemaphoreGetStaticBuffer with a dynamic Semaphore
192+
* @details Test xSemaphoreGetStaticBuffer returns an error when called on a dynamically allocated Semaphore
193+
* @coverage xSemaphoreGetStaticBuffer
194+
*/
195+
void test_macro_xSemaphoreGetStaticBuffer_fail( void )
196+
{
197+
StaticSemaphore_t * pxSemaphoreBufferRet = NULL;
198+
SemaphoreHandle_t xSemaphore = xSemaphoreCreateBinary();
199+
200+
TEST_ASSERT_EQUAL( pdFALSE, xSemaphoreGetStaticBuffer( xSemaphore, &pxSemaphoreBufferRet ) );
201+
TEST_ASSERT_EQUAL( NULL, pxSemaphoreBufferRet );
202+
203+
vSemaphoreDelete( xSemaphore );
204+
}

FreeRTOS/Test/CMock/stream_buffer/api/stream_buffer_api_utest.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,3 +1455,44 @@ void test_xStreamBufferSend_WrapOver( void )
14551455

14561456
vStreamBufferDelete( xStreamBuffer );
14571457
}
1458+
1459+
/**
1460+
* @brief validate xStreamBufferGetStaticBuffers on a statically created stream buffer
1461+
* @details Test xStreamBufferGetStaticBuffers returns the buffers of a statically created stream buffer
1462+
*/
1463+
void test_xStreamBufferGetStaticBuffers_Success( void )
1464+
{
1465+
StaticStreamBuffer_t streamBufferStruct;
1466+
1467+
/* The size of stream buffer array should be one greater than the required size of stream buffer. */
1468+
uint8_t streamBufferArray[ TEST_STREAM_BUFFER_SIZE + 1 ] = { 0 };
1469+
uint8_t * pucStreamBufferStorageAreaRet = NULL;
1470+
StaticStreamBuffer_t * pxStaticStreamBufferRet = NULL;
1471+
1472+
xStreamBuffer = xStreamBufferCreateStatic( sizeof( streamBufferArray ), TEST_STREAM_BUFFER_TRIGGER_LEVEL, streamBufferArray, &streamBufferStruct );
1473+
1474+
TEST_ASSERT_EQUAL( pdTRUE, xStreamBufferGetStaticBuffers( xStreamBuffer, &pucStreamBufferStorageAreaRet, &pxStaticStreamBufferRet ) );
1475+
TEST_ASSERT_EQUAL( streamBufferArray, pucStreamBufferStorageAreaRet );
1476+
TEST_ASSERT_EQUAL( &streamBufferStruct, pxStaticStreamBufferRet );
1477+
1478+
vStreamBufferDelete( xStreamBuffer );
1479+
}
1480+
1481+
/**
1482+
* @brief validate xStreamBufferGetStaticBuffers on a dynamically created stream buffer
1483+
* @details Test xStreamBufferGetStaticBuffers returns an error when called on a dynamically created stream buffer
1484+
*/
1485+
void test_xStreamBufferGetStaticBuffers_Fail( void )
1486+
{
1487+
uint8_t * pucStreamBufferStorageAreaRet = NULL;
1488+
StaticStreamBuffer_t * pxStaticStreamBufferRet = NULL;
1489+
1490+
xStreamBuffer = xStreamBufferCreate( TEST_STREAM_BUFFER_SIZE, TEST_STREAM_BUFFER_TRIGGER_LEVEL );
1491+
TEST_ASSERT_NOT_EQUAL( NULL, xStreamBuffer );
1492+
1493+
TEST_ASSERT_EQUAL( pdFALSE, xStreamBufferGetStaticBuffers( xStreamBuffer, &pucStreamBufferStorageAreaRet, &pxStaticStreamBufferRet ) );
1494+
TEST_ASSERT_EQUAL( NULL, pucStreamBufferStorageAreaRet );
1495+
TEST_ASSERT_EQUAL( NULL, pxStaticStreamBufferRet );
1496+
1497+
vStreamBufferDelete( xStreamBuffer );
1498+
}

FreeRTOS/Test/CMock/tasks/tasks_1_utest.c

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5440,3 +5440,85 @@ void test_ulTaskGenericNotifyValueClear_success_null_handle()
54405440
TEST_ASSERT_EQUAL( 2, task_to_notify->ulNotifiedValue[ uxIndexToClear ] );
54415441
}
54425442
/* ---------- end testing configUSE_TASK_NOTIFICATIONS --------------- */
5443+
5444+
/* ---------------------- testing xTaskGetStaticBuffers ----------------------*/
5445+
5446+
/**
5447+
* @brief Test xTaskGetStaticBuffers with a static task
5448+
* @details Test xTaskGetStaticBuffers returns the buffers of a statically allocated task
5449+
* @coverage xTaskGetStaticBuffers
5450+
*/
5451+
void test_xTaskGetStaticBuffers_success( void )
5452+
{
5453+
StackType_t puxStackBuffer[ 300 ];
5454+
StaticTask_t * pxTaskBuffer = malloc( sizeof( TCB_t ) );
5455+
TaskFunction_t pxTaskCode = NULL;
5456+
const char * const pcName = { __FUNCTION__ };
5457+
const uint32_t ulStackDepth = 300;
5458+
void * const pvParameters = NULL;
5459+
UBaseType_t uxPriority = 3;
5460+
TaskHandle_t ret;
5461+
StackType_t * puxStackBufferRet = NULL;
5462+
StaticTask_t * pxTaskBufferRet = NULL;
5463+
5464+
memset( puxStackBuffer, 0xa5U, ulStackDepth * sizeof( StackType_t ) );
5465+
5466+
vListInitialiseItem_ExpectAnyArgs();
5467+
vListInitialiseItem_ExpectAnyArgs();
5468+
5469+
/* set owner */
5470+
listSET_LIST_ITEM_VALUE_ExpectAnyArgs();
5471+
/* set owner */
5472+
pxPortInitialiseStack_ExpectAnyArgsAndReturn( puxStackBuffer );
5473+
5474+
for( int i = ( UBaseType_t ) 0U; i < ( UBaseType_t ) configMAX_PRIORITIES; i++ )
5475+
{
5476+
vListInitialise_ExpectAnyArgs();
5477+
}
5478+
5479+
/* Delayed Task List 1 */
5480+
vListInitialise_ExpectAnyArgs();
5481+
/* Delayed Task List 2 */
5482+
vListInitialise_ExpectAnyArgs();
5483+
/* Pending Ready List */
5484+
vListInitialise_ExpectAnyArgs();
5485+
/* INCLUDE_vTaskDelete */
5486+
vListInitialise_ExpectAnyArgs();
5487+
/* INCLUDE_vTaskSuspend */
5488+
vListInitialise_ExpectAnyArgs();
5489+
5490+
listINSERT_END_ExpectAnyArgs();
5491+
5492+
ret = xTaskCreateStatic( pxTaskCode,
5493+
pcName,
5494+
ulStackDepth,
5495+
pvParameters,
5496+
uxPriority,
5497+
puxStackBuffer,
5498+
pxTaskBuffer );
5499+
5500+
5501+
TEST_ASSERT_EQUAL( pdTRUE, xTaskGetStaticBuffers( ret, &puxStackBufferRet, &pxTaskBufferRet ) );
5502+
TEST_ASSERT_EQUAL( &puxStackBuffer, puxStackBufferRet );
5503+
TEST_ASSERT_EQUAL( pxTaskBuffer, pxTaskBufferRet );
5504+
5505+
free ( pxTaskBuffer );
5506+
}
5507+
5508+
/**
5509+
* @brief Test xTaskGetStaticBuffers with a dynamic task
5510+
* @details Test xTaskGetStaticBuffers returns an error when called on a dynamically allocated task
5511+
* @coverage xTaskGetStaticBuffers
5512+
*/
5513+
void test_xTaskGetStaticBuffers_fail( void )
5514+
{
5515+
StackType_t * puxStackBufferRet = NULL;
5516+
StaticTask_t * pxTaskBufferRet = NULL;
5517+
TaskHandle_t taskHandle = create_task();
5518+
5519+
TEST_ASSERT_EQUAL( pdFALSE, xTaskGetStaticBuffers( taskHandle, &puxStackBufferRet, &pxTaskBufferRet ) );
5520+
TEST_ASSERT_EQUAL( NULL, puxStackBufferRet );
5521+
TEST_ASSERT_EQUAL( NULL, pxTaskBufferRet );
5522+
}
5523+
5524+
/* -------------------- end testing xTaskGetStaticBuffers --------------------*/

FreeRTOS/Test/CMock/timers/timers_1_utest.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1784,3 +1784,31 @@ void test_timer_function_success_wrap_timer( void )
17841784
/* Validations */
17851785
TEST_ASSERT_EQUAL( 1, *retVal );
17861786
}
1787+
1788+
void test_xEventGroupGetStaticBuffer_Success( void )
1789+
{
1790+
TimerHandle_t ret_timer_create;
1791+
UBaseType_t pvTimerID;
1792+
StaticTimer_t pxTimerBuffer[ sizeof( StaticTimer_t ) ];
1793+
StaticTimer_t * pxTimerBufferRet = NULL;
1794+
1795+
/* Setup */
1796+
/* Expectations */
1797+
/* prvInitialiseNewTimer */
1798+
/* prvCheckForValidListAndQueue */
1799+
vListInitialise_ExpectAnyArgs();
1800+
vListInitialise_ExpectAnyArgs();
1801+
xQueueGenericCreateStatic_ExpectAnyArgsAndReturn( NULL );
1802+
/* Back prvInitialiseNewTimer */
1803+
vListInitialiseItem_ExpectAnyArgs();
1804+
/* API Call */
1805+
ret_timer_create = xTimerCreateStatic( "ut_timer_task",
1806+
pdMS_TO_TICKS( 1000 ),
1807+
pdTRUE,
1808+
( void * ) &pvTimerID,
1809+
xCallback_Test,
1810+
pxTimerBuffer );
1811+
1812+
TEST_ASSERT_EQUAL( pdTRUE, xTimerGetStaticBuffer( ret_timer_create, &pxTimerBufferRet ) );
1813+
TEST_ASSERT_EQUAL( pxTimerBuffer, pxTimerBufferRet );
1814+
}

0 commit comments

Comments
 (0)