Merge in pid/ping status.
[awesomized/libmemcached] / tests / parser.cc
index ad6020486b331cb54b0c81c9d0a5d6eaf2eb9b25..f1020ff45f6471f15412218bf4e9295687a16b2f 100644 (file)
@@ -35,7 +35,7 @@
  *
  */
 
-#include <config.h>
+#include <libtest/common.h>
 
 #include <vector>
 #include <iostream>
@@ -43,8 +43,6 @@
 #include <cerrno>
 #include <cassert>
 
-#include <libtest/test.hpp>
-
 #define BUILDING_LIBMEMCACHED
 // !NEVER use common.h, always use memcached.h in your own apps
 #include <libmemcached/common.h>
@@ -237,24 +235,20 @@ scanner_variable_t hash_strings[]= {
 };
 
 
-static test_return_t _test_option(scanner_variable_t *scanner, bool test_true= true)
+static test_return_t _test_option(scanner_variable_t *scanner, bool test_true_opt= true)
 {
-  (void)test_true;
-
   for (scanner_variable_t *ptr= scanner; ptr->type != NIL; ptr++)
   {
-    memcached_st *memc;
-    memc= memcached(ptr->option.c_str, ptr->option.size);
-    if (test_true)
+    memcached_st *memc= memcached(ptr->option.c_str, ptr->option.size);
+    if (test_true_opt)
     {
+      char buffer[2048];
       if (not memc)
       {
-        char buffer[2048];
-        memcached_return_t rc= libmemcached_check_configuration(ptr->option.c_str, ptr->option.size, buffer, sizeof(buffer));
-        std::cerr << "About error for " << memcached_strerror(NULL, rc) << " : " << buffer << std::endl;
+        libmemcached_check_configuration(ptr->option.c_str, ptr->option.size, buffer, sizeof(buffer));
       }
 
-      test_true(memc);
+      test_true_got(memc, buffer);
 
       if (ptr->check_func)
       {
@@ -549,6 +543,65 @@ test_return_t test_hostname_port_weight(memcached_st *)
   return TEST_SUCCESS;
 }
 
+struct socket_weight_t {
+  const char *socket;
+  size_t weight;
+};
+
+static memcached_return_t dump_socket_information(const memcached_st *,
+                                                  const memcached_server_st *instance,
+                                                  void *context)
+{
+  socket_weight_t *check= (socket_weight_t *)context;
+
+  if (strcmp(memcached_server_name(instance), check->socket))
+  {
+    std::cerr << std::endl << __FILE__ << ":" << __LINE__ << " " << memcached_server_name(instance) << " != " << check->socket << std::endl;
+    return MEMCACHED_FAILURE;
+  }
+
+  if (instance->weight == check->weight)
+  {
+    return MEMCACHED_SUCCESS;
+  }
+
+  return MEMCACHED_FAILURE;
+}
+
+test_return_t test_parse_socket(memcached_st *)
+{
+  char buffer[BUFSIZ];
+
+  memcached_server_fn callbacks[]= { dump_socket_information };
+  {
+    test_compare_got(MEMCACHED_SUCCESS,
+                     libmemcached_check_configuration(test_literal_param("--socket=\"/tmp/foo\""), buffer, sizeof(buffer)),
+                     buffer);
+
+    memcached_st *memc= memcached(test_literal_param("--socket=\"/tmp/foo\""));
+    test_true(memc);
+    socket_weight_t check= { "/tmp/foo", 1 };
+    test_compare(MEMCACHED_SUCCESS,
+                 memcached_server_cursor(memc, callbacks, &check, 1));
+    memcached_free(memc);
+  }
+
+  {
+    test_compare_got(MEMCACHED_SUCCESS,
+                     libmemcached_check_configuration(test_literal_param("--socket=\"/tmp/foo\"/?23"), buffer, sizeof(buffer)),
+                     buffer);
+
+    memcached_st *memc= memcached(test_literal_param("--socket=\"/tmp/foo\"/?23"));
+    test_true(memc);
+    socket_weight_t check= { "/tmp/foo", 23 };
+    test_compare(MEMCACHED_SUCCESS,
+                 memcached_server_cursor(memc, callbacks, &check, 1));
+    memcached_free(memc);
+  }
+
+  return TEST_SUCCESS;
+}
+
 /*
   By setting the timeout value to zero, we force poll() to return immediatly.
 */