From ce81e6a5c1acbb1d73211f71b90236cfe2129da4 Mon Sep 17 00:00:00 2001 From: Colin Patrick McCabe Date: Mon, 27 Dec 2010 17:37:39 -0800 Subject: [PATCH] signals: test infinite_recursion Signed-off-by: Colin McCabe --- src/test/TestSignalHandlers.cc | 43 +++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/test/TestSignalHandlers.cc b/src/test/TestSignalHandlers.cc index df4fe4f80edc2..cceb42b418aa9 100644 --- a/src/test/TestSignalHandlers.cc +++ b/src/test/TestSignalHandlers.cc @@ -35,6 +35,24 @@ static int* get_null() return 0; } +static void simple_segv_test() +{ + dout(0) << "triggering SIGSEGV..." << dendl; + int i = *get_null(); + std::cout << "i = " << i << std::endl; +} + +static void infinite_recursion_test_impl() +{ + infinite_recursion_test_impl(); +} + +static void infinite_recursion_test() +{ + dout(0) << "triggering SIGSEGV with infinite recursion..." << dendl; + infinite_recursion_test_impl(); +} + static std::string get_tmp_filename() { char tmp[PATH_MAX]; @@ -55,6 +73,15 @@ static std::string get_tmp_filename() return string(tmp); } +static void usage() +{ + derr << "usage: TestSignalHandlers [test]" << dendl; + derr << "Tests:" << dendl; + derr << " simple_segv" << dendl; + derr << " infinite_recursion" << dendl; + generic_client_usage(); // Will exit() +} + int main(int argc, const char **argv) { string tmp_log_file(get_tmp_filename()); @@ -71,9 +98,19 @@ int main(int argc, const char **argv) g_conf.log_file = tmp_log_file.c_str(); common_init(args, "TestSignalHandlers", true); - dout(0) << "triggering SIGSEGV..." << dendl; - int i = *get_null(); - std::cout << "i = " << i << std::endl; + DEFINE_CONF_VARS(usage); + FOR_EACH_ARG(args) { + if (CONF_ARG_EQ("simple_segv", 's')) { + simple_segv_test(); + } + else if (CONF_ARG_EQ("infinite_recursion", 'r')) { + infinite_recursion_test(); + } + else if (CONF_ARG_EQ("help", 'h')) { + usage(); + } + } + std::cout << "Please select a test to run." << std::endl; return 0; } -- 2.39.5