crypto_se_driver: add an error injection mechanism to the mocks
diff --git a/tests/suites/test_suite_psa_crypto_se_driver_hal.data b/tests/suites/test_suite_psa_crypto_se_driver_hal.data
index d95569f..ef40e7e 100644
--- a/tests/suites/test_suite_psa_crypto_se_driver_hal.data
+++ b/tests/suites/test_suite_psa_crypto_se_driver_hal.data
@@ -28,10 +28,22 @@
register_max:
Key importing mock test
-mock_import:
+mock_import:PSA_SUCCESS:PSA_SUCCESS:PSA_SUCCESS
+
+Key importing mock test: alloc failed
+mock_import:PSA_ERROR_HARDWARE_FAILURE:PSA_SUCCESS:PSA_ERROR_HARDWARE_FAILURE
+
+Key importing mock test: import failed
+mock_import:PSA_SUCCESS:PSA_ERROR_HARDWARE_FAILURE:PSA_ERROR_HARDWARE_FAILURE
Key exporting mock test
-mock_export:
+mock_export:PSA_SUCCESS:PSA_SUCCESS
+
+Key exporting mock test: export failed
+mock_export:PSA_ERROR_HARDWARE_FAILURE:PSA_ERROR_HARDWARE_FAILURE
Key generating mock test
-mock_generate:
+mock_generate:PSA_SUCCESS:PSA_SUCCESS
+
+Key generating mock test: generating failed
+mock_generate:PSA_ERROR_HARDWARE_FAILURE:PSA_ERROR_HARDWARE_FAILURE
diff --git a/tests/suites/test_suite_psa_crypto_se_driver_hal.function b/tests/suites/test_suite_psa_crypto_se_driver_hal.function
index c4f3750..bfadf3d 100644
--- a/tests/suites/test_suite_psa_crypto_se_driver_hal.function
+++ b/tests/suites/test_suite_psa_crypto_se_driver_hal.function
@@ -20,6 +20,7 @@
size_t bits;
size_t extra_size;
size_t pubkey_out_size;
+ psa_status_t return_value;
} mock_generate_data;
static struct
@@ -31,6 +32,7 @@
psa_algorithm_t algorithm;
psa_key_usage_t usage;
size_t data_length;
+ psa_status_t return_value;
} mock_import_data;
static struct
@@ -38,17 +40,20 @@
uint16_t called;
psa_key_slot_number_t slot_number;
size_t data_size;
+ psa_status_t return_value;
} mock_export_data;
static struct
{
uint16_t called;
+ psa_status_t return_value;
} mock_allocate_data;
static struct
{
uint16_t called;
psa_key_slot_number_t slot_number;
+ psa_status_t return_value;
} mock_destroy_data;
static void mock_teardown( void )
@@ -82,7 +87,7 @@
mock_generate_data.extra_size = extra_size;
mock_generate_data.pubkey_out_size = pubkey_out_size;
- return( PSA_SUCCESS );
+ return( mock_generate_data.return_value );
}
static psa_status_t mock_import( psa_key_slot_number_t slot_number,
@@ -103,7 +108,7 @@
mock_import_data.usage = usage;
mock_import_data.data_length = data_length;
- return( PSA_SUCCESS );
+ return( mock_import_data.return_value );
}
psa_status_t mock_export( psa_key_slot_number_t slot_number,
@@ -118,7 +123,7 @@
mock_export_data.slot_number = slot_number;
mock_export_data.data_size = data_size;
- return( PSA_SUCCESS );
+ return( mock_export_data.return_value );
}
psa_status_t mock_allocate( const psa_key_attributes_t *attributes,
@@ -132,7 +137,7 @@
mock_allocate_data.called++;
*slot_number = 0;
- return( PSA_SUCCESS );
+ return( mock_allocate_data.return_value );
}
psa_status_t mock_destroy( psa_key_slot_number_t slot_number )
@@ -140,7 +145,7 @@
mock_destroy_data.called++;
mock_destroy_data.slot_number = slot_number;
- return( PSA_SUCCESS );
+ return( mock_destroy_data.return_value );
}
/* END_HEADER */
@@ -216,7 +221,9 @@
/* END_CASE */
/* BEGIN_CASE */
-void mock_import( )
+void mock_import( int mock_alloc_return_value,
+ int mock_import_return_value,
+ int expected_result)
{
psa_drv_se_t driver;
psa_drv_se_key_management_t key_management;
@@ -226,6 +233,8 @@
psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
const uint8_t key_material[3] = {0xfa, 0xca, 0xde};
+ mock_allocate_data.return_value = mock_alloc_return_value;
+ mock_import_data.return_value = mock_import_return_value;
memset( &driver, 0, sizeof( driver ) );
memset( &key_management, 0, sizeof( key_management ) );
driver.hal_version = PSA_DRV_SE_HAL_VERSION;
@@ -242,18 +251,21 @@
psa_set_key_lifetime( &attributes, lifetime );
psa_set_key_usage_flags( &attributes, PSA_KEY_USAGE_EXPORT );
psa_set_key_type( &attributes, PSA_KEY_TYPE_RAW_DATA );
- PSA_ASSERT( psa_import_key( &attributes,
+ TEST_ASSERT( psa_import_key( &attributes,
key_material, sizeof( key_material ),
- &handle ) );
+ &handle ) == expected_result );
TEST_ASSERT( mock_allocate_data.called == 1 );
- TEST_ASSERT( mock_import_data.called == 1 );
- TEST_ASSERT( mock_import_data.type == PSA_KEY_TYPE_RAW_DATA);
+ TEST_ASSERT( mock_import_data.called ==
+ (expected_result == PSA_SUCCESS? 1 : 0) );
+ TEST_ASSERT( mock_import_data.type ==
+ (expected_result == PSA_SUCCESS? PSA_KEY_TYPE_RAW_DATA : 0));
- PSA_ASSERT( psa_destroy_key( handle ) );
-
- TEST_ASSERT( mock_destroy_data.called == 1 );
-
+ if( expected_result == PSA_SUCCESS )
+ {
+ PSA_ASSERT( psa_destroy_key( handle ) );
+ TEST_ASSERT( mock_destroy_data.called == 1 );
+ }
exit:
PSA_DONE( );
mock_teardown( );
@@ -261,7 +273,7 @@
/* END_CASE */
/* BEGIN_CASE */
-void mock_export( )
+void mock_export( int mock_export_return_value, int expected_result )
{
psa_drv_se_t driver;
psa_drv_se_key_management_t key_management;
@@ -273,6 +285,7 @@
uint8_t exported[sizeof( key_material )];
size_t exported_length;
+ mock_export_data.return_value = mock_export_return_value;
memset( &driver, 0, sizeof( driver ) );
memset( &key_management, 0, sizeof( key_management ) );
driver.hal_version = PSA_DRV_SE_HAL_VERSION;
@@ -294,9 +307,9 @@
key_material, sizeof( key_material ),
&handle ) );
- PSA_ASSERT( psa_export_key( handle,
+ TEST_ASSERT( psa_export_key( handle,
exported, sizeof( exported ),
- &exported_length ) );
+ &exported_length ) == expected_result );
TEST_ASSERT( mock_export_data.called == 1 );
@@ -311,7 +324,7 @@
/* END_CASE */
/* BEGIN_CASE */
-void mock_generate( )
+void mock_generate( int mock_generate_return_value, int expected_result )
{
psa_drv_se_t driver;
psa_drv_se_key_management_t key_management;
@@ -320,6 +333,7 @@
psa_key_handle_t handle = 0;
psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
+ mock_generate_data.return_value = mock_generate_return_value;
memset( &driver, 0, sizeof( driver ) );
memset( &key_management, 0, sizeof( key_management ) );
driver.hal_version = PSA_DRV_SE_HAL_VERSION;
@@ -336,7 +350,7 @@
psa_set_key_lifetime( &attributes, lifetime );
psa_set_key_usage_flags( &attributes, PSA_KEY_USAGE_EXPORT );
psa_set_key_type( &attributes, PSA_KEY_TYPE_RAW_DATA );
- PSA_ASSERT( psa_generate_key( &attributes, &handle ) );
+ TEST_ASSERT( psa_generate_key( &attributes, &handle ) == expected_result );
TEST_ASSERT( mock_generate_data.called == 1 );
exit: