Merged Jean-Charles Redoutey
[awesomized/libmemcached] / tests / function.c
index d6822cfc7f5d73fe3e639577496318fb9d95365e..cfdccb28b1284f79918a7df75338341c8f43809f 100644 (file)
@@ -3217,15 +3217,14 @@ static memcached_return  pre_binary(memcached_st *memc)
 
 static memcached_return pre_replication(memcached_st *memc)
 {
-  memcached_return rc= MEMCACHED_FAILURE;
-
   if (pre_binary(memc) != MEMCACHED_SUCCESS)
-    return TEST_SKIPPED;
+    return MEMCACHED_FAILURE;
 
   /*
    * Make sure that we store the item on all servers
    * (master + replicas == number of servers)
- */
+   */
+  memcached_return rc;
   rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS,
                              memc->number_of_hosts - 1);
   assert(rc == MEMCACHED_SUCCESS);
@@ -4594,11 +4593,12 @@ static test_return_t regression_bug_434843(memcached_st *memc)
   /*
    * I only want to hit only _one_ server so I know the number of requests I'm
    * sending in the pipleine to the server. Let's try to do a multiget of
-   * 10240 (that should satisfy most users don't you tink?)
+   * 1024 (that should satisfy most users don't you think?). Future versions
+   * will include a mget_execute function call if you need a higher number.
    */
   uint32_t number_of_hosts= memc->number_of_hosts;
   memc->number_of_hosts= 1;
-  const size_t max_keys= 10240;
+  const size_t max_keys= 1024;
   char **keys= calloc(max_keys, sizeof(char*));
   size_t *key_length=calloc(max_keys, sizeof(size_t));
 
@@ -4732,6 +4732,56 @@ static test_return_t regression_bug_442914(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
+/* Test memcached_server_get_last_disconnect
+ * For a working server set, shall be NULL
+ * For a set of non existing server, shall not be NULL
+ */
+static test_return_t  test_get_last_disconnect(memcached_st *memc)
+{
+  memcached_return rc;
+  memcached_server_st *disconnected_server;
+
+  /* With the working set of server */
+  const char *key= "marmotte";
+  const char *value= "milka";
+
+  rc= memcached_set(memc, key, strlen(key),
+                    value, strlen(value),
+                    (time_t)0, (uint32_t)0);
+  assert(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED);
+
+  disconnected_server = memcached_server_get_last_disconnect(memc);
+  assert(disconnected_server == NULL);
+
+  /* With a non existing server */
+  memcached_st *mine;
+  memcached_server_st *servers;
+
+  const char *server_list= "localhost:9";
+
+  servers= memcached_servers_parse(server_list);
+  assert(servers);
+  mine= memcached_create(NULL);
+  rc= memcached_server_push(mine, servers);
+  assert(rc == MEMCACHED_SUCCESS);
+  memcached_server_list_free(servers);
+  assert(mine);
+
+  rc= memcached_set(mine, key, strlen(key),
+                    value, strlen(value),
+                    (time_t)0, (uint32_t)0);
+  assert(rc != MEMCACHED_SUCCESS);
+
+  disconnected_server = memcached_server_get_last_disconnect(mine);
+  assert(disconnected_server != NULL);
+  assert(disconnected_server->port == 9);
+  assert(strncmp(disconnected_server->hostname,"localhost",9) == 0);
+
+  memcached_quit(mine);
+  memcached_free(mine);
+
+  return TEST_SUCCESS;
+}
 
 /*
  * This tests ensures expected disconnections (for some behavior changes
@@ -4776,8 +4826,6 @@ static test_return_t wrong_failure_counter_test(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
-
-
 test_st udp_setup_server_tests[] ={
   {"set_udp_behavior_test", 0, set_udp_behavior_test},
   {"add_tcp_server_udp_client_test", 0, add_tcp_server_udp_client_test},
@@ -4857,6 +4905,7 @@ test_st tests[] ={
 #ifdef HAVE_LIBMEMCACHEDUTIL
   {"connectionpool", 1, connection_pool_test },
 #endif
+  {"test_get_last_disconnect", 1, test_get_last_disconnect},
   {0, 0, 0}
 };