From c82e6caa34589be2fd69704bfad3010a3ad61951 Mon Sep 17 00:00:00 2001 From: Paul Bartell Date: Thu, 1 Apr 2021 22:18:36 -0700 Subject: [PATCH] Remove imporper TEST_PROTECT usage from message_buffer_utest.c. The way TEST_PROTECT is currently used in this test causes an infinite loop if the expected configASSERT failure does not occur. --- .../message_buffer/message_buffer_utest.c | 81 ++++++++++--------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/FreeRTOS/Test/CMock/message_buffer/message_buffer_utest.c b/FreeRTOS/Test/CMock/message_buffer/message_buffer_utest.c index 2a2c00f2ab..afbff76283 100644 --- a/FreeRTOS/Test/CMock/message_buffer/message_buffer_utest.c +++ b/FreeRTOS/Test/CMock/message_buffer/message_buffer_utest.c @@ -29,7 +29,7 @@ #include #include -/* Queue includes */ +/* Message Buffer includes */ #include "FreeRTOS.h" #include "FreeRTOSConfig.h" #include "message_buffer.h" @@ -37,6 +37,7 @@ /* Test includes. */ #include "unity.h" #include "unity_memory.h" +#include "CException.h" /* Mock includes. */ #include "mock_task.h" @@ -72,6 +73,31 @@ */ #define TEST_MESSAGE_BUFFER_WAIT_TICKS ( 1000U ) +/** + * @brief CException code for when a configASSERT should be intercepted. + */ +#define configASSERT_E 0xAA101 + +/** + * @brief Expect a configASSERT from the funciton called. + * Break out of the called function when this occurs. + * @details Use this macro when the call passsed in as a parameter is expected + * to cause invalid memory access. + */ +#define EXPECT_ASSERT_BREAK( call ) \ + do \ + { \ + shouldAbortOnAssertion = true; \ + CEXCEPTION_T e = CEXCEPTION_NONE; \ + Try \ + { \ + call; \ + TEST_FAIL(); \ + } \ + Catch( e ) \ + TEST_ASSERT_EQUAL( configASSERT_E, e ); \ + } while ( 0 ) + /* ============================ GLOBAL VARIABLES =========================== */ /** @@ -131,7 +157,7 @@ static void vFakeAssertStub( bool x, if( shouldAbortOnAssertion == pdTRUE ) { - TEST_ABORT(); + Throw( configASSERT_E ); } } } @@ -328,10 +354,7 @@ void test_xMessageBufferCreate_malloc_fail( void ) */ void test_xMessageBufferCreate_zero_size( void ) { - if( TEST_PROTECT() ) - { - ( void ) xMessageBufferCreate( 0 ); - } + EXPECT_ASSERT_BREAK( ( void ) xMessageBufferCreate( 0 ) ); validate_and_clear_assertions(); } @@ -341,10 +364,7 @@ void test_xMessageBufferCreate_zero_size( void ) */ void test_xMessageBufferCreate_invalid_size( void ) { - if( TEST_PROTECT() ) - { - ( void ) xMessageBufferCreate( TEST_MESSAGE_METADATA_SIZE ); - } + EXPECT_ASSERT_BREAK( ( void ) xMessageBufferCreate( TEST_MESSAGE_METADATA_SIZE ) ); validate_and_clear_assertions(); } @@ -379,6 +399,7 @@ void test_xMessageBufferCreateStatic_null_array( void ) /* Returns NULL when NULL storage area is passed as a parameter. */ xMessageBuffer = xMessageBufferCreateStatic( TEST_MESSAGE_BUFFER_SIZE, NULL, &messageBufferStruct ); TEST_ASSERT_NULL( xMessageBuffer ); + validate_and_clear_assertions(); } @@ -396,6 +417,7 @@ void test_xMessageBufferCreateStatic_null_struct( void ) /* Returns NULL when NULL message buffer struct is passed as a parameter. */ xMessageBuffer = xMessageBufferCreateStatic( sizeof( messageBufferArray ), messageBufferArray, NULL ); TEST_ASSERT_NULL( xMessageBuffer ); + validate_and_clear_assertions(); } @@ -408,10 +430,7 @@ void test_xMessageBufferCreateStatic_invalid_size( void ) /* The size of message buffer array should be one greater than the required size of message buffer. */ uint8_t messageBufferArray[ TEST_MESSAGE_BUFFER_SIZE + 1 ] = { 0 }; - if( TEST_PROTECT() ) - { - ( void ) xMessageBufferCreateStatic( TEST_MESSAGE_METADATA_SIZE, messageBufferArray, &messageBufferStruct ); - } + EXPECT_ASSERT_BREAK( ( void ) xMessageBufferCreateStatic( TEST_MESSAGE_METADATA_SIZE, messageBufferArray, &messageBufferStruct ) ); validate_and_clear_assertions(); } @@ -425,10 +444,7 @@ void test_xMessageBufferCreateStatic_zero_size( void ) /* The size of message buffer array should be one greater than the required size of message buffer. */ uint8_t messageBufferArray[ TEST_MESSAGE_BUFFER_SIZE + 1 ] = { 0 }; - if( TEST_PROTECT() ) - { - ( void ) xMessageBufferCreateStatic( 0, messageBufferArray, &messageBufferStruct ); - } + EXPECT_ASSERT_BREAK( ( void ) xMessageBufferCreateStatic( 0, messageBufferArray, &messageBufferStruct ) ); validate_and_clear_assertions(); } @@ -461,7 +477,7 @@ void test_xMessageBufferSend_success( void ) /** * @brief An integer overflow in message size to be sent should result in an - * assertion failure + * assertion failure */ void test_xMessageBufferSend_message_size_integer_overflow( void ) { @@ -475,10 +491,8 @@ void test_xMessageBufferSend_message_size_integer_overflow( void ) xMessageBuffer = xMessageBufferCreate( TEST_MESSAGE_BUFFER_SIZE ); TEST_ASSERT_NOT_NULL( xMessageBuffer ); - if( TEST_PROTECT() ) - { - ( void ) xMessageBufferSend( xMessageBuffer, data, TEST_MESSAGE_BUFFER_MAX_UINT_SIZE, TEST_MESSAGE_BUFFER_WAIT_TICKS ); - } + EXPECT_ASSERT_BREAK( ( void ) xMessageBufferSend( xMessageBuffer, data, TEST_MESSAGE_BUFFER_MAX_UINT_SIZE, TEST_MESSAGE_BUFFER_WAIT_TICKS ) ); + validate_and_clear_assertions(); vStreamBufferDelete( xMessageBuffer ); @@ -521,10 +535,7 @@ void test_xMessageBufferSend_null_message( void ) xMessageBuffer = xMessageBufferCreate( TEST_MESSAGE_BUFFER_SIZE ); TEST_ASSERT_NOT_NULL( xMessageBuffer ); - if( TEST_PROTECT() ) - { - ( void ) xMessageBufferSend( xMessageBuffer, NULL, TEST_MAX_MESSAGE_SIZE + 1, TEST_MESSAGE_BUFFER_WAIT_TICKS ); - } + EXPECT_ASSERT_BREAK( ( void ) xMessageBufferSend( xMessageBuffer, NULL, TEST_MAX_MESSAGE_SIZE + 1, TEST_MESSAGE_BUFFER_WAIT_TICKS ) ); validate_and_clear_assertions(); @@ -546,10 +557,7 @@ void test_xMessageBufferSend_null_message_buffer( void ) xMessageBuffer = xMessageBufferCreate( TEST_MESSAGE_BUFFER_SIZE ); TEST_ASSERT_NOT_NULL( xMessageBuffer ); - if( TEST_PROTECT() ) - { - ( void ) xMessageBufferSend( NULL, message, TEST_MAX_MESSAGE_SIZE + 1, TEST_MESSAGE_BUFFER_WAIT_TICKS ); - } + EXPECT_ASSERT_BREAK( ( void ) xMessageBufferSend( NULL, message, TEST_MAX_MESSAGE_SIZE + 1, TEST_MESSAGE_BUFFER_WAIT_TICKS ) ); validate_and_clear_assertions(); @@ -643,12 +651,10 @@ void test_xMessageBufferReceive_null_input_message( void ) TEST_ASSERT_NOT_NULL( xMessageBuffer ); /* Should assert if a null input mssage is passed. */ - if( TEST_PROTECT() ) - { - ( void ) xMessageBufferReceive( xMessageBuffer, NULL, TEST_MAX_MESSAGE_SIZE, TEST_MESSAGE_BUFFER_WAIT_TICKS ); - } + EXPECT_ASSERT_BREAK( ( void ) xMessageBufferReceive( xMessageBuffer, NULL, TEST_MAX_MESSAGE_SIZE, TEST_MESSAGE_BUFFER_WAIT_TICKS ) ); validate_and_clear_assertions(); + vStreamBufferDelete( xMessageBuffer ); } @@ -669,10 +675,7 @@ void test_xMessageBufferReceive_invalid_params( void ) TEST_ASSERT_NOT_NULL( xMessageBuffer ); /* Should assert if a null message buffer handle is passed. */ - if( TEST_PROTECT() ) - { - ( void ) xMessageBufferReceive( NULL, message, TEST_MAX_MESSAGE_SIZE, TEST_MESSAGE_BUFFER_WAIT_TICKS ); - } + EXPECT_ASSERT_BREAK( ( void ) xMessageBufferReceive( NULL, message, TEST_MAX_MESSAGE_SIZE, TEST_MESSAGE_BUFFER_WAIT_TICKS ) ); validate_and_clear_assertions();