Merge in basic unittest for test framework.
[m6w6/libmemcached] / libtest / test.cc
index 49f3893b49b1d99458b6606d4f664688354b21ec..d87f1b17733b95e78ae70b0b046a32e0d065971c 100644 (file)
@@ -50,7 +50,12 @@ const char *default_socket()
   assert(global_socket[0]);
   return global_socket;
 }
+
+bool test_is_local()
+{
+  return (getenv("LIBTEST_LOCAL"));
+}
+
 void set_default_socket(const char *socket)
 {
   strncpy(global_socket, socket, strlen(socket));
@@ -138,15 +143,18 @@ static void *sig_thread(void *arg)
     int error;
     while ((error= sigwait(set, &sig)) == EINTR) ;
 
-    std::cerr << std::endl << "Signal handling thread got signal " <<  strsignal(sig) << std::endl;
     switch (sig)
     {
     case SIGSEGV:
     case SIGINT:
     case SIGABRT:
+      std::cerr << std::endl << "Signal handling thread got signal " <<  strsignal(sig) << std::endl;
       __shutdown= SHUTDOWN_FORCED;
+      break;
 
     default:
+      std::cerr << std::endl << "Signal handling thread got unexpected signal " <<  strsignal(sig) << std::endl;
+    case SIGUSR1:
       break;
     }
   }
@@ -163,6 +171,7 @@ static void setup_signals(pthread_t& thread)
   sigaddset(&set, SIGSEGV);
   sigaddset(&set, SIGABRT);
   sigaddset(&set, SIGINT);
+  sigaddset(&set, SIGUSR1);
 
   int error;
   if ((error= pthread_sigmask(SIG_BLOCK, &set, NULL)) != 0)
@@ -196,7 +205,7 @@ int main(int argc, char *argv[])
   get_world(world);
 
   test_return_t error;
-  void *creators_ptr= world->create(&error);
+  void *creators_ptr= world->create(error);
   if (test_failed(error))
   {
     std::cerr << "create() failed" << std::endl;
@@ -372,6 +381,10 @@ cleanup:
 
   stats_print(&stats);
 
+  void *retval;
+  pthread_kill(thread, SIGUSR1);
+  pthread_join(thread, &retval);
+
   delete world;
 
   return stats.failed == 0 and __shutdown == SHUTDOWN_GRACEFUL ? EXIT_SUCCESS : EXIT_FAILURE;