diff options
-rw-r--r-- | include/asterisk/test.h | 8 | ||||
-rw-r--r-- | main/test.c | 4 | ||||
-rw-r--r-- | tests/test_pbx.c | 22 |
3 files changed, 32 insertions, 2 deletions
diff --git a/include/asterisk/test.h b/include/asterisk/test.h index 49731feb6..90e772cbc 100644 --- a/include/asterisk/test.h +++ b/include/asterisk/test.h @@ -241,6 +241,14 @@ struct ast_test_info { * \note The description must not end with a newline. */ const char *description; + /*! + * \brief Only run if explicitly named + * + * \details + * Run this test only if it's explicitly named on the command line. + * Do NOT run it as part of an execute category or execute all command. + */ + unsigned int explicit_only; }; #ifdef TEST_FRAMEWORK diff --git a/main/test.c b/main/test.c index 062451fb6..f45ad9b62 100644 --- a/main/test.c +++ b/main/test.c @@ -344,7 +344,7 @@ static int test_execute_multiple(const char *name, const char *category, struct execute = 0; switch (mode) { case TEST_CATEGORY: - if (!test_cat_cmp(test->info.category, category)) { + if (!test_cat_cmp(test->info.category, category) && !test->info.explicit_only) { execute = 1; } break; @@ -354,7 +354,7 @@ static int test_execute_multiple(const char *name, const char *category, struct } break; case TEST_ALL: - execute = 1; + execute = !test->info.explicit_only; } if (execute) { diff --git a/tests/test_pbx.c b/tests/test_pbx.c index 576fe1fb8..00fa41130 100644 --- a/tests/test_pbx.c +++ b/tests/test_pbx.c @@ -321,8 +321,29 @@ cleanup: return res; } +AST_TEST_DEFINE(segv) +{ + switch (cmd) { + case TEST_INIT: + info->name = "RAISE_SEGV"; + info->category = "/DO_NOT_RUN/"; + info->summary = "RAISES SEGV!!! (will only be run if explicitly called)"; + info->description = "RAISES SEGV!!! (will only be run if explicitly called). " + "This test is mainly used for testing CI and tool failure scenarios."; + info->explicit_only = 1; + return AST_TEST_NOT_RUN; + case TEST_EXECUTE: + break; + } + + raise(SIGSEGV); + + return AST_TEST_FAIL; +} + static int unload_module(void) { + AST_TEST_UNREGISTER(segv); AST_TEST_UNREGISTER(pattern_match_test); return 0; } @@ -330,6 +351,7 @@ static int unload_module(void) static int load_module(void) { AST_TEST_REGISTER(pattern_match_test); + AST_TEST_REGISTER(segv); return AST_MODULE_LOAD_SUCCESS; } |