From 03ba544b4ef8a00bd4d51dfde1ed2bfb477096dc Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Tue, 13 Oct 2020 08:43:44 +0200 Subject: [PATCH] testing: parser --- test/lib/env.hpp | 17 +++++ test/setup.cpp | 16 ++--- test/tests/memcached/parser.cpp | 34 ++++++++++ tests/parser.cc | 107 -------------------------------- 4 files changed, 56 insertions(+), 118 deletions(-) create mode 100644 test/lib/env.hpp create mode 100644 test/tests/memcached/parser.cpp delete mode 100644 tests/parser.cc diff --git a/test/lib/env.hpp b/test/lib/env.hpp new file mode 100644 index 00000000..814e2a15 --- /dev/null +++ b/test/lib/env.hpp @@ -0,0 +1,17 @@ +#include "mem_config.h" + +#include + +#if HAVE_SETENV +# define SET_ENV_EX(n, k, v, overwrite) setenv(k, v, (overwrite)) +#else // !HAVE_SETENV +# define SET_ENV_EX(n, k, v, overwrite) do { \ + static char n ## _env[] = k "=" v; \ + if ((overwrite) || !getenv(k)) { \ + putenv(n ## _env); \ + } \ +} while(false) +#endif + +#define SET_ENV(symbolic_name, literal_env_var, literal_env_val) \ + SET_ENV_EX(symbolic_name, literal_env_var, literal_env_val, true) diff --git a/test/setup.cpp b/test/setup.cpp index 1f4c9a47..493b591f 100644 --- a/test/setup.cpp +++ b/test/setup.cpp @@ -1,17 +1,11 @@ #include "mem_config.h" +#include "test/lib/env.hpp" #include #include #include #include #include #include -#include - -#if HAVE_SETENV -# define SET_ENV(n, k, v) setenv(k, v, 0) -#else // !HAVE_SETENV -# define SET_ENV(n, k, v) static char n ## _env[] = k "=" v; putenv(n ## _env) -#endif static void sigchld(int, siginfo_t *si, void *) { switch (si->si_code) { @@ -64,19 +58,19 @@ static inline void setup_asan(char **argv) { const auto set = getenv("ASAN_OPTIONS"); if (!set || !*set) { - SET_ENV(asan, "ASAN_OPTIONS", ASAN_OPTIONS); + SET_ENV_EX(asan, "ASAN_OPTIONS", ASAN_OPTIONS, 0); execvp(argv[0], argv); perror("exec()"); } } #else -# define setup_asan(a) +# define setup_asan(a) (void) a #endif #if LIBMEMCACHED_WITH_SASL_SUPPORT static inline void setup_sasl() { - SET_ENV(sasl_pwdb, "MEMCACHED_SASL_PWDB", LIBMEMCACHED_WITH_SASL_PWDB); - SET_ENV(sasl_conf, "SASL_CONF_PATH", LIBMEMCACHED_WITH_SASL_CONF); + SET_ENV_EX(sasl_pwdb, "MEMCACHED_SASL_PWDB", LIBMEMCACHED_WITH_SASL_PWDB, 0); + SET_ENV_EX(sasl_conf, "SASL_CONF_PATH", LIBMEMCACHED_WITH_SASL_CONF, 0); } #else # define setup_sasl() diff --git a/test/tests/memcached/parser.cpp b/test/tests/memcached/parser.cpp new file mode 100644 index 00000000..ca7fa400 --- /dev/null +++ b/test/tests/memcached/parser.cpp @@ -0,0 +1,34 @@ +#include "test/lib/common.hpp" +#include "test/lib/env.hpp" + +TEST_CASE("memcached_parser") { + SECTION("fail: null string") { + REQUIRE_FALSE(memcached(nullptr, 123)); + } + SECTION("fail: zero length") { + REQUIRE_FALSE(memcached("123", 0)); + } + SECTION("success: localhost") { + auto mc = memcached(S("--server=localhost")); + REQUIRE(mc); + memcached_free(mc); + } + SECTION("env") { + SECTION("success: localhost") { + SET_ENV(success_localhost, "LIBMEMCACHED", "--server=localhost"); + auto mc = memcached(nullptr, 0); + REQUIRE(mc); + memcached_free(mc); + } + SECTION("success: empty string") { + SET_ENV(success_empty_string, "LIBMEMCACHED", ""); + auto mc = memcached(nullptr, 0); + REQUIRE(mc); + memcached_free(mc); + } + SECTION("fail: extra quotes") { + SET_ENV(fail_extra_quotes, "LIBMEMCACHED", "\"--server=localhost\""); + REQUIRE_FALSE(memcached(nullptr, 0)); + } + } +} diff --git a/tests/parser.cc b/tests/parser.cc deleted file mode 100644 index 5e164a3b..00000000 --- a/tests/parser.cc +++ /dev/null @@ -1,107 +0,0 @@ -/* vim:expandtab:shiftwidth=2:tabstop=2:smarttab: - * - * Libmemcached library - * - * Copyright (C) 2012 Data Differential, http://datadifferential.com/ - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * - * * The names of its contributors may not be used to endorse or - * promote products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -#include "mem_config.h" - -/* - C++ interface test -*/ -#include "libmemcached-1.0/memcached.hpp" -#include "libtest/test.hpp" - -using namespace libtest; - -static test_return_t memcached_NULL_string_TEST(void*) -{ - test_null(memcached(NULL, 75)); - return TEST_SUCCESS; -} - -static test_return_t memcached_zero_string_length_TEST(void*) -{ - test_null(memcached("value", 0)); - return TEST_SUCCESS; -} - -static test_return_t putenv_localhost_quoted_TEST(void*) -{ - test_zero(setenv("LIBMEMCACHED", "\"--server=localhost\"", 1)); - test_null(memcached(NULL, 0)); - - return TEST_SUCCESS; -} - -static test_return_t putenv_NULL_TEST(void*) -{ - test_zero(setenv("LIBMEMCACHED", "", 1)); - memcached_st *memc= memcached(NULL, 0); - test_true(memc); - - memcached_free(memc); - - return TEST_SUCCESS; -} - -static test_return_t putenv_localhost_TEST(void*) -{ - test_zero(setenv("LIBMEMCACHED", "--server=localhost", 1)); - memcached_st *memc= memcached(NULL, 0); - test_true(memc); - - memcached_free(memc); - - return TEST_SUCCESS; -} - -test_st memcached_TESTS[] ={ - {"memcached(NULL, 75)", false, (test_callback_fn*)memcached_NULL_string_TEST }, - {"memcached(\"value\", 0)", false, (test_callback_fn*)memcached_zero_string_length_TEST }, - {"putenv(LIBMEMCACHED=--server=localhost)", false, (test_callback_fn*)putenv_localhost_TEST }, - {"putenv(LIBMEMCACHED)", false, (test_callback_fn*)putenv_NULL_TEST }, - {"putenv(LIBMEMCACHED=--server=\"localhost\")", false, (test_callback_fn*)putenv_localhost_quoted_TEST }, - {0, 0, 0} -}; - -collection_st collection[] ={ - {"memcached()", 0, 0, memcached_TESTS}, - {0, 0, 0, 0} -}; - -void get_world(libtest::Framework* world) -{ - world->collections(collection); -} - -- 2.30.2