void setup_test() { char *TAP_levels = getenv("HARNESS_OSSL_LEVEL"); char *test_seed = getenv("OPENSSL_TEST_RAND_ORDER"); test_open_streams(); level = TAP_levels != NULL ? 4 * atoi(TAP_levels) : 0; if (test_seed != NULL) { seed = atoi(test_seed); if (seed <= 0) seed = time(NULL); test_printf_stdout("%*s# RAND SEED %d\n", subtest_level(), "", seed); test_flush_stdout(); srand(seed); } #ifndef OPENSSL_NO_CRYPTO_MDEBUG if (should_report_leaks()) { CRYPTO_set_mem_debug(1); CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); } #endif }
PRINTF_FORMAT(2, 3) static void test_verdict(int pass, const char *extra, ...) { va_list ap; test_flush_stdout(); test_flush_stderr(); test_printf_stdout("%*s%s", level, "", pass ? "ok" : "not ok"); if (extra != NULL) { test_printf_stdout(" "); va_start(ap, extra); test_vprintf_stdout(extra, ap); va_end(ap); } test_printf_stdout("\n"); test_flush_stdout(); }
int run_tests(const char *test_prog_name) { int num_failed = 0; char *verdict = NULL; int i, j; if (num_tests < 1) test_printf_stdout("%*s1..0 # Skipped: %s\n", level, "", test_prog_name); else if (level > 0) test_printf_stdout("%*s1..%d # Subtest: %s\n", level, "", num_tests, test_prog_name); else test_printf_stdout("%*s1..%d\n", level, "", num_tests); test_flush_stdout(); for (i = 0; i != num_tests; ++i) { if (all_tests[i].num == -1) { int ret = all_tests[i].test_fn(); test_flush_stdout(); test_flush_stderr(); verdict = "ok"; if (!ret) { verdict = "not ok"; ++num_failed; } test_printf_stdout("%*s%s %d - %s\n", level, "", verdict, i + 1, all_tests[i].test_case_name); test_flush_stdout(); finalize(ret); } else { int num_failed_inner = 0; level += 4; if (all_tests[i].subtest) { test_printf_stdout("%*s# Subtest: %s\n", level, "", all_tests[i].test_case_name); test_printf_stdout("%*s%d..%d\n", level, "", 1, all_tests[i].num); test_flush_stdout(); } for (j = 0; j < all_tests[i].num; j++) { int ret = all_tests[i].param_test_fn(j); test_flush_stdout(); test_flush_stderr(); if (!ret) ++num_failed_inner; finalize(ret); if (all_tests[i].subtest) { verdict = "ok"; if (!ret) { verdict = "not ok"; ++num_failed_inner; } test_printf_stdout("%*s%s %d\n", level, "", verdict, j + 1); test_flush_stdout(); } } level -= 4; verdict = "ok"; if (num_failed_inner) { verdict = "not ok"; ++num_failed; } test_printf_stdout("%*s%s %d - %s\n", level, "", verdict, i + 1, all_tests[i].test_case_name); test_flush_stdout(); } } if (num_failed != 0) return EXIT_FAILURE; return EXIT_SUCCESS; }
int run_tests(const char *test_prog_name) { int num_failed = 0; int verdict = 1; int ii, i, jj, j, jstep; int permute[OSSL_NELEM(all_tests)]; if (num_tests < 1) { test_printf_stdout("%*s1..0 # Skipped: %s\n", level, "", test_prog_name); } else { if (level > 0) test_printf_stdout("%*s# Subtest: %s\n", level, "", test_prog_name); test_printf_stdout("%*s1..%d\n", level, "", num_tests); } test_flush_stdout(); for (i = 0; i < num_tests; i++) permute[i] = i; if (seed != 0) for (i = num_tests - 1; i >= 1; i--) { j = rand() % (1 + i); ii = permute[j]; permute[j] = permute[i]; permute[i] = ii; } for (ii = 0; ii != num_tests; ++ii) { i = permute[ii]; if (all_tests[i].num == -1) { int ret = 0; set_test_title(all_tests[i].test_case_name); ret = all_tests[i].test_fn(); verdict = 1; if (!ret) { verdict = 0; ++num_failed; } test_verdict(verdict, "%d - %s", ii + 1, test_title); finalize(ret); } else { int num_failed_inner = 0; level += 4; if (all_tests[i].subtest) { test_printf_stdout("%*s# Subtest: %s\n", level, "", all_tests[i].test_case_name); test_printf_stdout("%*s%d..%d\n", level, "", 1, all_tests[i].num); test_flush_stdout(); } j = -1; if (seed == 0 || all_tests[i].num < 3) jstep = 1; else do jstep = rand() % all_tests[i].num; while (jstep == 0 || gcd(all_tests[i].num, jstep) != 1); for (jj = 0; jj < all_tests[i].num; jj++) { int ret; j = (j + jstep) % all_tests[i].num; set_test_title(NULL); ret = all_tests[i].param_test_fn(j); if (!ret) ++num_failed_inner; finalize(ret); if (all_tests[i].subtest) { verdict = 1; if (!ret) { verdict = 0; ++num_failed_inner; } if (test_title != NULL) test_verdict(verdict, "%d - %s", jj + 1, test_title); else test_verdict(verdict, "%d - iteration %d", jj + 1, j + 1); } } level -= 4; verdict = 1; if (num_failed_inner) { verdict = 0; ++num_failed; } test_verdict(verdict, "%d - %s", ii + 1, all_tests[i].test_case_name); } } if (num_failed != 0) return EXIT_FAILURE; return EXIT_SUCCESS; }