+ return TEST_SUCCESS;
+}
+
+static test_return_t application_echo_fubar_BINARY2(void *)
+{
+ if (0)
+ {
+ test_skip(0, access("/bin/echo", X_OK ));
+ Application true_app("/bin/echo");
+
+ true_app.add_option("fubar");
+
+ ASSERT_EQ(Application::SUCCESS, true_app.run());
+ ASSERT_EQ(Application::SUCCESS, true_app.join());
+
+ libtest::vchar_t response;
+ make_vector(response, test_literal_param("fubar\n"));
+ ASSERT_EQ(response, true_app.stdout_result());
+ }
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t echo_fubar_BINARY(void *)
+{
+ const char *args[]= { "fubar", 0 };
+ ASSERT_EQ(EXIT_SUCCESS, exec_cmdline("/bin/echo", args));
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t core_count_BINARY(void *)
+{
+ const char *args[]= { 0 };
+
+ ASSERT_EQ(EXIT_SUCCESS, exec_cmdline("libtest/core-count", args, true));
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t wait_BINARY(void *)
+{
+ const char *args[]= { "--quiet", 0 };
+
+ ASSERT_EQ(EXIT_FAILURE, exec_cmdline("libtest/wait", args, true));
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t wait_help_BINARY(void *)
+{
+ const char *args[]= { "--quiet", "--help", 0 };
+
+ ASSERT_EQ(EXIT_SUCCESS, exec_cmdline("libtest/wait", args, true));
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t wait_version_BINARY(void *)
+{
+ const char *args[]= { "--quiet", "--version", 0 };
+
+ ASSERT_EQ(EXIT_SUCCESS, exec_cmdline("libtest/wait", args, true));
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t wait_services_BINARY(void *)
+{
+ test_skip(0, access("/etc/services", R_OK ));
+
+ const char *args[]= { "--quiet", "/etc/services", 0 };
+
+ ASSERT_EQ(EXIT_SUCCESS, exec_cmdline("libtest/wait", args, true));
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t wait_services_BINARY2(void *)
+{
+ test_skip(0, access("/etc/services", R_OK ));
+
+ const char *args[]= { "/etc/services", 0 };
+
+ ASSERT_EQ(EXIT_SUCCESS, exec_cmdline("libtest/wait", args, true));
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t wait_services_appliction_TEST(void *)
+{
+ test_skip(0, access("/etc/services", R_OK ));
+ test_skip(0, access("/usr/bin/gdb", X_OK ));
+ test_skip(0, access("libtest/wait", X_OK ));
+
+ libtest::Application wait_app("libtest/wait", true);
+ wait_app.use_gdb(true);
+
+ const char *args[]= { "/etc/services", 0 };
+ ASSERT_EQ(Application::SUCCESS, wait_app.run(args));
+ ASSERT_EQ(Application::SUCCESS, wait_app.join());
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t gdb_wait_services_appliction_TEST(void *)
+{
+ test_skip(true, false);
+#if defined(TARGET_OS_OSX) && TARGET_OS_OSX
+ test_skip(0, TARGET_OS_OSX);
+#endif
+
+ test_skip(0, access("/etc/services", R_OK ));
+ test_skip(0, access("/usr/bin/gdb", X_OK ));
+ test_skip(0, access("libtest/wait", X_OK ));
+
+ libtest::Application wait_app("libtest/wait", true);
+ wait_app.use_gdb(true);
+
+ const char *args[]= { "/etc/services", 0 };
+ ASSERT_EQ(Application::SUCCESS, wait_app.run(args));
+ ASSERT_EQ(Application::SUCCESS, wait_app.join());
+
+ return TEST_SUCCESS;
+}
+
+static test_return_t gdb_abort_services_appliction_TEST(void *)
+{
+ test_skip(0, access("/usr/bin/gdb", X_OK ));
+ test_skip(0, access("libtest/abort", X_OK ));
+ test_skip(true, false);
+
+#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(true);
+
+ ASSERT_EQ(Application::SUCCESS, abort_app.run());
+ ASSERT_EQ(Application::SUCCESS, abort_app.join());
+
+ std::string gdb_filename= abort_app.gdb_filename();
+ test_skip(0, access(gdb_filename.c_str(), R_OK ));
+ const char *args[]= { "SIGABRT", gdb_filename.c_str(), 0 };
+ ASSERT_EQ(EXIT_SUCCESS, exec_cmdline("grep", args));
+
+ // Sanity test
+ args[0]= "THIS_WILL_NOT_BE_FOUND";
+ ASSERT_EQ(EXIT_FAILURE, exec_cmdline("grep", args));
+
+ return TEST_SUCCESS;