fix #95
[awesomized/libmemcached] / test / tests / memcached / callbacks.cpp
index 1fc20ef618544606594b8b629b2f6642f5d407c2..625698b6bb7d38e279780946e24357fee7a3bbae 100644 (file)
@@ -30,25 +30,37 @@ TEST_CASE("memcached_callbacks") {
   }
 
   SECTION("get_failure callback") {
-    void *gptr = reinterpret_cast<void *>(reinterpret_cast<intptr_t>(&read_through_trigger));
+    void *gptr = reinterpret_cast<void *>(reinterpret_cast<intptr_t>(&get_failure));
     Malloced empty(memcached_get(memc, S(__func__), nullptr, nullptr, &rc));
     REQUIRE_FALSE(*empty);
     REQUIRE_RC(MEMCACHED_NOTFOUND, rc);
 
-    REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_GET_FAILURE, gptr));
-    REQUIRE(gptr == memcached_callback_get(memc, MEMCACHED_CALLBACK_GET_FAILURE, &rc));
-    REQUIRE_SUCCESS(rc);
+    uint64_t buffering = GENERATE(0, 1);
+
+    DYNAMIC_SECTION("buffering: " << buffering) {
+      REQUIRE_SUCCESS(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, buffering));
+      REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_GET_FAILURE, gptr));
+      REQUIRE(gptr == memcached_callback_get(memc, MEMCACHED_CALLBACK_GET_FAILURE, &rc));
+      REQUIRE_SUCCESS(rc);
 
-    for (int twice = 0; twice < 2; ++twice) {
-      uint32_t flags;
-      size_t len;
-      Malloced val(memcached_get(memc, S(__func__), &len, &flags, &rc));
+      for (int twice = 0; twice < 2; ++twice) {
+        uint32_t flags;
+        size_t len;
+        Malloced val(memcached_get(memc, S(__func__), &len, &flags, &rc));
 
+        REQUIRE_SUCCESS(rc);
+        REQUIRE(string("updated by read through trigger") == string(*val, len));
+        REQUIRE_FALSE((*val)[len]);
+      }
+
+      REQUIRE_SUCCESS(memcached_set(memc, S(__func__), S("changed"), 0, 0));
+      memcached_quit(memc);
+      Malloced val(memcached_get(memc, S(__func__), nullptr, nullptr, &rc));
       REQUIRE_SUCCESS(rc);
-      REQUIRE(string("updated by read through trigger") == string(*val, len));
-      REQUIRE_FALSE((*val)[len]);
+      REQUIRE("changed"s == *val);
     }
   }
+
   SECTION("clone callback") {
     void *cptr = reinterpret_cast<void *>(reinterpret_cast<intptr_t>(&clone_callback));