From e347c3ba4e8368833dfb4a6a4515c750adf1e38b Mon Sep 17 00:00:00 2001 From: Brian Aker Date: Mon, 18 Jul 2011 15:11:41 -0700 Subject: [PATCH] Small cleanups. --- Makefile.am | 1 + libmemcached/options/parser.am | 5 +- libtest/comparison.hpp | 90 ++++++++++++++++++++++++++++++++++ libtest/include.am | 2 + libtest/signal.cc | 36 +++++++++----- libtest/test.h | 68 ++----------------------- libtest/test.hpp | 11 +++-- 7 files changed, 132 insertions(+), 81 deletions(-) create mode 100644 libtest/comparison.hpp diff --git a/Makefile.am b/Makefile.am index 30aa1337..17e549e7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 diff --git a/libmemcached/options/parser.am b/libmemcached/options/parser.am index 7bfd21c7..8bf6b65f 100644 --- a/libmemcached/options/parser.am +++ b/libmemcached/options/parser.am @@ -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 . +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 index 00000000..f02e8d88 --- /dev/null +++ b/libtest/comparison.hpp @@ -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 +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 +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 +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 +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 diff --git a/libtest/include.am b/libtest/include.am index be4f73ae..b7cddea6 100644 --- a/libtest/include.am +++ b/libtest/include.am @@ -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 \ diff --git a/libtest/signal.cc b/libtest/signal.cc index c5ec42ba..d62221eb 100644 --- a/libtest/signal.cc +++ b/libtest/signal.cc @@ -38,7 +38,7 @@ #include #include -#include +#include #include @@ -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) { diff --git a/libtest/test.h b/libtest/test.h index 79725126..6117959b 100644 --- a/libtest/test.h +++ b/libtest/test.h @@ -12,13 +12,7 @@ #endif #include - -LIBTEST_API -const char* default_socket(); - -LIBTEST_API -void set_default_socket(const char *socket); - +#include /** 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 -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 -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 -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 -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; \ diff --git a/libtest/test.hpp b/libtest/test.hpp index e60895fa..b2c89722 100644 --- a/libtest/test.hpp +++ b/libtest/test.hpp @@ -64,16 +64,19 @@ #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((sizeof(X) - 1))) -- 2.30.2