daemon: Flush shunts before unloading plugins
[strongswan.git] / src / libstrongswan / tests / test_runner.h
1 /*
2 * Copyright (C) 2013 Martin Willi
3 * Copyright (C) 2013 revosec AG
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 /**
17 * @defgroup libtest libtest
18 *
19 * @defgroup test_utils test_utils
20 * @ingroup libtest
21 *
22 * @defgroup test_runner test_runner
23 * @{ @ingroup libtest
24 */
25
26 #ifndef TEST_RUNNER_H_
27 #define TEST_RUNNER_H_
28
29 #include "test_suite.h"
30
31 #include <plugins/plugin_feature.h>
32
33 typedef struct test_configuration_t test_configuration_t;
34
35 /**
36 * Callback called before and after each test case to de-/initialize the
37 * environment (e.g. to load plugins). It is also called before and after the
38 * test suites are loaded.
39 *
40 * It is called after libstrongswan has been initialized and likewise before it
41 * gets deinitialized.
42 *
43 * @param init TRUE during initialization
44 * @return FALSE if de-/init failed
45 */
46 typedef bool (*test_runner_init_t)(bool init);
47
48 /**
49 * Test configuration, suite constructor with plugin dependency
50 */
51 struct test_configuration_t {
52
53 /**
54 * Constructor function to create suite.
55 */
56 test_suite_t *(*suite)();
57
58 /**
59 * Plugin feature this test suite depends on
60 */
61 plugin_feature_t feature;
62 };
63
64 /**
65 * Run test configuration.
66 *
67 * The configs array must be terminated with a NULL element. The following
68 * environment variables are currently supported:
69 *
70 * - TESTS_VERBOSITY: Numerical loglevel for debug log
71 * - TESTS_STRONGSWAN_CONF: Specify a path to a custom strongswan.conf
72 * - TESTS_PLUGINS: Specify an explicit list of plugins to load
73 * - TESTS_SUITES: Run specific test suites only
74 * - TESTS_SUITES_EXCLUDE: Don't run specific test suites
75 * - TESTS_REDUCED_KEYLENGTHS: Test minimal keylengths for public key tests only
76 *
77 * Please note that TESTS_PLUGINS actually must be implemented by the init
78 * callback function, as plugin loading is delegated.
79 *
80 * @param name name of test runner
81 * @param config test suite constructors with dependencies
82 * @param init_cb init/deinit callback
83 * @return test result, EXIT_SUCCESS if all tests passed
84 */
85 int test_runner_run(const char *name, test_configuration_t config[],
86 test_runner_init_t init_cb);
87
88 #endif /** TEST_RUNNER_H_ @}*/