diff --git a/fsw/src/mm_app.c b/fsw/src/mm_app.c index d2803db..3f518d4 100644 --- a/fsw/src/mm_app.c +++ b/fsw/src/mm_app.c @@ -95,7 +95,7 @@ void MM_AppMain(void) /* Process Software Bus message */ MM_TaskPipe(BufPtr); } - else if (Status == CFE_SB_TIME_OUT) + else if (Status == CFE_SB_TIME_OUT || Status == CFE_SB_NO_MESSAGE) { /* No action, but also no error */ } diff --git a/unit-test/mm_app_tests.c b/unit-test/mm_app_tests.c index 5de71a9..f1b15b5 100644 --- a/unit-test/mm_app_tests.c +++ b/unit-test/mm_app_tests.c @@ -47,6 +47,16 @@ /* Function Definitions */ /* ==================== */ +int32 MM_APP_TEST_CFE_ES_ExitAppHook(void *UserObj, + int32 StubRetcode, + uint32 CallCount, + const UT_StubContext_t *Context) +{ + MM_AppData.HkTlm.Payload.CommandCounter++; + + return 0; +} + void MM_AppMain_Test_Nominal(void) { CFE_SB_Buffer_t Buf; @@ -123,6 +133,32 @@ void MM_AppMain_Test_SBTimeout(void) UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1); } +void MM_AppMain_Test_SBNoMessage(void) +{ + size_t forced_Size = 1; + CFE_SB_MsgId_t forced_MsgID = MM_UT_MID_1; + + /* Set to exit loop after first run */ + UT_SetDeferredRetcode(UT_KEY(CFE_ES_RunLoop), 1, true); + + /* Set to generate error message CFE_SB_NO_MESSAGE */ + UT_SetDefaultReturnValue(UT_KEY(CFE_SB_ReceiveBuffer), CFE_SB_NO_MESSAGE); + + /* Set to prevent segmentation fault */ + UT_SetDataBuffer(UT_KEY(CFE_MSG_GetMsgId), &forced_MsgID, sizeof(forced_MsgID), false); + UT_SetDataBuffer(UT_KEY(CFE_MSG_GetSize), &forced_Size, sizeof(forced_Size), false); + + /* Used to verify completion of MM_AppMain by incrementing MM_AppData.HkPacket.CmdCounter. */ + UT_SetHookFunction(UT_KEY(CFE_ES_ExitApp), MM_APP_TEST_CFE_ES_ExitAppHook, NULL); + + /* Execute the function being tested */ + UtAssert_VOIDCALL(MM_AppMain()); + + /* Verify results */ + /* Generates 1 event message we don't care about in this test */ + UtAssert_STUB_COUNT(CFE_EVS_SendEvent, 1); +} + void MM_AppInit_Test_Nominal(void) { CFE_Status_t Result; @@ -278,6 +314,7 @@ void UtTest_Setup(void) ADD_TEST(MM_AppMain_Test_AppInitError); ADD_TEST(MM_AppMain_Test_SBError); ADD_TEST(MM_AppMain_Test_SBTimeout); + ADD_TEST(MM_AppMain_Test_SBNoMessage); ADD_TEST(MM_AppInit_Test_Nominal); ADD_TEST(MM_AppInit_Test_EVSRegisterError); ADD_TEST(MM_AppInit_Test_SBCreatePipeError);