testing
authorMichael Wallner <mike@php.net>
Tue, 20 Oct 2020 12:17:07 +0000 (14:17 +0200)
committerMichael Wallner <mike@php.net>
Tue, 20 Oct 2020 12:17:07 +0000 (14:17 +0200)
14 files changed:
CMake/_Include.cmake
codecov.yml
src/bin/CMakeLists.txt
test/CMakeLists.txt
test/fixtures/callbacks.hpp [new file with mode: 0644]
test/tests/memcached/behavior.cpp
test/tests/memcached/callbacks.cpp
test/tests/memcached/regression/lp_000-434-843.cpp
test/tests/memcached/regression/lp_000-447-342.cpp
test/tests/memcached/regression/lp_000-490-486.cpp
test/tests/memcached/sasl.cpp
test/tests/memcached/servers.cpp
test/tests/memcached/simple.cpp
test/tests/memcached/util.cpp

index a1bd2e49307281b5a29a56e42e1d6458de6c1d13..8a33f964ebe9791fdea56cd997c08460cd94a3d8 100644 (file)
@@ -39,6 +39,9 @@ if(ENABLE_MEMASLAP)
     check_stdatomic()
     check_dependency(LIBEVENT event event.h)
     check_decl(getline stdio.h)
+    if(LIBEVENT AND HAVE_C_STDATOMIC)
+        set(HAVE_MEMASLAP 1)
+    endif()
 endif()
 
 ## dtrace
index bbcc1412de18861b7663d57a3cc6169cbd21228e..66e2537f30e5e8e737098b1033e6fb0897e85a24 100644 (file)
@@ -4,6 +4,7 @@ ignore:
   - "/usr"
   - "example"
   - "tests"
+  - "test/lib/catch.hpp"
 
 fixes:
   - "src/libmemcachedinternal::src/libmemcached"
index 0894b24704dc65a3693958da5626e1ea8ac4844d..a8d79732c351c9750329dd8ec0295f79ed51e301 100644 (file)
@@ -24,22 +24,20 @@ target_link_libraries(memslap PRIVATE Threads::Threads)
 
 # memaslap is special
 
-if(ENABLE_MEMASLAP)
-    if(LIBEVENT AND HAVE_C_STDATOMIC)
-        add_executable(memaslap memaslap.c
-                memaslap/ms_conn.c
-                memaslap/ms_setting.c
-                memaslap/ms_sigsegv.c
-                memaslap/ms_stats.c
-                memaslap/ms_task.c
-                memaslap/ms_thread.c)
-        target_include_directories(memaslap PRIVATE memaslap ${LIBEVENT_INCLUDEDIR})
-        target_link_libraries(memaslap PRIVATE libclient_common ${LIBEVENT_LIBRARIES} Threads::Threads)
-        if(CMAKE_INSTALL_RPATH)
-            set_target_properties(${CLIENT} PROPERTIES
-                    INSTALL_RPATH ${CMAKE_INSTALL_RPATH}/../${CMAKE_INSTALL_LIBDIR})
-        endif()
-        install(TARGETS memaslap
-                RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+if(HAVE_MEMASLAP)
+    add_executable(memaslap memaslap.c
+            memaslap/ms_conn.c
+            memaslap/ms_setting.c
+            memaslap/ms_sigsegv.c
+            memaslap/ms_stats.c
+            memaslap/ms_task.c
+            memaslap/ms_thread.c)
+    target_include_directories(memaslap PRIVATE memaslap ${LIBEVENT_INCLUDEDIR})
+    target_link_libraries(memaslap PRIVATE libclient_common ${LIBEVENT_LIBRARIES} Threads::Threads)
+    if(CMAKE_INSTALL_RPATH)
+        set_target_properties(${CLIENT} PROPERTIES
+                INSTALL_RPATH ${CMAKE_INSTALL_RPATH}/../${CMAKE_INSTALL_LIBDIR})
     endif()
+    install(TARGETS memaslap
+            RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
 endif()
index 118dbc445be2570e27c5d5127e5e0b28fab0c98c..d364ac313b4d07ebf14f8a7aaa25984e7e762b5c 100644 (file)
@@ -14,10 +14,6 @@ check_decl(pipe2 unistd.h)
 check_decl(SOCK_NONBLOCK sys/socket.h)
 check_decl(SOCK_CLOEXEC sys/socket.h)
 
-if(ENABLE_MEMASLAP AND LIBEVENT AND HAVE_C_STDATOMIC)
-    set(HAVE_MEMASLAP 1)
-endif()
-
 file(GLOB_RECURSE TESTING_SRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
 set(TESTING_ROOT ${CMAKE_CURRENT_BINARY_DIR})
 set_source_files_properties(main.cpp PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
@@ -31,6 +27,9 @@ target_include_directories(runtests PRIVATE
         ${CMAKE_BINARY_DIR}/src)
 target_link_libraries(runtests PRIVATE libhashkit libmemcachedinternal libmemcachedutil)
 add_dependencies(runtests ${CLIENTS})
+if(HAVE_MEMASLAP)
+    add_dependencies(runtests memaslap)
+endif()
 
 catch_discover_tests(runtests
         TEST_SPEC "lib*")
diff --git a/test/fixtures/callbacks.hpp b/test/fixtures/callbacks.hpp
new file mode 100644 (file)
index 0000000..52bab4c
--- /dev/null
@@ -0,0 +1,52 @@
+#include "test/lib/common.hpp"
+#include "libmemcached/common.h"
+#include "libmemcachedutil/common.h"
+
+static inline memcached_return_t ping_callback(const memcached_st *, const memcached_instance_st *instance, void *) {
+  memcached_return_t rc;
+
+  REQUIRE(libmemcached_util_ping(memcached_server_name(instance), memcached_server_port(instance), &rc));
+  REQUIRE(rc == MEMCACHED_SUCCESS);
+  return MEMCACHED_SUCCESS;
+}
+
+static inline memcached_return_t ping2_callback(const memcached_st *, const memcached_instance_st *instance, void *) {
+  memcached_return_t rc;
+
+  REQUIRE(libmemcached_util_ping2(memcached_server_name(instance), memcached_server_port(instance), "memcached", "memcached", &rc));
+  REQUIRE(rc == MEMCACHED_SUCCESS);
+  return MEMCACHED_SUCCESS;
+}
+
+static inline memcached_return_t callback_counter(const memcached_st *, memcached_result_st *, void *context) {
+  auto *counter= reinterpret_cast<size_t *>(context);
+  *counter = *counter + 1;
+
+  return MEMCACHED_SUCCESS;
+}
+
+static inline memcached_return_t delete_trigger(memcached_st *, const char *, size_t) {
+  return MEMCACHED_SUCCESS;
+}
+
+static inline memcached_return_t read_through_trigger(memcached_st *, char *, size_t, memcached_result_st *result) {
+  return memcached_result_set_value(result, S("updated by read through trigger"));
+}
+
+static inline memcached_return_t clone_callback(memcached_st *, memcached_st *) {
+  return MEMCACHED_SUCCESS;
+}
+
+static inline memcached_return_t cleanup_callback(memcached_st *) {
+  return MEMCACHED_SUCCESS;
+}
+
+static inline memcached_return_t server_sort_callback(const memcached_st *, const memcached_instance_st *server, void *context) {
+  if (context) {
+    auto bigger = reinterpret_cast<size_t *>(context);
+    REQUIRE(*bigger <= memcached_server_port(server));
+    *bigger = memcached_server_port(server);
+  }
+  return MEMCACHED_SUCCESS;
+}
+
index 3cfef2294ac330d86ee5ea603d33432c52ffe3f4..655265e99e858b6c542a6ea4d6f308625d2c3925 100644 (file)
@@ -1,12 +1,6 @@
 #include "test/lib/common.hpp"
 #include "test/lib/MemcachedCluster.hpp"
-
-static memcached_return_t callback_counter(const memcached_st *, memcached_result_st *, void *context) {
-  auto *counter = reinterpret_cast<size_t *>(context);
-  *counter = *counter + 1;
-
-  return MEMCACHED_SUCCESS;
-}
+#include "test/fixtures/callbacks.hpp"
 
 TEST_CASE("memcached_behavior") {
   auto test = MemcachedCluster::network();
index 476842ff923b14579b4fe47fefa1fafc43e36e9c..fa8b58cfdec4b4be0fb7e29cf1376452209cfa91 100644 (file)
@@ -1,21 +1,6 @@
 #include "test/lib/common.hpp"
 #include "test/lib/MemcachedCluster.hpp"
-
-static memcached_return_t delete_trigger(memcached_st *, const char *, size_t) {
-  return MEMCACHED_SUCCESS;
-}
-
-static memcached_return_t read_through_trigger(memcached_st *, char *, size_t, memcached_result_st *result) {
-  return memcached_result_set_value(result, S("updated by read through trigger"));
-}
-
-static memcached_return_t clone_callback(memcached_st *, memcached_st *) {
-  return MEMCACHED_SUCCESS;
-}
-
-static memcached_return_t cleanup_callback(memcached_st *) {
-  return MEMCACHED_SUCCESS;
-}
+#include "test/fixtures/callbacks.hpp"
 
 TEST_CASE("memcached_callbacks") {
   auto test{MemcachedCluster::mixed()};
index dc839d53733f079b1466af255c3d92136599588d..76c74be0726f663a989c3d3c5edf65d2ada9c46a 100644 (file)
@@ -1,12 +1,6 @@
 #include "test/lib/common.hpp"
 #include "test/lib/MemcachedCluster.hpp"
-
-static memcached_return_t callback_counter(const memcached_st *, memcached_result_st *, void *context) {
-  auto *counter= reinterpret_cast<size_t *>(context);
-  *counter = *counter + 1;
-
-  return MEMCACHED_SUCCESS;
-}
+#include "test/fixtures/callbacks.hpp"
 
 #define NUM_KEYS 1024
 
@@ -26,7 +20,7 @@ TEST_CASE("memcached_regression_lp434843") {
   array<string, NUM_KEYS> str;
   array<char *, NUM_KEYS> chr;
   array<size_t, NUM_KEYS> len;
-  
+
   for (auto i = 0; i < NUM_KEYS; ++i) {
     str[i] = random_ascii_string(12) + to_string(i);
     chr[i] = str[i].data();
index bd37f4848ad872f123a449395060bb934cf1b2ed..3ab5112f9a5f6551211c8fe072b0c47976416484 100644 (file)
@@ -1,27 +1,20 @@
 #include "test/lib/common.hpp"
 #include "test/lib/MemcachedCluster.hpp"
-
+#include "test/fixtures/callbacks.hpp"
 #include "libmemcached/instance.hpp"
 
-static memcached_return_t callback_counter(const memcached_st *, memcached_result_st *, void *context) {
-  auto *counter= reinterpret_cast<size_t *>(context);
-  *counter = *counter + 1;
-
-  return MEMCACHED_SUCCESS;
-}
-
 #define NUM_KEYS 100U
 
 TEST_CASE("memcached_regression_lp447342") {
   auto test = MemcachedCluster::network();
   auto memc = &test.memc;
-  
+
   REQUIRE_SUCCESS(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS, 2));
-  
+
   array<string, NUM_KEYS> str;
   array<char *, NUM_KEYS> chr;
   array<size_t, NUM_KEYS> len;
-  
+
   for (auto i = 0U; i < NUM_KEYS; ++i) {
     str[i] = random_ascii_string(random_num(12, 16)) + to_string(i);
     chr[i] = str[i].data();
@@ -42,16 +35,16 @@ TEST_CASE("memcached_regression_lp447342") {
  ** as an example for your own code, please note that you shouldn't need
  ** to do this ;-)
  */
+
  memcached_quit(memc);
+
  REQUIRE_SUCCESS(memcached_mget(memc, chr.data(), len.data(), NUM_KEYS));
 
  size_t counter = 0;
  memcached_execute_fn cb[] = {&callback_counter};
  REQUIRE_SUCCESS(memcached_fetch_execute(memc, cb, &counter, 1));
  REQUIRE(counter == NUM_KEYS);
+
  memcached_quit(memc);
 
   /*
index 1731d2d03b1c094e6906dd954f4833979005cbcd..5ec317932285e8994c323043b258010a9d957da5 100644 (file)
@@ -1,15 +1,9 @@
 #include "test/lib/common.hpp"
 #include "test/lib/MemcachedCluster.hpp"
+#include "test/fixtures/callbacks.hpp"
 
 #define NUM_KEYS 20480U
 
-static memcached_return_t callback_counter(const memcached_st *, memcached_result_st *, void *context) {
-  auto *counter= reinterpret_cast<size_t *>(context);
-  *counter = *counter + 1;
-
-  return MEMCACHED_SUCCESS;
-}
-
 TEST_CASE("memcached_regression_lp490486") {
   MemcachedCluster test{Cluster{Server{MEMCACHED_BINARY, {"-p", random_port_string}}, 1}};
   auto memc = &test.memc;
index 318a8f938c4acecd0a6057c364e627b27ad37b4d..2753d942053bcbaab7d7ca5c52c34dbf2af4a80a 100644 (file)
@@ -1,6 +1,7 @@
 #include "test/lib/common.hpp"
 #include "test/lib/Shell.hpp"
 #include "test/lib/MemcachedCluster.hpp"
+#include "test/fixtures/callbacks.hpp"
 
 TEST_CASE("memcached_sasl") {
 #if !LIBMEMCACHED_WITH_SASL_SUPPORT
@@ -27,6 +28,24 @@ TEST_CASE("memcached_sasl") {
 
     REQUIRE_SUCCESS(memcached_set_sasl_auth_data(memc, "username", "password"));
     REQUIRE_RC(MEMCACHED_AUTH_FAILURE, memcached_set(memc, S(__func__), S(__func__), 0, 0));
+
+    SECTION("getpid2") {
+      memcached_return_t rc;
+
+      for (auto &server : test.cluster.getServers()) {
+        REQUIRE(server.getPid() == libmemcached_util_getpid2("localhost", get<int>(server.getSocketOrPort()), "memcached", "memcached", &rc));
+        REQUIRE_SUCCESS(rc);
+      }
+
+      REQUIRE(-1 == libmemcached_util_getpid2("localhost", 1, "foo", "bar", &rc));
+      REQUIRE(memcached_fatal(rc));
+    }
+
+    SECTION("ping2") {
+      memcached_server_fn fptr[] = {&ping2_callback};
+
+      REQUIRE_SUCCESS(memcached_server_cursor(memc, fptr, nullptr, 1));
+    }
   }
 #endif
 }
index 6c66fdbd8dd25011648afd995a06cb3127542938..248421b203988fdf26f8629fcc3849c1469fdc34 100644 (file)
@@ -1,18 +1,6 @@
 #include "test/lib/common.hpp"
-
 #include "test/lib/MemcachedCluster.hpp"
-
-static memcached_return_t server_display_function(const memcached_st *,
-    const memcached_instance_st * server,
-    void *context)
-{
-  if (context) {
-    auto bigger = reinterpret_cast<size_t *>(context);
-    REQUIRE(*bigger <= memcached_server_port(server));
-    *bigger = memcached_server_port(server);
-  }
-  return MEMCACHED_SUCCESS;
-}
+#include "test/fixtures/callbacks.hpp"
 
 TEST_CASE("memcached_servers") {
   SECTION("memcached_servers_parse") {
@@ -60,10 +48,10 @@ TEST_CASE("memcached_servers") {
     auto local_memc = *memc;
     LoneReturnMatcher test{local_memc};
     size_t bigger = 0; /* Prime the value for the test_true in server_display_function */
-    memcached_server_fn callbacks[1]{server_display_function};
+    memcached_server_fn callbacks[1]{server_sort_callback};
 
     REQUIRE_SUCCESS(memcached_behavior_set(local_memc, MEMCACHED_BEHAVIOR_SORT_HOSTS, 1));
-    
+
     SECTION("variation 1") {
       for (uint32_t x = 0; x < 7; x++) {
         REQUIRE_SUCCESS(memcached_server_add_with_weight(local_memc, "localhost", random_port(), 0));
index 19f1ff029d3ca20c3c3d3394c2c9e863fae60f04..6856d63e3d5452b5f137551aacc02b1257d9e3d4 100644 (file)
@@ -74,5 +74,9 @@ TEST_CASE("memcached_simple") {
     DYNAMIC_SECTION("verbosity (buffered=" << buffered << ",binary=" << binary << ")") {
       REQUIRE_SUCCESS(memcached_verbosity(memc, 0));
     }
+
+    DYNAMIC_SECTION("version (buffered=" << buffered << ",binary=" << binary << ")") {
+      REQUIRE_SUCCESS(memcached_version(memc));
+    }
   }
 }
index 35a76b7eadb6e5a666a7f65eba3def1e3283afdd..3256fced7d7b01c58d54f05793f0698df90cc3a9 100644 (file)
@@ -1,17 +1,10 @@
 #include "test/lib/common.hpp"
 #include "test/lib/MemcachedCluster.hpp"
+#include "test/fixtures/callbacks.hpp"
 
 #include "libmemcached/instance.hpp"
 #include "libmemcachedutil/common.h"
 
-static memcached_return_t ping_callback(const memcached_st *, const memcached_instance_st *instance, void *) {
-  memcached_return_t rc;
-
-  REQUIRE(libmemcached_util_ping(memcached_server_name(instance), memcached_server_port(instance), &rc));
-  REQUIRE(rc == MEMCACHED_SUCCESS);
-  return MEMCACHED_SUCCESS;
-}
-
 TEST_CASE("memcached_util") {
   SECTION("version_check") {
     auto test = MemcachedCluster::mixed();
@@ -43,6 +36,7 @@ TEST_CASE("memcached_util") {
     }
   }
 
+  // see sasl.cpp for getpid2 test
   SECTION("getpid") {
     auto test = MemcachedCluster::network();
     memcached_return_t rc;
@@ -56,6 +50,7 @@ TEST_CASE("memcached_util") {
     REQUIRE(memcached_fatal(rc));
   }
 
+  // see sasl.cpp for ping2 test
   SECTION("ping") {
     auto test = MemcachedCluster::network();
     auto memc = &test.memc;