X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libtest%2Funittest.cc;h=7f0c7404fc2d5ca74997efaf1dc3a0bfcb281809;hb=eea484eea39c998d17b14a005a553fd229f5770d;hp=33309a7c1fc216f18a37411901efde3b67d68654;hpb=8cc058d16abc8b75b675173c6c416c5ac7a30849;p=m6w6%2Flibmemcached diff --git a/libtest/unittest.cc b/libtest/unittest.cc index 33309a7c..7f0c7404 100644 --- a/libtest/unittest.cc +++ b/libtest/unittest.cc @@ -322,6 +322,31 @@ static test_return_t application_true_BINARY(void *) return TEST_SUCCESS; } +static test_return_t application_gdb_true_BINARY2(void *) +{ + test_skip(0, access("/usr/bin/gdb", X_OK )); + Application true_app("true"); + true_app.use_gdb(); + + test_compare(Application::SUCCESS, true_app.run()); + test_compare(Application::SUCCESS, true_app.wait()); + + return TEST_SUCCESS; +} + +static test_return_t application_gdb_true_BINARY(void *) +{ + test_skip(0, access("/usr/bin/gdb", X_OK )); + Application true_app("true"); + true_app.use_gdb(); + + const char *args[]= { "--fubar", 0 }; + test_compare(Application::SUCCESS, true_app.run(args)); + test_compare(Application::SUCCESS, true_app.wait()); + + return TEST_SUCCESS; +} + static test_return_t application_true_fubar_BINARY(void *) { Application true_app("true"); @@ -334,6 +359,34 @@ static test_return_t application_true_fubar_BINARY(void *) return TEST_SUCCESS; } +static test_return_t application_doesnotexist_BINARY(void *) +{ + Application true_app("doesnotexist"); + + const char *args[]= { "--fubar", 0 }; +#if defined(TARGET_OS_OSX) && TARGET_OS_OSX + test_compare(Application::INVALID, true_app.run(args)); +#else + test_compare(Application::SUCCESS, true_app.run(args)); +#endif + // Behavior is different if we are running under valgrind + if (getenv("TESTS_ENVIRONMENT") and strstr(getenv("TESTS_ENVIRONMENT"), "valgrind")) + { + test_compare(Application::FAILURE, true_app.wait()); + } + else + { +#if defined(TARGET_OS_OSX) && TARGET_OS_OSX + test_compare(Application::FAILURE, true_app.wait()); +#else + test_compare(Application::INVALID, true_app.wait()); +#endif + } + test_compare(0, true_app.stdout_result().size()); + + return TEST_SUCCESS; +} + static test_return_t application_true_fubar_eq_doh_BINARY(void *) { Application true_app("true"); @@ -502,14 +555,61 @@ static test_return_t wait_services_BINARY2(void *) return TEST_SUCCESS; } -static test_return_t application_wait_services_BINARY2(void *) +static test_return_t wait_services_appliction_TEST(void *) { + test_skip(0, access("/usr/bin/gdb", X_OK )); test_skip(0, access("/etc/services", R_OK )); - libtest::Application("libtest/wait", true); + libtest::Application wait_app("libtest/wait", true); + wait_app.use_gdb(); + const char *args[]= { "/etc/services", 0 }; + test_compare(Application::SUCCESS, wait_app.run(args)); + test_compare(Application::SUCCESS, wait_app.wait()); - test_compare(EXIT_SUCCESS, exec_cmdline("libtest/wait", args, true)); + return TEST_SUCCESS; +} + +static test_return_t gdb_wait_services_appliction_TEST(void *) +{ +#if defined(TARGET_OS_OSX) && TARGET_OS_OSX + test_skip(0, TARGET_OS_OSX); +#endif + + test_skip(0, access("/usr/bin/gdb", X_OK )); + test_skip(0, access("/etc/services", R_OK )); + + libtest::Application wait_app("libtest/wait", true); + wait_app.use_gdb(); + + const char *args[]= { "/etc/services", 0 }; + test_compare(Application::SUCCESS, wait_app.run(args)); + test_compare(Application::SUCCESS, wait_app.wait()); + + return TEST_SUCCESS; +} + +static test_return_t gdb_abort_services_appliction_TEST(void *) +{ + test_skip(0, access("/usr/bin/gdb", X_OK )); + +#if defined(TARGET_OS_OSX) && TARGET_OS_OSX + test_skip(0, TARGET_OS_OSX); +#endif + + libtest::Application abort_app("libtest/abort", true); + abort_app.use_gdb(); + + test_compare(Application::SUCCESS, abort_app.run()); + test_compare(Application::SUCCESS, abort_app.wait()); + + std::string gdb_filename= abort_app.gdb_filename(); + const char *args[]= { "SIGABRT", gdb_filename.c_str(), 0 }; + test_compare(EXIT_SUCCESS, exec_cmdline("grep", args)); + + // Sanity test + args[0]= "THIS_WILL_NOT_BE_FOUND"; + test_compare(EXIT_FAILURE, exec_cmdline("grep", args)); return TEST_SUCCESS; } @@ -541,6 +641,21 @@ static test_return_t number_of_cpus_TEST(void *) return TEST_SUCCESS; } +static test_return_t create_tmpfile_TEST(void *) +{ + std::string tmp= create_tmpfile(__func__); + + Application touch_app("touch"); + const char *args[]= { tmp.c_str(), 0 }; + test_compare(Application::SUCCESS, touch_app.run(args)); + test_compare(Application::SUCCESS, touch_app.wait()); + + test_compare_hint(0, access(tmp.c_str(), R_OK), strerror(errno)); + test_compare_hint(0, unlink(tmp.c_str()), strerror(errno)); + + return TEST_SUCCESS; +} + static test_return_t fatal_message_TEST(void *) { test_compare(fatal_calls++, fatal::disabled_counter()); @@ -640,6 +755,9 @@ test_st cmdline_tests[] ={ {"wait --quiet --version", 0, wait_version_BINARY }, {"wait --quiet /etc/services", 0, wait_services_BINARY }, {"wait /etc/services", 0, wait_services_BINARY2 }, + {"wait /etc/services", 0, wait_services_appliction_TEST }, + {"gdb wait /etc/services", 0, gdb_wait_services_appliction_TEST }, + {"gdb abort", 0, gdb_abort_services_appliction_TEST }, {0, 0, 0} }; @@ -660,10 +778,18 @@ test_st number_of_cpus_TESTS[] ={ {0, 0, 0} }; +test_st create_tmpfile_TESTS[] ={ + {"libtest::create_tmpfile()", 0, create_tmpfile_TEST }, + {0, 0, 0} +}; + test_st application_tests[] ={ {"vchar_t", 0, vchar_t_TEST }, {"true", 0, application_true_BINARY }, + {"gbd true --fubar", 0, application_gdb_true_BINARY }, + {"gbd true", 0, application_gdb_true_BINARY2 }, {"true --fubar", 0, application_true_fubar_BINARY }, + {"doesnotexist --fubar", 0, application_doesnotexist_BINARY }, {"true --fubar=doh", 0, application_true_fubar_eq_doh_BINARY }, {"true --fubar=doh add_option()", 0, application_true_fubar_eq_doh_option_BINARY }, {"echo fubar", 0, application_echo_fubar_BINARY }, @@ -710,6 +836,7 @@ collection_st collection[] ={ {"get_free_port()", 0, 0, get_free_port_TESTS }, {"fatal", disable_fatal_exception, enable_fatal_exception, fatal_message_TESTS }, {"number_of_cpus()", 0, 0, number_of_cpus_TESTS }, + {"create_tmpfile()", 0, 0, create_tmpfile_TESTS }, {0, 0, 0, 0} };