Home | History | Annotate | Line # | Download | only in test
      1 /*
      2  * Copyright 2014-2025 The OpenSSL Project Authors. All Rights Reserved.
      3  *
      4  * Licensed under the Apache License 2.0 (the "License").  You may not use
      5  * this file except in compliance with the License.  You can obtain a copy
      6  * in the file LICENSE in the source distribution or at
      7  * https://www.openssl.org/source/license.html
      8  */
      9 
     10 #ifndef OSSL_TESTUTIL_H
     11 #define OSSL_TESTUTIL_H
     12 
     13 #include <stdarg.h>
     14 #include "internal/common.h" /* for HAS_PREFIX */
     15 
     16 #include <openssl/provider.h>
     17 #include <openssl/err.h>
     18 #include <openssl/e_os2.h>
     19 #include <openssl/bn.h>
     20 #include <openssl/x509.h>
     21 #include "opt.h"
     22 
     23 /*-
     24  * Simple unit tests should implement setup_tests().
     25  * This function should return zero if the registration process fails.
     26  * To register tests, call ADD_TEST or ADD_ALL_TESTS:
     27  *
     28  * int setup_tests(void)
     29  * {
     30  *     ADD_TEST(test_foo);
     31  *     ADD_ALL_TESTS(test_bar, num_test_bar);
     32  *     return 1;
     33  * }
     34  *
     35  * Tests that require clean up after execution should implement:
     36  *
     37  * void cleanup_tests(void);
     38  *
     39  * The cleanup_tests function will be called even if setup_tests()
     40  * returns failure.
     41  *
     42  * In some cases, early initialization before the framework is set up
     43  * may be needed.  In such a case, this should be implemented:
     44  *
     45  * int global_init(void);
     46  *
     47  * This function should return zero if there is an unrecoverable error and
     48  * non-zero if the initialization was successful.
     49  */
     50 
     51 /* Adds a simple test case. */
     52 #define ADD_TEST(test_function) add_test(#test_function, test_function)
     53 
     54 /*
     55  * Simple parameterized tests. Calls test_function(idx) for each 0 <= idx < num.
     56  */
     57 #define ADD_ALL_TESTS(test_function, num) \
     58     add_all_tests(#test_function, test_function, num, 1)
     59 /*
     60  * A variant of the same without TAP output.
     61  */
     62 #define ADD_ALL_TESTS_NOSUBTEST(test_function, num) \
     63     add_all_tests(#test_function, test_function, num, 0)
     64 
     65 /*-
     66  * Test cases that share common setup should use the helper
     67  * SETUP_TEST_FIXTURE and EXECUTE_TEST macros for test case functions.
     68  *
     69  * SETUP_TEST_FIXTURE will call set_up() to create a new TEST_FIXTURE_TYPE
     70  * object called "fixture". It will also allocate the "result" variable used
     71  * by EXECUTE_TEST. set_up() should take a const char* specifying the test
     72  * case name and return a TEST_FIXTURE_TYPE by reference.
     73  * If case set_up() fails then 0 is returned.
     74  *
     75  * EXECUTE_TEST will pass fixture to execute_func() by reference, call
     76  * tear_down(), and return the result of execute_func(). execute_func() should
     77  * take a TEST_FIXTURE_TYPE by reference and return 1 on success and 0 on
     78  * failure.  The tear_down function is responsible for deallocation of the
     79  * result variable, if required.
     80  *
     81  * Unit tests can define their own SETUP_TEST_FIXTURE and EXECUTE_TEST
     82  * variations like so:
     83  *
     84  * #define SETUP_FOOBAR_TEST_FIXTURE()\
     85  *   SETUP_TEST_FIXTURE(FOOBAR_TEST_FIXTURE, set_up_foobar)
     86  *
     87  * #define EXECUTE_FOOBAR_TEST()\
     88  *   EXECUTE_TEST(execute_foobar, tear_down_foobar)
     89  *
     90  * Then test case functions can take the form:
     91  *
     92  * static int test_foobar_feature()
     93  *      {
     94  *      SETUP_FOOBAR_TEST_FIXTURE();
     95  *      [...set individual members of fixture...]
     96  *      EXECUTE_FOOBAR_TEST();
     97  *      }
     98  */
     99 #define SETUP_TEST_FIXTURE(TEST_FIXTURE_TYPE, set_up)    \
    100     TEST_FIXTURE_TYPE *fixture = set_up(TEST_CASE_NAME); \
    101     int result = 0;                                      \
    102                                                          \
    103     if (fixture == NULL)                                 \
    104     return 0
    105 
    106 #define EXECUTE_TEST(execute_func, tear_down) \
    107     if (fixture != NULL) {                    \
    108         result = execute_func(fixture);       \
    109         tear_down(fixture);                   \
    110     }
    111 
    112 /*
    113  * TEST_CASE_NAME is defined as the name of the test case function where
    114  * possible; otherwise we get by with the file name and line number.
    115  */
    116 #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
    117 #if defined(_MSC_VER)
    118 #define TEST_CASE_NAME __FUNCTION__
    119 #else
    120 #define testutil_stringify_helper(s) #s
    121 #define testutil_stringify(s) testutil_stringify_helper(s)
    122 #define TEST_CASE_NAME __FILE__ ":" testutil_stringify(__LINE__)
    123 #endif /* _MSC_VER */
    124 #else
    125 #define TEST_CASE_NAME __func__
    126 #endif /* __STDC_VERSION__ */
    127 
    128 /* The default test enum which should be common to all tests */
    129 #define OPT_TEST_ENUM    \
    130     OPT_TEST_HELP = 500, \
    131     OPT_TEST_LIST,       \
    132     OPT_TEST_SINGLE,     \
    133     OPT_TEST_ITERATION,  \
    134     OPT_TEST_INDENT,     \
    135     OPT_TEST_SEED
    136 
    137 /* The Default test OPTIONS common to all tests (without a usage string) */
    138 #define OPT_TEST_OPTIONS                                                         \
    139     { OPT_HELP_STR, 1, '-', "Valid options are:\n" },                            \
    140         { "help", OPT_TEST_HELP, '-', "Display this summary" },                  \
    141         { "list", OPT_TEST_LIST, '-', "Display the list of tests available" },   \
    142         { "test", OPT_TEST_SINGLE, 's', "Run a single test by id or name" },     \
    143         { "iter", OPT_TEST_ITERATION, 'n', "Run a single iteration of a test" }, \
    144         { "indent", OPT_TEST_INDENT, 'p', "Number of tabs added to output" },    \
    145         { "seed", OPT_TEST_SEED, 'n', "Seed value to randomize tests with" }
    146 
    147 /* The Default test OPTIONS common to all tests starting with an additional usage string */
    148 #define OPT_TEST_OPTIONS_WITH_EXTRA_USAGE(usage)            \
    149     { OPT_HELP_STR, 1, '-', "Usage: %s [options] " usage }, \
    150         OPT_TEST_OPTIONS
    151 
    152 /* The Default test OPTIONS common to all tests with an default usage string */
    153 #define OPT_TEST_OPTIONS_DEFAULT_USAGE                 \
    154     { OPT_HELP_STR, 1, '-', "Usage: %s [options]\n" }, \
    155         OPT_TEST_OPTIONS
    156 
    157 /*
    158  * Optional Cases that need to be ignored by the test app when using opt_next(),
    159  * (that are handled internally).
    160  */
    161 #define OPT_TEST_CASES       \
    162     OPT_TEST_HELP:           \
    163     case OPT_TEST_LIST:      \
    164     case OPT_TEST_SINGLE:    \
    165     case OPT_TEST_ITERATION: \
    166     case OPT_TEST_INDENT:    \
    167     case OPT_TEST_SEED
    168 
    169 /*
    170  * Tests that use test_get_argument() that dont have any additional options
    171  * (i.e- dont use opt_next()) can use this to set the usage string.
    172  * It embeds test_get_options() which gives default command line options for
    173  * the test system.
    174  *
    175  * Tests that need to use opt_next() need to specify
    176  *  (1) test_get_options() containing an options[] which should include either
    177  *    OPT_TEST_OPTIONS_DEFAULT_USAGE or
    178  *    OPT_TEST_OPTIONS_WITH_EXTRA_USAGE(...).
    179  *  (2) An enum outside the test_get_options() which contains OPT_TEST_ENUM, as
    180  *      well as the additional options that need to be handled.
    181  *  (3) case OPT_TEST_CASES: break; inside the opt_next() handling code.
    182  */
    183 #define OPT_TEST_DECLARE_USAGE(usage_str)                 \
    184     const OPTIONS *test_get_options(void)                 \
    185     {                                                     \
    186         enum { OPT_TEST_ENUM };                           \
    187         static const OPTIONS options[] = {                \
    188             OPT_TEST_OPTIONS_WITH_EXTRA_USAGE(usage_str), \
    189             { NULL }                                      \
    190         };                                                \
    191         return options;                                   \
    192     }
    193 
    194 /*
    195  * Used to read non optional command line values that follow after the options.
    196  * Returns NULL if there is no argument.
    197  */
    198 char *test_get_argument(size_t n);
    199 /* Return the number of additional non optional command line arguments */
    200 size_t test_get_argument_count(void);
    201 
    202 /*
    203  * Skip over common test options. Should be called before calling
    204  * test_get_argument()
    205  */
    206 int test_skip_common_options(void);
    207 
    208 /*
    209  * Get a library context for the tests, populated with the specified provider
    210  * and configuration. If default_null_prov is not NULL, a "null" provider is
    211  * loaded into the default library context to prevent it being used.
    212  * If libctx is NULL, the specified provider is loaded into the default library
    213  * context.
    214  */
    215 int test_get_libctx(OSSL_LIB_CTX **libctx, OSSL_PROVIDER **default_null_prov,
    216     const char *config_file,
    217     OSSL_PROVIDER **provider, const char *module_name);
    218 int test_arg_libctx(OSSL_LIB_CTX **libctx, OSSL_PROVIDER **default_null_prov,
    219     OSSL_PROVIDER **provider, int argn, const char *usage);
    220 
    221 /*
    222  * Internal helpers. Test programs shouldn't use these directly, but should
    223  * rather link to one of the helper main() methods.
    224  */
    225 
    226 void add_test(const char *test_case_name, int (*test_fn)(void));
    227 void add_all_tests(const char *test_case_name, int (*test_fn)(int idx), int num,
    228     int subtest);
    229 
    230 /*
    231  * Declarations for user defined functions.
    232  * The first two return a boolean indicating that the test should not proceed.
    233  */
    234 int global_init(void);
    235 int setup_tests(void);
    236 void cleanup_tests(void);
    237 
    238 /*
    239  * Helper functions to detect specific versions of the FIPS provider being in use.
    240  * Because of FIPS rules, code changes after a module has been validated are
    241  * difficult and because we provide a hard guarantee of ABI and behavioural
    242  * stability going forwards, it is a requirement to have tests be conditional
    243  * on specific FIPS provider versions.  Without this, bug fixes cannot be tested
    244  * in later releases.
    245  *
    246  * The reason for not including e.g. a less than test is to help avoid any
    247  * temptation to use FIPS provider version numbers that don't exist.  Until the
    248  * `new' provider is validated, its version isn't set in stone.  Thus a change
    249  * in test behaviour must depend on already validated module versions only.
    250  *
    251  * In all cases, the function returns true if:
    252  *      1. the FIPS provider version matches the criteria specified or
    253  *      2. the FIPS provider isn't being used.
    254  */
    255 int fips_provider_version_eq(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
    256 int fips_provider_version_ne(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
    257 int fips_provider_version_le(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
    258 int fips_provider_version_lt(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
    259 int fips_provider_version_gt(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
    260 int fips_provider_version_ge(OSSL_LIB_CTX *libctx, int major, int minor, int patch);
    261 
    262 /*
    263  * This function matches fips provider version with (potentially multiple)
    264  * <operator>maj.min.patch version strings in versions.
    265  * The operator can be one of = ! <= or > comparison symbols.
    266  * If the fips provider matches all the version comparisons (or if there is no
    267  * fips provider available) the function returns 1.
    268  * If the fips provider does not match the version comparisons, it returns 0.
    269  * On error the function returns -1.
    270  */
    271 int fips_provider_version_match(OSSL_LIB_CTX *libctx, const char *versions);
    272 
    273 /*
    274  * Used to supply test specific command line options,
    275  * If non optional parameters are used, then the first entry in the OPTIONS[]
    276  * should contain:
    277  * { OPT_HELP_STR, 1, '-', "<list of non-optional commandline params>\n"},
    278  * The last entry should always be { NULL }.
    279  *
    280  * Run the test locally using './test/test_name -help' to check the usage.
    281  */
    282 const OPTIONS *test_get_options(void);
    283 
    284 /*
    285  *  Test assumption verification helpers.
    286  */
    287 
    288 #define PRINTF_FORMAT(a, b)
    289 #if defined(__GNUC__) && defined(__STDC_VERSION__)    \
    290     && !defined(__MINGW32__) && !defined(__MINGW64__) \
    291     && !defined(__APPLE__)
    292 /*
    293  * Because we support the 'z' modifier, which made its appearance in C99,
    294  * we can't use __attribute__ with pre C99 dialects.
    295  */
    296 #if __STDC_VERSION__ >= 199901L
    297 #undef PRINTF_FORMAT
    298 #define PRINTF_FORMAT(a, b) __attribute__((format(printf, a, b)))
    299 #endif
    300 #endif
    301 
    302 #define DECLARE_COMPARISON(type, name, opname)    \
    303     int test_##name##_##opname(const char *, int, \
    304         const char *, const char *,               \
    305         const type, const type);
    306 
    307 #define DECLARE_COMPARISONS(type, name) \
    308     DECLARE_COMPARISON(type, name, eq)  \
    309     DECLARE_COMPARISON(type, name, ne)  \
    310     DECLARE_COMPARISON(type, name, lt)  \
    311     DECLARE_COMPARISON(type, name, le)  \
    312     DECLARE_COMPARISON(type, name, gt)  \
    313     DECLARE_COMPARISON(type, name, ge)
    314 
    315 DECLARE_COMPARISONS(int, int)
    316 DECLARE_COMPARISONS(unsigned int, uint)
    317 DECLARE_COMPARISONS(char, char)
    318 DECLARE_COMPARISONS(unsigned char, uchar)
    319 DECLARE_COMPARISONS(long, long)
    320 DECLARE_COMPARISONS(unsigned long, ulong)
    321 DECLARE_COMPARISONS(int64_t, int64_t)
    322 DECLARE_COMPARISONS(uint64_t, uint64_t)
    323 DECLARE_COMPARISONS(double, double)
    324 DECLARE_COMPARISONS(time_t, time_t)
    325 
    326 /*
    327  * Because this comparison uses a printf format specifier that's not
    328  * universally known (yet), we provide an option to not have it declared.
    329  */
    330 #ifndef TESTUTIL_NO_size_t_COMPARISON
    331 DECLARE_COMPARISONS(size_t, size_t)
    332 #endif
    333 
    334 /*
    335  * Pointer comparisons against other pointers and null.
    336  * These functions return 1 if the test is true.
    337  * Otherwise, they return 0 and pretty-print diagnostics.
    338  * These should not be called directly, use the TEST_xxx macros below instead.
    339  */
    340 DECLARE_COMPARISON(void *, ptr, eq)
    341 DECLARE_COMPARISON(void *, ptr, ne)
    342 int test_ptr(const char *file, int line, const char *s, const void *p);
    343 int test_ptr_null(const char *file, int line, const char *s, const void *p);
    344 
    345 /*
    346  * Equality tests for strings where NULL is a legitimate value.
    347  * These calls return 1 if the two passed strings compare true.
    348  * Otherwise, they return 0 and pretty-print diagnostics.
    349  * These should not be called directly, use the TEST_xxx macros below instead.
    350  */
    351 DECLARE_COMPARISON(char *, str, eq)
    352 DECLARE_COMPARISON(char *, str, ne)
    353 
    354 /*
    355  * Same as above, but for strncmp.
    356  */
    357 int test_strn_eq(const char *file, int line, const char *, const char *,
    358     const char *a, size_t an, const char *b, size_t bn);
    359 int test_strn_ne(const char *file, int line, const char *, const char *,
    360     const char *a, size_t an, const char *b, size_t bn);
    361 
    362 /*
    363  * Equality test for memory blocks where NULL is a legitimate value.
    364  * These calls return 1 if the two memory blocks compare true.
    365  * Otherwise, they return 0 and pretty-print diagnostics.
    366  * These should not be called directly, use the TEST_xxx macros below instead.
    367  */
    368 int test_mem_eq(const char *, int, const char *, const char *,
    369     const void *, size_t, const void *, size_t);
    370 int test_mem_ne(const char *, int, const char *, const char *,
    371     const void *, size_t, const void *, size_t);
    372 
    373 /*
    374  * Check a boolean result for being true or false.
    375  * They return 1 if the condition is true (i.e. the value is non-zero).
    376  * Otherwise, they return 0 and pretty-prints diagnostics using |s|.
    377  * These should not be called directly, use the TEST_xxx macros below instead.
    378  */
    379 int test_true(const char *file, int line, const char *s, int b);
    380 int test_false(const char *file, int line, const char *s, int b);
    381 
    382 /*
    383  * Comparisons between BIGNUMs.
    384  * BIGNUMS can be compared against other BIGNUMs or zero.
    385  * Some additional equality tests against 1 & specific values are provided.
    386  * Tests for parity are included as well.
    387  */
    388 DECLARE_COMPARISONS(BIGNUM *, BN)
    389 int test_BN_eq_zero(const char *file, int line, const char *s, const BIGNUM *a);
    390 int test_BN_ne_zero(const char *file, int line, const char *s, const BIGNUM *a);
    391 int test_BN_lt_zero(const char *file, int line, const char *s, const BIGNUM *a);
    392 int test_BN_le_zero(const char *file, int line, const char *s, const BIGNUM *a);
    393 int test_BN_gt_zero(const char *file, int line, const char *s, const BIGNUM *a);
    394 int test_BN_ge_zero(const char *file, int line, const char *s, const BIGNUM *a);
    395 int test_BN_eq_one(const char *file, int line, const char *s, const BIGNUM *a);
    396 int test_BN_odd(const char *file, int line, const char *s, const BIGNUM *a);
    397 int test_BN_even(const char *file, int line, const char *s, const BIGNUM *a);
    398 int test_BN_eq_word(const char *file, int line, const char *bns, const char *ws,
    399     const BIGNUM *a, BN_ULONG w);
    400 int test_BN_abs_eq_word(const char *file, int line, const char *bns,
    401     const char *ws, const BIGNUM *a, BN_ULONG w);
    402 
    403 /*
    404  * Pretty print a failure message.
    405  * These should not be called directly, use the TEST_xxx macros below instead.
    406  */
    407 void test_error(const char *file, int line, const char *desc, ...)
    408     PRINTF_FORMAT(3, 4);
    409 void test_error_c90(const char *desc, ...) PRINTF_FORMAT(1, 2);
    410 void test_info(const char *file, int line, const char *desc, ...)
    411     PRINTF_FORMAT(3, 4);
    412 void test_info_c90(const char *desc, ...) PRINTF_FORMAT(1, 2);
    413 void test_note(const char *desc, ...) PRINTF_FORMAT(1, 2);
    414 int test_skip(const char *file, int line, const char *desc, ...)
    415     PRINTF_FORMAT(3, 4);
    416 int test_skip_c90(const char *desc, ...) PRINTF_FORMAT(1, 2);
    417 void test_openssl_errors(void);
    418 void test_perror(const char *s);
    419 
    420 /*
    421  * The following macros provide wrapper calls to the test functions with
    422  * a default description that indicates the file and line number of the error.
    423  *
    424  * The following macros guarantee to evaluate each argument exactly once.
    425  * This allows constructs such as: if (!TEST_ptr(ptr = OPENSSL_malloc(..)))
    426  * to produce better contextual output than:
    427  *      ptr = OPENSSL_malloc(..);
    428  *      if (!TEST_ptr(ptr))
    429  */
    430 #define TEST_int_eq(a, b) test_int_eq(__FILE__, __LINE__, #a, #b, a, b)
    431 #define TEST_int_ne(a, b) test_int_ne(__FILE__, __LINE__, #a, #b, a, b)
    432 #define TEST_int_lt(a, b) test_int_lt(__FILE__, __LINE__, #a, #b, a, b)
    433 #define TEST_int_le(a, b) test_int_le(__FILE__, __LINE__, #a, #b, a, b)
    434 #define TEST_int_gt(a, b) test_int_gt(__FILE__, __LINE__, #a, #b, a, b)
    435 #define TEST_int_ge(a, b) test_int_ge(__FILE__, __LINE__, #a, #b, a, b)
    436 
    437 #define TEST_uint_eq(a, b) test_uint_eq(__FILE__, __LINE__, #a, #b, a, b)
    438 #define TEST_uint_ne(a, b) test_uint_ne(__FILE__, __LINE__, #a, #b, a, b)
    439 #define TEST_uint_lt(a, b) test_uint_lt(__FILE__, __LINE__, #a, #b, a, b)
    440 #define TEST_uint_le(a, b) test_uint_le(__FILE__, __LINE__, #a, #b, a, b)
    441 #define TEST_uint_gt(a, b) test_uint_gt(__FILE__, __LINE__, #a, #b, a, b)
    442 #define TEST_uint_ge(a, b) test_uint_ge(__FILE__, __LINE__, #a, #b, a, b)
    443 
    444 #define TEST_char_eq(a, b) test_char_eq(__FILE__, __LINE__, #a, #b, a, b)
    445 #define TEST_char_ne(a, b) test_char_ne(__FILE__, __LINE__, #a, #b, a, b)
    446 #define TEST_char_lt(a, b) test_char_lt(__FILE__, __LINE__, #a, #b, a, b)
    447 #define TEST_char_le(a, b) test_char_le(__FILE__, __LINE__, #a, #b, a, b)
    448 #define TEST_char_gt(a, b) test_char_gt(__FILE__, __LINE__, #a, #b, a, b)
    449 #define TEST_char_ge(a, b) test_char_ge(__FILE__, __LINE__, #a, #b, a, b)
    450 
    451 #define TEST_uchar_eq(a, b) test_uchar_eq(__FILE__, __LINE__, #a, #b, a, b)
    452 #define TEST_uchar_ne(a, b) test_uchar_ne(__FILE__, __LINE__, #a, #b, a, b)
    453 #define TEST_uchar_lt(a, b) test_uchar_lt(__FILE__, __LINE__, #a, #b, a, b)
    454 #define TEST_uchar_le(a, b) test_uchar_le(__FILE__, __LINE__, #a, #b, a, b)
    455 #define TEST_uchar_gt(a, b) test_uchar_gt(__FILE__, __LINE__, #a, #b, a, b)
    456 #define TEST_uchar_ge(a, b) test_uchar_ge(__FILE__, __LINE__, #a, #b, a, b)
    457 
    458 #define TEST_long_eq(a, b) test_long_eq(__FILE__, __LINE__, #a, #b, a, b)
    459 #define TEST_long_ne(a, b) test_long_ne(__FILE__, __LINE__, #a, #b, a, b)
    460 #define TEST_long_lt(a, b) test_long_lt(__FILE__, __LINE__, #a, #b, a, b)
    461 #define TEST_long_le(a, b) test_long_le(__FILE__, __LINE__, #a, #b, a, b)
    462 #define TEST_long_gt(a, b) test_long_gt(__FILE__, __LINE__, #a, #b, a, b)
    463 #define TEST_long_ge(a, b) test_long_ge(__FILE__, __LINE__, #a, #b, a, b)
    464 
    465 #define TEST_ulong_eq(a, b) test_ulong_eq(__FILE__, __LINE__, #a, #b, a, b)
    466 #define TEST_ulong_ne(a, b) test_ulong_ne(__FILE__, __LINE__, #a, #b, a, b)
    467 #define TEST_ulong_lt(a, b) test_ulong_lt(__FILE__, __LINE__, #a, #b, a, b)
    468 #define TEST_ulong_le(a, b) test_ulong_le(__FILE__, __LINE__, #a, #b, a, b)
    469 #define TEST_ulong_gt(a, b) test_ulong_gt(__FILE__, __LINE__, #a, #b, a, b)
    470 #define TEST_ulong_ge(a, b) test_ulong_ge(__FILE__, __LINE__, #a, #b, a, b)
    471 
    472 #define TEST_int64_t_eq(a, b) test_int64_t_eq(__FILE__, __LINE__, #a, #b, a, b)
    473 #define TEST_int64_t_ne(a, b) test_int64_t_ne(__FILE__, __LINE__, #a, #b, a, b)
    474 #define TEST_int64_t_lt(a, b) test_int64_t_lt(__FILE__, __LINE__, #a, #b, a, b)
    475 #define TEST_int64_t_le(a, b) test_int64_t_le(__FILE__, __LINE__, #a, #b, a, b)
    476 #define TEST_int64_t_gt(a, b) test_int64_t_gt(__FILE__, __LINE__, #a, #b, a, b)
    477 #define TEST_int64_t_ge(a, b) test_int64_t_ge(__FILE__, __LINE__, #a, #b, a, b)
    478 
    479 #define TEST_uint64_t_eq(a, b) test_uint64_t_eq(__FILE__, __LINE__, #a, #b, a, b)
    480 #define TEST_uint64_t_ne(a, b) test_uint64_t_ne(__FILE__, __LINE__, #a, #b, a, b)
    481 #define TEST_uint64_t_lt(a, b) test_uint64_t_lt(__FILE__, __LINE__, #a, #b, a, b)
    482 #define TEST_uint64_t_le(a, b) test_uint64_t_le(__FILE__, __LINE__, #a, #b, a, b)
    483 #define TEST_uint64_t_gt(a, b) test_uint64_t_gt(__FILE__, __LINE__, #a, #b, a, b)
    484 #define TEST_uint64_t_ge(a, b) test_uint64_t_ge(__FILE__, __LINE__, #a, #b, a, b)
    485 
    486 #define TEST_size_t_eq(a, b) test_size_t_eq(__FILE__, __LINE__, #a, #b, a, b)
    487 #define TEST_size_t_ne(a, b) test_size_t_ne(__FILE__, __LINE__, #a, #b, a, b)
    488 #define TEST_size_t_lt(a, b) test_size_t_lt(__FILE__, __LINE__, #a, #b, a, b)
    489 #define TEST_size_t_le(a, b) test_size_t_le(__FILE__, __LINE__, #a, #b, a, b)
    490 #define TEST_size_t_gt(a, b) test_size_t_gt(__FILE__, __LINE__, #a, #b, a, b)
    491 #define TEST_size_t_ge(a, b) test_size_t_ge(__FILE__, __LINE__, #a, #b, a, b)
    492 
    493 #define TEST_double_eq(a, b) test_double_eq(__FILE__, __LINE__, #a, #b, a, b)
    494 #define TEST_double_ne(a, b) test_double_ne(__FILE__, __LINE__, #a, #b, a, b)
    495 #define TEST_double_lt(a, b) test_double_lt(__FILE__, __LINE__, #a, #b, a, b)
    496 #define TEST_double_le(a, b) test_double_le(__FILE__, __LINE__, #a, #b, a, b)
    497 #define TEST_double_gt(a, b) test_double_gt(__FILE__, __LINE__, #a, #b, a, b)
    498 #define TEST_double_ge(a, b) test_double_ge(__FILE__, __LINE__, #a, #b, a, b)
    499 
    500 #define TEST_time_t_eq(a, b) test_time_t_eq(__FILE__, __LINE__, #a, #b, a, b)
    501 #define TEST_time_t_ne(a, b) test_time_t_ne(__FILE__, __LINE__, #a, #b, a, b)
    502 #define TEST_time_t_lt(a, b) test_time_t_lt(__FILE__, __LINE__, #a, #b, a, b)
    503 #define TEST_time_t_le(a, b) test_time_t_le(__FILE__, __LINE__, #a, #b, a, b)
    504 #define TEST_time_t_gt(a, b) test_time_t_gt(__FILE__, __LINE__, #a, #b, a, b)
    505 #define TEST_time_t_ge(a, b) test_time_t_ge(__FILE__, __LINE__, #a, #b, a, b)
    506 
    507 #define TEST_ptr_eq(a, b) test_ptr_eq(__FILE__, __LINE__, #a, #b, a, b)
    508 #define TEST_ptr_ne(a, b) test_ptr_ne(__FILE__, __LINE__, #a, #b, a, b)
    509 #define TEST_ptr(a) test_ptr(__FILE__, __LINE__, #a, a)
    510 #define TEST_ptr_null(a) test_ptr_null(__FILE__, __LINE__, #a, a)
    511 
    512 #define TEST_str_eq(a, b) test_str_eq(__FILE__, __LINE__, #a, #b, a, b)
    513 #define TEST_str_ne(a, b) test_str_ne(__FILE__, __LINE__, #a, #b, a, b)
    514 #define TEST_strn_eq(a, b, n) test_strn_eq(__FILE__, __LINE__, #a, #b, a, n, b, n)
    515 #define TEST_strn_ne(a, b, n) test_strn_ne(__FILE__, __LINE__, #a, #b, a, n, b, n)
    516 #define TEST_strn2_eq(a, m, b, n) test_strn_eq(__FILE__, __LINE__, #a, #b, a, m, b, n)
    517 #define TEST_strn2_ne(a, m, b, n) test_strn_ne(__FILE__, __LINE__, #a, #b, a, m, b, n)
    518 
    519 #define TEST_mem_eq(a, m, b, n) test_mem_eq(__FILE__, __LINE__, #a, #b, a, m, b, n)
    520 #define TEST_mem_ne(a, m, b, n) test_mem_ne(__FILE__, __LINE__, #a, #b, a, m, b, n)
    521 
    522 #define TEST_true(a) test_true(__FILE__, __LINE__, #a, (a) != 0)
    523 #define TEST_false(a) test_false(__FILE__, __LINE__, #a, (a) != 0)
    524 
    525 #define TEST_BN_eq(a, b) test_BN_eq(__FILE__, __LINE__, #a, #b, a, b)
    526 #define TEST_BN_ne(a, b) test_BN_ne(__FILE__, __LINE__, #a, #b, a, b)
    527 #define TEST_BN_lt(a, b) test_BN_lt(__FILE__, __LINE__, #a, #b, a, b)
    528 #define TEST_BN_gt(a, b) test_BN_gt(__FILE__, __LINE__, #a, #b, a, b)
    529 #define TEST_BN_le(a, b) test_BN_le(__FILE__, __LINE__, #a, #b, a, b)
    530 #define TEST_BN_ge(a, b) test_BN_ge(__FILE__, __LINE__, #a, #b, a, b)
    531 #define TEST_BN_eq_zero(a) test_BN_eq_zero(__FILE__, __LINE__, #a, a)
    532 #define TEST_BN_ne_zero(a) test_BN_ne_zero(__FILE__, __LINE__, #a, a)
    533 #define TEST_BN_lt_zero(a) test_BN_lt_zero(__FILE__, __LINE__, #a, a)
    534 #define TEST_BN_gt_zero(a) test_BN_gt_zero(__FILE__, __LINE__, #a, a)
    535 #define TEST_BN_le_zero(a) test_BN_le_zero(__FILE__, __LINE__, #a, a)
    536 #define TEST_BN_ge_zero(a) test_BN_ge_zero(__FILE__, __LINE__, #a, a)
    537 #define TEST_BN_eq_one(a) test_BN_eq_one(__FILE__, __LINE__, #a, a)
    538 #define TEST_BN_eq_word(a, w) test_BN_eq_word(__FILE__, __LINE__, #a, #w, a, w)
    539 #define TEST_BN_abs_eq_word(a, w) test_BN_abs_eq_word(__FILE__, __LINE__, #a, #w, a, w)
    540 #define TEST_BN_odd(a) test_BN_odd(__FILE__, __LINE__, #a, a)
    541 #define TEST_BN_even(a) test_BN_even(__FILE__, __LINE__, #a, a)
    542 
    543 /*
    544  * TEST_error(desc, ...) prints an informative error message in the standard
    545  * format.  |desc| is a printf format string.
    546  */
    547 #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901L
    548 #define TEST_error test_error_c90
    549 #define TEST_info test_info_c90
    550 #define TEST_skip test_skip_c90
    551 #else
    552 #define TEST_error(...) test_error(__FILE__, __LINE__, __VA_ARGS__)
    553 #define TEST_info(...) test_info(__FILE__, __LINE__, __VA_ARGS__)
    554 #define TEST_skip(...) test_skip(__FILE__, __LINE__, __VA_ARGS__)
    555 #endif
    556 #define TEST_note test_note
    557 #define TEST_openssl_errors test_openssl_errors
    558 #define TEST_perror test_perror
    559 
    560 extern BIO *bio_out;
    561 extern BIO *bio_err;
    562 
    563 /* Thread local BIO overrides. */
    564 int set_override_bio_out(BIO *bio);
    565 int set_override_bio_err(BIO *bio);
    566 
    567 /*
    568  * Formatted output for strings, memory and bignums.
    569  */
    570 void test_output_string(const char *name, const char *m, size_t l);
    571 void test_output_bignum(const char *name, const BIGNUM *bn);
    572 void test_output_memory(const char *name, const unsigned char *m, size_t l);
    573 
    574 /*
    575  * Utilities to parse a test file.
    576  */
    577 #define TESTMAXPAIRS 150
    578 
    579 typedef struct pair_st {
    580     char *key;
    581     char *value;
    582 } PAIR;
    583 
    584 typedef struct stanza_st {
    585     const char *test_file; /* Input file name */
    586     BIO *fp; /* Input file */
    587     int curr; /* Current line in file */
    588     int start; /* Line where test starts */
    589     int errors; /* Error count */
    590     int numtests; /* Number of tests */
    591     int numskip; /* Number of skipped tests */
    592     int numpairs;
    593     PAIR pairs[TESTMAXPAIRS];
    594     BIO *key; /* temp memory BIO for reading in keys */
    595 } STANZA;
    596 
    597 /*
    598  * Prepare to start reading the file |testfile| as input.
    599  */
    600 int test_start_file(STANZA *s, const char *testfile);
    601 int test_end_file(STANZA *s);
    602 
    603 /*
    604  * Read a stanza from the test file.  A stanza consists of a block
    605  * of lines of the form
    606  *      key = value
    607  * The block is terminated by EOF or a blank line.
    608  * Return 1 if found, 0 on EOF or error.
    609  */
    610 int test_readstanza(STANZA *s);
    611 
    612 /*
    613  * Clear a stanza, release all allocated memory.
    614  */
    615 void test_clearstanza(STANZA *s);
    616 
    617 /*
    618  * Glue an array of strings together and return it as an allocated string.
    619  * Optionally return the whole length of this string in |out_len|
    620  */
    621 char *glue_strings(const char *list[], size_t *out_len);
    622 
    623 /*
    624  * Pseudo random number generator of low quality but having repeatability
    625  * across platforms.  The two calls are replacements for random(3) and
    626  * srandom(3).
    627  */
    628 uint32_t test_random(void);
    629 void test_random_seed(uint32_t sd);
    630 
    631 /* Fake non-secure random number generator */
    632 typedef int fake_random_generate_cb(unsigned char *out, size_t outlen,
    633     const char *name, EVP_RAND_CTX *ctx);
    634 
    635 OSSL_PROVIDER *fake_rand_start(OSSL_LIB_CTX *libctx);
    636 void fake_rand_finish(OSSL_PROVIDER *p);
    637 void fake_rand_set_callback(EVP_RAND_CTX *ctx,
    638     int (*cb)(unsigned char *out, size_t outlen,
    639         const char *name, EVP_RAND_CTX *ctx));
    640 void fake_rand_set_public_private_callbacks(OSSL_LIB_CTX *libctx,
    641     fake_random_generate_cb *cb);
    642 
    643 /* Create a file path from a directory and a filename */
    644 char *test_mk_file_path(const char *dir, const char *file);
    645 
    646 EVP_PKEY *load_pkey_pem(const char *file, OSSL_LIB_CTX *libctx);
    647 X509 *load_cert_pem(const char *file, OSSL_LIB_CTX *libctx);
    648 X509 *load_cert_der(const unsigned char *bytes, int len);
    649 STACK_OF(X509) *load_certs_pem(const char *file);
    650 X509_REQ *load_csr_der(const char *file, OSSL_LIB_CTX *libctx);
    651 time_t test_asn1_string_to_time_t(const char *asn1_string);
    652 
    653 int compare_with_reference_file(BIO *membio, const char *reffile);
    654 #endif /* OSSL_TESTUTIL_H */
    655