libmemcached: add MEMCACHED_BEHAVIOR_META_PROTOCOL
[awesomized/libmemcached] / test / lib / ReturnMatcher.cpp
index 863945e827961549cfad4b68eca83968c269262f..ab3b33f7fb4c39c03af9411dde448d826a95cffc 100644 (file)
@@ -1,13 +1,15 @@
 #include "ReturnMatcher.hpp"
-
-ReturnMatcher &ReturnMatcher::operator=(ReturnMatcher &&rm) {
-  memc = exchange(rm.memc, nullptr);
-  expected = rm.expected;
-  return *this;
-}
+#include "libmemcached/error.hpp"
 
 bool ReturnMatcher::match(const memcached_return_t &arg) const {
-  return arg == expected;
+  actual->v = arg;
+  if (arg != expected) {
+    if (expected == MEMCACHED_SUCCESS && arg == MEMCACHED_BUFFERED && memc) {
+      return memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS);
+    }
+    return false;
+  }
+  return true;
 }
 
 ReturnMatcher ReturnMatcher::success() {
@@ -18,11 +20,17 @@ ReturnMatcher ReturnMatcher::operator()(memcached_return_t expected_) {
   return ReturnMatcher{memc, expected_};
 }
 
-string ReturnMatcher::describe() const {
-  return "is " + to_string(expected)
-         + "\n  actual: " + memcached_last_error_message(memc);
+ReturnMatcher &ReturnMatcher::operator=(memcached_st *memc_) {
+  memc = memc_;
+  return *this;
 }
 
-ReturnMatcher::ReturnMatcher(ReturnMatcher &&rm) {
-  *this = move(rm);
+string ReturnMatcher::describe() const {
+  return "is " + to_string(expected) + "\n"
+      +  "expected:\n"
+      +  "  " + memcached_strerror(memc, expected) + "\n"
+      +  "actual:\n"
+      +  "  " + memcached_strerror(memc, actual->v) + "\n"
+      +  "  " + (memcached_has_current_error(*memc) ? memcached_last_error_message(memc) : "");
 }
+