]>
Commit | Line | Data |
---|---|---|
440e5d80 RS |
1 | /* |
2 | * Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. | |
3ead9f37 | 3 | * |
440e5d80 RS |
4 | * Licensed under the OpenSSL license (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 | |
3ead9f37 MB |
8 | */ |
9 | ||
10 | #ifndef HEADER_TESTUTIL_H | |
0f113f3e | 11 | # define HEADER_TESTUTIL_H |
3ead9f37 | 12 | |
d61f0078 EK |
13 | #include <openssl/err.h> |
14 | ||
308b876d EK |
15 | /* |
16 | * In main(), call ADD_TEST to register each test case function, then call | |
17 | * run_tests() to execute all tests and report the results. The result | |
18 | * returned from run_tests() should be used as the return value for main(). | |
19 | */ | |
20 | # define ADD_TEST(test_function) add_test(#test_function, test_function) | |
21 | ||
1d97c843 | 22 | /*- |
308b876d | 23 | * Test cases that share common setup should use the helper |
1d97c843 | 24 | * SETUP_TEST_FIXTURE and EXECUTE_TEST macros for test case functions. |
3ead9f37 MB |
25 | * |
26 | * SETUP_TEST_FIXTURE will call set_up() to create a new TEST_FIXTURE_TYPE | |
27 | * object called "fixture". It will also allocate the "result" variable used | |
28 | * by EXECUTE_TEST. set_up() should take a const char* specifying the test | |
29 | * case name and return a TEST_FIXTURE_TYPE by value. | |
30 | * | |
31 | * EXECUTE_TEST will pass fixture to execute_func() by value, call | |
32 | * tear_down(), and return the result of execute_func(). execute_func() should | |
ababe86b | 33 | * take a TEST_FIXTURE_TYPE by value and return 1 on success and 0 on |
3ead9f37 MB |
34 | * failure. |
35 | * | |
36 | * Unit tests can define their own SETUP_TEST_FIXTURE and EXECUTE_TEST | |
37 | * variations like so: | |
38 | * | |
39 | * #define SETUP_FOOBAR_TEST_FIXTURE()\ | |
40 | * SETUP_TEST_FIXTURE(FOOBAR_TEST_FIXTURE, set_up_foobar) | |
41 | * | |
42 | * #define EXECUTE_FOOBAR_TEST()\ | |
43 | * EXECUTE_TEST(execute_foobar, tear_down_foobar) | |
44 | * | |
45 | * Then test case functions can take the form: | |
46 | * | |
47 | * static int test_foobar_feature() | |
0f113f3e MC |
48 | * { |
49 | * SETUP_FOOBAR_TEST_FIXTURE(); | |
50 | * [...set individual members of fixture...] | |
51 | * EXECUTE_FOOBAR_TEST(); | |
52 | * } | |
3ead9f37 | 53 | */ |
0f113f3e | 54 | # define SETUP_TEST_FIXTURE(TEST_FIXTURE_TYPE, set_up)\ |
453dfd8d EK |
55 | TEST_FIXTURE_TYPE fixture = set_up(TEST_CASE_NAME); \ |
56 | int result = 0 | |
3ead9f37 | 57 | |
0f113f3e | 58 | # define EXECUTE_TEST(execute_func, tear_down)\ |
ababe86b | 59 | result = execute_func(fixture);\ |
0f113f3e MC |
60 | tear_down(fixture);\ |
61 | return result | |
3ead9f37 | 62 | |
0f113f3e MC |
63 | /* |
64 | * TEST_CASE_NAME is defined as the name of the test case function where | |
3ead9f37 MB |
65 | * possible; otherwise we get by with the file name and line number. |
66 | */ | |
0f113f3e MC |
67 | # if __STDC_VERSION__ < 199901L |
68 | # if defined(_MSC_VER) | |
69 | # define TEST_CASE_NAME __FUNCTION__ | |
70 | # else | |
71 | # define testutil_stringify_helper(s) #s | |
72 | # define testutil_stringify(s) testutil_stringify_helper(s) | |
73 | # define TEST_CASE_NAME __FILE__ ":" testutil_stringify(__LINE__) | |
74 | # endif /* _MSC_VER */ | |
75 | # else | |
76 | # define TEST_CASE_NAME __func__ | |
77 | # endif /* __STDC_VERSION__ */ | |
3ead9f37 | 78 | |
453dfd8d EK |
79 | /* |
80 | * Simple parameterized tests. Adds a test_function(idx) test for each | |
81 | * 0 <= idx < num. | |
82 | */ | |
83 | # define ADD_ALL_TESTS(test_function, num) \ | |
84 | add_all_tests(#test_function, test_function, num) | |
85 | ||
0f113f3e | 86 | void add_test(const char *test_case_name, int (*test_fn) ()); |
453dfd8d | 87 | void add_all_tests(const char *test_case_name, int (*test_fn)(int idx), int num); |
0f113f3e | 88 | int run_tests(const char *test_prog_name); |
5e3de8e6 | 89 | |
ce2cdac2 EK |
90 | /* |
91 | * Test assumption verification helpers. | |
92 | */ | |
93 | ||
94 | /* | |
95 | * Returns 1 if |s1| and |s2| are both NULL or equal. | |
96 | * Otherwise, returns 0 and pretty-prints diagnostics using |desc|. | |
97 | */ | |
98 | int strings_equal(const char *desc, const char *s1, const char *s2); | |
0f113f3e | 99 | #endif /* HEADER_TESTUTIL_H */ |
d61f0078 EK |
100 | |
101 | /* | |
102 | * For "impossible" conditions such as malloc failures or bugs in test code, | |
103 | * where continuing the test would be meaningless. Note that OPENSSL_assert | |
104 | * is fatal, and is never compiled out. | |
105 | */ | |
106 | #define TEST_check(condition) \ | |
107 | do { \ | |
108 | if (!(condition)) { \ | |
109 | ERR_print_errors_fp(stderr); \ | |
110 | OPENSSL_assert(!#condition); \ | |
111 | } \ | |
ffd3d0ef | 112 | } while (0) |