1*62c56f98SSadaf Ebrahimi#line 2 "suites/main_test.function" 2*62c56f98SSadaf Ebrahimi/* 3*62c56f98SSadaf Ebrahimi * *** THIS FILE HAS BEEN MACHINE GENERATED *** 4*62c56f98SSadaf Ebrahimi * 5*62c56f98SSadaf Ebrahimi * This file has been machine generated using the script: 6*62c56f98SSadaf Ebrahimi * __MBEDTLS_TEST_TEMPLATE__GENERATOR_SCRIPT 7*62c56f98SSadaf Ebrahimi * 8*62c56f98SSadaf Ebrahimi * Test file : __MBEDTLS_TEST_TEMPLATE__TEST_FILE 9*62c56f98SSadaf Ebrahimi * 10*62c56f98SSadaf Ebrahimi * The following files were used to create this file. 11*62c56f98SSadaf Ebrahimi * 12*62c56f98SSadaf Ebrahimi * Main code file : __MBEDTLS_TEST_TEMPLATE__TEST_MAIN_FILE 13*62c56f98SSadaf Ebrahimi * Platform code file : __MBEDTLS_TEST_TEMPLATE__TEST_PLATFORM_FILE 14*62c56f98SSadaf Ebrahimi * Helper file : __MBEDTLS_TEST_TEMPLATE__TEST_COMMON_HELPER_FILE 15*62c56f98SSadaf Ebrahimi * Test suite file : __MBEDTLS_TEST_TEMPLATE__TEST_CASE_FILE 16*62c56f98SSadaf Ebrahimi * Test suite data : __MBEDTLS_TEST_TEMPLATE__TEST_CASE_DATA_FILE 17*62c56f98SSadaf Ebrahimi * 18*62c56f98SSadaf Ebrahimi */ 19*62c56f98SSadaf Ebrahimi 20*62c56f98SSadaf Ebrahimi#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) 21*62c56f98SSadaf Ebrahimi#if !defined(_POSIX_C_SOURCE) 22*62c56f98SSadaf Ebrahimi#define _POSIX_C_SOURCE 200112L // for fileno() from <stdio.h> 23*62c56f98SSadaf Ebrahimi#endif 24*62c56f98SSadaf Ebrahimi#endif 25*62c56f98SSadaf Ebrahimi 26*62c56f98SSadaf Ebrahimi#include "mbedtls/build_info.h" 27*62c56f98SSadaf Ebrahimi 28*62c56f98SSadaf Ebrahimi/* Test code may use deprecated identifiers only if the preprocessor symbol 29*62c56f98SSadaf Ebrahimi * MBEDTLS_TEST_DEPRECATED is defined. When building tests, set 30*62c56f98SSadaf Ebrahimi * MBEDTLS_TEST_DEPRECATED explicitly if MBEDTLS_DEPRECATED_WARNING is 31*62c56f98SSadaf Ebrahimi * enabled but the corresponding warnings are not treated as errors. 32*62c56f98SSadaf Ebrahimi */ 33*62c56f98SSadaf Ebrahimi#if !defined(MBEDTLS_DEPRECATED_REMOVED) && !defined(MBEDTLS_DEPRECATED_WARNING) 34*62c56f98SSadaf Ebrahimi#define MBEDTLS_TEST_DEPRECATED 35*62c56f98SSadaf Ebrahimi#endif 36*62c56f98SSadaf Ebrahimi 37*62c56f98SSadaf Ebrahimi/*----------------------------------------------------------------------------*/ 38*62c56f98SSadaf Ebrahimi/* Common helper code */ 39*62c56f98SSadaf Ebrahimi 40*62c56f98SSadaf Ebrahimi__MBEDTLS_TEST_TEMPLATE__TEST_COMMON_HELPERS 41*62c56f98SSadaf Ebrahimi 42*62c56f98SSadaf Ebrahimi#line __MBEDTLS_TEST_TEMPLATE__LINE_NO "suites/main_test.function" 43*62c56f98SSadaf Ebrahimi 44*62c56f98SSadaf Ebrahimi 45*62c56f98SSadaf Ebrahimi/*----------------------------------------------------------------------------*/ 46*62c56f98SSadaf Ebrahimi/* Test Suite Code */ 47*62c56f98SSadaf Ebrahimi 48*62c56f98SSadaf Ebrahimi 49*62c56f98SSadaf Ebrahimi#define TEST_SUITE_ACTIVE 50*62c56f98SSadaf Ebrahimi 51*62c56f98SSadaf Ebrahimi__MBEDTLS_TEST_TEMPLATE__FUNCTIONS_CODE 52*62c56f98SSadaf Ebrahimi 53*62c56f98SSadaf Ebrahimi#line __MBEDTLS_TEST_TEMPLATE__LINE_NO "suites/main_test.function" 54*62c56f98SSadaf Ebrahimi 55*62c56f98SSadaf Ebrahimi 56*62c56f98SSadaf Ebrahimi/*----------------------------------------------------------------------------*/ 57*62c56f98SSadaf Ebrahimi/* Test dispatch code */ 58*62c56f98SSadaf Ebrahimi 59*62c56f98SSadaf Ebrahimi 60*62c56f98SSadaf Ebrahimi/** 61*62c56f98SSadaf Ebrahimi * \brief Evaluates an expression/macro into its literal integer value. 62*62c56f98SSadaf Ebrahimi * For optimizing space for embedded targets each expression/macro 63*62c56f98SSadaf Ebrahimi * is identified by a unique identifier instead of string literals. 64*62c56f98SSadaf Ebrahimi * Identifiers and evaluation code is generated by script: 65*62c56f98SSadaf Ebrahimi * __MBEDTLS_TEST_TEMPLATE__GENERATOR_SCRIPT 66*62c56f98SSadaf Ebrahimi * 67*62c56f98SSadaf Ebrahimi * \param exp_id Expression identifier. 68*62c56f98SSadaf Ebrahimi * \param out_value Pointer to int to hold the integer. 69*62c56f98SSadaf Ebrahimi * 70*62c56f98SSadaf Ebrahimi * \return 0 if exp_id is found. 1 otherwise. 71*62c56f98SSadaf Ebrahimi */ 72*62c56f98SSadaf Ebrahimiint get_expression(int32_t exp_id, intmax_t *out_value) 73*62c56f98SSadaf Ebrahimi{ 74*62c56f98SSadaf Ebrahimi int ret = KEY_VALUE_MAPPING_FOUND; 75*62c56f98SSadaf Ebrahimi 76*62c56f98SSadaf Ebrahimi (void) exp_id; 77*62c56f98SSadaf Ebrahimi (void) out_value; 78*62c56f98SSadaf Ebrahimi 79*62c56f98SSadaf Ebrahimi switch (exp_id) { 80*62c56f98SSadaf Ebrahimi __MBEDTLS_TEST_TEMPLATE__EXPRESSION_CODE 81*62c56f98SSadaf Ebrahimi#line __MBEDTLS_TEST_TEMPLATE__LINE_NO "suites/main_test.function" 82*62c56f98SSadaf Ebrahimi default: 83*62c56f98SSadaf Ebrahimi { 84*62c56f98SSadaf Ebrahimi ret = KEY_VALUE_MAPPING_NOT_FOUND; 85*62c56f98SSadaf Ebrahimi } 86*62c56f98SSadaf Ebrahimi break; 87*62c56f98SSadaf Ebrahimi } 88*62c56f98SSadaf Ebrahimi return ret; 89*62c56f98SSadaf Ebrahimi} 90*62c56f98SSadaf Ebrahimi 91*62c56f98SSadaf Ebrahimi 92*62c56f98SSadaf Ebrahimi/** 93*62c56f98SSadaf Ebrahimi * \brief Checks if the dependency i.e. the compile flag is set. 94*62c56f98SSadaf Ebrahimi * For optimizing space for embedded targets each dependency 95*62c56f98SSadaf Ebrahimi * is identified by a unique identifier instead of string literals. 96*62c56f98SSadaf Ebrahimi * Identifiers and check code is generated by script: 97*62c56f98SSadaf Ebrahimi * __MBEDTLS_TEST_TEMPLATE__GENERATOR_SCRIPT 98*62c56f98SSadaf Ebrahimi * 99*62c56f98SSadaf Ebrahimi * \param dep_id Dependency identifier. 100*62c56f98SSadaf Ebrahimi * 101*62c56f98SSadaf Ebrahimi * \return DEPENDENCY_SUPPORTED if set else DEPENDENCY_NOT_SUPPORTED 102*62c56f98SSadaf Ebrahimi */ 103*62c56f98SSadaf Ebrahimiint dep_check(int dep_id) 104*62c56f98SSadaf Ebrahimi{ 105*62c56f98SSadaf Ebrahimi int ret = DEPENDENCY_NOT_SUPPORTED; 106*62c56f98SSadaf Ebrahimi 107*62c56f98SSadaf Ebrahimi (void) dep_id; 108*62c56f98SSadaf Ebrahimi 109*62c56f98SSadaf Ebrahimi switch (dep_id) { 110*62c56f98SSadaf Ebrahimi __MBEDTLS_TEST_TEMPLATE__DEP_CHECK_CODE 111*62c56f98SSadaf Ebrahimi#line __MBEDTLS_TEST_TEMPLATE__LINE_NO "suites/main_test.function" 112*62c56f98SSadaf Ebrahimi default: 113*62c56f98SSadaf Ebrahimi break; 114*62c56f98SSadaf Ebrahimi } 115*62c56f98SSadaf Ebrahimi return ret; 116*62c56f98SSadaf Ebrahimi} 117*62c56f98SSadaf Ebrahimi 118*62c56f98SSadaf Ebrahimi 119*62c56f98SSadaf Ebrahimi/** 120*62c56f98SSadaf Ebrahimi * \brief Function pointer type for test function wrappers. 121*62c56f98SSadaf Ebrahimi * 122*62c56f98SSadaf Ebrahimi * A test function wrapper decodes the parameters and passes them to the 123*62c56f98SSadaf Ebrahimi * underlying test function. Both the wrapper and the underlying function 124*62c56f98SSadaf Ebrahimi * return void. Test wrappers assume that they are passed a suitable 125*62c56f98SSadaf Ebrahimi * parameter array and do not perform any error detection. 126*62c56f98SSadaf Ebrahimi * 127*62c56f98SSadaf Ebrahimi * \param param_array The array of parameters. Each element is a `void *` 128*62c56f98SSadaf Ebrahimi * which the wrapper casts to the correct type and 129*62c56f98SSadaf Ebrahimi * dereferences. Each wrapper function hard-codes the 130*62c56f98SSadaf Ebrahimi * number and types of the parameters. 131*62c56f98SSadaf Ebrahimi */ 132*62c56f98SSadaf Ebrahimitypedef void (*TestWrapper_t)(void **param_array); 133*62c56f98SSadaf Ebrahimi 134*62c56f98SSadaf Ebrahimi 135*62c56f98SSadaf Ebrahimi/** 136*62c56f98SSadaf Ebrahimi * \brief Table of test function wrappers. Used by dispatch_test(). 137*62c56f98SSadaf Ebrahimi * This table is populated by script: 138*62c56f98SSadaf Ebrahimi * __MBEDTLS_TEST_TEMPLATE__GENERATOR_SCRIPT 139*62c56f98SSadaf Ebrahimi * 140*62c56f98SSadaf Ebrahimi */ 141*62c56f98SSadaf EbrahimiTestWrapper_t test_funcs[] = 142*62c56f98SSadaf Ebrahimi{ 143*62c56f98SSadaf Ebrahimi __MBEDTLS_TEST_TEMPLATE__DISPATCH_CODE 144*62c56f98SSadaf Ebrahimi#line __MBEDTLS_TEST_TEMPLATE__LINE_NO "suites/main_test.function" 145*62c56f98SSadaf Ebrahimi}; 146*62c56f98SSadaf Ebrahimi 147*62c56f98SSadaf Ebrahimi/** 148*62c56f98SSadaf Ebrahimi * \brief Dispatches test functions based on function index. 149*62c56f98SSadaf Ebrahimi * 150*62c56f98SSadaf Ebrahimi * \param func_idx Test function index. 151*62c56f98SSadaf Ebrahimi * \param params The array of parameters to pass to the test function. 152*62c56f98SSadaf Ebrahimi * It will be decoded by the #TestWrapper_t wrapper function. 153*62c56f98SSadaf Ebrahimi * 154*62c56f98SSadaf Ebrahimi * \return DISPATCH_TEST_SUCCESS if found 155*62c56f98SSadaf Ebrahimi * DISPATCH_TEST_FN_NOT_FOUND if not found 156*62c56f98SSadaf Ebrahimi * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. 157*62c56f98SSadaf Ebrahimi */ 158*62c56f98SSadaf Ebrahimiint dispatch_test(size_t func_idx, void **params) 159*62c56f98SSadaf Ebrahimi{ 160*62c56f98SSadaf Ebrahimi int ret = DISPATCH_TEST_SUCCESS; 161*62c56f98SSadaf Ebrahimi TestWrapper_t fp = NULL; 162*62c56f98SSadaf Ebrahimi 163*62c56f98SSadaf Ebrahimi if (func_idx < (int) (sizeof(test_funcs) / sizeof(TestWrapper_t))) { 164*62c56f98SSadaf Ebrahimi fp = test_funcs[func_idx]; 165*62c56f98SSadaf Ebrahimi if (fp) { 166*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG) 167*62c56f98SSadaf Ebrahimi mbedtls_test_enable_insecure_external_rng(); 168*62c56f98SSadaf Ebrahimi #endif 169*62c56f98SSadaf Ebrahimi 170*62c56f98SSadaf Ebrahimi fp(params); 171*62c56f98SSadaf Ebrahimi 172*62c56f98SSadaf Ebrahimi #if defined(MBEDTLS_TEST_MUTEX_USAGE) 173*62c56f98SSadaf Ebrahimi mbedtls_test_mutex_usage_check(); 174*62c56f98SSadaf Ebrahimi #endif /* MBEDTLS_TEST_MUTEX_USAGE */ 175*62c56f98SSadaf Ebrahimi } else { 176*62c56f98SSadaf Ebrahimi ret = DISPATCH_UNSUPPORTED_SUITE; 177*62c56f98SSadaf Ebrahimi } 178*62c56f98SSadaf Ebrahimi } else { 179*62c56f98SSadaf Ebrahimi ret = DISPATCH_TEST_FN_NOT_FOUND; 180*62c56f98SSadaf Ebrahimi } 181*62c56f98SSadaf Ebrahimi 182*62c56f98SSadaf Ebrahimi return ret; 183*62c56f98SSadaf Ebrahimi} 184*62c56f98SSadaf Ebrahimi 185*62c56f98SSadaf Ebrahimi 186*62c56f98SSadaf Ebrahimi/** 187*62c56f98SSadaf Ebrahimi * \brief Checks if test function is supported in this build-time 188*62c56f98SSadaf Ebrahimi * configuration. 189*62c56f98SSadaf Ebrahimi * 190*62c56f98SSadaf Ebrahimi * \param func_idx Test function index. 191*62c56f98SSadaf Ebrahimi * 192*62c56f98SSadaf Ebrahimi * \return DISPATCH_TEST_SUCCESS if found 193*62c56f98SSadaf Ebrahimi * DISPATCH_TEST_FN_NOT_FOUND if not found 194*62c56f98SSadaf Ebrahimi * DISPATCH_UNSUPPORTED_SUITE if not compile time enabled. 195*62c56f98SSadaf Ebrahimi */ 196*62c56f98SSadaf Ebrahimiint check_test(size_t func_idx) 197*62c56f98SSadaf Ebrahimi{ 198*62c56f98SSadaf Ebrahimi int ret = DISPATCH_TEST_SUCCESS; 199*62c56f98SSadaf Ebrahimi TestWrapper_t fp = NULL; 200*62c56f98SSadaf Ebrahimi 201*62c56f98SSadaf Ebrahimi if (func_idx < (int) (sizeof(test_funcs)/sizeof(TestWrapper_t))) { 202*62c56f98SSadaf Ebrahimi fp = test_funcs[func_idx]; 203*62c56f98SSadaf Ebrahimi if (fp == NULL) { 204*62c56f98SSadaf Ebrahimi ret = DISPATCH_UNSUPPORTED_SUITE; 205*62c56f98SSadaf Ebrahimi } 206*62c56f98SSadaf Ebrahimi } else { 207*62c56f98SSadaf Ebrahimi ret = DISPATCH_TEST_FN_NOT_FOUND; 208*62c56f98SSadaf Ebrahimi } 209*62c56f98SSadaf Ebrahimi 210*62c56f98SSadaf Ebrahimi return ret; 211*62c56f98SSadaf Ebrahimi} 212*62c56f98SSadaf Ebrahimi 213*62c56f98SSadaf Ebrahimi 214*62c56f98SSadaf Ebrahimi__MBEDTLS_TEST_TEMPLATE__PLATFORM_CODE 215*62c56f98SSadaf Ebrahimi 216*62c56f98SSadaf Ebrahimi#line __MBEDTLS_TEST_TEMPLATE__LINE_NO "suites/main_test.function" 217*62c56f98SSadaf Ebrahimi 218*62c56f98SSadaf Ebrahimi/*----------------------------------------------------------------------------*/ 219*62c56f98SSadaf Ebrahimi/* Main Test code */ 220*62c56f98SSadaf Ebrahimi 221*62c56f98SSadaf Ebrahimi 222*62c56f98SSadaf Ebrahimi/** 223*62c56f98SSadaf Ebrahimi * \brief Program main. Invokes platform specific execute_tests(). 224*62c56f98SSadaf Ebrahimi * 225*62c56f98SSadaf Ebrahimi * \param argc Command line arguments count. 226*62c56f98SSadaf Ebrahimi * \param argv Array of command line arguments. 227*62c56f98SSadaf Ebrahimi * 228*62c56f98SSadaf Ebrahimi * \return Exit code. 229*62c56f98SSadaf Ebrahimi */ 230*62c56f98SSadaf Ebrahimiint main(int argc, const char *argv[]) 231*62c56f98SSadaf Ebrahimi{ 232*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_TEST_HOOKS) 233*62c56f98SSadaf Ebrahimi extern void (*mbedtls_test_hook_test_fail)(const char *test, int line, const char *file); 234*62c56f98SSadaf Ebrahimi mbedtls_test_hook_test_fail = &mbedtls_test_fail; 235*62c56f98SSadaf Ebrahimi#if defined(MBEDTLS_ERROR_C) 236*62c56f98SSadaf Ebrahimi mbedtls_test_hook_error_add = &mbedtls_test_err_add_check; 237*62c56f98SSadaf Ebrahimi#endif 238*62c56f98SSadaf Ebrahimi#endif 239*62c56f98SSadaf Ebrahimi 240*62c56f98SSadaf Ebrahimi int ret = mbedtls_test_platform_setup(); 241*62c56f98SSadaf Ebrahimi if (ret != 0) { 242*62c56f98SSadaf Ebrahimi mbedtls_fprintf(stderr, 243*62c56f98SSadaf Ebrahimi "FATAL: Failed to initialize platform - error %d\n", 244*62c56f98SSadaf Ebrahimi ret); 245*62c56f98SSadaf Ebrahimi return -1; 246*62c56f98SSadaf Ebrahimi } 247*62c56f98SSadaf Ebrahimi 248*62c56f98SSadaf Ebrahimi ret = execute_tests(argc, argv); 249*62c56f98SSadaf Ebrahimi mbedtls_test_platform_teardown(); 250*62c56f98SSadaf Ebrahimi return ret; 251*62c56f98SSadaf Ebrahimi} 252