X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=test%2Flib%2FServer.cpp;h=cf520094029949cb94b0ac7d9d61087858370f04;hb=6b7d2bf0319e0bd48bd6aa4ad8c56a935f98b0d2;hp=af6e41ba63d5a1f010f3c9ca0de0aef13bd2d989;hpb=e9b1c46e3490e2940ec36cfa53ffcee5945a27d2;p=m6w6%2Flibmemcached diff --git a/test/lib/Server.cpp b/test/lib/Server.cpp index af6e41ba..cf520094 100644 --- a/test/lib/Server.cpp +++ b/test/lib/Server.cpp @@ -3,7 +3,9 @@ #include "ForkAndExec.hpp" #include -#include +#if HAVE_UNISTD_H +# include +#endif Server::Server(string binary_, Server::argv_t args_) : binary{move(binary_)} @@ -67,7 +69,8 @@ vector Server::createArgv() { vector arr; pushArg(arr, binary); - //pushArg(arr, "-v"); + pushArg(arr, "-u"); + pushArg(arr, "nobody"); for (auto it = args.cbegin(); it != args.cend(); ++it) { if (holds_alternative(*it)) { @@ -116,7 +119,7 @@ optional Server::start() { return ChildProc{pid, pipe}; } -bool Server::isListening() { +bool Server::isListening() const { MemcachedPtr memc; if (holds_alternative(socket_or_port)) { @@ -148,11 +151,16 @@ bool Server::isListening() { } bool Server::ensureListening() { + if (!start()) { + return false; + } return Retry{[this] { again: start(); if (!isListening()) { - if (tryWait()){ + auto old = pid; + if (tryWait()) { + cerr << "Collected zombie " << *this << "(old pid=" << old << ")\n"; goto again; } } @@ -185,7 +193,8 @@ bool Server::check() { bool Server::wait(int flags) { if (pid && pid == waitpid(pid, &status, flags)) { - if (drain().length() && output != "Signal handled: Terminated.\n") { + if (drain().length() && + output.rfind("Signal handled: Terminated", 0) != 0) { cerr << "Output of " << *this << ":\n"; istringstream iss{output};