Clean up cppcheck and add SKIP_UNLESS
authorBrian Aker <brian@tangent.org>
Sun, 21 Apr 2013 08:19:20 +0000 (04:19 -0400)
committerBrian Aker <brian@tangent.org>
Sun, 21 Apr 2013 08:19:20 +0000 (04:19 -0400)
libmemcached/connect.cc
libmemcached/hosts.cc
libtest/has.cc
libtest/has.hpp
libtest/http.cc
libtest/lite.h
libtest/unittest.cc
tests/libmemcached_world.h

index 659d34078ce2f168523186b447c4ba6db4775cba..b19ba716915f9ffa41f74340dc678241e4aa6807 100644 (file)
@@ -760,7 +760,7 @@ static memcached_return_t _memcached_connect(memcached_instance_st* server, cons
   case MEMCACHED_CONNECTION_TCP:
     rc= network_connect(server);
 
-#ifdef LIBMEMCACHED_WITH_SASL_SUPPORT
+#if defined(LIBMEMCACHED_WITH_SASL_SUPPORT)
     if (LIBMEMCACHED_WITH_SASL_SUPPORT)
     {
       if (server->fd != INVALID_SOCKET and server->root->sasl.callbacks)
index 121e8f7c5700b613b64eb217527589f7bce34b1a..75bfbee696875e6c22a7f74756d4a9e3005f3cca 100644 (file)
@@ -591,7 +591,7 @@ memcached_return_t memcached_server_add_parsed(memcached_st *ptr,
                                                in_port_t port,
                                                uint32_t weight)
 {
-  char buffer[MEMCACHED_NI_MAXHOST];
+  char buffer[MEMCACHED_NI_MAXHOST]= { 0 };
 
   memcpy(buffer, hostname, hostname_length);
   buffer[hostname_length]= 0;
index fd25550e08c0b1693fe0c40bb3a2dcad615f7106..b957bc6a49a23ce26e1c46f116985241084101d2 100644 (file)
 
 namespace libtest {
 
+bool has_libmemcached_sasl(void)
+{
+#if defined(LIBMEMCACHED_WITH_SASL_SUPPORT) && LIBMEMCACHED_WITH_SASL_SUPPORT
+  if (LIBMEMCACHED_WITH_SASL_SUPPORT)
+  {
+    return true;
+  }
+#endif
+
+  return false;
+}
+
 bool has_libmemcached(void)
 {
 #if defined(HAVE_LIBMEMCACHED) && HAVE_LIBMEMCACHED
@@ -85,7 +97,7 @@ bool has_postgres_support(void)
 
 bool has_gearmand()
 {
-#if defined(HAVE_GEARMAND_BINARY) && HAVE_GEARMAND_BINARY
+#if defined(GEARMAND_BINARY) && defined(HAVE_GEARMAND_BINARY) && HAVE_GEARMAND_BINARY
   if (HAVE_GEARMAND_BINARY)
   {
     std::stringstream arg_buffer;
@@ -111,7 +123,7 @@ bool has_gearmand()
 
 bool has_drizzled()
 {
-#if defined(HAVE_DRIZZLED_BINARY) && HAVE_DRIZZLED_BINARY
+#if defined(DRIZZLED_BINARY) && defined(HAVE_DRIZZLED_BINARY) && HAVE_DRIZZLED_BINARY
   if (HAVE_DRIZZLED_BINARY)
   {
     if (access(DRIZZLED_BINARY, X_OK) == 0)
@@ -126,7 +138,7 @@ bool has_drizzled()
 
 bool has_mysqld()
 {
-#if defined(HAVE_MYSQLD_BUILD) && HAVE_MYSQLD_BUILD
+#if defined(MYSQLD_BINARY) && defined(HAVE_MYSQLD_BUILD) && HAVE_MYSQLD_BUILD
   if (HAVE_MYSQLD_BUILD)
   {
     if (access(MYSQLD_BINARY, X_OK) == 0)
@@ -141,11 +153,11 @@ bool has_mysqld()
 
 static char memcached_binary_path[FILENAME_MAX];
 
-static void initialize_curl_startup()
+static void initialize_memcached_binary_path()
 {
   memcached_binary_path[0]= 0;
 
-#if defined(HAVE_MEMCACHED_BINARY) && HAVE_MEMCACHED_BINARY
+#if defined(MEMCACHED_BINARY) && defined(HAVE_MEMCACHED_BINARY) && HAVE_MEMCACHED_BINARY
   if (HAVE_MEMCACHED_BINARY)
   {
     std::stringstream arg_buffer;
@@ -170,7 +182,7 @@ static pthread_once_t memcached_binary_once= PTHREAD_ONCE_INIT;
 static void initialize_memcached_binary(void)
 {
   int ret;
-  if ((ret= pthread_once(&memcached_binary_once, initialize_curl_startup)) != 0)
+  if ((ret= pthread_once(&memcached_binary_once, initialize_memcached_binary_path)) != 0)
   {
     FATAL(strerror(ret));
   }
@@ -181,6 +193,7 @@ bool has_memcached()
   initialize_memcached_binary();
 
   if (memcached_binary_path[0])
+  if (memcached_binary_path[0] and (strlen(memcached_binary_path) > 0))
   {
     return true;
   }
@@ -200,29 +213,61 @@ const char* memcached_binary()
   return NULL;
 }
 
-bool has_memcached_sasl()
+static char memcached_sasl_binary_path[FILENAME_MAX];
+
+static void initialize_has_memcached_sasl()
 {
-#if defined(HAVE_MEMCACHED_SASL_BINARY) && HAVE_MEMCACHED_SASL_BINARY
-  if (HAVE_MEMCACHED_SASL_BINARY)
+  memcached_sasl_binary_path[0]= 0;
+
+#if defined(MEMCACHED_BINARY) &&  defined(HAVE_MEMCACHED_BINARY) && HAVE_MEMCACHED_BINARY
+  if (HAVE_MEMCACHED_BINARY)
   {
-    if (access(MEMCACHED_SASL_BINARY, X_OK) == 0)
+    std::stringstream arg_buffer;
+
+    char *getenv_ptr;
+    if (bool((getenv_ptr= getenv("PWD"))) and strcmp(MEMCACHED_BINARY, "memcached/memcached") == 0)
     {
-      return true;
+      arg_buffer << getenv_ptr;
+      arg_buffer << "/";
+    }
+    arg_buffer << MEMCACHED_BINARY;
+
+    if (access(arg_buffer.str().c_str(), X_OK) == 0)
+    {
+      strncpy(memcached_sasl_binary_path, arg_buffer.str().c_str(), FILENAME_MAX);
     }
   }
 #endif
+}
+
+bool has_memcached_sasl()
+{
+  initialize_has_memcached_sasl();
+
+  if (memcached_sasl_binary_path[0] and (strlen(memcached_sasl_binary_path) > 0))
+  {
+    return true;
+  }
 
   return false;
 }
 
 const char *gearmand_binary() 
 {
+#if defined(GEARMAND_BINARY)
   return GEARMAND_BINARY;
+#else
+  return NULL;
+#endif
 }
 
 const char *drizzled_binary() 
 {
+#if defined(DRIZZLED_BINARY)
   return DRIZZLED_BINARY;
+#else
+  return NULL;
+#endif
 }
 
 } // namespace libtest
index f38306d5852802767046caf3c44b912016e5935a..59ee88f96716a94d1a70a1cda55afdac7d547490 100644 (file)
@@ -38,6 +38,9 @@
 
 namespace libtest {
 
+LIBTEST_API
+bool has_libmemcached_sasl(void);
+
 LIBTEST_API
 bool has_libmemcached();
 
index 621c714c2f1c616166a105d21b7c0fca90d6bdbd..c6caa09f297bfc9dba8ad9f99f5ee2615ad514cb 100644 (file)
@@ -97,14 +97,14 @@ static void init(CURL *curl, const std::string& url)
   (void)http_get_result_callback;
   (void)curl;
   (void)url;
+#if defined(HAVE_LIBCURL) && HAVE_LIBCURL
   if (HAVE_LIBCURL)
   {
-#if defined(HAVE_LIBCURL) && HAVE_LIBCURL
     assert(curl);
     curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
     curl_easy_setopt(curl, CURLOPT_USERAGENT, YATL_USERAGENT);
-#endif
   }
+#endif
 }
 
 HTTP::HTTP(const std::string& url_arg) :
@@ -118,9 +118,9 @@ bool GET::execute()
 {
   (void)init;
 
+#if defined(HAVE_LIBCURL) && HAVE_LIBCURL
   if (HAVE_LIBCURL)
   {
-#if defined(HAVE_LIBCURL) && HAVE_LIBCURL
     CURL *curl= curl_easy_init();
 
     init(curl, url());
@@ -134,17 +134,17 @@ bool GET::execute()
     curl_easy_cleanup(curl);
 
     return bool(retref == CURLE_OK);
-#endif
   }
+#endif
 
   return false;
 }
 
 bool POST::execute()
 {
+#if defined(HAVE_LIBCURL) && HAVE_LIBCURL
   if (HAVE_LIBCURL)
   {
-#if defined(HAVE_LIBCURL) && HAVE_LIBCURL
     CURL *curl= curl_easy_init();;
 
     init(curl, url());
@@ -158,17 +158,17 @@ bool POST::execute()
     curl_easy_cleanup(curl);
 
     return bool(retref == CURLE_OK);
-#endif
   }
+#endif
 
   return false;
 }
 
 bool TRACE::execute()
 {
+#if defined(HAVE_LIBCURL) && HAVE_LIBCURL
   if (HAVE_LIBCURL)
   {
-#if defined(HAVE_LIBCURL) && HAVE_LIBCURL
     CURL *curl= curl_easy_init();;
 
     init(curl, url());
@@ -183,17 +183,17 @@ bool TRACE::execute()
     curl_easy_cleanup(curl);
 
     return retref == CURLE_OK;
-#endif
   }
+#endif
 
   return false;
 }
 
 bool HEAD::execute()
 {
+#if defined(HAVE_LIBCURL) && HAVE_LIBCURL
   if (HAVE_LIBCURL)
   {
-#if defined(HAVE_LIBCURL) && HAVE_LIBCURL
     CURL *curl= curl_easy_init();;
 
     init(curl, url());
@@ -207,8 +207,8 @@ bool HEAD::execute()
     curl_easy_cleanup(curl);
 
     return retref == CURLE_OK;
-#endif
   }
+#endif
 
   return false;
 }
index 342be97d820bc85abcd244ba4a65cffeaee33987..36f873e8be6649649e1da6db33003306f830b5bc 100644 (file)
@@ -140,6 +140,34 @@ do \
   } \
 } while (0)
 
+#define SKIP_UNLESS(__expression) \
+do \
+{ \
+  if (! (__expression)) { \
+    if (YATL_FULL) { \
+      SKIP(#__expression); \
+    } \
+    fprintf(stdout, "\n%s:%d: %s SKIP '(%s)'\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, #__expression); \
+    exit(EXIT_SKIP); \
+  } \
+} while (0)
+
+#define SKIP_UNLESS_(__expression, ...) \
+do \
+{ \
+  if (! (__expression)) { \
+    size_t ask= snprintf(0, 0, __VA_ARGS__); \
+    ask++; \
+    char *buffer= (char*)alloca(sizeof(char) * ask); \
+    snprintf(buffer, ask, __VA_ARGS__); \
+    if (YATL_FULL) { \
+      SKIP(#__expression, buffer); \
+    } \
+    fprintf(stdout, "\n%s:%d: %s SKIP '%s' [ %s ]\n", __FILE__, __LINE__, __PRETTY_FUNCTION__, #__expression, buffer); \
+    exit(EXIT_SKIP); \
+  } \
+} while (0)
+
 #define ASSERT_TRUE(__expression) \
 do \
 { \
index 1663e59a6311a41cdd423e5cdfa818c3bd291f54..59351762645175738a6b366c716e19bfa67c0a1e 100644 (file)
@@ -142,6 +142,25 @@ static test_return_t test_throw_skip_macro_TEST(void *)
   return TEST_FAILURE;
 }
 
+static test_return_t test_throw_skip_unless_macro_TEST(void *)
+{
+  try {
+    SKIP_UNLESS(false);
+  }
+  catch (const libtest::__skipped&)
+  {
+    return TEST_SUCCESS;
+  }
+  catch (...)
+  {
+    FAIL("SLIP_UNLESS() failed to throw libtest::_skipped");
+  }
+
+  FAIL("SLIP_UNLESS() failed to throw");
+
+  return TEST_FAILURE;
+}
+
 static test_return_t test_throw_skip_TEST(void *)
 {
   try {
@@ -1043,6 +1062,7 @@ test_st tests_log[] ={
   {"SUCCESS", false, test_throw_success_TEST },
   {"libtest::__skipped", false, test_throw_skip_TEST },
   {"SKIP_IF", false, test_throw_skip_macro_TEST },
+  {"SKIP_UNLESS", false, test_throw_skip_unless_macro_TEST },
   {"FAIL", false, test_throw_fail_TEST },
   {"ASSERT_FALSE_", false, ASSERT_FALSE__TEST },
   {"ASSERT_FALSE", false, ASSERT_FALSE_TEST },
index 3dda2d8ada2a8c78624ed0b1a5601fc90c7ecbfb..6bed25a9624a5458187aa165cdd847e3eeb20083 100644 (file)
 
 static void *world_create(libtest::server_startup_st& servers, test_return_t& error)
 {
-  if (libtest::has_memcached() == false)
-  {
-    error= TEST_SKIPPED;
-    return NULL;
-  }
+  SKIP_UNLESS(libtest::has_libmemcached());
 
   if (servers.sasl())
   {
-    if (LIBMEMCACHED_WITH_SASL_SUPPORT == 0)
-    {
-      error= TEST_SKIPPED;
-      return NULL;
-    }
+    SKIP_UNLESS(libtest::has_libmemcached_sasl());
 
-    if (HAVE_MEMCACHED_SASL_BINARY == 0)
-    {
-      error= TEST_SKIPPED;
-      return NULL;
-    }
-    
     // Assume we are running under valgrind, and bail
     if (getenv("TESTS_ENVIRONMENT"))
     {