mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-23 03:15:43 +01:00
Show values when TEST_EQUAL fails
When TEST_EQUAL fails, show the two numerical values in the test log (only with host_test). The values are printed in hexa and signed decimal. The arguments of TEST_EQUAL must now be integers, not pointers or floats. The current implementation requires them to fit in unsigned long long Signed values no larger than long long will work too. The implementation uses unsigned long long rather than uintmax_t to reduce portability concerns. The snprintf function must support "%llx" and "%lld". For this purpose, add room for two lines of text to the mbedtls_test_info structure. This adds 154 bytes of global data. Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
parent
a686bf46f7
commit
b436649a25
@ -72,6 +72,8 @@ typedef struct
|
|||||||
const char *filename;
|
const char *filename;
|
||||||
int line_no;
|
int line_no;
|
||||||
unsigned long step;
|
unsigned long step;
|
||||||
|
char line1[76];
|
||||||
|
char line2[76];
|
||||||
#if defined(MBEDTLS_TEST_MUTEX_USAGE)
|
#if defined(MBEDTLS_TEST_MUTEX_USAGE)
|
||||||
const char *mutex_usage_error;
|
const char *mutex_usage_error;
|
||||||
#endif
|
#endif
|
||||||
@ -130,6 +132,27 @@ void mbedtls_test_set_step( unsigned long step );
|
|||||||
*/
|
*/
|
||||||
void mbedtls_test_info_reset( void );
|
void mbedtls_test_info_reset( void );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Record the current test case as a failure if two integers
|
||||||
|
* have a different value.
|
||||||
|
*
|
||||||
|
* This function is usually called via the macro
|
||||||
|
* #TEST_EQUAL.
|
||||||
|
*
|
||||||
|
* \param test Description of the failure or assertion that failed. This
|
||||||
|
* MUST be a string literal. This normally has the form
|
||||||
|
* "EXPR1 == EXPR2" where EXPR1 has the value \p value1
|
||||||
|
* and EXPR2 has the value \p value2.
|
||||||
|
* \param line_no Line number where the failure originated.
|
||||||
|
* \param filename Filename where the failure originated.
|
||||||
|
* \param value1 The first value to compare.
|
||||||
|
* \param value2 The second value to compare.
|
||||||
|
*
|
||||||
|
* \return \c 1 if the values are equal, otherwise \c 0.
|
||||||
|
*/
|
||||||
|
int mbedtls_test_equal( const char *test, int line_no, const char* filename,
|
||||||
|
unsigned long long value1, unsigned long long value2 );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief This function decodes the hexadecimal representation of
|
* \brief This function decodes the hexadecimal representation of
|
||||||
* data.
|
* data.
|
||||||
|
@ -84,15 +84,21 @@
|
|||||||
} \
|
} \
|
||||||
} while( 0 )
|
} while( 0 )
|
||||||
|
|
||||||
/** Evaluate two expressions and fail the test case if they have different
|
/** Evaluate two integer expressions and fail the test case if they have
|
||||||
* values.
|
* different values.
|
||||||
*
|
*
|
||||||
* \param expr1 An expression to evaluate.
|
* The two expressions should have the same signedness, otherwise the
|
||||||
* \param expr2 The expected value of \p expr1. This can be any
|
* comparison is not meaningful if the signed value is negative.
|
||||||
* expression, but it is typically a constant.
|
*
|
||||||
|
* \param expr1 An integral-typed expression to evaluate.
|
||||||
|
* \param expr2 Another integral-typed expression to evaluate.
|
||||||
*/
|
*/
|
||||||
#define TEST_EQUAL( expr1, expr2 ) \
|
#define TEST_EQUAL( expr1, expr2 ) \
|
||||||
TEST_ASSERT( ( expr1 ) == ( expr2 ) )
|
do { \
|
||||||
|
if( ! mbedtls_test_equal( #expr1 " == " #expr2, __LINE__, __FILE__, \
|
||||||
|
expr1, expr2 ) ) \
|
||||||
|
goto exit; \
|
||||||
|
} while( 0 )
|
||||||
|
|
||||||
/** Allocate memory dynamically and fail the test case if this fails.
|
/** Allocate memory dynamically and fail the test case if this fails.
|
||||||
* The allocated memory will be filled with zeros.
|
* The allocated memory will be filled with zeros.
|
||||||
|
@ -113,6 +113,31 @@ void mbedtls_test_info_reset( void )
|
|||||||
mbedtls_test_info.test = 0;
|
mbedtls_test_info.test = 0;
|
||||||
mbedtls_test_info.line_no = 0;
|
mbedtls_test_info.line_no = 0;
|
||||||
mbedtls_test_info.filename = 0;
|
mbedtls_test_info.filename = 0;
|
||||||
|
memset( mbedtls_test_info.line1, 0, sizeof( mbedtls_test_info.line1 ) );
|
||||||
|
memset( mbedtls_test_info.line2, 0, sizeof( mbedtls_test_info.line2 ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
int mbedtls_test_equal( const char *test, int line_no, const char* filename,
|
||||||
|
unsigned long long value1, unsigned long long value2 )
|
||||||
|
{
|
||||||
|
if( value1 == value2 )
|
||||||
|
return( 1 );
|
||||||
|
if( mbedtls_test_info.result == MBEDTLS_TEST_RESULT_FAILED )
|
||||||
|
{
|
||||||
|
/* We've already recorded the test as having failed. Don't
|
||||||
|
* overwrite any previous information about the failure. */
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
mbedtls_test_fail( test, line_no, filename );
|
||||||
|
(void) mbedtls_snprintf( mbedtls_test_info.line1,
|
||||||
|
sizeof( mbedtls_test_info.line1 ),
|
||||||
|
"lhs = 0x%016llx = %lld",
|
||||||
|
value1, (long long) value1 );
|
||||||
|
(void) mbedtls_snprintf( mbedtls_test_info.line2,
|
||||||
|
sizeof( mbedtls_test_info.line2 ),
|
||||||
|
"rhs = 0x%016llx = %lld",
|
||||||
|
value2, (long long) value2 );
|
||||||
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
int mbedtls_test_unhexify( unsigned char *obuf,
|
int mbedtls_test_unhexify( unsigned char *obuf,
|
||||||
|
@ -663,7 +663,7 @@ int mbedtls_test_psa_exported_key_sanity_check(
|
|||||||
TEST_EQUAL( mbedtls_asn1_get_tag( &p, end, &len,
|
TEST_EQUAL( mbedtls_asn1_get_tag( &p, end, &len,
|
||||||
MBEDTLS_ASN1_SEQUENCE |
|
MBEDTLS_ASN1_SEQUENCE |
|
||||||
MBEDTLS_ASN1_CONSTRUCTED ), 0 );
|
MBEDTLS_ASN1_CONSTRUCTED ), 0 );
|
||||||
TEST_EQUAL( p + len, end );
|
TEST_EQUAL( len, end - p );
|
||||||
if( ! mbedtls_test_asn1_skip_integer( &p, end, 0, 0, 0 ) )
|
if( ! mbedtls_test_asn1_skip_integer( &p, end, 0, 0, 0 ) )
|
||||||
goto exit;
|
goto exit;
|
||||||
if( ! mbedtls_test_asn1_skip_integer( &p, end, bits, bits, 1 ) )
|
if( ! mbedtls_test_asn1_skip_integer( &p, end, bits, bits, 1 ) )
|
||||||
@ -684,7 +684,7 @@ int mbedtls_test_psa_exported_key_sanity_check(
|
|||||||
goto exit;
|
goto exit;
|
||||||
if( ! mbedtls_test_asn1_skip_integer( &p, end, 1, bits / 2 + 1, 0 ) )
|
if( ! mbedtls_test_asn1_skip_integer( &p, end, 1, bits / 2 + 1, 0 ) )
|
||||||
goto exit;
|
goto exit;
|
||||||
TEST_EQUAL( p, end );
|
TEST_EQUAL( p - end, 0 );
|
||||||
|
|
||||||
TEST_ASSERT( exported_length <= PSA_EXPORT_KEY_PAIR_MAX_SIZE );
|
TEST_ASSERT( exported_length <= PSA_EXPORT_KEY_PAIR_MAX_SIZE );
|
||||||
}
|
}
|
||||||
@ -716,12 +716,12 @@ int mbedtls_test_psa_exported_key_sanity_check(
|
|||||||
MBEDTLS_ASN1_SEQUENCE |
|
MBEDTLS_ASN1_SEQUENCE |
|
||||||
MBEDTLS_ASN1_CONSTRUCTED ),
|
MBEDTLS_ASN1_CONSTRUCTED ),
|
||||||
0 );
|
0 );
|
||||||
TEST_EQUAL( p + len, end );
|
TEST_EQUAL( len, end - p );
|
||||||
if( ! mbedtls_test_asn1_skip_integer( &p, end, bits, bits, 1 ) )
|
if( ! mbedtls_test_asn1_skip_integer( &p, end, bits, bits, 1 ) )
|
||||||
goto exit;
|
goto exit;
|
||||||
if( ! mbedtls_test_asn1_skip_integer( &p, end, 2, bits, 1 ) )
|
if( ! mbedtls_test_asn1_skip_integer( &p, end, 2, bits, 1 ) )
|
||||||
goto exit;
|
goto exit;
|
||||||
TEST_EQUAL( p, end );
|
TEST_EQUAL( p - end, 0 );
|
||||||
|
|
||||||
|
|
||||||
TEST_ASSERT( exported_length <=
|
TEST_ASSERT( exported_length <=
|
||||||
|
@ -778,6 +778,12 @@ int execute_tests( int argc , const char ** argv )
|
|||||||
mbedtls_fprintf( stdout, "line %d, %s",
|
mbedtls_fprintf( stdout, "line %d, %s",
|
||||||
mbedtls_test_info.line_no,
|
mbedtls_test_info.line_no,
|
||||||
mbedtls_test_info.filename );
|
mbedtls_test_info.filename );
|
||||||
|
if( mbedtls_test_info.line1[0] != 0 )
|
||||||
|
mbedtls_fprintf( stdout, "\n %s",
|
||||||
|
mbedtls_test_info.line1 );
|
||||||
|
if( mbedtls_test_info.line2[0] != 0 )
|
||||||
|
mbedtls_fprintf( stdout, "\n %s",
|
||||||
|
mbedtls_test_info.line2 );
|
||||||
}
|
}
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user