From 15d1646b2048caffbfaf2b7562665d38afe92688 Mon Sep 17 00:00:00 2001 From: Brian Aker Date: Mon, 29 Oct 2012 05:12:10 -0400 Subject: [PATCH] Fixes from merge of libtest from Gearman. --- configure.ac | 3 - libtest/cmdline.cc | 16 ++- libtest/memcached.cc | 193 ++---------------------------- libtest/server.cc | 3 +- libtest/server.h | 2 +- libtest/server_container.cc | 28 ----- libtest/unittest.cc | 14 --- tests/libmemcached-1.0/include.am | 3 + 8 files changed, 29 insertions(+), 233 deletions(-) diff --git a/configure.ac b/configure.ac index b98efaf3..d9d1cd48 100644 --- a/configure.ac +++ b/configure.ac @@ -245,9 +245,6 @@ AC_DEFINE([GEARMAND_BLOBSLAP_WORKER], [0], [Support for Gearman Blobslap worker] AC_DEFINE([HAVE_LIBPQ], [0], [Support for Postgres]) AC_DEFINE([HAVE_LIBCURL], [0], [Support for libcurl]) -AC_DEFINE([HAVE_MEMCACHED_LIGHT_BINARY], [1], [Support for memcached_light]) -AC_DEFINE([MEMCACHED_LIGHT_BINARY], ["example/memcached_light"], [Support for memcached_light]) - dnl Check for the requirements for running memcached with less privileges dnl than the default privilege set. On Solaris we need setppriv and priv.h dnl If you want to add support for other platforms you should check for diff --git a/libtest/cmdline.cc b/libtest/cmdline.cc index 360e38ea..97eddd07 100644 --- a/libtest/cmdline.cc +++ b/libtest/cmdline.cc @@ -35,7 +35,7 @@ */ #include "mem_config.h" -#include +#include "libtest/common.h" using namespace libtest; @@ -45,8 +45,12 @@ using namespace libtest; #include #include #include -#include -#include +#ifdef HAVE_POLL_H +# include +#endif +#ifdef HAVE_SPAWN_H +# include +#endif #include #include #include @@ -424,7 +428,7 @@ Application::error_t Application::join() } else if WIFSIGNALED(_status) { - if (WTERMSIG(_status) != SIGTERM) + if (WTERMSIG(_status) != SIGTERM and WTERMSIG(_status) != SIGHUP) { _app_exit_state= Application::INVALID_POSIX_SPAWN; std::string error_string(built_argv[0]); @@ -433,8 +437,8 @@ Application::error_t Application::join() throw std::runtime_error(error_string); } - _app_exit_state= Application::SIGTERM_KILLED; - Error << "waitpid() application terminated at request" + // If we terminted it on purpose then it counts as a success. + Out << "waitpid() application terminated at request" << " pid:" << _pid << " name:" << built_argv[0]; } diff --git a/libtest/memcached.cc b/libtest/memcached.cc index 7d792075..b59dc22f 100644 --- a/libtest/memcached.cc +++ b/libtest/memcached.cc @@ -35,13 +35,12 @@ */ #include "mem_config.h" + #include #include #include -using namespace libtest; - #include #include #include @@ -62,19 +61,7 @@ using namespace libtest; #pragma GCC diagnostic ignored "-Wold-style-cast" #endif -using namespace libtest; - -namespace { - bool is_memcached_libtool() - { - if (MEMCACHED_BINARY and strcmp(MEMCACHED_BINARY, "memcached/memcached") == 0) - { - return true; - } - - return false; - } -} +namespace libtest { class Memcached : public libtest::Server { @@ -88,14 +75,14 @@ public: const std::string& username_arg, const std::string& password_arg) : libtest::Server(host_arg, port_arg, - MEMCACHED_BINARY, is_memcached_libtool(), is_socket_arg), + MEMCACHED_BINARY, false, is_socket_arg), _username(username_arg), _password(password_arg) { } Memcached(const std::string& host_arg, const in_port_t port_arg, const bool is_socket_arg) : libtest::Server(host_arg, port_arg, - MEMCACHED_BINARY, is_memcached_libtool(), is_socket_arg) + MEMCACHED_BINARY, false, is_socket_arg) { set_pid_file(); } @@ -129,6 +116,11 @@ public: return false; } + if (is_socket()) + { + return _app.check(); + } + SimpleClient client(_hostname, _port); std::string response; @@ -147,7 +139,7 @@ public: bool is_libtool() { - return is_memcached_libtool(); + return false; } virtual void pid_file_option(Application& app, const std::string& arg) @@ -202,137 +194,6 @@ public: bool build(size_t argc, const char *argv[]); }; -class MemcachedLight : public libtest::Server -{ - -public: - MemcachedLight(const std::string& host_arg, const in_port_t port_arg) : - libtest::Server(host_arg, port_arg, MEMCACHED_LIGHT_BINARY, true) - { - set_pid_file(); - } - - bool ping() - { - // Memcached is slow to start, so we need to do this - if (not pid_file().empty()) - { - if (not wait_for_pidfile()) - { - Error << "Pidfile was not found:" << pid_file(); - return false; - } - } - - std::stringstream error_message; - pid_t local_pid= get_pid_from_file(pid_file(), error_message); - if (local_pid > 0) - { - if (::kill(local_pid, 0) == 0) - { - return true; - } - } - - return false; - } - - const char *name() - { - return "memcached_light"; - }; - - const char *executable() - { - return MEMCACHED_LIGHT_BINARY; - } - - virtual void port_option(Application& app, in_port_t arg) - { - char buffer[1024]; - snprintf(buffer, sizeof(buffer), "--port=%d", int(arg)); - app.add_option(buffer); - } - - bool has_port_option() const - { - return true; - } - - bool is_libtool() - { - return true; - } - - void log_file_option(Application& app, const std::string& arg) - { - if (arg.empty() == false) - { - std::string buffer("--log-file="); - buffer+= arg; - app.add_option("--verbose"); - app.add_option(buffer); - } - } - - bool has_log_file_option() const - { - return true; - } - - bool build(size_t argc, const char *argv[]); -}; - -class MemcachedSaSL : public Memcached -{ -public: - MemcachedSaSL(const std::string& host_arg, - const in_port_t port_arg, - const bool is_socket_arg, - const std::string& username_arg, - const std::string &password_arg) : - Memcached(host_arg, port_arg, is_socket_arg, username_arg, password_arg) - { } - - const char *name() - { - return "memcached-sasl"; - }; - - const char *sasl() const - { - return " -S -B binary "; - } - - const char *executable() - { - return MEMCACHED_SASL_BINARY; - } - - bool ping() - { - memcached_return_t rc; - bool ret; - - if (has_socket()) - { - ret= libmemcached_util_ping2(socket().c_str(), 0, username().c_str(), password().c_str(), &rc); - } - else - { - ret= libmemcached_util_ping2(hostname().c_str(), port(), username().c_str(), password().c_str(), &rc); - } - - if (memcached_failed(rc) or ret == false) - { - error(memcached_strerror(NULL, rc)); - } - - return ret; - } - -}; - #include @@ -362,18 +223,6 @@ bool Memcached::build(size_t argc, const char *argv[]) return true; } -bool MemcachedLight::build(size_t argc, const char *argv[]) -{ - for (size_t x= 0 ; x < argc ; x++) - { - add_option(argv[x]); - } - - return true; -} - -namespace libtest { - libtest::Server *build_memcached(const std::string& hostname, const in_port_t try_port) { return new Memcached(hostname, try_port, false); @@ -384,31 +233,15 @@ libtest::Server *build_memcached_socket(const std::string& socket_file, const in return new Memcached(socket_file, try_port, true); } -libtest::Server *build_memcached_light(const std::string& hostname, const in_port_t try_port) -{ - return new MemcachedLight(hostname, try_port); -} - - libtest::Server *build_memcached_sasl(const std::string& hostname, const in_port_t try_port, const std::string& username, const std::string &password) { if (username.empty()) { - return new MemcachedSaSL(hostname, try_port, false, "memcached", "memcached"); + return new Memcached(hostname, try_port, false, "memcached", "memcached"); } - return new MemcachedSaSL(hostname, try_port, false, username, password); + return new Memcached(hostname, try_port, false, username, password); } -libtest::Server *build_memcached_sasl_socket(const std::string& socket_file, const in_port_t try_port, const std::string& username, const std::string &password) -{ - if (username.empty()) - { - return new MemcachedSaSL(socket_file, try_port, true, "memcached", "memcached"); - } - - return new MemcachedSaSL(socket_file, try_port, true, username, password); -} - -} +} // namespace libtest diff --git a/libtest/server.cc b/libtest/server.cc index 23ea8d74..01d15625 100644 --- a/libtest/server.cc +++ b/libtest/server.cc @@ -210,6 +210,7 @@ bool Server::start() _app.use_valgrind(); } + out_of_ban_killed(false); if (args(_app) == false) { throw libtest::disconnected(LIBYATL_DEFAULT_PARAM, @@ -268,7 +269,7 @@ bool Server::start() bool pinged= false; uint32_t this_wait= 0; { - uint32_t timeout= 20; // This number should be high enough for valgrind startup (which is slow) + uint32_t timeout= 40; // This number should be high enough for valgrind startup (which is slow) uint32_t waited; uint32_t retry; diff --git a/libtest/server.h b/libtest/server.h index f27ce08f..7ec3096c 100644 --- a/libtest/server.h +++ b/libtest/server.h @@ -232,7 +232,7 @@ public: bool is_socket() const { - return _hostname[0] == '/'; + return _is_socket; } const std::string running() const diff --git a/libtest/server_container.cc b/libtest/server_container.cc index 79f0ad31..113f085c 100644 --- a/libtest/server_container.cc +++ b/libtest/server_container.cc @@ -259,16 +259,6 @@ bool server_startup_st::start_server(const std::string& server_type, in_port_t t } } } - else if (server_type.compare("memcached-light") == 0) - { - if (MEMCACHED_LIGHT_BINARY) - { - if (HAVE_LIBMEMCACHED) - { - server= build_memcached_light("localhost", try_port); - } - } - } if (server == NULL) { @@ -353,24 +343,6 @@ bool server_startup_st::start_socket_server(const std::string& server_type, cons { Error << "Socket files are not supported for gearmand yet"; } - else if (server_type.compare("memcached-sasl") == 0) - { - if (MEMCACHED_SASL_BINARY) - { - if (HAVE_LIBMEMCACHED) - { - server= build_memcached_sasl_socket("localhost", try_port, username(), password()); - } - else - { - Error << "Libmemcached was not found"; - } - } - else - { - Error << "No memcached binary is available"; - } - } else if (server_type.compare("memcached") == 0) { if (MEMCACHED_BINARY) diff --git a/libtest/unittest.cc b/libtest/unittest.cc index 21081141..f8432476 100644 --- a/libtest/unittest.cc +++ b/libtest/unittest.cc @@ -290,20 +290,6 @@ static test_return_t gearmand_cycle_test(void *object) return TEST_SUCCESS; } -#if 0 -static test_return_t memcached_light_cycle_TEST(void *object) -{ - server_startup_st *servers= (server_startup_st*)object; - test_true(servers); - - test_skip(true, bool(HAVE_MEMCACHED_LIGHT_BINARY)); - - test_true(server_startup(*servers, "memcached-light", get_free_port(), 0, NULL, false)); - - return TEST_SUCCESS; -} -#endif - static test_return_t skip_shim(bool a, bool b) { test_skip(a, b); diff --git a/tests/libmemcached-1.0/include.am b/tests/libmemcached-1.0/include.am index e5f00b9b..6ffc2986 100644 --- a/tests/libmemcached-1.0/include.am +++ b/tests/libmemcached-1.0/include.am @@ -171,6 +171,9 @@ noinst_PROGRAMS+= tests/libmemcached-1.0/testsocket test-socket: tests/libmemcached-1.0/testsocket @tests/libmemcached-1.0/testsocket +gdb-socket: tests/libmemcached-1.0/testsocket + @$(DEBUG_COMMAND) tests/libmemcached-1.0/testsocket + tests_libmemcached_1_0_sasl_SOURCES= tests_libmemcached_1_0_sasl_DEPENDENCIES= tests_libmemcached_1_0_sasl_LDADD= -- 2.30.2