]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
unit-tests: Defining TESTS_RUNNERS allows to only run specific test runners
authorTobias Brunner <tobias@strongswan.org>
Thu, 12 May 2016 12:30:54 +0000 (14:30 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 17 Jun 2016 16:48:01 +0000 (18:48 +0200)
src/libstrongswan/tests/test_runner.c
src/libstrongswan/tests/test_runner.h

index 66d0e612d7b6721f0e8918c518d1aa8cef6f306b..ed77b3c869d9b320f53102f3b3eda8bae72110c8 100644 (file)
@@ -89,6 +89,28 @@ static void apply_filter(array_t *loaded, char *filter, bool exclude)
        names->destroy(names);
 }
 
+/**
+ * Check if the given string is contained in the filter string.
+ */
+static bool is_in_filter(const char *find, char *filter)
+{
+       enumerator_t *names;
+       bool found = FALSE;
+       char *name;
+
+       names = enumerator_create_token(filter, ",", " ");
+       while (names->enumerate(names, &name))
+       {
+               if (streq(name, find))
+               {
+                       found = TRUE;
+                       break;
+               }
+       }
+       names->destroy(names);
+       return found;
+}
+
 /**
  * Removes and destroys test suites that are not selected or
  * explicitly excluded.
@@ -524,11 +546,17 @@ int test_runner_run(const char *name, test_configuration_t configs[],
        enumerator_t *enumerator;
        int passed = 0, result;
        level_t level = LEVEL_SILENT;
-       char *cfg, *verbosity;
+       char *cfg, *runners, *verbosity;
 
        /* redirect all output to stderr (to redirect make's stdout to /dev/null) */
        dup2(2, 1);
 
+       runners = getenv("TESTS_RUNNERS");
+       if (runners && !is_in_filter(name, runners))
+       {
+               return EXIT_SUCCESS;
+       }
+
        cfg = getenv("TESTS_STRONGSWAN_CONF");
 
        suites = load_suites(configs, init, cfg);
index 5c305709641381f97438684e5de9d17ff259155d..e0fe767c5f9489bf87ffcf18922c34448ffe8af5 100644 (file)
@@ -70,6 +70,7 @@ struct test_configuration_t {
  * - TESTS_VERBOSITY: Numerical loglevel for debug log
  * - TESTS_STRONGSWAN_CONF: Specify a path to a custom strongswan.conf
  * - TESTS_PLUGINS: Specify an explicit list of plugins to load
+ * - TESTS_RUNNERS: Run specific test runners only
  * - TESTS_SUITES: Run specific test suites only
  * - TESTS_SUITES_EXCLUDE: Don't run specific test suites
  * - TESTS_REDUCED_KEYLENGTHS: Test minimal keylengths for public key tests only
@@ -77,6 +78,9 @@ struct test_configuration_t {
  * Please note that TESTS_PLUGINS actually must be implemented by the init
  * callback function, as plugin loading is delegated.
  *
+ * EXIT_SUCCESS is returned right away if TESTS_RUNNERS is defined but the name
+ * passed to this function is not contained in it.
+ *
  * @param name                 name of test runner
  * @param config               test suite constructors with dependencies
  * @param init_cb              init/deinit callback