diff options
author | George Joseph <gjoseph@digium.com> | 2017-05-24 14:50:56 -0600 |
---|---|---|
committer | George Joseph <gjoseph@digium.com> | 2017-05-24 14:56:14 -0600 |
commit | 65898c3af82e2d780a48d9d50d3b1c952c208a89 (patch) | |
tree | 92235fde577cdf951a62489c06ec6947e957f0cf | |
parent | 1bddf1efc342a44f08e2f2d40f70f070b4ac542e (diff) |
unittests: Add a unit test that causes a SEGV and...
...that can only be run by explicitly calling it with
'test execute category /DO_NOT_RUN/ name RAISE_SEGV'
This allows us to more easily test CI and debugging tools that
should do certain things when asterisk coredumps.
To allow this a new member was added to the ast_test_info
structure named 'explicit_only'. If set by a test, the test
will be skipped during a 'test execute all' or
'test execute category ...'.
Change-Id: Ia3a11856aae4887df9a02b6b081cc777b36eb6ed
-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 e9b56ebd8..d22f2ebea 100644 --- a/main/test.c +++ b/main/test.c @@ -346,7 +346,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; @@ -356,7 +356,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 bb5d8e871..acf7484c1 100644 --- a/tests/test_pbx.c +++ b/tests/test_pbx.c @@ -323,8 +323,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; } @@ -332,6 +353,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; } |