libmemcached: add MEMCACHED_BEHAVIOR_META_PROTOCOL
[awesomized/libmemcached] / test / lib / common.hpp
index a76a1ca8f8c94d80116cc75dabe9d470013f6d58..3984560176fe989c81a764b58515c3149df59e32 100644 (file)
@@ -16,6 +16,7 @@
 #pragma once
 
 #include <chrono>
+#include <cstring>
 #include <iostream>
 #include <map>
 #include <optional>
@@ -28,6 +29,7 @@
 
 #include "test/conf.h"
 #include "test/lib/catch.hpp"
+#include "test/lib/env.hpp"
 #include "test/lib/random.hpp"
 
 #include "libmemcached/memcached.h"
@@ -38,23 +40,18 @@ 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 S(s) (s), strlen(s)
 #define LOOPED_SECTION(tests) \
   for (auto &[name, test] : tests) DYNAMIC_SECTION("test " << name)
 #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);
-
 inline memcached_return_t fetch_all_results(memcached_st *memc, unsigned int &keys_returned,
                                             memcached_return_t &rc) {
   keys_returned = 0;
@@ -87,11 +84,22 @@ public:
     close(fd);
     unlink(fn);
   }
-  int getFd() const { return fd; }
-  const char *getFn() const { return fn; }
+  [[nodiscard]] int getFd() const { return fd; }
+  [[nodiscard]] const char *getFn() const { return fn; }
   bool put(const char *buf, size_t len) const {
     return static_cast<ssize_t>(len) == write(fd, buf, len);
   }
+  string get() const {
+    string all;
+    char buf[200];
+    ssize_t len;
+
+    lseek(fd, 0, SEEK_SET);
+    while (0 < (len = read(fd, buf, sizeof(buf)))) {
+      all.append(buf, len);
+    }
+    return all;
+  }
 
 private:
   char fn[80];
@@ -102,12 +110,20 @@ class MemcachedPtr {
 public:
   memcached_st *memc;
 
-  explicit MemcachedPtr(memcached_st *memc_) { memc = memc_; }
+  explicit MemcachedPtr(memcached_st *memc_) {
+    memc = memc_;
+  }
   MemcachedPtr()
   : MemcachedPtr(memcached_create(nullptr)) {}
-  ~MemcachedPtr() { memcached_free(memc); }
-  memcached_st *operator*() const { return memc; }
-  auto operator->() const { return memc; }
+  ~MemcachedPtr() {
+    memcached_free(memc);
+  }
+  memcached_st *operator*() const {
+    return memc;
+  }
+  auto operator->() const {
+    return memc;
+  }
 };
 
 template<class T>
@@ -127,6 +143,6 @@ public:
     if (ptr)
       free(ptr);
   }
-  auto operator*() { return ptr; }
-  auto operator->() { return ptr; }
+  auto operator*() const { return ptr; }
+  auto operator->() const { return ptr; }
 };