X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=test%2Ftests%2Fmemcached%2Fcallbacks.cpp;h=625698b6bb7d38e279780946e24357fee7a3bbae;hb=fd66e60622e8e139753f62454cfdd5be662e39a0;hp=476842ff923b14579b4fe47fefa1fafc43e36e9c;hpb=7e2b466107a65e22f1cc258ca8643922dbb60352;p=m6w6%2Flibmemcached diff --git a/test/tests/memcached/callbacks.cpp b/test/tests/memcached/callbacks.cpp index 476842ff..625698b6 100644 --- a/test/tests/memcached/callbacks.cpp +++ b/test/tests/memcached/callbacks.cpp @@ -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()}; @@ -45,74 +30,85 @@ TEST_CASE("memcached_callbacks") { } SECTION("get_failure callback") { - void *gptr = reinterpret_cast(reinterpret_cast(&read_through_trigger)); + void *gptr = reinterpret_cast(reinterpret_cast(&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); - - for (int twice = 0; twice < 2; ++twice) { - uint32_t flags; - size_t len; - Malloced val(memcached_get(memc, S(__func__), &len, &flags, &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); - REQUIRE(string("updated by read through trigger") == string(*val, len)); - REQUIRE_FALSE((*val)[len]); - } - SECTION("clone callback") { - void *cptr = reinterpret_cast(reinterpret_cast(&clone_callback)); + 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(memcached_callback_set(memc, MEMCACHED_CALLBACK_CLONE_FUNCTION, cptr)); - REQUIRE(cptr == memcached_callback_get(memc, MEMCACHED_CALLBACK_CLONE_FUNCTION, &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("changed"s == *val); } + } - SECTION("cleanup callback") { - void *cptr = reinterpret_cast(reinterpret_cast(cleanup_callback)); + SECTION("clone callback") { + void *cptr = reinterpret_cast(reinterpret_cast(&clone_callback)); - REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_CLEANUP_FUNCTION, cptr)); - REQUIRE(cptr == memcached_callback_get(memc, MEMCACHED_CALLBACK_CLEANUP_FUNCTION, &rc)); - REQUIRE_SUCCESS(rc); - } + REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_CLONE_FUNCTION, cptr)); + REQUIRE(cptr == memcached_callback_get(memc, MEMCACHED_CALLBACK_CLONE_FUNCTION, &rc)); + REQUIRE_SUCCESS(rc); + } - SECTION("namespace") { - void *ns; + SECTION("cleanup callback") { + void *cptr = reinterpret_cast(reinterpret_cast(cleanup_callback)); - REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, "ns")); - ns = memcached_callback_get(memc, MEMCACHED_CALLBACK_NAMESPACE, &rc); - REQUIRE_SUCCESS(rc); - REQUIRE("ns"s == static_cast(ns)); + REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_CLEANUP_FUNCTION, cptr)); + REQUIRE(cptr == memcached_callback_get(memc, MEMCACHED_CALLBACK_CLEANUP_FUNCTION, &rc)); + REQUIRE_SUCCESS(rc); + } - REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, nullptr)); - ns = memcached_callback_get(memc, MEMCACHED_CALLBACK_NAMESPACE, &rc); - REQUIRE_SUCCESS(rc); - REQUIRE(nullptr == ns); + SECTION("namespace") { + void *ns; + REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, "ns")); + ns = memcached_callback_get(memc, MEMCACHED_CALLBACK_NAMESPACE, &rc); + REQUIRE_SUCCESS(rc); + REQUIRE("ns"s == static_cast(ns)); - uint64_t binary = GENERATE(0, 1); - REQUIRE_SUCCESS(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, binary)); + REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, nullptr)); + ns = memcached_callback_get(memc, MEMCACHED_CALLBACK_NAMESPACE, &rc); + REQUIRE_SUCCESS(rc); + REQUIRE(nullptr == ns); - DYNAMIC_SECTION("too long (binary=" << binary << ")") { - string blob; - blob = random_ascii_string(MEMCACHED_MAX_NAMESPACE-1, '@', 'Z'); - REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, blob.c_str())); + uint64_t binary = GENERATE(0, 1); + REQUIRE_SUCCESS(memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, binary)); - blob = random_ascii_string(MEMCACHED_MAX_NAMESPACE, '@', 'Z'); - REQUIRE_RC(MEMCACHED_KEY_TOO_BIG,memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, blob.c_str())); - } + DYNAMIC_SECTION("too long (binary=" << binary << ")") { + string blob; - DYNAMIC_SECTION("verify key (binary=" << binary << ")") { - REQUIRE_RC(binary ? MEMCACHED_INVALID_ARGUMENTS : MEMCACHED_SUCCESS, - memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_VERIFY_KEY, 1)); - REQUIRE_RC(binary ? MEMCACHED_SUCCESS : MEMCACHED_BAD_KEY_PROVIDED, - memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, "with spaces")); - } + blob = random_ascii_string(MEMCACHED_MAX_NAMESPACE-1, '@', 'Z'); + REQUIRE_SUCCESS(memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, blob.c_str())); + + blob = random_ascii_string(MEMCACHED_MAX_NAMESPACE, '@', 'Z'); + REQUIRE_RC(MEMCACHED_KEY_TOO_BIG,memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, blob.c_str())); + } + + DYNAMIC_SECTION("verify key (binary=" << binary << ")") { + REQUIRE_RC(binary ? MEMCACHED_INVALID_ARGUMENTS : MEMCACHED_SUCCESS, + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_VERIFY_KEY, 1)); + REQUIRE_RC(binary ? MEMCACHED_SUCCESS : MEMCACHED_BAD_KEY_PROVIDED, + memcached_callback_set(memc, MEMCACHED_CALLBACK_NAMESPACE, "with spaces")); } } }