diff --git a/README.md b/README.md index 9e18b009f..23b69ae33 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,12 @@ This is a collection of abstraction APIs and associated framework to be located The autogenerated OSAL user's guide can be viewed at . -## Version History +## Changelog + +### Development Build: v6.0.0-rc4+dev87 + +- Add OS_StatusToString API +- See ### Development Build: v6.0.0-rc4+dev83 diff --git a/src/os/inc/osapi-error.h b/src/os/inc/osapi-error.h index fd40dc9f9..7dc911fb2 100644 --- a/src/os/inc/osapi-error.h +++ b/src/os/inc/osapi-error.h @@ -46,6 +46,20 @@ */ typedef char os_err_name_t[OS_ERROR_NAME_LENGTH]; +/** + * @brief Status converted to string length limit + * + * Used for sizing os_status_string_t intended for use in printing osal_status_t values + * Sized to fit LONG_MIN including NULL termination + */ +#define OS_STATUS_STRING_LENGTH 12 + +/** + * @brief For the @ref OS_StatusToString() function, to ensure + * everyone is making an array of the same length. + */ +typedef char os_status_string_t[OS_STATUS_STRING_LENGTH]; + /** @defgroup OSReturnCodes OSAL Return Code Defines * * The specific status/return code definitions listed in this section may be extended or refined @@ -165,6 +179,17 @@ static inline long OS_StatusToInteger(osal_status_t Status) * @retval #OS_ERROR if error could not be converted */ int32 OS_GetErrorName(int32 error_num, os_err_name_t *err_name); + +/*-------------------------------------------------------------------------------------*/ +/** + * @brief Convert status to a string + * + * @param[in] status Status value to convert + * @param[out] status_string Buffer to store status converted to string + * + * @return Passed in string pointer + */ +char *OS_StatusToString(osal_status_t status, os_status_string_t *status_string); /**@}*/ #endif /* OSAPI_ERROR_H */ diff --git a/src/os/inc/osapi-version.h b/src/os/inc/osapi-version.h index c9cf2eb56..5b85d8228 100644 --- a/src/os/inc/osapi-version.h +++ b/src/os/inc/osapi-version.h @@ -34,7 +34,7 @@ /* * Development Build Macro Definitions */ -#define OS_BUILD_NUMBER 83 +#define OS_BUILD_NUMBER 87 #define OS_BUILD_BASELINE "v6.0.0-rc4" /* diff --git a/src/os/shared/src/osapi-errors.c b/src/os/shared/src/osapi-errors.c index cab5241a9..acd7a039c 100644 --- a/src/os/shared/src/osapi-errors.c +++ b/src/os/shared/src/osapi-errors.c @@ -98,6 +98,26 @@ static const OS_ErrorTable_Entry_t OS_GLOBAL_ERROR_NAME_TABLE[] = { ********************************************************************************* */ +/*---------------------------------------------------------------- + * + * Function: OS_StatusToString + * + * Purpose: Implemented per public OSAL API + * See description in API and header file for detail + * + *-----------------------------------------------------------------*/ +char *OS_StatusToString(osal_status_t status, os_status_string_t *status_string) +{ + char *string = NULL; + + if (status_string != NULL) + { + snprintf(*status_string, sizeof(*status_string), "%ld", OS_StatusToInteger(status)); + string = *status_string; + } + return string; +} + /*---------------------------------------------------------------- * * Function: OS_GetErrorName diff --git a/src/unit-test-coverage/shared/src/coveragetest-errors.c b/src/unit-test-coverage/shared/src/coveragetest-errors.c index f6d9ffa9c..4dd29dc62 100644 --- a/src/unit-test-coverage/shared/src/coveragetest-errors.c +++ b/src/unit-test-coverage/shared/src/coveragetest-errors.c @@ -47,6 +47,37 @@ void Test_OS_GetErrorName(void) OSAPI_TEST_FUNCTION_RC(OS_GetErrorName(-555555, NULL), OS_INVALID_POINTER); } +/*--------------------------------------------------------------------------------* +** OS_StatusToString test helper function to avoid repeating logic +**--------------------------------------------------------------------------------*/ +void Test_OS_StatusToString_Helper(osal_status_t status) +{ + os_status_string_t status_string; + char * rtn_addr; + char expected[OS_STATUS_STRING_LENGTH + 1]; + + /* Used oversized string to test for truncation */ + snprintf(expected, sizeof(expected), "%ld", OS_StatusToInteger(status)); + rtn_addr = OS_StatusToString(status, &status_string); + UtAssert_ADDRESS_EQ(rtn_addr, status_string); + UtAssert_STRINGBUF_EQ(status_string, sizeof(status_string), expected, sizeof(expected)); +} + +/*--------------------------------------------------------------------------------* +** Functional OS_StatusToString test +**--------------------------------------------------------------------------------*/ +void Test_OS_StatusToString(void) +{ + /* NULL test */ + UtAssert_ADDRESS_EQ(OS_StatusToString(OS_SUCCESS, NULL), NULL); + + /* Status value tests */ + Test_OS_StatusToString_Helper(OS_SUCCESS); + Test_OS_StatusToString_Helper(OS_ERROR); + Test_OS_StatusToString_Helper(OSAL_STATUS_C(INT32_MAX)); + Test_OS_StatusToString_Helper(OSAL_STATUS_C(INT32_MIN)); +} + /* Osapi_Test_Setup * * Purpose: @@ -71,4 +102,5 @@ void Osapi_Test_Teardown(void) {} void UtTest_Setup(void) { ADD_TEST(OS_GetErrorName); + ADD_TEST(OS_StatusToString); } diff --git a/src/unit-tests/oscore-test/ut_oscore_misc_test.c b/src/unit-tests/oscore-test/ut_oscore_misc_test.c index dcfd7e792..00ebc160e 100644 --- a/src/unit-tests/oscore-test/ut_oscore_misc_test.c +++ b/src/unit-tests/oscore-test/ut_oscore_misc_test.c @@ -416,6 +416,37 @@ void UT_os_geterrorname_test(void) UtAssert_StrCmp(errNames[2], "OS_ERR_NO_FREE_IDS", "%s == %s", errNames[2], "OS_ERR_NO_FREE_IDS"); } +/*--------------------------------------------------------------------------------* +** OS_StatusToString test helper function to avoid repeating logic +**--------------------------------------------------------------------------------*/ +void UT_os_statustostring_test_helper(osal_status_t status) +{ + os_status_string_t status_string; + char * rtn_addr; + char expected[OS_STATUS_STRING_LENGTH + 1]; + + /* Used oversized string to test for truncation */ + snprintf(expected, sizeof(expected) - 1, "%ld", OS_StatusToInteger(status)); + rtn_addr = OS_StatusToString(status, &status_string); + UtAssert_ADDRESS_EQ(rtn_addr, status_string); + UtAssert_STRINGBUF_EQ(status_string, sizeof(status_string), expected, sizeof(expected)); +} + +/*--------------------------------------------------------------------------------* +** Functional OS_StatusToString test +**--------------------------------------------------------------------------------*/ +void UT_os_statustostring_test(void) +{ + /* NULL test */ + UtAssert_ADDRESS_EQ(OS_StatusToString(OS_SUCCESS, NULL), NULL); + + /* Status value tests */ + UT_os_statustostring_test_helper(OS_SUCCESS); + UT_os_statustostring_test_helper(OS_ERROR); + UT_os_statustostring_test_helper(OSAL_STATUS_C(INT32_MAX)); + UT_os_statustostring_test_helper(OSAL_STATUS_C(INT32_MIN)); +} + /*--------------------------------------------------------------------------------* ** Syntax: int32 OS_HeapGetInfo(OS_heap_prop_t *heap_prop) ** Purpose: Returns current info on the heap diff --git a/src/unit-tests/oscore-test/ut_oscore_misc_test.h b/src/unit-tests/oscore-test/ut_oscore_misc_test.h index 2cb553ce6..08b7c492e 100644 --- a/src/unit-tests/oscore-test/ut_oscore_misc_test.h +++ b/src/unit-tests/oscore-test/ut_oscore_misc_test.h @@ -63,6 +63,7 @@ void UT_os_getlocaltime_test(void); void UT_os_setlocaltime_test(void); void UT_os_geterrorname_test(void); +void UT_os_statustostring_test(void); void UT_os_heapgetinfo_test(void); diff --git a/src/unit-tests/oscore-test/ut_oscore_test.c b/src/unit-tests/oscore-test/ut_oscore_test.c index 80356d9b8..f0495fdb3 100644 --- a/src/unit-tests/oscore-test/ut_oscore_test.c +++ b/src/unit-tests/oscore-test/ut_oscore_test.c @@ -245,6 +245,7 @@ void UtTest_Setup(void) UtTest_Add(UT_os_task_getid_by_sysdata_test, UT_os_task_getid_by_sysdata_test, NULL, "OS_TaskFindIdBySystemData"); UtTest_Add(UT_os_geterrorname_test, NULL, NULL, "OS_GetErrorName"); + UtTest_Add(UT_os_statustostring_test, NULL, NULL, "OS_StatusToString"); UtTest_Add(UT_os_getlocaltime_test, NULL, NULL, "OS_GetLocalTime"); UtTest_Add(UT_os_setlocaltime_test, NULL, NULL, "OS_SetLocalTime"); diff --git a/src/ut-stubs/osapi-error-stubs.c b/src/ut-stubs/osapi-error-stubs.c index 1a5df75f0..62eee38a0 100644 --- a/src/ut-stubs/osapi-error-stubs.c +++ b/src/ut-stubs/osapi-error-stubs.c @@ -43,3 +43,20 @@ int32 OS_GetErrorName(int32 error_num, os_err_name_t *err_name) return UT_GenStub_GetReturnValue(OS_GetErrorName, int32); } + +/* + * ---------------------------------------------------- + * Generated stub function for OS_StatusToString() + * ---------------------------------------------------- + */ +char *OS_StatusToString(osal_status_t status, os_status_string_t *status_string) +{ + UT_GenStub_SetupReturnBuffer(OS_StatusToString, char *); + + UT_GenStub_AddParam(OS_StatusToString, osal_status_t, status); + UT_GenStub_AddParam(OS_StatusToString, os_status_string_t *, status_string); + + UT_GenStub_Execute(OS_StatusToString, Basic, NULL); + + return UT_GenStub_GetReturnValue(OS_StatusToString, char *); +}