Update libtest.
authorBrian Aker <brian@tangent.org>
Sun, 8 Apr 2012 00:22:59 +0000 (17:22 -0700)
committerBrian Aker <brian@tangent.org>
Sun, 8 Apr 2012 00:22:59 +0000 (17:22 -0700)
libtest/cmdline.cc
libtest/cmdline.h
libtest/memcached.cc
libtest/server.cc

index f6d1e3d65fae37624b283e4f5f4d2598bd18ac0f..cbc9d0a6d66a7e138fa38f2fcc197ce1923e3bd4 100644 (file)
@@ -244,8 +244,9 @@ Application::error_t Application::run(const char *args[])
   stdout_fd.close(Application::Pipe::WRITE);
   stderr_fd.close(Application::Pipe::WRITE);
 
-  if (spawn_ret)
+  if (spawn_ret != 0)
   {
+    Error << strerror(spawn_ret) << "(" << spawn_ret << ")";
     _pid= -1;
     return Application::INVALID;
   }
index a387bcf5b5834583792b3e7a5f393b10ac387a45..12086b0f87828ca55f3114b6429d03d30261911c 100644 (file)
@@ -90,6 +90,11 @@ public:
     return _stderr_buffer;
   }
 
+  const char* stderr_c_str() const
+  {
+    return &_stderr_buffer[0];
+  }
+
   size_t stderr_result_length() const
   {
     return _stderr_buffer.size();
index ffb21c9d504154f3a47af9e4008e91c9fbecfe6c..e634df631eb372ab966bb1625fb2a71ea1d52a16 100644 (file)
@@ -134,9 +134,10 @@ public:
       ret= libmemcached_util_ping(hostname().c_str(), port(), &rc);
     }
 
-    if (memcached_failed(rc) or not ret)
+    if (memcached_failed(rc) or ret == false)
     {
       Error << "libmemcached_util_ping(" << hostname() << ", " << port() << ") error: " << memcached_strerror(NULL, rc);
+      abort();
     }
 
     return ret;
index 3141eed9e94ccd6777faf2b4a45f2fcb8b914aae..c1d01c749e4d3353d32a63301904385448cd3dd1 100644 (file)
@@ -182,15 +182,24 @@ bool Server::start()
     dream(5, 50000);
   }
 
-  if (pid_file().empty() == false)
+  size_t repeat= 5;
+  while (--repeat)
   {
-    Wait wait(pid_file(), 8);
-
-    if (wait.successful() == false)
+    if (pid_file().empty() == false)
     {
-      throw libtest::fatal(LIBYATL_DEFAULT_PARAM,
-                           "Unable to open pidfile for: %s",
-                           _running.c_str());
+      Wait wait(pid_file(), 8);
+
+      if (wait.successful() == false)
+      {
+        if (_app.check())
+        {
+          continue;
+        }
+
+        throw libtest::fatal(LIBYATL_DEFAULT_PARAM,
+                             "Unable to open pidfile for: %s",
+                             _running.c_str());
+      }
     }
   }
 
@@ -220,19 +229,22 @@ bool Server::start()
   if (pinged == false)
   {
     // If we happen to have a pid file, lets try to kill it
-    if (pid_file().empty() == false)
+    if ((pid_file().empty() == false) and (access(pid_file().c_str(), R_OK) == 0))
     {
       if (kill_file(pid_file()) == false)
       {
         throw libtest::fatal(LIBYATL_DEFAULT_PARAM, "Failed to kill off server after startup occurred, when pinging failed: %s", pid_file().c_str());
       }
-      Error << "Failed to ping(), waited:" << this_wait 
-        << " server started, having pid_file. exec:" << _running 
-        << " error:" << _app.stderr_result();
+
+      throw libtest::fatal(LIBYATL_DEFAULT_PARAM, 
+                           "Failed to ping(), waited: %u server started, having pid_file. exec: %s error:%s",
+                           this_wait, _running.c_str(), _app.stderr_c_str()); 
     }
     else
     {
-      Error << "Failed to ping() server started. exec:" << _running;
+      throw libtest::fatal(LIBYATL_DEFAULT_PARAM,
+                           "Failed to ping() server started. exec: %s",
+                           _running.c_str());
     }
     _running.clear();
     return false;