+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;
+}
+