tests: run memcached verbosely, catch output and show it on failure
[awesomized/libmemcached] / libtest / collection.cc
index 1b4915e13d75ac1802e40a9cd37906b83fb814ad..040dd8b4690ec1c4574454c948b9e9c8c6bd5465 100644 (file)
@@ -51,11 +51,14 @@ static test_return_t runner_code(libtest::Framework* frame,
   try 
   {
     _timer.reset();
+    assert(frame);
+    assert(frame->runner());
+    assert(run->test_fn);
     return_code= frame->runner()->main(run->test_fn, frame->creators_ptr());
   }
   // Special case where check for the testing of the exception
   // system.
-  catch (libtest::fatal &e)
+  catch (const libtest::fatal& e)
   {
     if (libtest::fatal::is_disabled())
     {
@@ -133,11 +136,24 @@ test_return_t Collection::exec()
         }
         libtest::cancel_alarm();
       }
-      catch (libtest::fatal &e)
+      catch (const libtest::fatal& e)
       {
-        stream::cerr(e.file(), e.line(), e.func()) << e.what();
         _failed++;
         formatter()->failed();
+        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;
       }
 
@@ -151,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:
@@ -159,7 +187,7 @@ test_return_t Collection::exec()
         break;
 
       default:
-        fatal_message("invalid return code");
+        FATAL("invalid return code");
       }
 #if 0
       @TODO add code here to allow for a collection to define a method to reset to allow tests to continue.