testing: more bin tests
authorMichael Wallner <mike@php.net>
Tue, 29 Sep 2020 13:50:37 +0000 (15:50 +0200)
committerMichael Wallner <mike@php.net>
Tue, 29 Sep 2020 13:50:37 +0000 (15:50 +0200)
src/bin/memstat.cc
test/tests/bin/memping.cpp [new file with mode: 0644]
test/tests/bin/memrm.cpp [new file with mode: 0644]
test/tests/bin/memstat.cpp [new file with mode: 0644]
tests/memping.cc [deleted file]
tests/memrm.cc [deleted file]
tests/memstat.cc [deleted file]

index 6021dbc553892d4dca37be5fa824cf57c03f7482..48ba3b6a9088274b57947ac18a55d773df7654df 100644 (file)
@@ -167,7 +167,7 @@ int main(int argc, char *argv[])
   {
     if (memcached_failed(memcached_version(memc)))
     {
-      std::cerr << "Unable to obtain server version";
+      std::cerr << "Unable to obtain server version" << std::endl;
       exit(EXIT_FAILURE);
     }
 
@@ -179,8 +179,9 @@ int main(int argc, char *argv[])
   {
     memcached_stat_st *memc_stat= memcached_stat(memc, NULL, &rc);
 
-    if (memc_stat == NULL)
+    if (memc_stat == NULL || rc != MEMCACHED_SUCCESS)
     {
+      std::cerr << memcached_last_error_message(memc) << std::endl;
       exit(EXIT_FAILURE);
     }
 
diff --git a/test/tests/bin/memping.cpp b/test/tests/bin/memping.cpp
new file mode 100644 (file)
index 0000000..ab56fa1
--- /dev/null
@@ -0,0 +1,55 @@
+#include "test/lib/common.hpp"
+#include "test/lib/Shell.hpp"
+#include "test/lib/Server.hpp"
+#include "test/lib/ReturnMatcher.hpp"
+
+using Catch::Matchers::Contains;
+
+TEST_CASE("bin/memping") {
+  Shell sh{string{TESTING_ROOT "/../src/bin"}};
+
+  SECTION("no servers provided") {
+    string output;
+    REQUIRE_FALSE(sh.run("memping", output));
+    REQUIRE(output == "No Servers provided\n");
+  }
+
+  SECTION("--help") {
+    string output;
+    REQUIRE(sh.run("memping --help", output));
+    REQUIRE_THAT(output, Contains("memping"));
+    REQUIRE_THAT(output, Contains("v1"));
+    REQUIRE_THAT(output, Contains("help"));
+    REQUIRE_THAT(output, Contains("version"));
+    REQUIRE_THAT(output, Contains("option"));
+    REQUIRE_THAT(output, Contains("--"));
+    REQUIRE_THAT(output, Contains("="));
+  }
+
+  SECTION("with server") {
+    Server server{MEMCACHED_BINARY, {"-p", random_port_string}};
+    MemcachedPtr memc;
+    LoneReturnMatcher test{*memc};
+
+    REQUIRE(server.ensureListening());
+    auto port = get<int>(server.getSocketOrPort());
+    auto comm = "memping --servers=localhost:" + to_string(port) + " ";
+
+    REQUIRE_SUCCESS(memcached_server_add(*memc, "localhost", port));
+
+    SECTION("okay") {
+      string output;
+      REQUIRE(sh.run(comm, output));
+      REQUIRE(output.empty());
+    }
+
+    SECTION("connection failure") {
+      server.signal(SIGKILL);
+      server.wait();
+
+      string output;
+      REQUIRE_FALSE(sh.run(comm, output));
+      REQUIRE_THAT(output, Contains("CONNECTION FAILURE") || Contains("SERVER HAS FAILED"));
+    }
+  }
+}
diff --git a/test/tests/bin/memrm.cpp b/test/tests/bin/memrm.cpp
new file mode 100644 (file)
index 0000000..b4a7fd0
--- /dev/null
@@ -0,0 +1,75 @@
+#include "test/lib/common.hpp"
+#include "test/lib/Shell.hpp"
+#include "test/lib/Server.hpp"
+#include "test/lib/Retry.hpp"
+#include "test/lib/ReturnMatcher.hpp"
+
+using Catch::Matchers::Contains;
+
+TEST_CASE("bin/memrm") {
+  Shell sh{string{TESTING_ROOT "/../src/bin"}};
+
+  SECTION("no servers provided") {
+    string output;
+    REQUIRE_FALSE(sh.run("memrm", output));
+    REQUIRE(output == "No Servers provided\n");
+  }
+
+  SECTION("--help") {
+    string output;
+    REQUIRE(sh.run("memrm --help", output));
+    REQUIRE_THAT(output, Contains("memrm"));
+    REQUIRE_THAT(output, Contains("v1"));
+    REQUIRE_THAT(output, Contains("help"));
+    REQUIRE_THAT(output, Contains("version"));
+    REQUIRE_THAT(output, Contains("option"));
+    REQUIRE_THAT(output, Contains("--"));
+    REQUIRE_THAT(output, Contains("="));
+  }
+
+  SECTION("with server") {
+    Server server{MEMCACHED_BINARY, {"-p", random_port_string}};
+    MemcachedPtr memc;
+    LoneReturnMatcher test{*memc};
+
+    REQUIRE(server.ensureListening());
+    auto port = get<int>(server.getSocketOrPort());
+    auto comm = "memrm --servers=localhost:" + to_string(port) + " ";
+
+    REQUIRE_SUCCESS(memcached_server_add(*memc, "localhost", port));
+
+    SECTION("not found") {
+      string output;
+      REQUIRE(sh.run(comm + "-v key1", output));
+      REQUIRE_THAT(output, Contains("Could not find key \"key1\""));
+    }
+
+    SECTION("okay") {
+
+      REQUIRE_SUCCESS(memcached_set(*memc, S("key1"), S("val1"), 0, 0));
+      REQUIRE_SUCCESS(memcached_set(*memc, S("key2"), S("val2"), 0, 0));
+
+      this_thread::sleep_for(500ms);
+
+      string output;
+      REQUIRE(sh.run(comm + "key1", output));
+      REQUIRE(output.empty());
+
+      memcached_return_t rc;
+      REQUIRE(nullptr == memcached_get(*memc, S("key1"), nullptr, nullptr, &rc));
+      REQUIRE_RC(MEMCACHED_NOTFOUND, rc);
+      Malloced val(memcached_get(*memc, S("key2"), nullptr, nullptr, &rc));
+      REQUIRE(*val);
+      REQUIRE_SUCCESS(rc);
+    }
+
+    SECTION("connection failure") {
+      server.signal(SIGKILL);
+      server.wait();
+
+      string output;
+      REQUIRE_FALSE(sh.run(comm + " -v key2", output));
+      REQUIRE_THAT(output, Contains("CONNECTION FAILURE") || Contains("SERVER HAS FAILED"));
+    }
+  }
+}
diff --git a/test/tests/bin/memstat.cpp b/test/tests/bin/memstat.cpp
new file mode 100644 (file)
index 0000000..87db31d
--- /dev/null
@@ -0,0 +1,70 @@
+#include "test/lib/common.hpp"
+#include "test/lib/Shell.hpp"
+#include "test/lib/Server.hpp"
+#include "test/lib/Retry.hpp"
+#include "test/lib/ReturnMatcher.hpp"
+
+using Catch::Matchers::Contains;
+
+TEST_CASE("bin/memstat") {
+  Shell sh{string{TESTING_ROOT "/../src/bin"}};
+
+  SECTION("no servers provided") {
+    string output;
+    REQUIRE_FALSE(sh.run("memstat", output));
+    REQUIRE(output == "No Servers provided\n");
+  }
+
+  SECTION("--help") {
+    string output;
+    REQUIRE(sh.run("memstat --help", output));
+    REQUIRE_THAT(output, Contains("memstat"));
+    REQUIRE_THAT(output, Contains("v1"));
+    REQUIRE_THAT(output, Contains("help"));
+    REQUIRE_THAT(output, Contains("version"));
+    REQUIRE_THAT(output, Contains("option"));
+    REQUIRE_THAT(output, Contains("--"));
+    REQUIRE_THAT(output, Contains("="));
+  }
+
+  SECTION("with server") {
+    Server server{MEMCACHED_BINARY, {"-p", random_port_string}};
+    MemcachedPtr memc;
+    LoneReturnMatcher test{*memc};
+
+    REQUIRE(server.ensureListening());
+    auto port = get<int>(server.getSocketOrPort());
+    auto comm = "memstat --servers=localhost:" + to_string(port)
+        + ",localhost:" + to_string(port) + " ";
+
+    REQUIRE_SUCCESS(memcached_server_add(*memc, "localhost", port));
+
+    SECTION("okay") {
+      SECTION("version") {
+        REQUIRE_SUCCESS(memcached_version(*memc));
+        auto inst = memcached_server_instance_by_position(*memc, 0);
+
+        string output;
+        REQUIRE(sh.run(comm + "--server-version", output));
+        REQUIRE_THAT(output, Contains("localhost:" + to_string(port) + " "
+            + to_string(memcached_server_major_version(inst)) + "."
+            + to_string(memcached_server_minor_version(inst)) + "."
+            + to_string(memcached_server_micro_version(inst))));
+      }
+      SECTION("analyze") {
+        string output;
+        REQUIRE(sh.run(comm + "--analyze", output));
+        REQUIRE_THAT(output, Contains("Number of Servers Analyzed         : 2"));
+      }
+    }
+
+    SECTION("connection failure") {
+      server.signal(SIGKILL);
+      server.wait();
+
+      string output;
+      REQUIRE_FALSE(sh.run(comm + "--analyze", output));
+      REQUIRE_THAT(output, Contains("CONNECTION FAILURE") || Contains("SERVER HAS FAILED"));
+    }
+  }
+}
diff --git a/tests/memping.cc b/tests/memping.cc
deleted file mode 100644 (file)
index 0712efd..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
- * 
- *  Test memping
- *
- *  Copyright (C) 2011-2013 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.
- *
- */
-
-
-/*
-  Test that we are cycling the servers we are creating during testing.
-*/
-
-#include "mem_config.h"
-
-#include "libtest/test.hpp"
-#include "libmemcached-1.0/memcached.h"
-
-using namespace libtest;
-
-#ifndef __INTEL_COMPILER
-#pragma GCC diagnostic ignored "-Wstrict-aliasing"
-#endif
-
-static std::string executable("src/bin/memping");
-
-static test_return_t help_test(void *)
-{
-  const char *args[]= { "--help", 0 };
-
-  test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
-
-  return TEST_SUCCESS;
-}
-
-static test_return_t ping_TEST(void *)
-{
-  char buffer[1024];
-  snprintf(buffer, sizeof(buffer), "--servers=localhost:%d", int(default_port()));
-  const char *args[]= { buffer, 0 };
-
-  test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
-
-  return TEST_SUCCESS;
-}
-
-static test_return_t NOT_FOUND_TEST(void *)
-{
-  char buffer[1024];
-  snprintf(buffer, sizeof(buffer), "--servers=nonexist.libmemcached.org:%d", int(default_port()));
-  const char *args[]= { buffer, 0 };
-
-  test_compare(EXIT_FAILURE, exec_cmdline(executable, args, true));
-
-  return TEST_SUCCESS;
-}
-
-test_st memping_TESTS[] ={
-  {"--help", true, help_test },
-  {"ping(FOUND)", true, ping_TEST },
-  {"ping(NOT_FOUND)", true, NOT_FOUND_TEST },
-  {0, 0, 0}
-};
-
-collection_st collection[] ={
-  {"memping", 0, 0, memping_TESTS },
-  {0, 0, 0, 0}
-};
-
-static void *world_create(server_startup_st& servers, test_return_t& error)
-{
-  if (libtest::has_memcached() == false)
-  {
-    error= TEST_SKIPPED;
-    return NULL;
-  }
-
-  if (server_startup(servers, "memcached", libtest::default_port(), NULL) == false)
-  {
-    error= TEST_FAILURE;
-  }
-
-  return &servers;
-}
-
-
-void get_world(libtest::Framework* world)
-{
-  world->collections(collection);
-  world->create(world_create);
-}
-
-
diff --git a/tests/memrm.cc b/tests/memrm.cc
deleted file mode 100644 (file)
index e3c807b..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
- * 
- *  Test memrm
- *
- *  Copyright (C) 2011 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.
- *
- */
-
-
-/*
-  Test that we are cycling the servers we are creating during testing.
-*/
-
-#include "mem_config.h"
-
-#include "libtest/test.hpp"
-#include "libmemcached-1.0/memcached.h"
-
-using namespace libtest;
-
-#ifndef __INTEL_COMPILER
-#pragma GCC diagnostic ignored "-Wstrict-aliasing"
-#endif
-
-static std::string executable("./src/bin/memrm");
-
-static test_return_t quiet_test(void *)
-{
-  const char *args[]= { "--quiet", 0 };
-
-  test_compare(EXIT_FAILURE, exec_cmdline(executable, args, true));
-  return TEST_SUCCESS;
-}
-
-static test_return_t help_test(void *)
-{
-  const char *args[]= { "--help", 0 };
-
-  test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
-
-  return TEST_SUCCESS;
-}
-
-static test_return_t rm_test(void *)
-{
-  char buffer[1024];
-  snprintf(buffer, sizeof(buffer), "--server=localhost:%d", int(default_port()));
-
-  memcached_st *memc= memcached(buffer, strlen(buffer));
-  test_true(memc);
-
-  test_compare(MEMCACHED_SUCCESS,
-               memcached_set(memc, test_literal_param("foo"), 0, 0, 0, 0));
-
-  memcached_return_t rc;
-  test_null(memcached_get(memc, test_literal_param("foo"), 0, 0, &rc));
-  test_compare(MEMCACHED_SUCCESS, rc);
-
-  char memrm_buffer[1024];
-  snprintf(memrm_buffer, sizeof(memrm_buffer), "--servers=localhost:%d", int(default_port()));
-  const char *args[]= { buffer, "foo", 0 };
-  test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
-
-  test_null(memcached_get(memc, test_literal_param("foo"), 0, 0, &rc));
-  test_compare(MEMCACHED_NOTFOUND, rc);
-
-  memcached_free(memc);
-
-  return TEST_SUCCESS;
-}
-
-static test_return_t NOT_FOUND_TEST(void *)
-{
-  char buffer[1024];
-  snprintf(buffer, sizeof(buffer), "--server=localhost:%d", int(default_port()));
-  const char *args[]= { buffer, "foo", 0 };
-
-  memcached_st *memc= memcached(buffer, strlen(buffer));
-  test_true(memc);
-
-  memcached_return_t rc;
-  test_null(memcached_get(memc, test_literal_param("foo"), 0, 0, &rc));
-  test_compare(MEMCACHED_NOTFOUND, rc);
-
-  test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
-
-  test_null(memcached_get(memc, test_literal_param("foo"), 0, 0, &rc));
-  test_compare(MEMCACHED_NOTFOUND, rc);
-
-  memcached_free(memc);
-
-  return TEST_SUCCESS;
-}
-
-static test_return_t multiple_NOT_FOUND_TEST(void *)
-{
-  char buffer[1024];
-  snprintf(buffer, sizeof(buffer), "--servers=localhost:%d", int(default_port()));
-  const char *args[]= { buffer, "protocols", "foo", "mine", "bar", "dog", "cat", "foo", "mine",
-    "eye", "for", "the", "to", "not", "know", "what", "I", "should", "be", "doing", 0 };
-
-  test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
-
-  return TEST_SUCCESS;
-}
-
-test_st memrm_tests[] ={
-  {"--quiet", true, quiet_test },
-  {"--help", true, help_test },
-  {"rm(FOUND)", true, rm_test },
-  {"rm(NOT_FOUND)", true, NOT_FOUND_TEST },
-  {"multiple rm(NOT_FOUND)", true, multiple_NOT_FOUND_TEST },
-  {0, 0, 0}
-};
-
-collection_st collection[] ={
-  {"memrm", 0, 0, memrm_tests },
-  {0, 0, 0, 0}
-};
-
-static void *world_create(server_startup_st& servers, test_return_t& error)
-{
-  if (libtest::has_memcached() == false)
-  {
-    error= TEST_SKIPPED;
-    return NULL;
-  }
-
-  if (server_startup(servers, "memcached", libtest::default_port(), NULL) == false)
-  {
-    error= TEST_FAILURE;
-  }
-
-  return &servers;
-}
-
-
-void get_world(libtest::Framework* world)
-{
-  world->collections(collection);
-  world->create(world_create);
-}
-
diff --git a/tests/memstat.cc b/tests/memstat.cc
deleted file mode 100644 (file)
index 516ff7d..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
- * 
- *  Test memstat
- *
- *  Copyright (C) 2011 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.
- *
- */
-
-
-/*
-  Test that we are cycling the servers we are creating during testing.
-*/
-
-#include "mem_config.h"
-
-#include "libtest/test.hpp"
-#include "libmemcached-1.0/memcached.h"
-
-using namespace libtest;
-
-#ifndef __INTEL_COMPILER
-#pragma GCC diagnostic ignored "-Wstrict-aliasing"
-#endif
-
-static std::string executable("./src/bin/memstat");
-
-static test_return_t help_test(void *)
-{
-  const char *args[]= { "--help", 0 };
-
-  test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
-
-  return TEST_SUCCESS;
-}
-
-static test_return_t binary_TEST(void *)
-{
-  char buffer[1024];
-  snprintf(buffer, sizeof(buffer), "--servers=localhost:%d", int(libtest::default_port()));
-  const char *args[]= { buffer, " --binary ", 0 };
-
-  test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
-  return TEST_SUCCESS;
-}
-
-static test_return_t server_version_TEST(void *)
-{
-  char buffer[1024];
-  snprintf(buffer, sizeof(buffer), "--servers=localhost:%d", int(libtest::default_port()));
-  const char *args[]= { buffer, " --server-version", 0 };
-
-  test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
-  return TEST_SUCCESS;
-}
-
-static test_return_t binary_server_version_TEST(void *)
-{
-  char buffer[1024];
-  snprintf(buffer, sizeof(buffer), "--servers=localhost:%d", int(libtest::default_port()));
-  const char *args[]= { buffer, " --binary --server-version", 0 };
-
-  test_compare(EXIT_SUCCESS, exec_cmdline(executable, args, true));
-
-  return TEST_SUCCESS;
-}
-
-test_st memstat_tests[] ={
-  {"--help", 0, help_test},
-  {"--binary", 0, binary_TEST},
-  {"--server-version", 0, server_version_TEST},
-  {"--binary --server-version", 0, binary_server_version_TEST},
-  {0, 0, 0}
-};
-
-collection_st collection[] ={
-  {"memstat", 0, 0, memstat_tests },
-  {0, 0, 0, 0}
-};
-
-static void *world_create(server_startup_st& servers, test_return_t& error)
-{
-  if (libtest::has_memcached() == false)
-  {
-    error= TEST_SKIPPED;
-    return NULL;
-  }
-
-  if (server_startup(servers, "memcached", libtest::default_port(), NULL) == false)
-  {
-    error= TEST_SKIPPED;
-  }
-
-  return &servers;
-}
-
-
-void get_world(libtest::Framework* world)
-{
-  world->collections(collection);
-  world->create(world_create);
-}
-