tests: run memcached verbosely, catch output and show it on failure
authorMichael Wallner <mike@php.net>
Tue, 21 Jan 2020 11:49:50 +0000 (12:49 +0100)
committerMichael Wallner <mike@php.net>
Tue, 21 Jan 2020 11:49:50 +0000 (12:49 +0100)
libtest/cmdline.h
libtest/collection.cc
libtest/memcached.cc
libtest/server.cc
libtest/server.h
libtest/vchar.cc
tests/libmemcached-1.0/dump.cc

index 368daaecbbbf2e18ab32b4e169ed7a9d429cc20d..52ced4bfc658463324e21ce34a3ae2eeec2b109f 100644 (file)
@@ -182,6 +182,13 @@ public:
   bool slurp();
   void murder();
 
+  void clear()
+  {
+    slurp();
+    _stdout_buffer.clear();
+    _stderr_buffer.clear();
+  }
+
   void use_gdb(bool arg)
   {
     _use_gdb= arg;
index 0b2b32492230b3f83c22229291eaeb2fdce1804f..040dd8b4690ec1c4574454c948b9e9c8c6bd5465 100644 (file)
@@ -140,7 +140,20 @@ test_return_t Collection::exec()
       {
         _failed++;
         formatter()->failed();
-        stream::make_cerr(e.file(), e.line(), e.func()) << e.what();
+        stream::make_cerr err(e.file(), e.line(), e.func());
+        err << e.what();
+        for (auto server : _frame->servers().servers)
+        {
+          auto output = server->output();
+          if (output.first.size())
+          {
+            err << "Server stdout:\n" << output.first << "\n";
+          }
+          if (output.second.size())
+          {
+            err << "Server stderr:\n" << output.second << "\n";
+          }
+        }
         throw;
       }
 
@@ -154,6 +167,18 @@ test_return_t Collection::exec()
       case TEST_FAILURE:
         _failed++;
         formatter()->failed();
+        for (auto server : _frame->servers().servers)
+        {
+          auto output = server->output();
+          if (output.first.size())
+          {
+            Out << "Server stdout:\n" << output.first << "\n";
+          }
+          if (output.second.size())
+          {
+            Out << "Server stderr:\n" << output.second << "\n";
+          }
+        }
         break;
 
       case TEST_SKIPPED:
index e35166205599cf830d35780e44aa072fddf11869..7af26092c650a12be452f1af98ead09b1cba971f 100644 (file)
@@ -214,6 +214,8 @@ bool Memcached::build()
     add_option(sasl());
   }
 
+  add_option("-vv");
+
   return true;
 }
 
index 7f3a2d1eda5947444f60a7e23392e893c7642b26..401218baeb32e1e3a5668f90cd3cdbff6190121e 100644 (file)
@@ -43,6 +43,7 @@
 #include <climits>
 #include <cstdlib>
 #include <iostream>
+#include <string>
 
 #include <algorithm> 
 #include <functional> 
@@ -129,7 +130,7 @@ Server::~Server()
 
 bool Server::check()
 {
-  _app.slurp();
+  _app.clear();
   return _app.check();
 }
 
@@ -528,4 +529,20 @@ bool Server::kill()
   return false;
 }
 
+std::pair<std::string, std::string> Server::output()
+{
+  _app.slurp();
+  return {
+    std::string {
+      _app.stdout_result().data(),
+      _app.stdout_result().size()
+    },
+    std::string {
+      _app.stderr_result().data(),
+      _app.stderr_result().size()
+    }
+  };
+}
+
+
 } // namespace libtest
index bbebe95714c2b000a9d2ee353175a8c9606cb57e..10c1d3745befe08fd3ff25852d78aeab9718ba78 100644 (file)
@@ -205,6 +205,8 @@ public:
     _log_file.clear();
   }
 
+  std::pair<std::string, std::string> output();
+
   pid_t pid() const;
 
   bool has_pid() const;
index 4af110b40e800988eeac7854204f64eb0650d582..a4bddfdeda098eb8aa9d0523b90b3ad1f65114a0 100644 (file)
@@ -160,7 +160,7 @@ void make_vector(libtest::vchar_t& arg, const char *str, size_t length)
 
 std::ostream& operator<<(std::ostream& output, const libtest::vchar_t& arg)
 {
-  std::string tmp= libtest::printer(&arg[0], arg.size());
+  std::string tmp= libtest::printer(arg.data(), arg.size());
   output << tmp <<  "[" << arg.size() << "]";
 
   return output;
index a265434cd997aef8966ec77ea5370dd888cd6cdc..1e19c4a9f0ad411066d0e60833aaf2d6a5330ed4 100644 (file)
@@ -124,7 +124,7 @@ test_return_t memcached_dump_TEST2(memcached_st *memc)
                                NULL, 0, // Zero length values
                                time_t(0), uint32_t(0)));
   }
-  //memcached_quit(memc);
+  memcached_quit(memc);
 
   uint64_t counter= 0;
   test_compare(MEMCACHED_SUCCESS,