Updated test harness, merged Trond's fix for OSX hang.
authorBrian Aker <brian@Intel-Mini-2.local>
Fri, 9 Oct 2009 17:41:13 +0000 (10:41 -0700)
committerBrian Aker <brian@Intel-Mini-2.local>
Fri, 9 Oct 2009 17:41:13 +0000 (10:41 -0700)
1  2 
tests/atomsmasher.c
tests/function.c
tests/plus.cpp
tests/test.c
tests/test.h
tests/udp.c

index 3b4879df4bef1c1c260935867fbfbae4ad42f94f,3b4879df4bef1c1c260935867fbfbae4ad42f94f..19ad086ad624565330890fcdf0030e1ae39267f0
@@@ -37,14 -37,14 +37,14 @@@ static pairs_st *global_pairs
  static char *global_keys[GLOBAL_COUNT];
  static size_t global_keys_length[GLOBAL_COUNT];
  
--static test_return cleanup_pairs(memcached_st *memc __attribute__((unused)))
++static test_return_t cleanup_pairs(memcached_st *memc __attribute__((unused)))
  {
    pairs_free(global_pairs);
  
    return 0;
  }
  
--static test_return generate_pairs(memcached_st *memc __attribute__((unused)))
++static test_return_t generate_pairs(memcached_st *memc __attribute__((unused)))
  {
    unsigned long long x;
    global_pairs= pairs_generate(GLOBAL_COUNT, 400);
@@@ -59,7 -59,7 +59,7 @@@
    return 0;
  }
  
--static test_return drizzle(memcached_st *memc)
++static test_return_t drizzle(memcached_st *memc)
  {
    unsigned int x;
    memcached_return rc;
@@@ -153,7 -153,7 +153,7 @@@ static memcached_return enable_consiste
    Set the value, then quit to make sure it is flushed.
    Come back in and test that add fails.
  */
--static test_return add_test(memcached_st *memc)
++static test_return_t add_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
   * repeating add_tests many times
   * may show a problem in timing
   */
--static test_return many_adds(memcached_st *memc)
++static test_return_t many_adds(memcached_st *memc)
  {
    unsigned int i;
    for (i = 0; i < TEST_COUNTER; i++)
index 767e255429e98692765a3ab50a982853e1743c8b,4f048937205432c63fc75acd11c33c06a8bc64c5..914e17f2b6bb2da91544d99986703790e98528f9
@@@ -42,7 -42,7 +42,7 @@@ static pairs_st *global_pairs
  static const char *global_keys[GLOBAL_COUNT];
  static size_t global_keys_length[GLOBAL_COUNT];
  
--static test_return  init_test(memcached_st *not_used __attribute__((unused)))
++static test_return_t  init_test(memcached_st *not_used __attribute__((unused)))
  {
    memcached_st memc;
  
@@@ -52,7 -52,7 +52,7 @@@
    return TEST_SUCCESS;
  }
  
--static test_return  server_list_null_test(memcached_st *ptr __attribute__((unused)))
++static test_return_t  server_list_null_test(memcached_st *ptr __attribute__((unused)))
  {
    memcached_server_st *server_list;
    memcached_return rc;
@@@ -82,7 -82,7 +82,7 @@@ static memcached_return  server_display
    return MEMCACHED_SUCCESS;
  }
  
--static test_return  server_sort_test(memcached_st *ptr __attribute__((unused)))
++static test_return_t  server_sort_test(memcached_st *ptr __attribute__((unused)))
  {
    uint32_t x;
    uint32_t bigger= 0; /* Prime the value for the assert in server_display_function */
    return TEST_SUCCESS;
  }
  
--static test_return  server_sort2_test(memcached_st *ptr __attribute__((unused)))
++static test_return_t  server_sort2_test(memcached_st *ptr __attribute__((unused)))
  {
    uint32_t bigger= 0; /* Prime the value for the assert in server_display_function */
    memcached_return rc;
@@@ -153,7 -153,7 +153,7 @@@ static memcached_return  server_display
    return MEMCACHED_SUCCESS;
  }
  
--static test_return  server_unsort_test(memcached_st *ptr __attribute__((unused)))
++static test_return_t  server_unsort_test(memcached_st *ptr __attribute__((unused)))
  {
    uint32_t x;
    uint32_t counter= 0; /* Prime the value for the assert in server_display_function */
    return TEST_SUCCESS;
  }
  
--static test_return  allocation_test(memcached_st *not_used __attribute__((unused)))
++static test_return_t  allocation_test(memcached_st *not_used __attribute__((unused)))
  {
    memcached_st *memc;
    memc= memcached_create(NULL);
    return TEST_SUCCESS;
  }
  
--static test_return  clone_test(memcached_st *memc)
++static test_return_t  clone_test(memcached_st *memc)
  {
    /* All null? */
    {
    return TEST_SUCCESS;
  }
  
--static test_return userdata_test(memcached_st *memc)
++static test_return_t userdata_test(memcached_st *memc)
  {
    void* foo= NULL;
    assert(memcached_set_user_data(memc, foo) == NULL);
    return TEST_SUCCESS;
  }
  
--static test_return  connection_test(memcached_st *memc)
++static test_return_t  connection_test(memcached_st *memc)
  {
    memcached_return rc;
  
    return TEST_SUCCESS;
  }
  
--static test_return  error_test(memcached_st *memc)
++static test_return_t  error_test(memcached_st *memc)
  {
    memcached_return rc;
    uint32_t values[] = { 851992627U, 2337886783U, 3196981036U, 4001849190U,
    return TEST_SUCCESS;
  }
  
--static test_return  set_test(memcached_st *memc)
++static test_return_t  set_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
    return TEST_SUCCESS;
  }
  
--static test_return  append_test(memcached_st *memc)
++static test_return_t  append_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "fig";
    return TEST_SUCCESS;
  }
  
--static test_return  append_binary_test(memcached_st *memc)
++static test_return_t  append_binary_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "numbers";
    return TEST_SUCCESS;
  }
  
--static test_return  cas2_test(memcached_st *memc)
++static test_return_t  cas2_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *keys[]= {"fudge", "son", "food"};
    return TEST_SUCCESS;
  }
  
--static test_return  cas_test(memcached_st *memc)
++static test_return_t  cas_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "fun";
    return TEST_SUCCESS;
  }
  
--static test_return  prepend_test(memcached_st *memc)
++static test_return_t  prepend_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "fig";
    Set the value, then quit to make sure it is flushed.
    Come back in and test that add fails.
  */
--static test_return  add_test(memcached_st *memc)
++static test_return_t  add_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
  ** because the connects starts to time out (the test doesn't do much
  ** anyway, so just loop 10 iterations)
  */
--static test_return  add_wrapper(memcached_st *memc)
++static test_return_t  add_wrapper(memcached_st *memc)
  {
    unsigned int x;
    unsigned int max= 10000;
    return TEST_SUCCESS;
  }
  
--static test_return  replace_test(memcached_st *memc)
++static test_return_t  replace_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
    return TEST_SUCCESS;
  }
  
--static test_return  delete_test(memcached_st *memc)
++static test_return_t  delete_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
    return TEST_SUCCESS;
  }
  
--static test_return  flush_test(memcached_st *memc)
++static test_return_t  flush_test(memcached_st *memc)
  {
    memcached_return rc;
  
@@@ -662,7 -662,7 +662,7 @@@ static memcached_return  server_functio
    return MEMCACHED_SUCCESS;
  }
  
--static test_return  memcached_server_cursor_test(memcached_st *memc)
++static test_return_t  memcached_server_cursor_test(memcached_st *memc)
  {
    char context[8];
    strcpy(context, "foo bad");
    return TEST_SUCCESS;
  }
  
--static test_return  bad_key_test(memcached_st *memc)
++static test_return_t  bad_key_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo bad";
@@@ -775,7 -775,7 +775,7 @@@ static memcached_return  read_through_t
    return memcached_result_set_value(result, READ_THROUGH_VALUE, strlen(READ_THROUGH_VALUE));
  }
  
--static test_return  read_through(memcached_st *memc)
++static test_return_t  read_through(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
@@@ -823,7 -823,7 +823,7 @@@ static memcached_return  delete_trigger
    return MEMCACHED_SUCCESS;
  }
  
--static test_return  delete_through(memcached_st *memc)
++static test_return_t  delete_through(memcached_st *memc)
  {
    memcached_trigger_delete_key callback;
    memcached_return rc;
    return TEST_SUCCESS;
  }
  
--static test_return  get_test(memcached_st *memc)
++static test_return_t  get_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
    return TEST_SUCCESS;
  }
  
--static test_return  get_test2(memcached_st *memc)
++static test_return_t  get_test2(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
    return TEST_SUCCESS;
  }
  
--static test_return  set_test2(memcached_st *memc)
++static test_return_t  set_test2(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
    return TEST_SUCCESS;
  }
  
--static test_return  set_test3(memcached_st *memc)
++static test_return_t  set_test3(memcached_st *memc)
  {
    memcached_return rc;
    char *value;
    return TEST_SUCCESS;
  }
  
--static test_return  get_test3(memcached_st *memc)
++static test_return_t  get_test3(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
    return TEST_SUCCESS;
  }
  
--static test_return  get_test4(memcached_st *memc)
++static test_return_t  get_test4(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
   * dereference a NIL-pointer if you issue a multi-get and don't read out all
   * responses before you execute a storage command.
   */
--static test_return get_test5(memcached_st *memc)
++static test_return_t get_test5(memcached_st *memc)
  {
    /*
    ** Request the same key twice, to ensure that we hash to the same server
    return TEST_SUCCESS;
  }
  
--static test_return  mget_end(memcached_st *memc)
++static test_return_t  mget_end(memcached_st *memc)
  {
    const char *keys[]= { "foo", "foo2" };
    size_t lengths[]= { 3, 4 };
  }
  
  /* Do not copy the style of this code, I just access hosts to testthis function */
--static test_return  stats_servername_test(memcached_st *memc)
++static test_return_t  stats_servername_test(memcached_st *memc)
  {
    memcached_return rc;
    memcached_stat_st memc_stat;
    return TEST_SUCCESS;
  }
  
--static test_return  increment_test(memcached_st *memc)
++static test_return_t  increment_test(memcached_st *memc)
  {
    uint64_t new_number;
    memcached_return rc;
    return TEST_SUCCESS;
  }
  
--static test_return  increment_with_initial_test(memcached_st *memc)
++static test_return_t  increment_with_initial_test(memcached_st *memc)
  {
    if (memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL) != 0)
    {
    return TEST_SUCCESS;
  }
  
--static test_return  decrement_test(memcached_st *memc)
++static test_return_t  decrement_test(memcached_st *memc)
  {
    uint64_t new_number;
    memcached_return rc;
    return TEST_SUCCESS;
  }
  
--static test_return  decrement_with_initial_test(memcached_st *memc)
++static test_return_t  decrement_with_initial_test(memcached_st *memc)
  {
    if (memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL) != 0)
    {
    return TEST_SUCCESS;
  }
  
--static test_return  quit_test(memcached_st *memc)
++static test_return_t  quit_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "fudge";
    return TEST_SUCCESS;
  }
  
--static test_return  mget_result_test(memcached_st *memc)
++static test_return_t  mget_result_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *keys[]= {"fudge", "son", "food"};
    return TEST_SUCCESS;
  }
  
--static test_return  mget_result_alloc_test(memcached_st *memc)
++static test_return_t  mget_result_alloc_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *keys[]= {"fudge", "son", "food"};
@@@ -1363,7 -1363,7 +1363,7 @@@ static memcached_return callback_counte
    return MEMCACHED_SUCCESS;
  }
  
--static test_return  mget_result_function(memcached_st *memc)
++static test_return_t  mget_result_function(memcached_st *memc)
  {
    memcached_return rc;
    const char *keys[]= {"fudge", "son", "food"};
    return TEST_SUCCESS;
  }
  
--static test_return  mget_test(memcached_st *memc)
++static test_return_t  mget_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *keys[]= {"fudge", "son", "food"};
    return TEST_SUCCESS;
  }
  
--static test_return  get_stats_keys(memcached_st *memc)
++static test_return_t  get_stats_keys(memcached_st *memc)
  {
   char **list;
   char **ptr;
   return TEST_SUCCESS;
  }
  
--static test_return  version_string_test(memcached_st *memc __attribute__((unused)))
++static test_return_t  version_string_test(memcached_st *memc __attribute__((unused)))
  {
    const char *version_string;
  
    return TEST_SUCCESS;
  }
  
--static test_return  get_stats(memcached_st *memc)
++static test_return_t  get_stats(memcached_st *memc)
  {
   unsigned int x;
   char **list;
    return TEST_SUCCESS;
  }
  
--static test_return  add_host_test(memcached_st *memc)
++static test_return_t  add_host_test(memcached_st *memc)
  {
    unsigned int x;
    memcached_server_st *servers;
@@@ -1548,7 -1548,7 +1548,7 @@@ static memcached_return  cleanup_test_c
    return MEMCACHED_SUCCESS;
  }
  
--static test_return  callback_test(memcached_st *memc)
++static test_return_t  callback_test(memcached_st *memc)
  {
    /* Test User Data */
    {
  }
  
  /* We don't test the behavior itself, we test the switches */
--static test_return  behavior_test(memcached_st *memc)
++static test_return_t  behavior_test(memcached_st *memc)
  {
    uint64_t value;
    uint32_t set= 1;
    return TEST_SUCCESS;
  }
  
- static test_return fetch_all_results(memcached_st *memc) 
 -static test_return fetch_all_results(memcached_st *memc)
++static test_return_t fetch_all_results(memcached_st *memc)
  {
    memcached_return rc= MEMCACHED_SUCCESS;
    char return_key[MEMCACHED_MAX_KEY];
  }
  
  /* Test case provided by Cal Haldenbrand */
--static test_return  user_supplied_bug1(memcached_st *memc)
++static test_return_t  user_supplied_bug1(memcached_st *memc)
  {
    unsigned int setter= 1;
    unsigned int x;
  }
  
  /* Test case provided by Cal Haldenbrand */
--static test_return  user_supplied_bug2(memcached_st *memc)
++static test_return_t  user_supplied_bug2(memcached_st *memc)
  {
    int errors;
    unsigned int setter;
  
  /* Do a large mget() over all the keys we think exist */
  #define KEY_COUNT 3000 // * 1024576
--static test_return  user_supplied_bug3(memcached_st *memc)
++static test_return_t  user_supplied_bug3(memcached_st *memc)
  {
    memcached_return rc;
    unsigned int setter;
  }
  
  /* Make sure we behave properly if server list has no values */
--static test_return  user_supplied_bug4(memcached_st *memc)
++static test_return_t  user_supplied_bug4(memcached_st *memc)
  {
    memcached_return rc;
    const char *keys[]= {"fudge", "son", "food"};
  }
  
  #define VALUE_SIZE_BUG5 1048064
--static test_return  user_supplied_bug5(memcached_st *memc)
++static test_return_t  user_supplied_bug5(memcached_st *memc)
  {
    memcached_return rc;
    const char *keys[]= {"036790384900", "036790384902", "036790384904", "036790384906"};
    return TEST_SUCCESS;
  }
  
--static test_return  user_supplied_bug6(memcached_st *memc)
++static test_return_t  user_supplied_bug6(memcached_st *memc)
  {
    memcached_return rc;
    const char *keys[]= {"036790384900", "036790384902", "036790384904", "036790384906"};
    return TEST_SUCCESS;
  }
  
--static test_return  user_supplied_bug8(memcached_st *memc __attribute__((unused)))
++static test_return_t  user_supplied_bug8(memcached_st *memc __attribute__((unused)))
  {
    memcached_return rc;
    memcached_st *mine;
  }
  
  /* Test flag store/retrieve */
--static test_return  user_supplied_bug7(memcached_st *memc)
++static test_return_t  user_supplied_bug7(memcached_st *memc)
  {
    memcached_return rc;
    const char *keys= "036790384900";
    return TEST_SUCCESS;
  }
  
--static test_return  user_supplied_bug9(memcached_st *memc)
++static test_return_t  user_supplied_bug9(memcached_st *memc)
  {
    memcached_return rc;
    const char *keys[]= {"UDATA:edevil@sapo.pt", "fudge&*@#", "for^#@&$not"};
  }
  
  /* We are testing with aggressive timeout to get failures */
--static test_return  user_supplied_bug10(memcached_st *memc)
++static test_return_t  user_supplied_bug10(memcached_st *memc)
  {
    const char *key= "foo";
    char *value;
  /*
    We are looking failures in the async protocol
  */
--static test_return  user_supplied_bug11(memcached_st *memc)
++static test_return_t  user_supplied_bug11(memcached_st *memc)
  {
    const char *key= "foo";
    char *value;
  /*
    Bug found where incr was not returning MEMCACHED_NOTFOUND when object did not exist.
  */
--static test_return  user_supplied_bug12(memcached_st *memc)
++static test_return_t  user_supplied_bug12(memcached_st *memc)
  {
    memcached_return rc;
    uint32_t flags;
    Bug found where command total one more than MEMCACHED_MAX_BUFFER
    set key34567890 0 0 8169 \r\n is sent followed by buffer of size 8169, followed by 8169
   */
--static test_return  user_supplied_bug13(memcached_st *memc)
++static test_return_t  user_supplied_bug13(memcached_st *memc)
  {
    char key[] = "key34567890";
    char *overflow;
    set key34567890 0 0 8169 \r\n
    is sent followed by buffer of size 8169, followed by 8169
   */
--static test_return  user_supplied_bug14(memcached_st *memc)
++static test_return_t  user_supplied_bug14(memcached_st *memc)
  {
    size_t setter= 1;
    memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, setter);
  /*
    Look for zero length value problems
    */
--static test_return  user_supplied_bug15(memcached_st *memc)
++static test_return_t  user_supplied_bug15(memcached_st *memc)
  {
    uint32_t x;
    memcached_return rc;
  }
  
  /* Check the return sizes on FLAGS to make sure it stores 32bit unsigned values correctly */
--static test_return  user_supplied_bug16(memcached_st *memc)
++static test_return_t  user_supplied_bug16(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "mykey";
  
  #ifndef __sun
  /* Check the validity of chinese key*/
--static test_return  user_supplied_bug17(memcached_st *memc)
++static test_return_t  user_supplied_bug17(memcached_st *memc)
  {
      memcached_return rc;
      const char *key= "豆瓣";
    From Andrei on IRC
  */
  
--static test_return user_supplied_bug19(memcached_st *memc)
++static test_return_t user_supplied_bug19(memcached_st *memc)
  {
    memcached_st *m;
    memcached_server_st *s;
  }
  
  /* CAS test from Andei */
--static test_return user_supplied_bug20(memcached_st *memc)
++static test_return_t user_supplied_bug20(memcached_st *memc)
  {
    memcached_return status;
    memcached_result_st *result, result_obj;
  }
  
  #include "ketama_test_cases.h"
--static test_return user_supplied_bug18(memcached_st *trash)
++static test_return_t user_supplied_bug18(memcached_st *trash)
  {
    memcached_return rc;
    uint64_t value;
   * http://lists.tangent.org/pipermail/libmemcached/2009-August/000918.html
   */
  
- void fail(int); /* sighandler_t function that always asserts false */
+ /* sighandler_t function that always asserts false */
+ static void fail(int unused __attribute__((unused)))
+ {
+   assert(0);
+ }
  
--static test_return  _user_supplied_bug21(memcached_st* memc, size_t key_count)
++static test_return_t  _user_supplied_bug21(memcached_st* memc, size_t key_count)
  {
    memcached_return rc;
    unsigned int x;
    return TEST_SUCCESS;
  }
  
- static test_return user_supplied_bug21(memcached_st *memc)
+ static memcached_return pre_binary(memcached_st *memc);
 -static test_return user_supplied_bug21(memcached_st *memc)
++static test_return_t user_supplied_bug21(memcached_st *memc)
  {
-   test_return rc;
 -  if (pre_binary(memc) != TEST_SUCCESS)
 -    return TEST_SUCCESS;
++  if (pre_binary(memc) != MEMCACHED_SUCCESS)
++    return TEST_SKIPPED;
 -  test_return rc;
++  test_return_t rc;
  
    /* should work as of r580 */
    rc= _user_supplied_bug21(memc, 10);
    return TEST_SUCCESS;
  }
  
- void fail(int unused __attribute__((unused)))
- {
-   assert(0);
- }
--static test_return auto_eject_hosts(memcached_st *trash)
++static test_return_t auto_eject_hosts(memcached_st *trash)
  {
    (void) trash;
  
    return TEST_SUCCESS;
  }
  
--static test_return  result_static(memcached_st *memc)
++static test_return_t  result_static(memcached_st *memc)
  {
    memcached_result_st result;
    memcached_result_st *result_ptr;
    return TEST_SUCCESS;
  }
  
--static test_return  result_alloc(memcached_st *memc)
++static test_return_t  result_alloc(memcached_st *memc)
  {
    memcached_result_st *result;
  
    return TEST_SUCCESS;
  }
  
--static test_return  string_static_null(memcached_st *memc)
++static test_return_t  string_static_null(memcached_st *memc)
  {
    memcached_string_st string;
    memcached_string_st *string_ptr;
    return TEST_SUCCESS;
  }
  
--static test_return  string_alloc_null(memcached_st *memc)
++static test_return_t  string_alloc_null(memcached_st *memc)
  {
    memcached_string_st *string;
  
    return TEST_SUCCESS;
  }
  
--static test_return  string_alloc_with_size(memcached_st *memc)
++static test_return_t  string_alloc_with_size(memcached_st *memc)
  {
    memcached_string_st *string;
  
    return TEST_SUCCESS;
  }
  
--static test_return  string_alloc_with_size_toobig(memcached_st *memc)
++static test_return_t  string_alloc_with_size_toobig(memcached_st *memc)
  {
    memcached_string_st *string;
  
    return TEST_SUCCESS;
  }
  
--static test_return  string_alloc_append(memcached_st *memc)
++static test_return_t  string_alloc_append(memcached_st *memc)
  {
    unsigned int x;
    char buffer[SMALL_STRING_LEN];
    return TEST_SUCCESS;
  }
  
--static test_return  string_alloc_append_toobig(memcached_st *memc)
++static test_return_t  string_alloc_append_toobig(memcached_st *memc)
  {
    memcached_return rc;
    unsigned int x;
    return TEST_SUCCESS;
  }
  
--static test_return  cleanup_pairs(memcached_st *memc __attribute__((unused)))
++static test_return_t  cleanup_pairs(memcached_st *memc __attribute__((unused)))
  {
    pairs_free(global_pairs);
  
    return TEST_SUCCESS;
  }
  
--static test_return  generate_pairs(memcached_st *memc __attribute__((unused)))
++static test_return_t  generate_pairs(memcached_st *memc __attribute__((unused)))
  {
    unsigned long long x;
    global_pairs= pairs_generate(GLOBAL_COUNT, 400);
    return TEST_SUCCESS;
  }
  
--static test_return  generate_large_pairs(memcached_st *memc __attribute__((unused)))
++static test_return_t  generate_large_pairs(memcached_st *memc __attribute__((unused)))
  {
    unsigned long long x;
    global_pairs= pairs_generate(GLOBAL2_COUNT, MEMCACHED_MAX_BUFFER+10);
    return TEST_SUCCESS;
  }
  
--static test_return  generate_data(memcached_st *memc)
++static test_return_t  generate_data(memcached_st *memc)
  {
    execute_set(memc, global_pairs, global_count);
  
    return TEST_SUCCESS;
  }
  
--static test_return  generate_data_with_stats(memcached_st *memc)
++static test_return_t  generate_data_with_stats(memcached_st *memc)
  {
    memcached_stat_st *stat_p;
    memcached_return rc;
  
    return TEST_SUCCESS;
  }
--static test_return  generate_buffer_data(memcached_st *memc)
++static test_return_t  generate_buffer_data(memcached_st *memc)
  {
    size_t latch= 0;
  
    return TEST_SUCCESS;
  }
  
--static test_return  get_read_count(memcached_st *memc)
++static test_return_t  get_read_count(memcached_st *memc)
  {
    unsigned int x;
    memcached_return rc;
    return TEST_SUCCESS;
  }
  
--static test_return  get_read(memcached_st *memc)
++static test_return_t  get_read(memcached_st *memc)
  {
    unsigned int x;
    memcached_return rc;
    return TEST_SUCCESS;
  }
  
--static test_return  mget_read(memcached_st *memc)
++static test_return_t  mget_read(memcached_st *memc)
  {
    memcached_return rc;
  
    return TEST_SUCCESS;
  }
  
--static test_return  mget_read_result(memcached_st *memc)
++static test_return_t  mget_read_result(memcached_st *memc)
  {
    memcached_return rc;
  
    return TEST_SUCCESS;
  }
  
--static test_return  mget_read_function(memcached_st *memc)
++static test_return_t  mget_read_function(memcached_st *memc)
  {
    memcached_return rc;
    unsigned int counter;
    return TEST_SUCCESS;
  }
  
--static test_return  delete_generate(memcached_st *memc)
++static test_return_t  delete_generate(memcached_st *memc)
  {
    unsigned int x;
  
    return TEST_SUCCESS;
  }
  
--static test_return  delete_buffer_generate(memcached_st *memc)
++static test_return_t  delete_buffer_generate(memcached_st *memc)
  {
    size_t latch= 0;
    unsigned int x;
    return TEST_SUCCESS;
  }
  
--static test_return  add_host_test1(memcached_st *memc)
++static test_return_t  add_host_test1(memcached_st *memc)
  {
    unsigned int x;
    memcached_return rc;
@@@ -3206,23 -3211,23 +3211,25 @@@ static memcached_return  pre_binary(mem
    }
  
    memcached_free(memc_clone);
++
    return rc;
  }
  
  static memcached_return pre_replication(memcached_st *memc)
  {
    memcached_return rc= MEMCACHED_FAILURE;
--  if (pre_binary(memc) == MEMCACHED_SUCCESS)
--  {
--    /*
--     * Make sure that we store the item on all servers
--     * (master + replicas == number of servers)
--     */
--    rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS,
--                               memc->number_of_hosts - 1);
--    assert(rc == MEMCACHED_SUCCESS);
--    assert(memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS) == memc->number_of_hosts - 1);
--  }
++
++  if (pre_binary(memc) != MEMCACHED_SUCCESS)
++    return TEST_SKIPPED;
++
++  /*
++   * Make sure that we store the item on all servers
++   * (master + replicas == number of servers)
++ */
++  rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS,
++                             memc->number_of_hosts - 1);
++  assert(rc == MEMCACHED_SUCCESS);
++  assert(memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS) == memc->number_of_hosts - 1);
  
    return rc;
  }
@@@ -3496,7 -3501,7 +3503,7 @@@ static memcached_return  poll_timeout(m
    return MEMCACHED_SUCCESS;
  }
  
--static test_return noreply_test(memcached_st *memc)
++static test_return_t noreply_test(memcached_st *memc)
  {
    memcached_return ret;
    ret= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NOREPLY, 1);
    return TEST_SUCCESS;
  }
  
--static test_return analyzer_test(memcached_st *memc)
++static test_return_t analyzer_test(memcached_st *memc)
  {
    memcached_return rc;
    memcached_stat_st *memc_stat;
@@@ -3655,12 -3660,12 +3662,12 @@@ static memcached_return callback_dump_c
    return MEMCACHED_SUCCESS;
  }
  
--static test_return dump_test(memcached_st *memc)
++static test_return_t dump_test(memcached_st *memc)
  {
    memcached_return rc;
    uint32_t counter= 0;
    memcached_dump_func callbacks[1];
--  test_return main_rc;
++  test_return_t main_rc;
  
    callbacks[0]= &callback_dump_counter;
  
@@@ -3693,7 -3698,7 +3700,7 @@@ static void* connection_release(void *a
    return arg;
  }
  
--static test_return connection_pool_test(memcached_st *memc)
++static test_return_t connection_pool_test(memcached_st *memc)
  {
    memcached_pool_st* pool= memcached_pool_create(memc, 5, 10);
    assert(pool != NULL);
  }
  #endif
  
--static test_return replication_set_test(memcached_st *memc)
++static test_return_t replication_set_test(memcached_st *memc)
  {
    memcached_return rc;
    memcached_st *memc_clone= memcached_clone(NULL, memc);
    return TEST_SUCCESS;
  }
  
--static test_return replication_get_test(memcached_st *memc)
++static test_return_t replication_get_test(memcached_st *memc)
  {
    memcached_return rc;
  
    return TEST_SUCCESS;
  }
  
--static test_return replication_mget_test(memcached_st *memc)
++static test_return_t replication_mget_test(memcached_st *memc)
  {
    memcached_return rc;
    memcached_st *memc_clone= memcached_clone(NULL, memc);
    return TEST_SUCCESS;
  }
  
--static test_return replication_delete_test(memcached_st *memc)
++static test_return_t replication_delete_test(memcached_st *memc)
  {
    memcached_return rc;
    memcached_st *memc_clone= memcached_clone(NULL, memc);
@@@ -3989,7 -3994,7 +3996,7 @@@ static uint16_t *get_udp_request_ids(me
    return ids;
  }
  
--static test_return post_udp_op_check(memcached_st *memc, uint16_t *expected_req_ids)
++static test_return_t post_udp_op_check(memcached_st *memc, uint16_t *expected_req_ids)
  {
    unsigned int x;
    memcached_server_st *cur_server = memc->hosts;
@@@ -4043,7 -4048,7 +4050,7 @@@ static memcached_return binary_init_udp
  }
  
  /* Make sure that I cant add a tcp server to a udp client */
--static test_return add_tcp_server_udp_client_test(memcached_st *memc)
++static test_return_t add_tcp_server_udp_client_test(memcached_st *memc)
  {
    memcached_server_st server;
    memcached_server_clone(&server, &memc->hosts[0]);
  }
  
  /* Make sure that I cant add a udp server to a tcp client */
--static test_return add_udp_server_tcp_client_test(memcached_st *memc)
++static test_return_t add_udp_server_tcp_client_test(memcached_st *memc)
  {
    memcached_server_st server;
    memcached_server_clone(&server, &memc->hosts[0]);
    return TEST_SUCCESS;
  }
  
--static test_return set_udp_behavior_test(memcached_st *memc)
++static test_return_t set_udp_behavior_test(memcached_st *memc)
  {
  
    memcached_quit(memc);
    return TEST_SUCCESS;
  }
  
--static test_return udp_set_test(memcached_st *memc)
++static test_return_t udp_set_test(memcached_st *memc)
  {
    unsigned int x= 0;
    unsigned int num_iters= 1025; //request id rolls over at 1024
    return TEST_SUCCESS;
  }
  
--static test_return udp_buffered_set_test(memcached_st *memc)
++static test_return_t udp_buffered_set_test(memcached_st *memc)
  {
    memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, 1);
    return udp_set_test(memc);
  }
  
--static test_return udp_set_too_big_test(memcached_st *memc)
++static test_return_t udp_set_too_big_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "bar";
    return post_udp_op_check(memc,expected_ids);
  }
  
--static test_return udp_delete_test(memcached_st *memc)
++static test_return_t udp_delete_test(memcached_st *memc)
  {
    unsigned int x= 0;
    unsigned int num_iters= 1025; //request id rolls over at 1024
    return TEST_SUCCESS;
  }
  
--static test_return udp_buffered_delete_test(memcached_st *memc)
++static test_return_t udp_buffered_delete_test(memcached_st *memc)
  {
    memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, 1);
    return udp_delete_test(memc);
  }
  
--static test_return udp_verbosity_test(memcached_st *memc)
++static test_return_t udp_verbosity_test(memcached_st *memc)
  {
    memcached_return rc;
    uint16_t *expected_ids= get_udp_request_ids(memc);
    return post_udp_op_check(memc,expected_ids);
  }
  
--static test_return udp_quit_test(memcached_st *memc)
++static test_return_t udp_quit_test(memcached_st *memc)
  {
    uint16_t *expected_ids= get_udp_request_ids(memc);
    memcached_quit(memc);
    return post_udp_op_check(memc, expected_ids);
  }
  
--static test_return udp_flush_test(memcached_st *memc)
++static test_return_t udp_flush_test(memcached_st *memc)
  {
    memcached_return rc;
    uint16_t *expected_ids= get_udp_request_ids(memc);
    return post_udp_op_check(memc,expected_ids);
  }
  
--static test_return udp_incr_test(memcached_st *memc)
++static test_return_t udp_incr_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "incr";
    return post_udp_op_check(memc, expected_ids);
  }
  
--static test_return udp_decr_test(memcached_st *memc)
++static test_return_t udp_decr_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "decr";
  }
  
  
--static test_return udp_stat_test(memcached_st *memc)
++static test_return_t udp_stat_test(memcached_st *memc)
  {
    memcached_stat_st * rv= NULL;
    memcached_return rc;
    return post_udp_op_check(memc, expected_ids);
  }
  
--static test_return udp_version_test(memcached_st *memc)
++static test_return_t udp_version_test(memcached_st *memc)
  {
    memcached_return rc;
    uint16_t *expected_ids = get_udp_request_ids(memc);
    return post_udp_op_check(memc, expected_ids);
  }
  
--static test_return udp_get_test(memcached_st *memc)
++static test_return_t udp_get_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";
    return post_udp_op_check(memc, expected_ids);
  }
  
--static test_return udp_mixed_io_test(memcached_st *memc)
++static test_return_t udp_mixed_io_test(memcached_st *memc)
  {
    test_st current_op;
    test_st mixed_io_ops [] ={
    return TEST_SUCCESS;
  }
  
--static test_return hsieh_avaibility_test (memcached_st *memc)
++static test_return_t hsieh_avaibility_test (memcached_st *memc)
  {
    memcached_return expected_rc= MEMCACHED_FAILURE;
  #ifdef HAVE_HSIEH_HASH
@@@ -4344,7 -4349,7 +4351,7 @@@ static const char *list[]
    NULL
  };
  
--static test_return md5_run (memcached_st *memc __attribute__((unused)))
++static test_return_t md5_run (memcached_st *memc __attribute__((unused)))
  {
    uint32_t x;
    const char **ptr;
    return TEST_SUCCESS;
  }
  
--static test_return crc_run (memcached_st *memc __attribute__((unused)))
++static test_return_t crc_run (memcached_st *memc __attribute__((unused)))
  {
    uint32_t x;
    const char **ptr;
    return TEST_SUCCESS;
  }
  
--static test_return fnv1_64_run (memcached_st *memc __attribute__((unused)))
++static test_return_t fnv1_64_run (memcached_st *memc __attribute__((unused)))
  {
    uint32_t x;
    const char **ptr;
    return TEST_SUCCESS;
  }
  
--static test_return fnv1a_64_run (memcached_st *memc __attribute__((unused)))
++static test_return_t fnv1a_64_run (memcached_st *memc __attribute__((unused)))
  {
    uint32_t x;
    const char **ptr;
    return TEST_SUCCESS;
  }
  
--static test_return fnv1_32_run (memcached_st *memc __attribute__((unused)))
++static test_return_t fnv1_32_run (memcached_st *memc __attribute__((unused)))
  {
    uint32_t x;
    const char **ptr;
    return TEST_SUCCESS;
  }
  
--static test_return fnv1a_32_run (memcached_st *memc __attribute__((unused)))
++static test_return_t fnv1a_32_run (memcached_st *memc __attribute__((unused)))
  {
    uint32_t x;
    const char **ptr;
    return TEST_SUCCESS;
  }
  
--static test_return hsieh_run (memcached_st *memc __attribute__((unused)))
++static test_return_t hsieh_run (memcached_st *memc __attribute__((unused)))
  {
    uint32_t x;
    const char **ptr;
    return TEST_SUCCESS;
  }
  
--static test_return murmur_run (memcached_st *memc __attribute__((unused)))
++static test_return_t murmur_run (memcached_st *memc __attribute__((unused)))
  {
    uint32_t x;
    const char **ptr;
    return TEST_SUCCESS;
  }
  
--static test_return jenkins_run (memcached_st *memc __attribute__((unused)))
++static test_return_t jenkins_run (memcached_st *memc __attribute__((unused)))
  {
    uint32_t x;
    const char **ptr;
    return TEST_SUCCESS;
  }
  
--static test_return regression_bug_434484(memcached_st *memc)
++static test_return_t regression_bug_434484(memcached_st *memc)
  {
--  if (pre_binary(memc) != TEST_SUCCESS)
--    return TEST_SUCCESS;
++  if (pre_binary(memc) != MEMCACHED_SUCCESS)
++    return TEST_SKIPPED;
  
    memcached_return ret;
    const char *key= "regression_bug_434484";
    return TEST_SUCCESS;
  }
  
--static test_return regression_bug_434843(memcached_st *memc)
++static test_return_t regression_bug_434843(memcached_st *memc)
  {
--  if (pre_binary(memc) != TEST_SUCCESS)
--    return TEST_SUCCESS;
++  if (pre_binary(memc) != MEMCACHED_SUCCESS)
++    return TEST_SKIPPED;
  
    memcached_return rc;
    unsigned int counter= 0;
    return TEST_SUCCESS;
  }
  
--static test_return regression_bug_434843_buffered(memcached_st *memc)
++static test_return_t regression_bug_434843_buffered(memcached_st *memc)
  {
    memcached_return rc;
    rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BUFFER_REQUESTS, 1);
    return regression_bug_434843(memc);
  }
  
--static test_return regression_bug_421108(memcached_st *memc)
++static test_return_t regression_bug_421108(memcached_st *memc)
  {
    memcached_return rc;
    memcached_stat_st *memc_stat= memcached_stat(memc, NULL, &rc);
   * delete command or the watermarks, we need to update this
   * test....
   */
--static test_return regression_bug_442914(memcached_st *memc)
++static test_return_t regression_bug_442914(memcached_st *memc)
  {
    memcached_return rc;
    rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NOREPLY, 1);
diff --cc tests/plus.cpp
index 7ede21564c93d00eb07c7ce2fec097a8a5ed258a,7ede21564c93d00eb07c7ce2fec097a8a5ed258a..d988334fb89459b8df47671bb66dae37c3aaa043
@@@ -23,11 -23,11 +23,11 @@@ using namespace std
  using namespace memcache;
  
  extern "C" {
--   test_return basic_test(memcached_st *memc);
--   test_return increment_test(memcached_st *memc);
--   test_return basic_master_key_test(memcached_st *memc);
--   test_return mget_result_function(memcached_st *memc);
--   test_return mget_test(memcached_st *memc);
++   test_return_t basic_test(memcached_st *memc);
++   test_return_t increment_test(memcached_st *memc);
++   test_return_t basic_master_key_test(memcached_st *memc);
++   test_return_t mget_result_function(memcached_st *memc);
++   test_return_t mget_test(memcached_st *memc);
     memcached_return callback_counter(memcached_st *,
                                       memcached_result_st *, 
                                       void *context);
@@@ -50,7 -50,7 +50,7 @@@ static void copy_vec_to_string(vector<c
    }
  }
  
--test_return basic_test(memcached_st *memc)
++test_return_t basic_test(memcached_st *memc)
  {
    Memcache foo(memc);
    const string value_set("This is some data");
@@@ -80,7 -80,7 +80,7 @@@
    return TEST_FAILURE;
  }
  
--test_return increment_test(memcached_st *memc)
++test_return_t increment_test(memcached_st *memc)
  {
    Memcache mcach(memc);
    bool rc;
    return TEST_SUCCESS;
  }
  
--test_return basic_master_key_test(memcached_st *memc)
++test_return_t basic_master_key_test(memcached_st *memc)
  {
    Memcache foo(memc);
    const string value_set("Data for server A");
@@@ -162,7 -162,7 +162,7 @@@ memcached_return callback_counter(memca
    return MEMCACHED_SUCCESS;
  }
  
--test_return mget_result_function(memcached_st *memc)
++test_return_t mget_result_function(memcached_st *memc)
  {
    Memcache mc(memc);
    bool rc;
    return TEST_SUCCESS;
  }
  
--test_return mget_test(memcached_st *memc)
++test_return_t mget_test(memcached_st *memc)
  {
    Memcache mc(memc);
    bool rc;
diff --cc tests/test.c
index 78fe4a70ff8b284ee4db96e3256ef4eed46135bb,78fe4a70ff8b284ee4db96e3256ef4eed46135bb..d0d5329245a6ed398308a267b6c8c67127cb596a
@@@ -25,8 -25,8 +25,28 @@@ static long int timedif(struct timeval 
    return s + us;
  }
  
++static const char *test_strerror(test_return_t code)
++{
++  switch (code) {
++  case TEST_SUCCESS:
++    return "ok";
++  case TEST_FAILURE:
++    return "failed";
++  case TEST_MEMORY_ALLOCATION_FAILURE:
++    return "memory allocation";
++  case TEST_SKIPPED:
++    return "skipped";
++  case TEST_MAXIMUM_RETURN:
++  default: 
++    fprintf(stderr, "Unknown return value\n");
++    assert(0);
++  }
++
++}
++
  int main(int argc, char *argv[])
  {
++  test_return_t failed;
    unsigned int x;
    char *collection_to_run= NULL;
    char *wildcard= NULL;
@@@ -35,7 -35,7 +55,6 @@@
    world_st world;
    collection_st *collection;
    collection_st *next;
--  uint8_t failed;
    void *world_ptr;
  
    memset(&world, 0, sizeof(world_st));
        failed= run->function(memc);
        gettimeofday(&end_time, NULL);
        load_time= timedif(end_time, start_time);
--      if (failed)
--        fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ failed ]\n", load_time / 1000, 
--                load_time % 1000);
--      else
--        fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000, 
--                load_time % 1000);
++
++      fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ %s ]\n", load_time / 1000, 
++              load_time % 1000, test_strerror(failed));
  
        if (next->post)
          (void)next->post(memc);
diff --cc tests/test.h
index d0e089ddfcfa42f5b3d62762162ac64e360aa91f,d0e089ddfcfa42f5b3d62762162ac64e360aa91f..28d29a41c79d118e47ab741c3f198baf6776b2ae
@@@ -16,13 -16,13 +16,14 @@@ typedef enum 
    TEST_SUCCESS= 0, /* Backwards compatibility */
    TEST_FAILURE,
    TEST_MEMORY_ALLOCATION_FAILURE,
++  TEST_SKIPPED,
    TEST_MAXIMUM_RETURN /* Always add new error code before */
--} test_return;
++} test_return_t;
  
  struct test_st {
    const char *name;
    unsigned int requires_flush;
--  test_return (*function)(memcached_st *memc);
++  test_return_t (*function)(memcached_st *memc);
  };
  
  struct collection_st {
diff --cc tests/udp.c
index 2fc178f07f15bfe9833c7967994467957b92b910,2fc178f07f15bfe9833c7967994467957b92b910..dc33ae67360821c9af86f7fe742e417efe6749bc
  #include "server.h"
  
  /* Prototypes */
--test_return set_test(memcached_st *memc);
++test_return_t set_test(memcached_st *memc);
  void *world_create(void);
  void world_destroy(void *p);
  
--test_return set_test(memcached_st *memc)
++test_return_t set_test(memcached_st *memc)
  {
    memcached_return rc;
    const char *key= "foo";