Add unit test for FreeRTOS SMP (#1047)

* Add unit test for FreeRTOS SMP to verify SMP scheduler logic in tasks.c which is enclosed by `configNUMBER_OF_CORES > 1`.

---------

Co-authored-by: Joshua Zarr <joshzarr@amazon.com>
Co-authored-by: Anubhav Rawal <rawalexe@amazon.com>
Co-authored-by: Alfred Gedeon <alfred2g@hotmail.com>
Co-authored-by: Adam Scislowicz <adamds@amazon.com>
Co-authored-by: jannusi <121577776+jannusi@users.noreply.github.com>
Co-authored-by: Krishna Vamsi Tallapaneni <124737189+vamsitas@users.noreply.github.com>
Co-authored-by: Kody Stribrny <kstribrn@amazon.com>
Co-authored-by: kar-rahul-aws <118818625+kar-rahul-aws@users.noreply.github.com>
This commit is contained in:
chinglee-iot 2023-10-31 08:34:59 +08:00 committed by GitHub
parent 1114e8f39b
commit e7d39763db
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
64 changed files with 25145 additions and 71 deletions

View file

@ -32,13 +32,17 @@
#include "fake_port.h"
#include "task.h"
/* Mock includes. */
#include "mock_list.h"
#include "mock_list_macros.h"
#include "mock_timers.h"
#include "mock_portable.h"
#include "mock_fake_assert.h"
#include "mock_fake_infiniteloop.h"
/* Test includes. */
#include "unity.h"
#include "CException.h"
#include "global_vars.h"
/* C runtime includes. */
@ -65,7 +69,6 @@ extern volatile TickType_t xTickCount;
extern volatile UBaseType_t uxTopReadyPriority;
extern volatile BaseType_t xSchedulerRunning;
extern volatile TickType_t xPendedTicks;
#ifdef configNUMBER_OF_CORES
extern volatile BaseType_t xYieldPendings[];
#define xYieldPending xYieldPendings[ 0 ]
@ -75,7 +78,6 @@ extern volatile TickType_t xPendedTicks;
extern volatile BaseType_t xNumOfOverflows;
extern UBaseType_t uxTaskNumber;
extern volatile TickType_t xNextTaskUnblockTime;
#ifdef configNUMBER_OF_CORES
extern TaskHandle_t xIdleTaskHandles[];
#define xIdleTaskHandle xIdleTaskHandles[ 0 ]
@ -118,6 +120,11 @@ extern volatile UBaseType_t uxSchedulerSuspended;
#define taskNOTIFICATION_RECEIVED ( ( uint8_t ) 2 )
#define TCB_ARRAY 10 /* simulate up to 10 tasks: add more if needed */
/**
* @brief CException code for when a configASSERT should be intercepted.
*/
#define configASSERT_E 0xAA101
/* =========================== GLOBAL VARIABLES =========================== */
static StaticTask_t xIdleTaskTCB;
static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];
@ -151,6 +158,18 @@ static bool port_allocate_secure_context_called = false;
static bool port_assert_if_in_isr_called = false;
static bool vApplicationMallocFailedHook_called = false;
/**
* @brief Global counter for the number of assertions in code.
*/
static int assertionFailed = 0;
/**
* @brief Flag which denotes if test need to abort on assertion.
*/
static BaseType_t shouldAbortOnAssertion = pdFALSE;
/* ============================ EXTERN FUNCTIONS ========================== */
extern void prvCheckTasksWaitingTermination( void );
/* ============================ HOOK FUNCTIONS ============================ */
static void dummy_operation()
@ -163,7 +182,7 @@ void vFakePortAssertIfISR( void )
HOOK_DIAG();
}
void port_allocate_secure_context( BaseType_t stackSize )
void vFakePortAllocateSecureContext( BaseType_t stackSize )
{
HOOK_DIAG();
port_allocate_secure_context_called = true;
@ -259,10 +278,11 @@ void vFakePortYieldFromISR()
HOOK_DIAG();
}
void vFakePortDisableInterrupts()
uint32_t vFakePortDisableInterrupts()
{
port_disable_interrupts_called = true;
HOOK_DIAG();
return 0;
}
void vFakePortEnableInterrupts()
@ -323,10 +343,53 @@ void vApplicationStackOverflowHook( TaskHandle_t xTask,
vApplicationStackOverflowHook_called = true;
}
unsigned int vFakePortGetCoreID( void )
{
HOOK_DIAG();
return 0;
}
void vFakePortReleaseTaskLock( void )
{
HOOK_DIAG();
}
void vFakePortGetTaskLock( void )
{
HOOK_DIAG();
}
void vFakePortGetISRLock( void )
{
HOOK_DIAG();
}
void vFakePortReleaseISRLock( void )
{
HOOK_DIAG();
}
static void vFakeAssertStub( bool x,
char * file,
int line,
int cmock_num_calls )
{
if( !x )
{
assertionFailed++;
if( shouldAbortOnAssertion == pdTRUE )
{
Throw( configASSERT_E );
}
}
}
/* ============================ Unity Fixtures ============================ */
/*! called before each testcase */
void setUp( void )
{
vFakeAssert_StubWithCallback( vFakeAssertStub );
RESET_ALL_HOOKS();
pxCurrentTCB = NULL;
memset( &tcb, 0x00, sizeof( TCB_t ) * TCB_ARRAY );
@ -335,10 +398,6 @@ void setUp( void )
memset( &xDelayedTaskList1, 0x00, sizeof( List_t ) );
memset( &xDelayedTaskList2, 0x00, sizeof( List_t ) );
/*
* pxDelayedTaskList = NULL;
* pxOverflowDelayedTaskList = NULL;
*/
memset( &xPendingReadyList, 0x00, sizeof( List_t ) );
memset( &xTasksWaitingTermination, 0x00, sizeof( List_t ) );
@ -944,6 +1003,71 @@ void test_vTaskDelete_success_not_current_task_no_yield( void )
ASSERT_PORT_YIELD_WITHIN_API_NOT_CALLED();
}
/**
* @brief prvCheckTasksWaitingTermination - no waiting task.
*
* No task is waiting to be deleted. This test show it's result in the coverage
* report.
*
* <b>Coverage</b>
* @code{c}
* while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
* {
* ...
* }
* @endcode
* ( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U ) is false.
*/
void test_prvCheckTasksWaitingTermination_no_waiting_task( void )
{
/* Setup the variables and structure. */
uxDeletedTasksWaitingCleanUp = 0;
/* API Call. */
prvCheckTasksWaitingTermination();
/* Validation. */
/* No task is waiting to be cleaned up. Nothing will be updated in this API. This
* test case shows its result in the coverage report. */
}
/**
* @brief prvCheckTasksWaitingTermination - delete waiting task.
*
* A task is waiting to be deleted. The number of tasks and number of tasks waiting to
* be deleted are verified in this test case.
*
* <b>Coverage</b>
* @code{c}
* while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
* {
* ...
* }
* @endcode
* ( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U ) is true.
*/
void test_prvCheckTasksWaitingTermination_delete_waiting_task( void )
{
ptcb = ( TCB_t * ) create_task();
/* Setup the variables and structure. */
uxDeletedTasksWaitingCleanUp = 1;
uxCurrentNumberOfTasks = 1;
/* Expectations. */
listGET_OWNER_OF_HEAD_ENTRY_ExpectAnyArgsAndReturn( ptcb );
uxListRemove_ExpectAndReturn( &ptcb->xStateListItem, 0 );
vPortFree_Expect( stack );
vPortFree_Expect( ptcb );
/* API Call. */
prvCheckTasksWaitingTermination();
/* Validation. */
TEST_ASSERT_EQUAL( uxDeletedTasksWaitingCleanUp, 0 );
TEST_ASSERT_EQUAL( uxCurrentNumberOfTasks, 0 );
}
void test_vTaskStartScheduler_success( void )
{
@ -2934,6 +3058,7 @@ void test_pcTaskGetName_success_null_handle( void )
ret_task_name = pcTaskGetName( NULL );
TEST_ASSERT_EQUAL_STRING( "create_task", ret_task_name );
}
void test_xTaskCatchUpTicks( void )
{
BaseType_t ret_taskCatchUpTicks;
@ -2941,11 +3066,18 @@ void test_xTaskCatchUpTicks( void )
task_handle = create_task();
ptcb = task_handle;
uxSchedulerSuspended = pdTRUE;
uxSchedulerSuspended = pdFALSE;
listLIST_IS_EMPTY_ExpectAnyArgsAndReturn( pdTRUE );
listLIST_IS_EMPTY_ExpectAnyArgsAndReturn( pdTRUE );
listCURRENT_LIST_LENGTH_ExpectAnyArgsAndReturn( 0 );
/* API Call */
ret_taskCatchUpTicks = xTaskCatchUpTicks( 500 );
ret_taskCatchUpTicks = xTaskCatchUpTicks( 1 );
/* Validations */
TEST_ASSERT_EQUAL( pdFALSE, ret_taskCatchUpTicks );
/*TEST_ASSERT_EQUAL( pdTRUE, ret_taskCatchUpTicks ); */
uxSchedulerSuspended = pdTRUE;
}
void test_xTaskIncrementTick_success_sched_suspended_no_switch( void )
@ -2975,11 +3107,11 @@ void test_xTaskIncrementTick_success_tickCount_overlow( void )
overflow = pxOverflowDelayedTaskList;
xTickCount = UINT32_MAX; /* overflowed */
create_task();
/* Expectations */
/* prvResetNextTaskUnblockTime */
/* taskSWITCH_DELAYED_LISTS */
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdTRUE );
/* back */
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdTRUE );
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ pxCurrentTCB->uxPriority ],
2 );
/* API Call */
@ -3030,6 +3162,8 @@ void test_xTaskIncrementTick_success_switch( void )
xTickCount = UINT32_MAX;
/* Expectations */
/* taskSWITCH_DELAYED_LISTS(); */
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdTRUE );
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdTRUE );
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ ptcb->uxPriority ],
3 );
@ -3167,6 +3301,71 @@ void test_xTaskIncrementTick_success_unblock_tasks2( void )
TEST_ASSERT_EQUAL( portMAX_DELAY, xNextTaskUnblockTime );
}
/**
* @brief xTaskIncrementTick - Ready a higher priority delayed task.
*
* Ready a higher priority delayed task. Verify the return value is pdTRUE.
*
* <b>Coverage</b>
* @code{c}
* if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
* {
* xSwitchRequired = pdTRUE;
* }
* else
* {
* mtCOVERAGE_TEST_MARKER();
* }
* @endcode
* ( pxTCB->uxPriority > pxCurrentTCB->uxPriority ) is true.
*/
void test_xTaskIncrementTick_success_unblock_higher_prio_task( void )
{
BaseType_t ret_task_incrementtick;
TaskHandle_t task_handle;
TaskHandle_t task_handle2;
/* setup */
create_task_priority = 2;
task_handle = create_task();
create_task_priority = 1;
task_handle2 = create_task();
/* task_handle 2 will be added to pxDelayedTaskList later. To wakeup a higher priority
* task, uxPriority is set higher than current task, which is 2. */
task_handle2->uxPriority = 3;
ptcb = task_handle;
xPendedTicks = 0;
xTickCount = 50;
xNextTaskUnblockTime = 49; /* tasks due unblocking */
uxSchedulerSuspended = pdFALSE;
/* Expectations */
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdFALSE );
listGET_OWNER_OF_HEAD_ENTRY_ExpectAndReturn( pxDelayedTaskList, task_handle2 );
listGET_LIST_ITEM_VALUE_ExpectAndReturn( &task_handle2->xStateListItem,
xTickCount - 5 );
listREMOVE_ITEM_Expect( &( task_handle2->xStateListItem ) );
listLIST_ITEM_CONTAINER_ExpectAndReturn( &task_handle2->xEventListItem,
&xPendingReadyList );
listREMOVE_ITEM_Expect( &( task_handle2->xEventListItem ) );
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ task_handle2->uxPriority ],
&task_handle2->xStateListItem );
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdTRUE );
/* back */
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ ptcb->uxPriority ],
1 );
/* API Call */
ret_task_incrementtick = xTaskIncrementTick();
/* Validations */
TEST_ASSERT_EQUAL( pdTRUE, ret_task_incrementtick );
ASSERT_APP_TICK_HOOK_CALLED();
TEST_ASSERT_EQUAL( portMAX_DELAY, xNextTaskUnblockTime );
}
/* Tests the scenario when a task with priority higher than the
* currently executing task is unblocked as a result of the
* xTaskIncrementTick call. Also, xPendedTicks is set to
@ -3483,6 +3682,7 @@ void test_vTaskSwitchContext( void )
pxCurrentTCB->pxTopOfStack = pxCurrentTCB->pxStack + 4; \
/* Expectations */
listCURRENT_LIST_LENGTH_ExpectAnyArgsAndReturn( 0 );
/* API Call */
vTaskSwitchContext();
@ -3517,6 +3717,7 @@ void test_vTaskSwitchContext_detect_overflow( void )
uxSchedulerSuspended = pdFALSE;
pxCurrentTCB->pxTopOfStack = pxCurrentTCB->pxStack;
/* Expectations */
listCURRENT_LIST_LENGTH_ExpectAnyArgsAndReturn( 0 );
/* API Call */
vTaskSwitchContext();
@ -3558,6 +3759,8 @@ void test_vTaskPlaceOnUnorderedEventList( void )
ptcb = task_handle;
xNextTaskUnblockTime = 600;
uxSchedulerSuspended = pdTRUE;
/* Expectations */
listSET_LIST_ITEM_VALUE_Expect( &ptcb->xEventListItem, 32 | 0x80000000UL );
listINSERT_END_Expect( &eventList, &ptcb->xEventListItem );
@ -3886,8 +4089,30 @@ void test_vTaskMissedYield( void )
TEST_ASSERT_TRUE( xYieldPending );
}
/* TODO: find a way to fix the idle task UnitTest as it is an infinite loop */
void ignore_test_prvIdleTask_yield( void )
/**
* @brief prvIdleTask - yield
*
* Test prvIdleTask yield for other idle level priority task.
*
* <b>Coverage</b>
* @code{c}
* #if ( ( configUSE_PREEMPTION == 1 ) && ( configIDLE_SHOULD_YIELD == 1 ) )
* {
* ...
* if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) configNUMBER_OF_CORES )
* {
* taskYIELD();
* }
* else
* {
* mtCOVERAGE_TEST_MARKER();
* }
* }
* #endif
* @endcode
* ( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) configNUMBER_OF_CORES ) is true.
*/
void test_prvIdleTask_yield( void )
{
int i = 8;
void * args = &i;
@ -3895,25 +4120,92 @@ void ignore_test_prvIdleTask_yield( void )
create_task_priority = 3;
create_task();
/* Setup */
/* Setup. */
uxDeletedTasksWaitingCleanUp = 0;
portTASK_FUNCTION( prvIdleTask, args );
( void ) fool_static2;
/* Expectations */
/* Expectations. */
/* INFINITE_LOOP in prvIdleTask. */
vFakeInfiniteLoop_ExpectAndReturn( 1 );
/* List function in prvIdleTask. */
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ 0 ], 2 );
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ 0 ], 0 );
/* prvGetExpectedIdleTime */
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ 0 ], 0 );
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ 0 ], 0 );
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ 0 ], 0 );
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ 0 ], 0 );
/* API Call */
/* INFINITE_LOOP in prvIdleTask. */
vFakeInfiniteLoop_ExpectAndReturn( 0 );
/* API Call. */
prvIdleTask( args );
/* Validations */
/* Validations. */
ASSERT_PORT_ALLOCATE_SECURE_CONTEXT_CALLED();
ASSERT_PORT_YIELD_CALLED();
ASSERT_APPLICATION_IDLE_HOOK_CALLED();
}
/**
* @brief prvIdleTask - tickless expected idle time
*
* Test prvIdleTask expected idle time condition.
*
* <b>Coverage</b>
* @code{c}
* #if ( configUSE_TICKLESS_IDLE != 0 )
* {
* TickType_t xExpectedIdleTime;
* ...
* xExpectedIdleTime = prvGetExpectedIdleTime();
*
* if( xExpectedIdleTime >= configEXPECTED_IDLE_TIME_BEFORE_SLEEP )
* {
* vTaskSuspendAll();
* {
* #endif
* @endcode
* ( xExpectedIdleTime >= configEXPECTED_IDLE_TIME_BEFORE_SLEEP ) is true.
*/
void test_prvIdleTask_tickless_expected_idle_time( void )
{
int i = 8;
void * args = &i;
create_task_priority = 0;
create_task();
/* Setup. */
uxTopReadyPriority = 0;
xTickCount = 0;
xNextTaskUnblockTime = configEXPECTED_IDLE_TIME_BEFORE_SLEEP + 1;
uxDeletedTasksWaitingCleanUp = 0;
portTASK_FUNCTION( prvIdleTask, args );
( void ) fool_static2;
/* Expectations. */
/* INFINITE_LOOP in prvIdleTask. */
vFakeInfiniteLoop_ExpectAndReturn( 1 );
/* List function in prvIdleTask. */
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ 0 ], 1 );
/* List functions in prvGetExpectedIdleTime. */
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ 0 ], 1 );
listCURRENT_LIST_LENGTH_ExpectAndReturn( &pxReadyTasksLists[ 0 ], 1 );
/* List functions in xTaskResumeAll */
listLIST_IS_EMPTY_ExpectAndReturn( &xPendingReadyList, pdTRUE );
/* INFINITE_LOOP in prvIdleTask. */
vFakeInfiniteLoop_ExpectAndReturn( 0 );
/* API Call. */
prvIdleTask( args );
/* Validations. */
ASSERT_PORT_ALLOCATE_SECURE_CONTEXT_CALLED();
ASSERT_APPLICATION_IDLE_HOOK_CALLED();
}
/* implement */
/*configPRE_SUPPRESS_TICKS_AND_SLEEP_PROCESSING( xExpectedIdleTime ); */
@ -4683,8 +4975,11 @@ void test_xTaskGenericNotify_success_null_pull( void )
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ ptcb->uxPriority ],
&ptcb->xStateListItem );
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
/* prvResetNextTaskUnblockTime */
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdTRUE );
/* API Call */
ret_task_notify = xTaskGenericNotify( ptcb,
uxIndexToNotify,
@ -4715,6 +5010,8 @@ void test_xTaskGenericNotify_success_eIncrement( void )
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ ptcb->uxPriority ],
&ptcb->xStateListItem );
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
/* prvResetNextTaskUnblockTime */
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdTRUE );
/* API Call */
@ -4747,6 +5044,8 @@ void test_xTaskGenericNotify_success_eSetValueWithOverwrite( void )
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ ptcb->uxPriority ],
&ptcb->xStateListItem );
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
/* prvResetNextTaskUnblockTime */
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdTRUE );
/* API Call */
@ -4779,6 +5078,8 @@ void test_xTaskGenericNotify_success_eSetValueWithoutOverwrite( void )
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ ptcb->uxPriority ],
&ptcb->xStateListItem );
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
/* prvResetNextTaskUnblockTime */
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdTRUE );
/* API Call */
@ -4869,6 +5170,8 @@ void test_xTaskGenericNotify_success_default( void )
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ ptcb->uxPriority ],
&ptcb->xStateListItem );
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
/* prvResetNextTaskUnblockTime */
listLIST_IS_EMPTY_ExpectAndReturn( pxDelayedTaskList, pdTRUE );
/* API Call */
@ -4931,7 +5234,10 @@ void test_xTaskGenericNotify_success_null_pull_ISR( void )
ptcb = task_to_notify;
vTaskSuspendAll();
/* Expectations */
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
listINSERT_END_Expect( &xPendingReadyList, &ptcb->xEventListItem );
/* API Call */
ret_task_notify = xTaskGenericNotifyFromISR( ptcb,
uxIndexToNotify,
@ -4963,10 +5269,14 @@ void test_xTaskGenericNotify_success_eIncrement_ISR( void )
task_to_notify->ucNotifyState[ uxIndexToNotify ] = taskWAITING_NOTIFICATION;
ptcb = task_to_notify;
/* Expectations */
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
listREMOVE_ITEM_Expect( &( ptcb->xStateListItem ) );
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ ptcb->uxPriority ],
&ptcb->xStateListItem );
/* API Call */
ret_task_notify = xTaskGenericNotifyFromISR( ptcb,
uxIndexToNotify,
@ -4998,6 +5308,8 @@ void test_xTaskGenericNotify_success_eSetValueWithOverwrite_ISR( void )
task_to_notify->ucNotifyState[ uxIndexToNotify ] = taskWAITING_NOTIFICATION;
ptcb = task_to_notify;
/* Expectations */
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
listREMOVE_ITEM_Expect( &( ptcb->xStateListItem ) );
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ ptcb->uxPriority ],
@ -5033,6 +5345,8 @@ void test_xTaskGenericNotify_success_eSetValueWithoutOverwrite_ISR( void )
task_to_notify->ucNotifyState[ uxIndexToNotify ] = taskWAITING_NOTIFICATION;
ptcb = task_to_notify;
/* Expectations */
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
listREMOVE_ITEM_Expect( &( ptcb->xStateListItem ) );
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ ptcb->uxPriority ],
@ -5140,6 +5454,8 @@ void test_xTaskGenericNotify_success_default_ISR( void )
task_to_notify->ucNotifyState[ uxIndexToNotify ] = taskWAITING_NOTIFICATION;
ptcb = task_to_notify;
/* Expectations */
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
listREMOVE_ITEM_Expect( &( ptcb->xStateListItem ) );
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ ptcb->uxPriority ],
@ -5183,6 +5499,8 @@ void test_xTaskGenericNotify_success_default_ISR_task_woken_null( void )
task_to_notify->ucNotifyState[ uxIndexToNotify ] = taskWAITING_NOTIFICATION;
ptcb = task_to_notify;
/* Expectations */
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
listREMOVE_ITEM_Expect( &( ptcb->xStateListItem ) );
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &pxReadyTasksLists[ ptcb->uxPriority ],
@ -5365,11 +5683,16 @@ void test_vTaskGenericNotifyGiveFromISR_success( void )
/* Setup */
task_to_notify = create_task();
task_to_notify->ucNotifyState[ uxIndexToNotify ] = taskWAITING_NOTIFICATION;
ptcb = task_to_notify;
/* Expectations */
/* configASSERT statement */
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
/*uxListRemove_ExpectAndReturn( &task_to_notify->xStateListItem, pdTRUE ); */
listREMOVE_ITEM_Expect( &( task_to_notify->xStateListItem ) );
/* prvAddTaskToReadyList */
listINSERT_END_Expect( &xPendingReadyList, &task_to_notify->xEventListItem );
/* API Call */
vTaskGenericNotifyGiveFromISR( task_to_notify,
uxIndexToNotify,
@ -5391,8 +5714,12 @@ void test_vTaskGenericNotifyGiveFromISR_success_scheduler_suspended( void )
/* Setup */
task_to_notify = create_task();
task_to_notify->ucNotifyState[ uxIndexToNotify ] = taskWAITING_NOTIFICATION;
ptcb = task_to_notify;
vTaskSuspendAll();
/* Expectations */
/* configASSERT statement */
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
listINSERT_END_Expect( &xPendingReadyList, &task_to_notify->xEventListItem );
/* API Call */
@ -5425,7 +5752,11 @@ void test_vTaskGenericNotifyGiveFromISR_success_yield_pending( void )
task_to_notify->ucNotifyState[ uxIndexToNotify ] = taskWAITING_NOTIFICATION;
ptcb = task_to_notify;
vTaskSuspendAll();
/* Expectations */
/* configASSERT statement */
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
listINSERT_END_Expect( &xPendingReadyList, &task_to_notify->xEventListItem );
/* API Call */
@ -5458,6 +5789,9 @@ void test_vTaskGenericNotifyGiveFromISR_success_null_higherpriority_task( void )
ptcb = task_to_notify;
vTaskSuspendAll();
/* Expectations */
/* configASSERT statement */
listLIST_ITEM_CONTAINER_ExpectAndReturn( &ptcb->xEventListItem,
&xSuspendedTaskList );
listINSERT_END_Expect( &xPendingReadyList, &task_to_notify->xEventListItem );
/* API Call */