blob: 491de6d2fb7b6062a0a1fc3a6bae88eaeecf1494 [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
Hanno Becker1cfc5dd2018-11-12 13:18:45 +000032#if defined(MBEDTLS_USE_PSA_CRYPTO)
33#include "psa/crypto.h"
34#endif /* MBEDTLS_USE_PSA_CRYPTO */
SimonB152ea182016-02-15 23:27:28 +000035
Chris Jones808b7c82021-01-13 12:33:36 +000036#if defined(MBEDTLS_TEST_HOOKS)
Chris Jonesef180af2021-01-26 17:50:48 +000037#include "mbedtls/error.h"
Chris Jones808b7c82021-01-13 12:33:36 +000038#endif
39
Gilles Peskine2ff02c32019-11-29 12:17:21 +010040/* Test code may use deprecated identifiers only if the preprocessor symbol
41 * MBEDTLS_TEST_DEPRECATED is defined. When building tests, set
42 * MBEDTLS_TEST_DEPRECATED explicitly if MBEDTLS_DEPRECATED_WARNING is
43 * enabled but the corresponding warnings are not treated as errors.
44 */
Gilles Peskine841b14b2019-11-26 17:37:37 +010045#if !defined(MBEDTLS_DEPRECATED_REMOVED) && !defined(MBEDTLS_DEPRECATED_WARNING)
46#define MBEDTLS_TEST_DEPRECATED
47#endif
48
SimonB152ea182016-02-15 23:27:28 +000049/*----------------------------------------------------------------------------*/
Azim Khan191e9042017-06-09 12:39:00 +010050/* Common helper code */
SimonB152ea182016-02-15 23:27:28 +000051
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010052$test_common_helpers
Paul Bakkerde56ca12013-09-15 17:05:21 +020053
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010054#line $line_no "suites/main_test.function"
Azim Khan191e9042017-06-09 12:39:00 +010055
56
57/*----------------------------------------------------------------------------*/
58/* Test Suite Code */
59
60
61#define TEST_SUITE_ACTIVE
62
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010063$functions_code
Azim Khan191e9042017-06-09 12:39:00 +010064
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010065#line $line_no "suites/main_test.function"
SimonB15942102016-04-25 21:34:49 +010066
SimonB152ea182016-02-15 23:27:28 +000067
68/*----------------------------------------------------------------------------*/
69/* Test dispatch code */
70
Paul Bakker19343182013-08-16 13:31:10 +020071
Azim Khan191e9042017-06-09 12:39:00 +010072/**
73 * \brief Evaluates an expression/macro into its literal integer value.
74 * For optimizing space for embedded targets each expression/macro
75 * is identified by a unique identifier instead of string literals.
76 * Identifiers and evaluation code is generated by script:
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010077 * $generator_script
Azim Khan191e9042017-06-09 12:39:00 +010078 *
79 * \param exp_id Expression identifier.
80 * \param out_value Pointer to int to hold the integer.
81 *
82 * \return 0 if exp_id is found. 1 otherwise.
83 */
84int get_expression( int32_t exp_id, int32_t * out_value )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010085{
Azim Khanb1c2d0f2017-07-07 17:14:02 +010086 int ret = KEY_VALUE_MAPPING_FOUND;
87
88 (void) exp_id;
89 (void) out_value;
90
91 switch( exp_id )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010092 {
93$expression_code
94#line $line_no "suites/main_test.function"
Azim Khanb1c2d0f2017-07-07 17:14:02 +010095 default:
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010096 {
Azim Khanb1c2d0f2017-07-07 17:14:02 +010097 ret = KEY_VALUE_MAPPING_NOT_FOUND;
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +010098 }
Azim Khanb1c2d0f2017-07-07 17:14:02 +010099 break;
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100100 }
Azim Khanb1c2d0f2017-07-07 17:14:02 +0100101 return( ret );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100102}
Paul Bakker19343182013-08-16 13:31:10 +0200103
Paul Bakker19343182013-08-16 13:31:10 +0200104
Azim Khan191e9042017-06-09 12:39:00 +0100105/**
106 * \brief Checks if the dependency i.e. the compile flag is set.
107 * For optimizing space for embedded targets each dependency
108 * is identified by a unique identifier instead of string literals.
109 * Identifiers and check code is generated by script:
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100110 * $generator_script
Azim Khan191e9042017-06-09 12:39:00 +0100111 *
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100112 * \param dep_id Dependency identifier.
Azim Khan191e9042017-06-09 12:39:00 +0100113 *
114 * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED
115 */
116int dep_check( int dep_id )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100117{
Azim Khanb1c2d0f2017-07-07 17:14:02 +0100118 int ret = DEPENDENCY_NOT_SUPPORTED;
119
120 (void) dep_id;
121
122 switch( dep_id )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100123 {
124$dep_check_code
125#line $line_no "suites/main_test.function"
Azim Khanb1c2d0f2017-07-07 17:14:02 +0100126 default:
127 break;
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100128 }
Azim Khanb1c2d0f2017-07-07 17:14:02 +0100129 return( ret );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100130}
Paul Bakker19343182013-08-16 13:31:10 +0200131
SimonB8ca7bc42016-04-17 23:24:50 +0100132
Azim Khan191e9042017-06-09 12:39:00 +0100133/**
134 * \brief Function pointer type for test function wrappers.
135 *
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100136 * A test function wrapper decodes the parameters and passes them to the
137 * underlying test function. Both the wrapper and the underlying function
138 * return void. Test wrappers assume that they are passed a suitable
139 * parameter array and do not perform any error detection.
Azim Khan191e9042017-06-09 12:39:00 +0100140 *
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100141 * \param param_array The array of parameters. Each element is a `void *`
142 * which the wrapper casts to the correct type and
143 * dereferences. Each wrapper function hard-codes the
144 * number and types of the parameters.
Azim Khan191e9042017-06-09 12:39:00 +0100145 */
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100146typedef void (*TestWrapper_t)( void **param_array );
Simon Butcher65b1fa62016-05-23 23:18:26 +0100147
Azim Khan191e9042017-06-09 12:39:00 +0100148
149/**
150 * \brief Table of test function wrappers. Used by dispatch_test().
151 * This table is populated by script:
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100152 * $generator_script
Azim Khan191e9042017-06-09 12:39:00 +0100153 *
154 */
155TestWrapper_t test_funcs[] =
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100156{
157$dispatch_code
158#line $line_no "suites/main_test.function"
159};
Azim Khan191e9042017-06-09 12:39:00 +0100160
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500161/**
Andrzej Kurekc470b6b2019-01-31 08:20:20 -0500162 * \brief Dispatches test functions based on function index.
Azim Khan191e9042017-06-09 12:39:00 +0100163 *
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100164 * \param func_idx Test function index.
165 * \param params The array of parameters to pass to the test function.
166 * It will be decoded by the #TestWrapper_t wrapper function.
Azim Khan191e9042017-06-09 12:39:00 +0100167 *
168 * \return DISPATCH_TEST_SUCCESS if found
169 * DISPATCH_TEST_FN_NOT_FOUND if not found
170 * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled.
171 */
k-stachowiak03954f22019-09-16 10:23:10 +0200172int dispatch_test( size_t func_idx, void ** params )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100173{
Azim Khan191e9042017-06-09 12:39:00 +0100174 int ret = DISPATCH_TEST_SUCCESS;
175 TestWrapper_t fp = NULL;
176
Mohammad Azim Khand2d01122018-07-18 17:48:37 +0100177 if ( func_idx < (int)( sizeof( test_funcs ) / sizeof( TestWrapper_t ) ) )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100178 {
Azim Khan191e9042017-06-09 12:39:00 +0100179 fp = test_funcs[func_idx];
180 if ( fp )
TRodziewicz2d0769d2021-05-27 15:24:33 +0200181 {
182 #if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG)
183 mbedtls_test_enable_insecure_external_rng( );
184 #endif
185
186 fp( params );
187
188 #if defined(MBEDTLS_TEST_MUTEX_USAGE)
189 mbedtls_test_mutex_usage_check( );
190 #endif /* MBEDTLS_TEST_MUTEX_USAGE */
191 }
Azim Khan191e9042017-06-09 12:39:00 +0100192 else
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100193 ret = DISPATCH_UNSUPPORTED_SUITE;
194 }
Azim Khan191e9042017-06-09 12:39:00 +0100195 else
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100196 {
197 ret = DISPATCH_TEST_FN_NOT_FOUND;
198 }
Azim Khan191e9042017-06-09 12:39:00 +0100199
Paul Bakker19343182013-08-16 13:31:10 +0200200 return( ret );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100201}
Paul Bakker19343182013-08-16 13:31:10 +0200202
SimonB152ea182016-02-15 23:27:28 +0000203
Azim Khan13c6bfb2017-06-15 14:45:56 +0100204/**
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100205 * \brief Checks if test function is supported in this build-time
206 * configuration.
Azim Khan13c6bfb2017-06-15 14:45:56 +0100207 *
Gilles Peskine5a7702e2021-02-23 13:40:19 +0100208 * \param func_idx Test function index.
Azim Khan13c6bfb2017-06-15 14:45:56 +0100209 *
210 * \return DISPATCH_TEST_SUCCESS if found
211 * DISPATCH_TEST_FN_NOT_FOUND if not found
212 * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled.
213 */
k-stachowiak03954f22019-09-16 10:23:10 +0200214int check_test( size_t func_idx )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100215{
Azim Khan13c6bfb2017-06-15 14:45:56 +0100216 int ret = DISPATCH_TEST_SUCCESS;
217 TestWrapper_t fp = NULL;
218
219 if ( func_idx < (int)( sizeof(test_funcs)/sizeof( TestWrapper_t ) ) )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100220 {
Azim Khan13c6bfb2017-06-15 14:45:56 +0100221 fp = test_funcs[func_idx];
222 if ( fp == NULL )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100223 ret = DISPATCH_UNSUPPORTED_SUITE;
224 }
Azim Khan13c6bfb2017-06-15 14:45:56 +0100225 else
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100226 {
227 ret = DISPATCH_TEST_FN_NOT_FOUND;
228 }
Azim Khan13c6bfb2017-06-15 14:45:56 +0100229
230 return( ret );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100231}
Azim Khan13c6bfb2017-06-15 14:45:56 +0100232
233
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100234$platform_code
Azim Khan191e9042017-06-09 12:39:00 +0100235
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100236#line $line_no "suites/main_test.function"
Azim Khan191e9042017-06-09 12:39:00 +0100237
SimonB152ea182016-02-15 23:27:28 +0000238/*----------------------------------------------------------------------------*/
239/* Main Test code */
240
SimonB15942102016-04-25 21:34:49 +0100241
Azim Khan191e9042017-06-09 12:39:00 +0100242/**
243 * \brief Program main. Invokes platform specific execute_tests().
Gilles Peskine964faeb2017-09-29 18:00:25 +0200244 *
Azim Khan191e9042017-06-09 12:39:00 +0100245 * \param argc Command line arguments count.
246 * \param argv Array of command line arguments.
247 *
248 * \return Exit code.
Gilles Peskine964faeb2017-09-29 18:00:25 +0200249 */
Azim Khan191e9042017-06-09 12:39:00 +0100250int main( int argc, const char *argv[] )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100251{
Chris Jones759e30b2021-02-09 15:30:54 +0000252#if defined(MBEDTLS_TEST_HOOKS) && defined (MBEDTLS_ERROR_C)
Chris Jones74392092021-04-01 16:00:01 +0100253 mbedtls_test_hook_error_add = &mbedtls_test_err_add_check;
Chris Jones96ae73b2021-01-08 17:04:59 +0000254#endif
255
Ronald Crone9c09f12020-06-08 16:44:58 +0200256 int ret = mbedtls_test_platform_setup();
Andrzej Kurekf13ca952018-04-18 04:14:31 -0400257 if( ret != 0 )
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100258 {
Andrzej Kurekf13ca952018-04-18 04:14:31 -0400259 mbedtls_fprintf( stderr,
260 "FATAL: Failed to initialize platform - error %d\n",
261 ret );
262 return( -1 );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100263 }
Hanno Becker1cfc5dd2018-11-12 13:18:45 +0000264
Azim Khan191e9042017-06-09 12:39:00 +0100265 ret = execute_tests( argc, argv );
Ronald Crone9c09f12020-06-08 16:44:58 +0200266 mbedtls_test_platform_teardown();
Azim Khan191e9042017-06-09 12:39:00 +0100267 return( ret );
Mohammad Azim Khan5cb70172018-07-19 11:32:30 +0100268}