Refactor PSA test helpers: don't depend on test_info access
Refactor some PSA test helper functions and macros to avoid depending
on test_info and test_fail inside functions. These identifiers are
only defined in helpers.function, so they're only available in test
suites, and not in test helper modules (tests/src/*.c) which are also
linked into example programs.
This is in preparation for moving function definitions from
psa_crypto_helpers.h to psa_crypto_helpers.c.
No behavior change.
Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
diff --git a/tests/include/test/psa_crypto_helpers.h b/tests/include/test/psa_crypto_helpers.h
index e62bc04..361fbbb 100644
--- a/tests/include/test/psa_crypto_helpers.h
+++ b/tests/include/test/psa_crypto_helpers.h
@@ -26,52 +26,48 @@
#include <psa/crypto.h>
#include <psa_crypto_slot_management.h>
-static int mbedtls_test_helper_is_psa_pristine( int line, const char *file )
+/** Check for things that have not been cleaned up properly in the
+ * PSA subsystem.
+ *
+ * \return NULL if nothing has leaked.
+ * \return A string literal explaining what has not been cleaned up
+ * if applicable.
+ */
+static const char *mbedtls_test_helper_is_psa_leaking( void )
{
mbedtls_psa_stats_t stats;
- const char *msg = NULL;
mbedtls_psa_get_stats( &stats );
if( stats.volatile_slots != 0 )
- msg = "A volatile slot has not been closed properly.";
- else if( stats.persistent_slots != 0 )
- msg = "A persistent slot has not been closed properly.";
- else if( stats.external_slots != 0 )
- msg = "An external slot has not been closed properly.";
- else if( stats.half_filled_slots != 0 )
- msg = "A half-filled slot has not been cleared properly.";
- else if( stats.locked_slots != 0 )
- {
- msg = "Some slots are still marked as locked.";
- }
+ return( "A volatile slot has not been closed properly." );
+ if( stats.persistent_slots != 0 )
+ return( "A persistent slot has not been closed properly." );
+ if( stats.external_slots != 0 )
+ return( "An external slot has not been closed properly." );
+ if( stats.half_filled_slots != 0 )
+ return( "A half-filled slot has not been cleared properly." );
+ if( stats.locked_slots != 0 )
+ return( "Some slots are still marked as locked." );
- if( msg != NULL )
- test_fail( msg, line, file );
-
- return( msg == NULL );
+ return( NULL );
}
/** Check that no PSA Crypto key slots are in use.
*/
-#define ASSERT_PSA_PRISTINE( ) \
- do \
- { \
- if( ! mbedtls_test_helper_is_psa_pristine( __LINE__, __FILE__ ) ) \
- goto exit; \
- } \
- while( 0 )
-
-static void mbedtls_test_helper_psa_done( int line, const char *file )
-{
- (void) mbedtls_test_helper_is_psa_pristine( line, file );
- mbedtls_psa_crypto_free( );
-}
+#define ASSERT_PSA_PRISTINE( ) \
+ TEST_ASSERT( ! mbedtls_test_helper_is_psa_leaking( ) )
/** Shut down the PSA Crypto subsystem. Expect a clean shutdown, with no slots
* in use.
*/
-#define PSA_DONE( ) mbedtls_test_helper_psa_done( __LINE__, __FILE__ )
+#define PSA_DONE( ) \
+ do \
+ { \
+ ASSERT_PSA_PRISTINE( ); \
+ mbedtls_psa_crypto_free( ); \
+ } \
+ while( 0 )