mirror of
https://github.com/yuzu-emu/mbedtls.git
synced 2024-11-23 04:45:49 +01:00
Merge pull request #4054 from chris-jones-arm/move-testing-functions
Move test infrastructure from `tests/suites/helpers.function` into `tests/src/helpers.c`
This commit is contained in:
commit
540320bf7b
@ -49,9 +49,75 @@
|
|||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
MBEDTLS_TEST_RESULT_SUCCESS = 0,
|
||||||
|
MBEDTLS_TEST_RESULT_FAILED,
|
||||||
|
MBEDTLS_TEST_RESULT_SKIPPED
|
||||||
|
} mbedtls_test_result_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
mbedtls_test_result_t result;
|
||||||
|
const char *test;
|
||||||
|
const char *filename;
|
||||||
|
int line_no;
|
||||||
|
unsigned long step;
|
||||||
|
}
|
||||||
|
mbedtls_test_info_t;
|
||||||
|
extern mbedtls_test_info_t mbedtls_test_info;
|
||||||
|
|
||||||
int mbedtls_test_platform_setup( void );
|
int mbedtls_test_platform_setup( void );
|
||||||
void mbedtls_test_platform_teardown( void );
|
void mbedtls_test_platform_teardown( void );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Record the current test case as a failure.
|
||||||
|
*
|
||||||
|
* This function can be called directly however it is usually
|
||||||
|
* called via macros such as TEST_ASSERT, TEST_EQUAL,
|
||||||
|
* PSA_ASSERT, etc...
|
||||||
|
*
|
||||||
|
* \note If the test case was already marked as failed, calling
|
||||||
|
* `mbedtls_test_fail( )` again will not overwrite any
|
||||||
|
* previous information about the failure.
|
||||||
|
*
|
||||||
|
* \param test Description of the failure or assertion that failed. This
|
||||||
|
* MUST be a string literal.
|
||||||
|
* \param line_no Line number where the failure originated.
|
||||||
|
* \param filename Filename where the failure originated.
|
||||||
|
*/
|
||||||
|
void mbedtls_test_fail( const char *test, int line_no, const char* filename );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Record the current test case as skipped.
|
||||||
|
*
|
||||||
|
* This function can be called directly however it is usually
|
||||||
|
* called via the TEST_ASSUME macro.
|
||||||
|
*
|
||||||
|
* \param test Description of the assumption that caused the test case to
|
||||||
|
* be skipped. This MUST be a string literal.
|
||||||
|
* \param line_no Line number where the test case was skipped.
|
||||||
|
* \param filename Filename where the test case was skipped.
|
||||||
|
*/
|
||||||
|
void mbedtls_test_skip( const char *test, int line_no, const char* filename );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Set the test step number for failure reports.
|
||||||
|
*
|
||||||
|
* Call this function to display "step NNN" in addition to the
|
||||||
|
* line number and file name if a test fails. Typically the "step
|
||||||
|
* number" is the index of a for loop but it can be whatever you
|
||||||
|
* want.
|
||||||
|
*
|
||||||
|
* \param step The step number to report.
|
||||||
|
*/
|
||||||
|
void mbedtls_test_set_step( unsigned long step );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Reset mbedtls_test_info to a ready/starting state.
|
||||||
|
*/
|
||||||
|
void mbedtls_test_info_reset( void );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief This function decodes the hexadecimal representation of
|
* \brief This function decodes the hexadecimal representation of
|
||||||
* data.
|
* data.
|
||||||
|
@ -44,6 +44,8 @@ static param_failed_ctx_t param_failed_ctx;
|
|||||||
static mbedtls_platform_context platform_ctx;
|
static mbedtls_platform_context platform_ctx;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
mbedtls_test_info_t mbedtls_test_info;
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
/* Helper Functions */
|
/* Helper Functions */
|
||||||
|
|
||||||
@ -77,6 +79,42 @@ static int ascii2uc(const char c, unsigned char *uc)
|
|||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mbedtls_test_fail( const char *test, int line_no, const char* filename )
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
mbedtls_test_info.result = MBEDTLS_TEST_RESULT_FAILED;
|
||||||
|
mbedtls_test_info.test = test;
|
||||||
|
mbedtls_test_info.line_no = line_no;
|
||||||
|
mbedtls_test_info.filename = filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mbedtls_test_skip( const char *test, int line_no, const char* filename )
|
||||||
|
{
|
||||||
|
mbedtls_test_info.result = MBEDTLS_TEST_RESULT_SKIPPED;
|
||||||
|
mbedtls_test_info.test = test;
|
||||||
|
mbedtls_test_info.line_no = line_no;
|
||||||
|
mbedtls_test_info.filename = filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mbedtls_test_set_step( unsigned long step )
|
||||||
|
{
|
||||||
|
mbedtls_test_info.step = step;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mbedtls_test_info_reset( void )
|
||||||
|
{
|
||||||
|
mbedtls_test_info.result = MBEDTLS_TEST_RESULT_SUCCESS;
|
||||||
|
mbedtls_test_info.step = (unsigned long)( -1 );
|
||||||
|
mbedtls_test_info.test = 0;
|
||||||
|
mbedtls_test_info.line_no = 0;
|
||||||
|
mbedtls_test_info.filename = 0;
|
||||||
|
}
|
||||||
|
|
||||||
int mbedtls_test_unhexify( unsigned char *obuf,
|
int mbedtls_test_unhexify( unsigned char *obuf,
|
||||||
size_t obufmax,
|
size_t obufmax,
|
||||||
const char *ibuf,
|
const char *ibuf,
|
||||||
|
@ -108,7 +108,7 @@ typedef struct data_tag
|
|||||||
do { \
|
do { \
|
||||||
if( ! (TEST) ) \
|
if( ! (TEST) ) \
|
||||||
{ \
|
{ \
|
||||||
test_fail( #TEST, __LINE__, __FILE__ ); \
|
mbedtls_test_fail( #TEST, __LINE__, __FILE__ ); \
|
||||||
goto exit; \
|
goto exit; \
|
||||||
} \
|
} \
|
||||||
} while( 0 )
|
} while( 0 )
|
||||||
@ -201,13 +201,13 @@ typedef struct data_tag
|
|||||||
*
|
*
|
||||||
* \param TEST The test expression to be tested.
|
* \param TEST The test expression to be tested.
|
||||||
*/
|
*/
|
||||||
#define TEST_ASSUME( TEST ) \
|
#define TEST_ASSUME( TEST ) \
|
||||||
do { \
|
do { \
|
||||||
if( ! (TEST) ) \
|
if( ! (TEST) ) \
|
||||||
{ \
|
{ \
|
||||||
test_skip( #TEST, __LINE__, __FILE__ ); \
|
mbedtls_test_skip( #TEST, __LINE__, __FILE__ ); \
|
||||||
goto exit; \
|
goto exit; \
|
||||||
} \
|
} \
|
||||||
} while( 0 )
|
} while( 0 )
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT)
|
#if defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT)
|
||||||
@ -237,7 +237,7 @@ typedef struct data_tag
|
|||||||
if( ( ( TEST ) != ( PARAM_ERR_VALUE ) ) || \
|
if( ( ( TEST ) != ( PARAM_ERR_VALUE ) ) || \
|
||||||
( mbedtls_test_param_failed_check_expected_call( ) != 0 ) ) \
|
( mbedtls_test_param_failed_check_expected_call( ) != 0 ) ) \
|
||||||
{ \
|
{ \
|
||||||
test_fail( #TEST, __LINE__, __FILE__ ); \
|
mbedtls_test_fail( #TEST, __LINE__, __FILE__ ); \
|
||||||
goto exit; \
|
goto exit; \
|
||||||
} \
|
} \
|
||||||
mbedtls_test_param_failed_check_expected_call( ); \
|
mbedtls_test_param_failed_check_expected_call( ); \
|
||||||
@ -270,7 +270,7 @@ typedef struct data_tag
|
|||||||
if( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) \
|
if( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) \
|
||||||
{ \
|
{ \
|
||||||
TEST; \
|
TEST; \
|
||||||
test_fail( #TEST, __LINE__, __FILE__ ); \
|
mbedtls_test_fail( #TEST, __LINE__, __FILE__ ); \
|
||||||
goto exit; \
|
goto exit; \
|
||||||
} \
|
} \
|
||||||
mbedtls_test_param_failed_reset_state( ); \
|
mbedtls_test_param_failed_reset_state( ); \
|
||||||
@ -346,24 +346,6 @@ typedef struct data_tag
|
|||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
/* Global variables */
|
/* Global variables */
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
TEST_RESULT_SUCCESS = 0,
|
|
||||||
TEST_RESULT_FAILED,
|
|
||||||
TEST_RESULT_SKIPPED
|
|
||||||
} test_result_t;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
test_result_t result;
|
|
||||||
const char *test;
|
|
||||||
const char *filename;
|
|
||||||
int line_no;
|
|
||||||
unsigned long step;
|
|
||||||
}
|
|
||||||
test_info_t;
|
|
||||||
static test_info_t test_info;
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS)
|
#if defined(MBEDTLS_CHECK_PARAMS)
|
||||||
jmp_buf jmp_tmp;
|
jmp_buf jmp_tmp;
|
||||||
#endif
|
#endif
|
||||||
@ -386,41 +368,6 @@ jmp_buf jmp_tmp;
|
|||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
/* Helper Functions */
|
/* Helper Functions */
|
||||||
|
|
||||||
/** Set the test step number for failure reports.
|
|
||||||
*
|
|
||||||
* Call this function to display "step NNN" in addition to the line number
|
|
||||||
* and file name if a test fails. Typically the "step number" is the index
|
|
||||||
* of a for loop but it can be whatever you want.
|
|
||||||
*
|
|
||||||
* \param step The step number to report.
|
|
||||||
*/
|
|
||||||
void test_set_step( unsigned long step )
|
|
||||||
{
|
|
||||||
test_info.step = step;
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_fail( const char *test, int line_no, const char* filename )
|
|
||||||
{
|
|
||||||
if( test_info.result == TEST_RESULT_FAILED )
|
|
||||||
{
|
|
||||||
/* We've already recorded the test as having failed. Don't
|
|
||||||
* overwrite any previous information about the failure. */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
test_info.result = TEST_RESULT_FAILED;
|
|
||||||
test_info.test = test;
|
|
||||||
test_info.line_no = line_no;
|
|
||||||
test_info.filename = filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
void test_skip( const char *test, int line_no, const char* filename )
|
|
||||||
{
|
|
||||||
test_info.result = TEST_RESULT_SKIPPED;
|
|
||||||
test_info.test = test;
|
|
||||||
test_info.line_no = line_no;
|
|
||||||
test_info.filename = filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_PSA_CRYPTO_C)
|
#if defined(MBEDTLS_PSA_CRYPTO_C)
|
||||||
/** Check that no PSA Crypto key slots are in use.
|
/** Check that no PSA Crypto key slots are in use.
|
||||||
*
|
*
|
||||||
@ -435,7 +382,7 @@ int test_fail_if_psa_leaking( int line_no, const char *filename )
|
|||||||
return 0;
|
return 0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
test_fail( msg, line_no, filename );
|
mbedtls_test_fail( msg, line_no, filename );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -428,15 +428,15 @@ static void write_outcome_entry( FILE *outcome_file,
|
|||||||
* \param unmet_dependencies The array of unmet dependencies.
|
* \param unmet_dependencies The array of unmet dependencies.
|
||||||
* \param missing_unmet_dependencies Non-zero if there was a problem tracking
|
* \param missing_unmet_dependencies Non-zero if there was a problem tracking
|
||||||
* all unmet dependencies, 0 otherwise.
|
* all unmet dependencies, 0 otherwise.
|
||||||
* \param ret The test dispatch status (DISPATCH_xxx).
|
* \param ret The test dispatch status (DISPATCH_xxx).
|
||||||
* \param test_info A pointer to the test info structure.
|
* \param mbedtls_test_info A pointer to the test info structure.
|
||||||
*/
|
*/
|
||||||
static void write_outcome_result( FILE *outcome_file,
|
static void write_outcome_result( FILE *outcome_file,
|
||||||
size_t unmet_dep_count,
|
size_t unmet_dep_count,
|
||||||
int unmet_dependencies[],
|
int unmet_dependencies[],
|
||||||
int missing_unmet_dependencies,
|
int missing_unmet_dependencies,
|
||||||
int ret,
|
int ret,
|
||||||
const test_info_t *info )
|
const mbedtls_test_info_t *info )
|
||||||
{
|
{
|
||||||
if( outcome_file == NULL )
|
if( outcome_file == NULL )
|
||||||
return;
|
return;
|
||||||
@ -462,10 +462,10 @@ static void write_outcome_result( FILE *outcome_file,
|
|||||||
}
|
}
|
||||||
switch( info->result )
|
switch( info->result )
|
||||||
{
|
{
|
||||||
case TEST_RESULT_SUCCESS:
|
case MBEDTLS_TEST_RESULT_SUCCESS:
|
||||||
mbedtls_fprintf( outcome_file, "PASS;" );
|
mbedtls_fprintf( outcome_file, "PASS;" );
|
||||||
break;
|
break;
|
||||||
case TEST_RESULT_SKIPPED:
|
case MBEDTLS_TEST_RESULT_SKIPPED:
|
||||||
mbedtls_fprintf( outcome_file, "SKIP;Runtime skip" );
|
mbedtls_fprintf( outcome_file, "SKIP;Runtime skip" );
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -601,7 +601,7 @@ int execute_tests( int argc , const char ** argv )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize the struct that holds information about the last test */
|
/* Initialize the struct that holds information about the last test */
|
||||||
memset( &test_info, 0, sizeof( test_info ) );
|
mbedtls_test_info_reset( );
|
||||||
|
|
||||||
/* Now begin to execute the tests in the testfiles */
|
/* Now begin to execute the tests in the testfiles */
|
||||||
for ( testfile_index = 0;
|
for ( testfile_index = 0;
|
||||||
@ -638,7 +638,8 @@ int execute_tests( int argc , const char ** argv )
|
|||||||
if( ( ret = get_line( file, buf, sizeof(buf) ) ) != 0 )
|
if( ( ret = get_line( file, buf, sizeof(buf) ) ) != 0 )
|
||||||
break;
|
break;
|
||||||
mbedtls_fprintf( stdout, "%s%.66s",
|
mbedtls_fprintf( stdout, "%s%.66s",
|
||||||
test_info.result == TEST_RESULT_FAILED ? "\n" : "", buf );
|
mbedtls_test_info.result == MBEDTLS_TEST_RESULT_FAILED ?
|
||||||
|
"\n" : "", buf );
|
||||||
mbedtls_fprintf( stdout, " " );
|
mbedtls_fprintf( stdout, " " );
|
||||||
for( i = strlen( buf ) + 1; i < 67; i++ )
|
for( i = strlen( buf ) + 1; i < 67; i++ )
|
||||||
mbedtls_fprintf( stdout, "." );
|
mbedtls_fprintf( stdout, "." );
|
||||||
@ -682,8 +683,7 @@ int execute_tests( int argc , const char ** argv )
|
|||||||
// If there are no unmet dependencies execute the test
|
// If there are no unmet dependencies execute the test
|
||||||
if( unmet_dep_count == 0 )
|
if( unmet_dep_count == 0 )
|
||||||
{
|
{
|
||||||
test_info.result = TEST_RESULT_SUCCESS;
|
mbedtls_test_info_reset( );
|
||||||
test_info.step = (unsigned long)( -1 );
|
|
||||||
|
|
||||||
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
|
#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
|
||||||
/* Suppress all output from the library unless we're verbose
|
/* Suppress all output from the library unless we're verbose
|
||||||
@ -723,7 +723,7 @@ int execute_tests( int argc , const char ** argv )
|
|||||||
write_outcome_result( outcome_file,
|
write_outcome_result( outcome_file,
|
||||||
unmet_dep_count, unmet_dependencies,
|
unmet_dep_count, unmet_dependencies,
|
||||||
missing_unmet_dependencies,
|
missing_unmet_dependencies,
|
||||||
ret, &test_info );
|
ret, &mbedtls_test_info );
|
||||||
if( unmet_dep_count > 0 || ret == DISPATCH_UNSUPPORTED_SUITE )
|
if( unmet_dep_count > 0 || ret == DISPATCH_UNSUPPORTED_SUITE )
|
||||||
{
|
{
|
||||||
total_skipped++;
|
total_skipped++;
|
||||||
@ -753,11 +753,11 @@ int execute_tests( int argc , const char ** argv )
|
|||||||
}
|
}
|
||||||
else if( ret == DISPATCH_TEST_SUCCESS )
|
else if( ret == DISPATCH_TEST_SUCCESS )
|
||||||
{
|
{
|
||||||
if( test_info.result == TEST_RESULT_SUCCESS )
|
if( mbedtls_test_info.result == MBEDTLS_TEST_RESULT_SUCCESS )
|
||||||
{
|
{
|
||||||
mbedtls_fprintf( stdout, "PASS\n" );
|
mbedtls_fprintf( stdout, "PASS\n" );
|
||||||
}
|
}
|
||||||
else if( test_info.result == TEST_RESULT_SKIPPED )
|
else if( mbedtls_test_info.result == MBEDTLS_TEST_RESULT_SKIPPED )
|
||||||
{
|
{
|
||||||
mbedtls_fprintf( stdout, "----\n" );
|
mbedtls_fprintf( stdout, "----\n" );
|
||||||
total_skipped++;
|
total_skipped++;
|
||||||
@ -767,14 +767,15 @@ int execute_tests( int argc , const char ** argv )
|
|||||||
total_errors++;
|
total_errors++;
|
||||||
mbedtls_fprintf( stdout, "FAILED\n" );
|
mbedtls_fprintf( stdout, "FAILED\n" );
|
||||||
mbedtls_fprintf( stdout, " %s\n at ",
|
mbedtls_fprintf( stdout, " %s\n at ",
|
||||||
test_info.test );
|
mbedtls_test_info.test );
|
||||||
if( test_info.step != (unsigned long)( -1 ) )
|
if( mbedtls_test_info.step != (unsigned long)( -1 ) )
|
||||||
{
|
{
|
||||||
mbedtls_fprintf( stdout, "step %lu, ",
|
mbedtls_fprintf( stdout, "step %lu, ",
|
||||||
test_info.step );
|
mbedtls_test_info.step );
|
||||||
}
|
}
|
||||||
mbedtls_fprintf( stdout, "line %d, %s",
|
mbedtls_fprintf( stdout, "line %d, %s",
|
||||||
test_info.line_no, test_info.filename );
|
mbedtls_test_info.line_no,
|
||||||
|
mbedtls_test_info.filename );
|
||||||
}
|
}
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
}
|
}
|
||||||
|
@ -179,10 +179,9 @@ void execute_function_ptr(TestWrapper_t fp, void **params)
|
|||||||
{
|
{
|
||||||
/* Unexpected parameter validation error */
|
/* Unexpected parameter validation error */
|
||||||
mbedtls_test_param_failed_get_location_record( &location_record );
|
mbedtls_test_param_failed_get_location_record( &location_record );
|
||||||
test_fail( location_record.failure_condition,
|
mbedtls_test_fail( location_record.failure_condition,
|
||||||
location_record.line,
|
location_record.line,
|
||||||
location_record.file );
|
location_record.file );
|
||||||
test_info.result = TEST_RESULT_FAILED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mbedtls_test_param_failed_reset_state( );
|
mbedtls_test_param_failed_reset_state( );
|
||||||
|
@ -384,8 +384,7 @@ int execute_tests( int args, const char ** argv )
|
|||||||
while ( 1 )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
ret = 0;
|
ret = 0;
|
||||||
test_info.result = TEST_RESULT_SUCCESS;
|
mbedtls_test_info_reset( );
|
||||||
test_info.step = (unsigned long)( -1 );
|
|
||||||
data_len = 0;
|
data_len = 0;
|
||||||
|
|
||||||
data = receive_data( &data_len );
|
data = receive_data( &data_len );
|
||||||
@ -443,7 +442,7 @@ int execute_tests( int args, const char ** argv )
|
|||||||
if ( ret )
|
if ( ret )
|
||||||
send_failure( ret );
|
send_failure( ret );
|
||||||
else
|
else
|
||||||
send_status( test_info.result );
|
send_status( mbedtls_test_info.result );
|
||||||
}
|
}
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ int get_len_step( const data_t *input, size_t buffer_size,
|
|||||||
size_t parsed_length;
|
size_t parsed_length;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
test_set_step( buffer_size );
|
mbedtls_test_set_step( buffer_size );
|
||||||
/* Allocate a new buffer of exactly the length to parse each time.
|
/* Allocate a new buffer of exactly the length to parse each time.
|
||||||
* This gives memory sanitizers a chance to catch buffer overreads. */
|
* This gives memory sanitizers a chance to catch buffer overreads. */
|
||||||
if( buffer_size == 0 )
|
if( buffer_size == 0 )
|
||||||
@ -198,7 +198,7 @@ static int traverse_callback( void *ctx, int tag,
|
|||||||
|
|
||||||
TEST_ASSERT( content > state->input_start );
|
TEST_ASSERT( content > state->input_start );
|
||||||
offset = content - state->input_start;
|
offset = content - state->input_start;
|
||||||
test_set_step( offset );
|
mbedtls_test_set_step( offset );
|
||||||
|
|
||||||
if( *rest == 0 )
|
if( *rest == 0 )
|
||||||
return( RET_TRAVERSE_STOP );
|
return( RET_TRAVERSE_STOP );
|
||||||
@ -252,7 +252,7 @@ void parse_prefixes( const data_t *input,
|
|||||||
*/
|
*/
|
||||||
for( buffer_size = 1; buffer_size <= input->len + 1; buffer_size++ )
|
for( buffer_size = 1; buffer_size <= input->len + 1; buffer_size++ )
|
||||||
{
|
{
|
||||||
test_set_step( buffer_size );
|
mbedtls_test_set_step( buffer_size );
|
||||||
/* Allocate a new buffer of exactly the length to parse each time.
|
/* Allocate a new buffer of exactly the length to parse each time.
|
||||||
* This gives memory sanitizers a chance to catch buffer overreads. */
|
* This gives memory sanitizers a chance to catch buffer overreads. */
|
||||||
ASSERT_ALLOC( buf, buffer_size );
|
ASSERT_ALLOC( buf, buffer_size );
|
||||||
@ -594,6 +594,7 @@ void get_sequence_of( const data_t *input, int tag,
|
|||||||
unsigned char *p = input->x;
|
unsigned char *p = input->x;
|
||||||
const char *rest = description;
|
const char *rest = description;
|
||||||
unsigned long n;
|
unsigned long n;
|
||||||
|
unsigned int step = 0;
|
||||||
|
|
||||||
TEST_EQUAL( mbedtls_asn1_get_sequence_of( &p, input->x + input->len,
|
TEST_EQUAL( mbedtls_asn1_get_sequence_of( &p, input->x + input->len,
|
||||||
&head, tag ),
|
&head, tag ),
|
||||||
@ -614,7 +615,7 @@ void get_sequence_of( const data_t *input, int tag,
|
|||||||
cur = &head;
|
cur = &head;
|
||||||
while( *rest )
|
while( *rest )
|
||||||
{
|
{
|
||||||
++test_info.step;
|
mbedtls_test_set_step( step );
|
||||||
TEST_ASSERT( cur != NULL );
|
TEST_ASSERT( cur != NULL );
|
||||||
TEST_EQUAL( cur->buf.tag, tag );
|
TEST_EQUAL( cur->buf.tag, tag );
|
||||||
n = strtoul( rest, (char **) &rest, 0 );
|
n = strtoul( rest, (char **) &rest, 0 );
|
||||||
@ -625,6 +626,7 @@ void get_sequence_of( const data_t *input, int tag,
|
|||||||
if( *rest )
|
if( *rest )
|
||||||
++rest;
|
++rest;
|
||||||
cur = cur->next;
|
cur = cur->next;
|
||||||
|
++step;
|
||||||
}
|
}
|
||||||
TEST_ASSERT( cur == NULL );
|
TEST_ASSERT( cur == NULL );
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ typedef struct
|
|||||||
|
|
||||||
int generic_write_start_step( generic_write_data_t *data )
|
int generic_write_start_step( generic_write_data_t *data )
|
||||||
{
|
{
|
||||||
test_set_step( data->size );
|
mbedtls_test_set_step( data->size );
|
||||||
ASSERT_ALLOC( data->output, data->size == 0 ? 1 : data->size );
|
ASSERT_ALLOC( data->output, data->size == 0 ? 1 : data->size );
|
||||||
data->end = data->output + data->size;
|
data->end = data->output + data->size;
|
||||||
data->p = data->end;
|
data->p = data->end;
|
||||||
|
@ -532,7 +532,8 @@ static int exercise_signature_key( mbedtls_svc_key_id_t key,
|
|||||||
hash_alg = KNOWN_SUPPORTED_HASH_ALG;
|
hash_alg = KNOWN_SUPPORTED_HASH_ALG;
|
||||||
alg ^= PSA_ALG_ANY_HASH ^ hash_alg;
|
alg ^= PSA_ALG_ANY_HASH ^ hash_alg;
|
||||||
#else
|
#else
|
||||||
test_fail( "No hash algorithm for hash-and-sign testing", __LINE__, __FILE__ );
|
mbedtls_test_fail( "No hash algorithm for hash-and-sign testing",
|
||||||
|
__LINE__, __FILE__ );
|
||||||
return( 1 );
|
return( 1 );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -992,7 +993,7 @@ static int exported_key_sanity_check( psa_key_type_t type, size_t bits,
|
|||||||
mbedtls_snprintf( message, sizeof( message ),
|
mbedtls_snprintf( message, sizeof( message ),
|
||||||
"No sanity check for public key type=0x%08lx",
|
"No sanity check for public key type=0x%08lx",
|
||||||
(unsigned long) type );
|
(unsigned long) type );
|
||||||
test_fail( message, __LINE__, __FILE__ );
|
mbedtls_test_fail( message, __LINE__, __FILE__ );
|
||||||
(void) p;
|
(void) p;
|
||||||
(void) end;
|
(void) end;
|
||||||
return( 0 );
|
return( 0 );
|
||||||
@ -1115,8 +1116,8 @@ exit:
|
|||||||
* asymmetric, also check \p psa_export_public_key.
|
* asymmetric, also check \p psa_export_public_key.
|
||||||
*
|
*
|
||||||
* If the key fails the tests, this function calls the test framework's
|
* If the key fails the tests, this function calls the test framework's
|
||||||
* `test_fail` function and returns false. Otherwise this function returns
|
* `mbedtls_test_fail` function and returns false. Otherwise this function
|
||||||
* true. Therefore it should be used as follows:
|
* returns true. Therefore it should be used as follows:
|
||||||
* ```
|
* ```
|
||||||
* if( ! exercise_key( ... ) ) goto exit;
|
* if( ! exercise_key( ... ) ) goto exit;
|
||||||
* ```
|
* ```
|
||||||
@ -1162,7 +1163,7 @@ static int exercise_key( mbedtls_svc_key_id_t key,
|
|||||||
mbedtls_snprintf( message, sizeof( message ),
|
mbedtls_snprintf( message, sizeof( message ),
|
||||||
"No code to exercise alg=0x%08lx",
|
"No code to exercise alg=0x%08lx",
|
||||||
(unsigned long) alg );
|
(unsigned long) alg );
|
||||||
test_fail( message, __LINE__, __FILE__ );
|
mbedtls_test_fail( message, __LINE__, __FILE__ );
|
||||||
ok = 0;
|
ok = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2677,7 +2678,7 @@ void hash_compute_compare( int alg_arg, data_t *input,
|
|||||||
/* Compare with corrupted value */
|
/* Compare with corrupted value */
|
||||||
for( i = 0; i < output_length; i++ )
|
for( i = 0; i < output_length; i++ )
|
||||||
{
|
{
|
||||||
test_set_step( i );
|
mbedtls_test_set_step( i );
|
||||||
output[i] ^= 1;
|
output[i] ^= 1;
|
||||||
TEST_EQUAL( psa_hash_compare( alg, input->x, input->len,
|
TEST_EQUAL( psa_hash_compare( alg, input->x, input->len,
|
||||||
output, output_length ),
|
output, output_length ),
|
||||||
@ -3152,7 +3153,7 @@ void mac_sign( int key_type_arg,
|
|||||||
( output_size >= expected_mac->len ? PSA_SUCCESS :
|
( output_size >= expected_mac->len ? PSA_SUCCESS :
|
||||||
PSA_ERROR_BUFFER_TOO_SMALL );
|
PSA_ERROR_BUFFER_TOO_SMALL );
|
||||||
|
|
||||||
test_set_step( output_size );
|
mbedtls_test_set_step( output_size );
|
||||||
ASSERT_ALLOC( actual_mac, output_size );
|
ASSERT_ALLOC( actual_mac, output_size );
|
||||||
|
|
||||||
/* Calculate the MAC. */
|
/* Calculate the MAC. */
|
||||||
@ -3238,7 +3239,7 @@ void mac_verify( int key_type_arg,
|
|||||||
/* Test changing one byte. */
|
/* Test changing one byte. */
|
||||||
for( size_t i = 0; i < expected_mac->len; i++ )
|
for( size_t i = 0; i < expected_mac->len; i++ )
|
||||||
{
|
{
|
||||||
test_set_step( i );
|
mbedtls_test_set_step( i );
|
||||||
perturbed_mac[i] ^= 1;
|
perturbed_mac[i] ^= 1;
|
||||||
PSA_ASSERT( psa_mac_verify_setup( &operation, key, alg ) );
|
PSA_ASSERT( psa_mac_verify_setup( &operation, key, alg ) );
|
||||||
PSA_ASSERT( psa_mac_update( &operation,
|
PSA_ASSERT( psa_mac_update( &operation,
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
do { \
|
do { \
|
||||||
if( ! (TEST) ) \
|
if( ! (TEST) ) \
|
||||||
{ \
|
{ \
|
||||||
test_fail( #TEST, __LINE__, __FILE__ ); \
|
mbedtls_test_fail( #TEST, __LINE__, __FILE__ ); \
|
||||||
return( PSA_ERROR_DETECTED_BY_DRIVER ); \
|
return( PSA_ERROR_DETECTED_BY_DRIVER ); \
|
||||||
} \
|
} \
|
||||||
} while( 0 )
|
} while( 0 )
|
||||||
@ -61,7 +61,7 @@
|
|||||||
do { \
|
do { \
|
||||||
if( ! (TEST) ) \
|
if( ! (TEST) ) \
|
||||||
{ \
|
{ \
|
||||||
test_fail( #TEST, __LINE__, __FILE__ ); \
|
mbedtls_test_fail( #TEST, __LINE__, __FILE__ ); \
|
||||||
status = PSA_ERROR_DETECTED_BY_DRIVER; \
|
status = PSA_ERROR_DETECTED_BY_DRIVER; \
|
||||||
goto exit; \
|
goto exit; \
|
||||||
} \
|
} \
|
||||||
@ -72,10 +72,10 @@
|
|||||||
* Run the code \p expr. If this returns \p expected_status,
|
* Run the code \p expr. If this returns \p expected_status,
|
||||||
* do nothing. If this returns #PSA_ERROR_DETECTED_BY_DRIVER,
|
* do nothing. If this returns #PSA_ERROR_DETECTED_BY_DRIVER,
|
||||||
* jump directly to the `exit` label. If this returns any other
|
* jump directly to the `exit` label. If this returns any other
|
||||||
* status, call test_fail() then jump to `exit`.
|
* status, call mbedtls_test_fail() then jump to `exit`.
|
||||||
*
|
*
|
||||||
* The special case for #PSA_ERROR_DETECTED_BY_DRIVER is because in this
|
* The special case for #PSA_ERROR_DETECTED_BY_DRIVER is because in this
|
||||||
* case, the test driver code is expected to have called test_fail()
|
* case, the test driver code is expected to have called mbedtls_test_fail()
|
||||||
* already, so we make sure not to overwrite the failure information.
|
* already, so we make sure not to overwrite the failure information.
|
||||||
*/
|
*/
|
||||||
#define PSA_ASSERT_VIA_DRIVER( expr, expected_status ) \
|
#define PSA_ASSERT_VIA_DRIVER( expr, expected_status ) \
|
||||||
@ -85,7 +85,7 @@
|
|||||||
goto exit; \
|
goto exit; \
|
||||||
if( PSA_ASSERT_VIA_DRIVER_status != ( expected_status ) ) \
|
if( PSA_ASSERT_VIA_DRIVER_status != ( expected_status ) ) \
|
||||||
{ \
|
{ \
|
||||||
test_fail( #expr, __LINE__, __FILE__ ); \
|
mbedtls_test_fail( #expr, __LINE__, __FILE__ ); \
|
||||||
goto exit; \
|
goto exit; \
|
||||||
} \
|
} \
|
||||||
} while( 0 )
|
} while( 0 )
|
||||||
|
@ -3609,7 +3609,7 @@ void ssl_decrypt_non_etm_cbc( int cipher_type, int hash_id, int trunc_hmac,
|
|||||||
*/
|
*/
|
||||||
for( i = block_size; i < buflen; i++ )
|
for( i = block_size; i < buflen; i++ )
|
||||||
{
|
{
|
||||||
test_set_step( i );
|
mbedtls_test_set_step( i );
|
||||||
|
|
||||||
/* Restore correct pre-encryption record */
|
/* Restore correct pre-encryption record */
|
||||||
rec = rec_save;
|
rec = rec_save;
|
||||||
@ -3646,7 +3646,7 @@ void ssl_decrypt_non_etm_cbc( int cipher_type, int hash_id, int trunc_hmac,
|
|||||||
*/
|
*/
|
||||||
for( i = padlen; i <= pad_max_len; i++ )
|
for( i = padlen; i <= pad_max_len; i++ )
|
||||||
{
|
{
|
||||||
test_set_step( i );
|
mbedtls_test_set_step( i );
|
||||||
|
|
||||||
/* Restore correct pre-encryption record */
|
/* Restore correct pre-encryption record */
|
||||||
rec = rec_save;
|
rec = rec_save;
|
||||||
@ -4466,7 +4466,7 @@ void ssl_cf_hmac( int hash )
|
|||||||
*/
|
*/
|
||||||
for( max_in_len = 0; max_in_len <= 255 + block_size; max_in_len++ )
|
for( max_in_len = 0; max_in_len <= 255 + block_size; max_in_len++ )
|
||||||
{
|
{
|
||||||
test_set_step( max_in_len * 10000 );
|
mbedtls_test_set_step( max_in_len * 10000 );
|
||||||
|
|
||||||
/* Use allocated in buffer to catch overreads */
|
/* Use allocated in buffer to catch overreads */
|
||||||
ASSERT_ALLOC( data, max_in_len );
|
ASSERT_ALLOC( data, max_in_len );
|
||||||
@ -4474,7 +4474,7 @@ void ssl_cf_hmac( int hash )
|
|||||||
min_in_len = max_in_len > 255 ? max_in_len - 255 : 0;
|
min_in_len = max_in_len > 255 ? max_in_len - 255 : 0;
|
||||||
for( in_len = min_in_len; in_len <= max_in_len; in_len++ )
|
for( in_len = min_in_len; in_len <= max_in_len; in_len++ )
|
||||||
{
|
{
|
||||||
test_set_step( max_in_len * 10000 + in_len );
|
mbedtls_test_set_step( max_in_len * 10000 + in_len );
|
||||||
|
|
||||||
/* Set up dummy data and add_data */
|
/* Set up dummy data and add_data */
|
||||||
rec_num++;
|
rec_num++;
|
||||||
@ -4531,7 +4531,7 @@ void ssl_cf_memcpy_offset( int offset_min, int offset_max, int len )
|
|||||||
|
|
||||||
for( secret = offset_min; secret <= (size_t) offset_max; secret++ )
|
for( secret = offset_min; secret <= (size_t) offset_max; secret++ )
|
||||||
{
|
{
|
||||||
test_set_step( (int) secret );
|
mbedtls_test_set_step( (int) secret );
|
||||||
|
|
||||||
TEST_CF_SECRET( &secret, sizeof( secret ) );
|
TEST_CF_SECRET( &secret, sizeof( secret ) );
|
||||||
mbedtls_ssl_cf_memcpy_offset( dst, src, secret,
|
mbedtls_ssl_cf_memcpy_offset( dst, src, secret,
|
||||||
|
Loading…
Reference in New Issue
Block a user