From: George Joseph Date: Wed, 24 May 2017 20:50:56 +0000 (-0600) Subject: unittests: Add a unit test that causes a SEGV and... X-Git-Tag: 14.6.0-rc1~67^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=61b9b3fd116f9336338df84208d8b95fbafbb462;p=thirdparty%2Fasterisk.git 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 --- diff --git a/include/asterisk/test.h b/include/asterisk/test.h index 49731feb67..90e772cbc7 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 2f6200f96f..c367678319 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 88451672d6..571ec48f13 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; }