diff options
author | Jenkins2 <jenkins2@gerrit.asterisk.org> | 2017-05-25 14:44:35 -0500 |
---|---|---|
committer | Gerrit Code Review <gerrit2@gerrit.digium.api> | 2017-05-25 14:44:35 -0500 |
commit | 24318aac454269aa60c203420936ec1047359ebd (patch) | |
tree | f9f1d2ccaa2c1cfa91e8651ffac9b7c80e4e84aa | |
parent | d6992daaefee1a44a188aa544fc79cab24d274f0 (diff) | |
parent | 08edd54c1b11ec35bfa988bf9d3115e6ae9a94f3 (diff) |
Merge "unittests: Add a unit test that causes a SEGV and..."
-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; } |