Fixes from merge of libtest from Gearman.
authorBrian Aker <brian@tangent.org>
Mon, 29 Oct 2012 09:12:10 +0000 (05:12 -0400)
committerBrian Aker <brian@tangent.org>
Mon, 29 Oct 2012 09:12:10 +0000 (05:12 -0400)
configure.ac
libtest/cmdline.cc
libtest/memcached.cc
libtest/server.cc
libtest/server.h
libtest/server_container.cc
libtest/unittest.cc
tests/libmemcached-1.0/include.am

index b98efaf3cd030df491fbfb5a0bee0c0a7709a322..d9d1cd48252cebdfbfe877caa88d0d418a1ffc98 100644 (file)
@@ -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
index 360e38ea75cd70e16d52ce517a6261233fc878da..97eddd07aa6463497a9a419374412c25e8e6818f 100644 (file)
@@ -35,7 +35,7 @@
  */
 
 #include "mem_config.h"
-#include <libtest/common.h>
+#include "libtest/common.h"
 
 using namespace libtest;
 
@@ -45,8 +45,12 @@ using namespace libtest;
 #include <fcntl.h>
 #include <fstream>
 #include <memory>
-#include <poll.h>
-#include <spawn.h>
+#ifdef HAVE_POLL_H
+# include <poll.h>
+#endif
+#ifdef HAVE_SPAWN_H
+# include <spawn.h>
+#endif
 #include <sstream>
 #include <string>
 #include <sys/stat.h>
@@ -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];
     }
index 7d7920751c9bf8b66508d630a7a8c9d2f45e2cdf..b59dc22fa03c7efed4658828aad5a1dc410b5b96 100644 (file)
  */
 
 #include "mem_config.h"
+
 #include <libtest/common.h>
 
 #include <libmemcached-1.0/memcached.h>
 #include <libmemcachedutil-1.0/util.h>
 
-using namespace libtest;
-
 #include <cassert>
 #include <cerrno>
 #include <cstdio>
@@ -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 <sstream>
 
@@ -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
 
index 23ea8d74a8bb8fdbdb38f4ffda96ce1f767359d3..01d15625bf043e2712dccf8658899c40aafa8b53 100644 (file)
@@ -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;
 
index f27ce08f7455066598b6ac333b7eef079cdcc1a9..7ec3096cf6e9372ed7dc0f97ab108486d1d833a2 100644 (file)
@@ -232,7 +232,7 @@ public:
 
   bool is_socket() const
   {
-    return _hostname[0] == '/';
+    return _is_socket;
   }
 
   const std::string running() const
index 79f0ad31d0ee647a686d148fd141ba1462a4177e..113f085c9ff113b3880278defbe3e3ab927832e4 100644 (file)
@@ -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)
index 21081141423a5476595e115fae8d367b42697821..f8432476ab10d2f7ea557c1a67fd1abe4b6d2f12 100644 (file)
@@ -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);
index e5f00b9b147d22298f73f6b7ff8c0312b5b6d709..6ffc2986190652334245325519dce8a832c181e4 100644 (file)
@@ -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=