From d34d35de172d9f1fb961b180b5d76fbffdc1a104 Mon Sep 17 00:00:00 2001 From: "Knutsen, Daniel M 987600011" Date: Tue, 23 Jul 2024 21:59:57 +0000 Subject: [PATCH] Fix #100, Check CFE_SB_NO_MESSAGE return code Fix #100, check cfe_sb_no_message return code from CFE_SB_ReceiveBuffer --- fsw/src/mm_app.c | 2 +- unit-test/mm_app_tests.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/fsw/src/mm_app.c b/fsw/src/mm_app.c index afc573d..80ce42e 100644 --- a/fsw/src/mm_app.c +++ b/fsw/src/mm_app.c @@ -91,7 +91,7 @@ void MM_AppMain(void) { if ((Status == CFE_SUCCESS) && (BufPtr != NULL)) { /* 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 */ } else { /* diff --git a/unit-test/mm_app_tests.c b/unit-test/mm_app_tests.c index 1f28abe..a4c5afc 100644 --- a/unit-test/mm_app_tests.c +++ b/unit-test/mm_app_tests.c @@ -47,6 +47,14 @@ /* Function Definitions */ /* ==================== */ +int32 MM_APP_TEST_CFE_ES_ExitAppHook(void *UserObj, int32 StubRetcode, uint32 CallCount, + const UT_StubContext_t *Context) +{ + MM_AppData.HkTlm.Payload.CmdCounter++; + + return 0; +} + void MM_AppMain_Test_Nominal(void) { CFE_SB_Buffer_t Buf; CFE_SB_Buffer_t *BufPtr = &Buf; @@ -121,6 +129,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; @@ -271,6 +305,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);