blob: 1278d95d261efbfdca5447ce1cf78b9142e6f233 [file] [log] [blame]
Azim Khan1de892b2017-06-09 15:02:36 +01001#line 2 "suites/main_test.function"
Azim Khan191e9042017-06-09 12:39:00 +01002/*
3 * *** THIS FILE HAS BEEN MACHINE GENERATED ***
4 *
5 * This file has been machine generated using the script:
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +01006 * $generator_script
Azim Khan191e9042017-06-09 12:39:00 +01007 *
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +01008 * Test file : $test_file
Azim Khan191e9042017-06-09 12:39:00 +01009 *
10 * The following files were used to create this file.
11 *
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010012 * Main code file : $test_main_file
13 * Platform code file : $test_platform_file
14 * Helper file : $test_common_helper_file
15 * Test suite file : $test_case_file
16 * Test suite data : $test_case_data_file
Azim Khan191e9042017-06-09 12:39:00 +010017 *
Azim Khan191e9042017-06-09 12:39:00 +010018 */
Paul Bakkerde56ca12013-09-15 17:05:21 +020019
Gilles Peskine31f88a22020-04-14 19:39:56 +020020#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__))
21#if !defined(_POSIX_C_SOURCE)
nia1c0c8372020-06-11 12:03:45 +010022#define _POSIX_C_SOURCE 200112L // for fileno() from <stdio.h>
Gilles Peskine31f88a22020-04-14 19:39:56 +020023#endif
24#endif
25
Azim Khan191e9042017-06-09 12:39:00 +010026#if !defined(MBEDTLS_CONFIG_FILE)
27#include <mbedtls/config.h>
28#else
29#include MBEDTLS_CONFIG_FILE
30#endif
Paul Bakker19343182013-08-16 13:31:10 +020031
Gilles Peskine2ff02c32019-11-29 12:17:21 +010032/* Test code may use deprecated identifiers only if the preprocessor symbol
33 * MBEDTLS_TEST_DEPRECATED is defined. When building tests, set
34 * MBEDTLS_TEST_DEPRECATED explicitly if MBEDTLS_DEPRECATED_WARNING is
35 * enabled but the corresponding warnings are not treated as errors.
36 */
Gilles Peskine841b14b2019-11-26 17:37:37 +010037#if !defined(MBEDTLS_DEPRECATED_REMOVED) && !defined(MBEDTLS_DEPRECATED_WARNING)
38#define MBEDTLS_TEST_DEPRECATED
39#endif
40
SimonB152ea182016-02-15 23:27:28 +000041/*----------------------------------------------------------------------------*/
Azim Khan191e9042017-06-09 12:39:00 +010042/* Common helper code */
SimonB152ea182016-02-15 23:27:28 +000043
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010044$test_common_helpers
Paul Bakkerde56ca12013-09-15 17:05:21 +020045
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010046#line $line_no "suites/main_test.function"
Azim Khan191e9042017-06-09 12:39:00 +010047
48
49/*----------------------------------------------------------------------------*/
50/* Test Suite Code */
51
52
53#define TEST_SUITE_ACTIVE
54
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010055$functions_code
Azim Khan191e9042017-06-09 12:39:00 +010056
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010057#line $line_no "suites/main_test.function"
SimonB15942102016-04-25 21:34:49 +010058
SimonB152ea182016-02-15 23:27:28 +000059
60/*----------------------------------------------------------------------------*/
61/* Test dispatch code */
62
Paul Bakker19343182013-08-16 13:31:10 +020063
Azim Khan191e9042017-06-09 12:39:00 +010064/**
65 * \brief Evaluates an expression/macro into its literal integer value.
66 * For optimizing space for embedded targets each expression/macro
67 * is identified by a unique identifier instead of string literals.
68 * Identifiers and evaluation code is generated by script:
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010069 * $generator_script
Azim Khan191e9042017-06-09 12:39:00 +010070 *
71 * \param exp_id Expression identifier.
72 * \param out_value Pointer to int to hold the integer.
73 *
74 * \return 0 if exp_id is found. 1 otherwise.
75 */
76int get_expression( int32_t exp_id, int32_t * out_value )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010077{
Azim Khanb1c2d0f2017-07-07 17:14:02 +010078 int ret = KEY_VALUE_MAPPING_FOUND;
79
80 (void) exp_id;
81 (void) out_value;
82
83 switch( exp_id )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010084 {
85$expression_code
86#line $line_no "suites/main_test.function"
Azim Khanb1c2d0f2017-07-07 17:14:02 +010087 default:
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010088 {
Azim Khanb1c2d0f2017-07-07 17:14:02 +010089 ret = KEY_VALUE_MAPPING_NOT_FOUND;
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010090 }
Azim Khanb1c2d0f2017-07-07 17:14:02 +010091 break;
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010092 }
Azim Khanb1c2d0f2017-07-07 17:14:02 +010093 return( ret );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010094}
Paul Bakker19343182013-08-16 13:31:10 +020095
Paul Bakker19343182013-08-16 13:31:10 +020096
Azim Khan191e9042017-06-09 12:39:00 +010097/**
98 * \brief Checks if the dependency i.e. the compile flag is set.
99 * For optimizing space for embedded targets each dependency
100 * is identified by a unique identifier instead of string literals.
101 * Identifiers and check code is generated by script:
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100102 * $generator_script
Azim Khan191e9042017-06-09 12:39:00 +0100103 *
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100104 * \param dep_id Dependency identifier.
Azim Khan191e9042017-06-09 12:39:00 +0100105 *
106 * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED
107 */
108int dep_check( int dep_id )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100109{
Azim Khanb1c2d0f2017-07-07 17:14:02 +0100110 int ret = DEPENDENCY_NOT_SUPPORTED;
111
112 (void) dep_id;
113
114 switch( dep_id )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100115 {
116$dep_check_code
117#line $line_no "suites/main_test.function"
Azim Khanb1c2d0f2017-07-07 17:14:02 +0100118 default:
119 break;
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100120 }
Azim Khanb1c2d0f2017-07-07 17:14:02 +0100121 return( ret );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100122}
Paul Bakker19343182013-08-16 13:31:10 +0200123
SimonB8ca7bc42016-04-17 23:24:50 +0100124
Azim Khan191e9042017-06-09 12:39:00 +0100125/**
126 * \brief Function pointer type for test function wrappers.
127 *
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100128 * A test function wrapper decodes the parameters and passes them to the
129 * underlying test function. Both the wrapper and the underlying function
130 * return void. Test wrappers assume that they are passed a suitable
131 * parameter array and do not perform any error detection.
Azim Khan191e9042017-06-09 12:39:00 +0100132 *
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100133 * \param param_array The array of parameters. Each element is a `void *`
134 * which the wrapper casts to the correct type and
135 * dereferences. Each wrapper function hard-codes the
136 * number and types of the parameters.
Azim Khan191e9042017-06-09 12:39:00 +0100137 */
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100138typedef void (*TestWrapper_t)( void **param_array );
Simon Butcher65b1fa62016-05-23 23:18:26 +0100139
Azim Khan191e9042017-06-09 12:39:00 +0100140
141/**
142 * \brief Table of test function wrappers. Used by dispatch_test().
143 * This table is populated by script:
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100144 * $generator_script
Azim Khan191e9042017-06-09 12:39:00 +0100145 *
146 */
147TestWrapper_t test_funcs[] =
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100148{
149$dispatch_code
150#line $line_no "suites/main_test.function"
151};
Azim Khan191e9042017-06-09 12:39:00 +0100152
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500153/**
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500154 * \brief Dispatches test functions based on function index.
Azim Khan191e9042017-06-09 12:39:00 +0100155 *
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100156 * \param func_idx Test function index.
157 * \param params The array of parameters to pass to the test function.
158 * It will be decoded by the #TestWrapper_t wrapper function.
Azim Khan191e9042017-06-09 12:39:00 +0100159 *
160 * \return DISPATCH_TEST_SUCCESS if found
161 * DISPATCH_TEST_FN_NOT_FOUND if not found
162 * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled.
163 */
k-stachowiak03954f22019-09-16 10:23:10 +0200164int dispatch_test( size_t func_idx, void ** params )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100165{
Azim Khan191e9042017-06-09 12:39:00 +0100166 int ret = DISPATCH_TEST_SUCCESS;
167 TestWrapper_t fp = NULL;
168
Mohammad Azim Khand2d01122018-07-18 17:48:37 +0100169 if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100170 {
Azim Khan191e9042017-06-09 12:39:00 +0100171 fp = test_funcs[func_idx];
172 if ( fp )
TRodziewicz2d0769d2021-05-27 15:24:33 +0200173 {
174 #if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG)
175 mbedtls_test_enable_insecure_external_rng( );
176 #endif
177
178 fp( params );
179
180 #if defined(MBEDTLS_TEST_MUTEX_USAGE)
181 mbedtls_test_mutex_usage_check( );
182 #endif /* MBEDTLS_TEST_MUTEX_USAGE */
183 }
Azim Khan191e9042017-06-09 12:39:00 +0100184 else
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100185 ret = DISPATCH_UNSUPPORTED_SUITE;
186 }
Azim Khan191e9042017-06-09 12:39:00 +0100187 else
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100188 {
189 ret = DISPATCH_TEST_FN_NOT_FOUND;
190 }
Azim Khan191e9042017-06-09 12:39:00 +0100191
Paul Bakker19343182013-08-16 13:31:10 +0200192 return( ret );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100193}
Paul Bakker19343182013-08-16 13:31:10 +0200194
SimonB152ea182016-02-15 23:27:28 +0000195
Azim Khan13c6bfb2017-06-15 14:45:56 +0100196/**
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100197 * \brief Checks if test function is supported in this build-time
198 * configuration.
Azim Khan13c6bfb2017-06-15 14:45:56 +0100199 *
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100200 * \param func_idx Test function index.
Azim Khan13c6bfb2017-06-15 14:45:56 +0100201 *
202 * \return DISPATCH_TEST_SUCCESS if found
203 * DISPATCH_TEST_FN_NOT_FOUND if not found
204 * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled.
205 */
k-stachowiak03954f22019-09-16 10:23:10 +0200206int check_test( size_t func_idx )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100207{
Azim Khan13c6bfb2017-06-15 14:45:56 +0100208 int ret = DISPATCH_TEST_SUCCESS;
209 TestWrapper_t fp = NULL;
210
211 if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100212 {
Azim Khan13c6bfb2017-06-15 14:45:56 +0100213 fp = test_funcs[func_idx];
214 if ( fp == NULL )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100215 ret = DISPATCH_UNSUPPORTED_SUITE;
216 }
Azim Khan13c6bfb2017-06-15 14:45:56 +0100217 else
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100218 {
219 ret = DISPATCH_TEST_FN_NOT_FOUND;
220 }
Azim Khan13c6bfb2017-06-15 14:45:56 +0100221
222 return( ret );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100223}
Azim Khan13c6bfb2017-06-15 14:45:56 +0100224
225
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100226$platform_code
Azim Khan191e9042017-06-09 12:39:00 +0100227
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100228#line $line_no "suites/main_test.function"
Azim Khan191e9042017-06-09 12:39:00 +0100229
SimonB152ea182016-02-15 23:27:28 +0000230/*----------------------------------------------------------------------------*/
231/* Main Test code */
232
SimonB15942102016-04-25 21:34:49 +0100233
Azim Khan191e9042017-06-09 12:39:00 +0100234/**
235 * \brief Program main. Invokes platform specific execute_tests().
Gilles Peskine964faeb2017-09-29 18:00:25 +0200236 *
Azim Khan191e9042017-06-09 12:39:00 +0100237 * \param argc Command line arguments count.
238 * \param argv Array of command line arguments.
239 *
240 * \return Exit code.
Gilles Peskine964faeb2017-09-29 18:00:25 +0200241 */
Azim Khan191e9042017-06-09 12:39:00 +0100242int main( int argc, const char *argv[] )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100243{
Chris Jones759e30b2021-02-09 15:30:54 +0000244#if defined(MBEDTLS_TEST_HOOKS) && defined (MBEDTLS_ERROR_C)
Chris Jones74392092021-04-01 16:00:01 +0100245 mbedtls_test_hook_error_add = &mbedtls_test_err_add_check;
Chris Jones96ae73b2021-01-08 17:04:59 +0000246#endif
247
Ronald Crone9c09f12020-06-08 16:44:58 +0200248 int ret = mbedtls_test_platform_setup();
Andrzej Kurekf13ca952018-04-18 04:14:31 -0400249 if( ret != 0 )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100250 {
Andrzej Kurekf13ca952018-04-18 04:14:31 -0400251 mbedtls_fprintf( stderr,
252 "FATAL: Failed to initialize platform - error %d\n",
253 ret );
254 return( -1 );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100255 }
Hanno Becker1cfc5dd2018-11-12 13:18:45 +0000256
Azim Khan191e9042017-06-09 12:39:00 +0100257 ret = execute_tests( argc, argv );
Ronald Crone9c09f12020-06-08 16:44:58 +0200258 mbedtls_test_platform_teardown();
Azim Khan191e9042017-06-09 12:39:00 +0100259 return( ret );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100260}