testing: sasl
[awesomized/libmemcached] / testing / lib / Server.hpp
index 5891dea27fb83dc3b0377e977c16aee1bfe924bf..ac05eb1304a062281f06388602b607e4cb07160f 100644 (file)
@@ -15,7 +15,7 @@ public:
   using argv_t = vector<variant<arg_t, arg_pair_t>>;
 
   explicit
-  Server(string &&binary_ = "false", argv_t && args_ = {});
+  Server(string binary_ = "false", argv_t args_ = {});
 
   ~Server();
 
@@ -29,21 +29,30 @@ public:
     binary = exchange(s.binary, "false");
     args = exchange(s.args, {});
     pid = exchange(s.pid, 0);
+    pipe = exchange(s.pipe, -1);
     status = exchange(s.status, 0);
     signalled = exchange(s.signalled, {});
     socket_or_port = exchange(s.socket_or_port, {});
+    output = exchange(s.output, {});
     return *this;
   };
 
   pid_t getPid() const;
-
+  int getPipe() const;
   const string &getBinary() const;
-
   const argv_t &getArgs() const;
-
   const socket_or_port_t &getSocketOrPort() const;
 
-  optional<pid_t> start();
+  struct ChildProc {
+    pid_t pid;
+    int pipe;
+    ChildProc(pid_t pid_, int pipe_)
+    : pid{pid_}
+    , pipe{pipe_}
+    {
+    }
+  };
+  optional<ChildProc> start();
   bool stop();
 
   bool signal(int signo = SIGTERM);
@@ -52,16 +61,35 @@ public:
 
   bool wait(int flags = 0);
   bool tryWait();
+  string &drain();
+
 
 private:
   string binary;
   argv_t args;
+  bool sasl = false;
   pid_t pid = 0;
+  int pipe = -1;
   int status = 0;
   unordered_map<int, unsigned> signalled;
   socket_or_port_t socket_or_port = 11211;
+  string output;
 
   [[nodiscard]]
   vector<char *> createArgv();
   optional<string> handleArg(vector<char *> &arr, const string &arg, const arg_func_t &next_arg);
 };
+
+inline ostream &operator << (ostream &out, const socket_or_port_t sop) {
+  if (holds_alternative<string>(sop)) {
+    out << get<string>(sop);
+  } else {
+    out << ":" << get<int>(sop);
+  }
+  return out;
+}
+
+inline ostream &operator << (ostream &out, const Server &server) {
+  out << "Server{binary=" << server.getBinary() << ",pid=" << server.getPid() << ",conn=" << server.getSocketOrPort() << "}";
+  return out;
+}