Small cleanups.
authorBrian Aker <brian@tangent.org>
Mon, 18 Jul 2011 22:11:41 +0000 (15:11 -0700)
committerBrian Aker <brian@tangent.org>
Mon, 18 Jul 2011 22:11:41 +0000 (15:11 -0700)
Makefile.am
libmemcached/options/parser.am
libtest/comparison.hpp [new file with mode: 0644]
libtest/include.am
libtest/signal.cc
libtest/test.h
libtest/test.hpp

index 30aa1337269350de8e72f70bdd0842ff3af7d886..17e549e76bfaa94533269bd4190685c5d20bed7a 100644 (file)
@@ -43,6 +43,7 @@ include tests/include.am
 include example/include.am
 include support/include.am
 include poll/include.am
+include util/include.am
 include win32/include.am
 include docs/include.am
 
index 7bfd21c7518430ea8be29c8d8d9caf9ef9b5a0db..8bf6b65f92d225c31e99fb1c288502c4d585f2eb 100644 (file)
@@ -1,4 +1,4 @@
-#  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+# vim:ft=automake
 #
 #  Libmemcached Scanner and Parser
 #
@@ -17,6 +17,9 @@
 #  You should have received a copy of the GNU Affero General Public License
 #  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+EXTRA_DIST+= \
+            libmemcached/options/parser.yy \
+            libmemcached/options/scanner.l
 
 libmemcached/options/parser.h: libmemcached/options/parser.cc
 
diff --git a/libtest/comparison.hpp b/libtest/comparison.hpp
new file mode 100644 (file)
index 0000000..f02e8d8
--- /dev/null
@@ -0,0 +1,90 @@
+/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ * 
+ *  libtest
+ *
+ *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ *
+ *      * Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ *      * Redistributions in binary form must reproduce the above
+ *  copyright notice, this list of conditions and the following disclaimer
+ *  in the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ *      * The names of its contributors may not be used to endorse or
+ *  promote products derived from this software without specific prior
+ *  written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#pragma once
+
+namespace libtest {
+
+template <class T_comparable, class T_hint>
+bool _compare_true_hint(const char *file, int line, const char *func, T_comparable __expected, const char *assertation_label,  T_hint __hint)
+{
+  if (__expected == false)
+  {
+    libtest::stream::make_cerr(file, line, func) << "Assertation  \"" << assertation_label << "\" failed, hint: " << __hint;
+    return false;
+  }
+
+  return true;
+}
+
+template <class T_comparable>
+bool _compare(const char *file, int line, const char *func, T_comparable __expected, T_comparable __actual)
+{
+  if (__expected != __actual)
+  {
+    libtest::stream::make_cerr(file, line, func) << "Expected \"" << __expected << "\" got \"" << __actual << "\"";
+    return false;
+  }
+
+  return true;
+}
+
+template <class T_comparable>
+bool _compare_zero(const char *file, int line, const char *func, T_comparable __actual)
+{
+  if (T_comparable(0) != __actual)
+  {
+    libtest::stream::make_cerr(file, line, func) << "Expected 0 got \"" << __actual << "\"";
+    return false;
+  }
+
+  return true;
+}
+
+template <class T_comparable, class T_hint>
+bool _compare_hint(const char *file, int line, const char *func, T_comparable __expected, T_comparable __actual, T_hint __hint)
+{
+  if (__expected != __actual)
+  {
+    libtest::stream::make_cerr(file, line, func) << "Expected \"" << __expected << "\" got \"" << __actual << "\" Additionally: \"" << __hint << "\"";
+
+    return false;
+  }
+
+  return true;
+}
+
+} // namespace libtest
index be4f73ae49a4615eeda2f589b52462b458645b79..b7cddea607ad3afcc35be7a359f041956ec4f5fa 100644 (file)
@@ -25,6 +25,7 @@ noinst_HEADERS+= \
                 libtest/callbacks.h \
                 libtest/cmdline.h \
                 libtest/collection.h \
+                libtest/comparison.hpp \
                 libtest/common.h \
                 libtest/core.h \
                 libtest/error.h \
@@ -38,6 +39,7 @@ noinst_HEADERS+= \
                 libtest/server.h \
                 libtest/signal.h \
                 libtest/stats.h \
+                libtest/stream.h \
                 libtest/strerror.h \
                 libtest/test.h \
                 libtest/test.hpp \
index c5ec42ba2cb037bebaee65d9ef36ce4e1c6c24e3..d62221eb51b78f2c4bd016e850f139223e22044e 100644 (file)
@@ -38,7 +38,7 @@
 
 #include <pthread.h>
 #include <semaphore.h>
-#include <signal.h>
+#include <csignal>
 
 #include <libtest/signal.h>
 
@@ -51,18 +51,16 @@ struct context_st {
   context_st()
   {
     sigemptyset(&set);
-    sigaddset(&set, SIGABRT);
+    sigaddset(&set, SIGQUIT);
     sigaddset(&set, SIGINT);
-    sigaddset(&set, SIGUSR2);
 
     sem_init(&lock, 0, 0);
   }
   
   void test()
   {
-    assert(sigismember(&set, SIGABRT));
+    assert(sigismember(&set, SIGQUIT));
     assert(sigismember(&set, SIGINT));
-    assert(sigismember(&set, SIGUSR2));
   }
 
   int wait(int& sig)
@@ -98,7 +96,7 @@ void set_shutdown(shutdown_t arg)
 
   if (arg == SHUTDOWN_GRACEFUL)
   {
-    pthread_kill(thread, SIGUSR2);
+    pthread_kill(thread, SIGQUIT);
 
     void *retval;
     pthread_join(thread, &retval);
@@ -137,14 +135,13 @@ static void *sig_thread(void *arg)
 
     switch (sig)
     {
-    case SIGABRT:
     case SIGINT:
-      Error << "Signal handling thread got signal " <<  strsignal(sig);
-      set_shutdown(SHUTDOWN_FORCED);
-      break;
-
-      // Signal thread is being told that a graceful shutdown is occuring
-    case SIGUSR2:
+    case SIGQUIT:
+      if (is_shutdown() == false)
+      {
+        Error << "Signal handling thread got signal " <<  strsignal(sig);
+        set_shutdown(SHUTDOWN_FORCED);
+      }
       break;
 
     default:
@@ -169,6 +166,19 @@ void setup_signals()
 
   assert(context);
 
+  sigset_t old_set;
+  sigemptyset(&old_set);
+  pthread_sigmask(SIG_BLOCK, NULL, &old_set);
+
+  if (sigismember(&old_set, SIGQUIT))
+  {
+    Error << strsignal(SIGQUIT) << " has been previously set.";
+  }
+  if (sigismember(&old_set, SIGINT))
+  {
+    Error << strsignal(SIGINT) << " has been previously set.";
+  }
+
   int error;
   if ((error= pthread_sigmask(SIG_BLOCK, &context->set, NULL)) != 0)
   {
index 79725126d8cffb3382bb704a85908b5afd3d1305..6117959b386e18e6ef6a5b41adf9db9131f77a32 100644 (file)
 #endif
 
 #include <libtest/stream.h>
-
-LIBTEST_API
-const char* default_socket();
-
-LIBTEST_API
-void set_default_socket(const char *socket);
-
+#include <libtest/comparison.hpp>
 
 /**
   A structure describing the test case.
@@ -29,9 +23,6 @@ struct test_st {
   test_callback_fn *test_fn;
 };
 
-LIBTEST_API
-bool test_is_local(void);
-
 #define test_assert_errno(A) \
 do \
 { \
@@ -75,22 +66,10 @@ do \
   } \
 } while (0)
 
-template <class T_comparable, class T_hint>
-bool _true_hint(const char *file, int line, const char *func, T_comparable __expected, const char *assertation_label,  T_hint __hint)
-{
-  if (__expected == false)
-  {
-    libtest::stream::make_cerr(file, line, func) << "Assertation  \"" << assertation_label << "\" failed, hint: " << __hint;
-    return false;
-  }
-
-  return true;
-}
-
 #define test_true_got(__expected, __hint) \
 do \
 { \
-  if (not _true_hint(__FILE__, __LINE__, __func__, ((__expected)), #__expected, ((__hint)))) \
+  if (not libtest::_compare_true_hint(__FILE__, __LINE__, __func__, ((__expected)), #__expected, ((__hint)))) \
   { \
     create_core(); \
     return TEST_FAILURE; \
@@ -137,47 +116,10 @@ do \
   } \
 } while (0)
 
-template <class T_comparable>
-bool _compare(const char *file, int line, const char *func, T_comparable __expected, T_comparable __actual)
-{
-  if (__expected != __actual)
-  {
-    libtest::stream::make_cerr(file, line, func) << "Expected \"" << __expected << "\" got \"" << __actual << "\"";
-    return false;
-  }
-
-  return true;
-}
-
-template <class T_comparable>
-bool _compare_zero(const char *file, int line, const char *func, T_comparable __actual)
-{
-  if (T_comparable(0) != __actual)
-  {
-    libtest::stream::make_cerr(file, line, func) << "Expected 0 got \"" << __actual << "\"";
-    return false;
-  }
-
-  return true;
-}
-
-template <class T_comparable, class T_hint>
-bool _compare_hint(const char *file, int line, const char *func, T_comparable __expected, T_comparable __actual, T_hint __hint)
-{
-  if (__expected != __actual)
-  {
-    libtest::stream::make_cerr(file, line, func) << "Expected \"" << __expected << "\" got \"" << __actual << "\" Additionally: \"" << __hint << "\"";
-
-    return false;
-  }
-
-  return true;
-}
-
 #define test_compare(__expected, __actual) \
 do \
 { \
-  if (not _compare(__FILE__, __LINE__, __func__, ((__expected)), ((__actual)))) \
+  if (not libtest::_compare(__FILE__, __LINE__, __func__, ((__expected)), ((__actual)))) \
   { \
     create_core(); \
     return TEST_FAILURE; \
@@ -187,7 +129,7 @@ do \
 #define test_zero(__actual) \
 do \
 { \
-  if (not _compare_zero(__FILE__, __LINE__, __func__, ((__actual)))) \
+  if (not libtest::_compare_zero(__FILE__, __LINE__, __func__, ((__actual)))) \
   { \
     create_core(); \
     return TEST_FAILURE; \
@@ -197,7 +139,7 @@ do \
 #define test_compare_got(__expected, __actual, __hint) \
 do \
 { \
-  if (not _compare_hint(__FILE__, __LINE__, __func__, (__expected), (__actual), (__hint))) \
+  if (not libtest::_compare_hint(__FILE__, __LINE__, __func__, (__expected), (__actual), (__hint))) \
   { \
     create_core(); \
     return TEST_FAILURE; \
index e60895fa464881c420c547222980d55fc5143c0c..b2c89722d856e2e98dd43c892493c78768a7c557 100644 (file)
 #pragma once
 
 LIBTEST_API
-  in_port_t default_port();
+in_port_t default_port();
 
 LIBTEST_API
-  void set_default_port(in_port_t port);
+void set_default_port(in_port_t port);
 
 LIBTEST_API
-  const char* default_socket();
+const char* default_socket();
 
 LIBTEST_API
-  void set_default_socket(const char *socket);
+void set_default_socket(const char *socket);
+
+LIBTEST_API
+bool test_is_local(void);
 
 #ifdef __cplusplus
 #define test_literal_param(X) (X), (static_cast<size_t>((sizeof(X) - 1)))