flush
[m6w6/libmemcached] / testing / lib / common.hpp
index 6daa357beb07dbec1f2aa91478adb427d375db96..c1ef43ae9f27394b6acceb79b13e7196a0bca221 100644 (file)
@@ -11,7 +11,8 @@
 #include <variant>
 #include <vector>
 
-#include "../lib/catch.hpp"
+#include "testing/lib/catch.hpp"
+#include "testing/lib/random.hpp"
 
 #include "libmemcached/memcached.h"
 
@@ -22,29 +23,25 @@ using socket_or_port_t = variant<string, int>;
  * Useful macros for testing
  */
 #define S(s) (s),strlen(s)
+#define DECLARE_STREQUAL static auto strequal = equal_to<string>();
 #define LOOPED_SECTION(tests) \
   for (auto &[name, test] : tests) DYNAMIC_SECTION("test " << name)
-#define REQUIRE_SUCCESS(rc) REQUIRE_THAT(rc, test.returns.success())
-#define REQUIRE_RC(rc, call) REQUIRE_THAT(call, test.returns(rc))
-
+#define REQUIRE_SUCCESS(rc) do { \
+    INFO("expected: SUCCESS");   \
+    REQUIRE_THAT(rc, test.returns.success()); \
+  } while(0)
+#define REQUIRE_RC(rc, call) do { \
+    INFO("expected: " << memcached_strerror(nullptr, rc)); \
+    REQUIRE_THAT(call, test.returns(rc));                  \
+  } while(0)
 
 const char *getenv_else(const char *var, const char *defval);
-unsigned random_num(unsigned min, unsigned max);
-unsigned random_port();
-string random_socket();
-string random_socket_or_port_string(const string &what);
-string random_socket_or_port_flag(const string &binary);
-
-inline auto random_socket_or_port_arg() {
-  return make_pair(&random_socket_or_port_flag, &random_socket_or_port_string);
-}
 
 inline memcached_return_t fetch_all_results(memcached_st *memc, unsigned int &keys_returned, memcached_return_t &rc) {
   keys_returned = 0;
 
   memcached_result_st *result = nullptr;
-  while ((result = memcached_fetch_result(memc, result, &rc)))
-  {
+  while ((result = memcached_fetch_result(memc, result, &rc))) {
     REQUIRE(MEMCACHED_SUCCESS == rc);
     keys_returned += 1;
   }
@@ -78,16 +75,18 @@ public:
   }
 };
 
+template<class T>
 class Malloced {
-  void *ptr;
+  T *ptr;
 public:
-  Malloced(void *ptr_)
+  Malloced(T *ptr_)
   : ptr{ptr_}
   {}
   ~Malloced() {
-    free(ptr);
+    if(ptr)
+      free(ptr);
   }
-  void *operator *() {
+  auto operator *() {
     return ptr;
   }
 };