Merge in bug fix for 677609
[awesomized/libmemcached] / tests / mem_functions.c
index a38c49c4be678a0cd1bb556ff74333b3f382a2bb..389bfdc13f7e01183917d4afe79ce300fc19a1d3 100644 (file)
@@ -2054,7 +2054,7 @@ static test_return_t MEMCACHED_BEHAVIOR_TCP_KEEPIDLE_test(memcached_st *memc)
   return TEST_SUCCESS;
 }
 
-static test_return_t fetch_all_results(memcached_st *memc)
+static test_return_t fetch_all_results(memcached_st *memc, size_t *keys_returned)
 {
   memcached_return_t rc= MEMCACHED_SUCCESS;
   char return_key[MEMCACHED_MAX_KEY];
@@ -2063,12 +2063,15 @@ static test_return_t fetch_all_results(memcached_st *memc)
   size_t return_value_length;
   uint32_t flags;
 
+  *keys_returned= 0;
+
   while ((return_value= memcached_fetch(memc, return_key, &return_key_length,
                                         &return_value_length, &flags, &rc)))
   {
     test_true(return_value);
     test_true(rc == MEMCACHED_SUCCESS);
     free(return_value);
+    *keys_returned= *keys_returned +1;
   }
 
   test_true_got(rc == MEMCACHED_END || rc == MEMCACHED_SUCCESS, memcached_strerror(NULL, rc));
@@ -2211,7 +2214,8 @@ static test_return_t user_supplied_bug3(memcached_st *memc)
   rc= memcached_mget(memc, (const char **)keys, key_lengths, KEY_COUNT);
   test_true(rc == MEMCACHED_SUCCESS);
 
-  test_true(fetch_all_results(memc) == TEST_SUCCESS);
+  size_t keys_returned;
+  test_true(fetch_all_results(memc, &keys_returned) == TEST_SUCCESS);
 
   for (x= 0; x < KEY_COUNT; x++)
     free(keys[x]);
@@ -3007,7 +3011,8 @@ static test_return_t _user_supplied_bug21(memcached_st* memc, size_t key_count)
   alarm(0);
   signal(SIGALRM, oldalarm);
 
-  test_true(fetch_all_results(memc) == TEST_SUCCESS);
+  size_t keys_returned;
+  test_true(fetch_all_results(memc, &keys_returned) == TEST_SUCCESS);
 
   for (x= 0; x < key_count; x++)
     free(keys[x]);
@@ -3471,9 +3476,22 @@ static test_return_t mget_read(memcached_st *memc)
 {
   memcached_return_t rc;
 
+  if (! libmemcached_util_version_check(memc, 1, 4, 4))
+    return TEST_SKIPPED;
+
   rc= memcached_mget(memc, global_keys, global_keys_length, global_count);
+
   test_true_got(rc == MEMCACHED_SUCCESS, memcached_strerror(NULL, rc));
-  test_true(fetch_all_results(memc) == TEST_SUCCESS);
+
+  // Go fetch the keys and test to see if all of them were returned
+  {
+    size_t keys_returned;
+    test_true(fetch_all_results(memc, &keys_returned) == TEST_SUCCESS);
+    char buffer[30];
+    snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)keys_returned);
+    test_true_got(global_count == keys_returned, buffer);
+  }
+
 
   return TEST_SUCCESS;
 }
@@ -3482,8 +3500,13 @@ static test_return_t mget_read_result(memcached_st *memc)
 {
   memcached_return_t rc;
 
+  if (! libmemcached_util_version_check(memc, 1, 4, 4))
+    return TEST_SKIPPED;
+
   rc= memcached_mget(memc, global_keys, global_keys_length, global_count);
+
   test_true_got(rc == MEMCACHED_SUCCESS, memcached_strerror(NULL, rc));
+
   /* Turn this into a help function */
   {
     memcached_result_st results_obj;
@@ -3509,7 +3532,11 @@ static test_return_t mget_read_function(memcached_st *memc)
   size_t counter;
   memcached_execute_fn callbacks[1];
 
+  if (! libmemcached_util_version_check(memc, 1, 4, 4))
+    return TEST_SKIPPED;
+
   rc= memcached_mget(memc, global_keys, global_keys_length, global_count);
+
   test_true_got(rc == MEMCACHED_SUCCESS, memcached_strerror(NULL, rc));
 
   callbacks[0]= &callback_counter;
@@ -3645,9 +3672,13 @@ static test_return_t pre_nonblock_binary(memcached_st *memc)
 
 static test_return_t pre_murmur(memcached_st *memc)
 {
+#ifdef HAVE_MURMUR_HASH
   memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_MURMUR);
-
   return TEST_SUCCESS;
+#else
+  (void) memc;
+  return TEST_SKIPPED;
+#endif
 }
 
 static test_return_t pre_jenkins(memcached_st *memc)
@@ -4804,6 +4835,19 @@ static test_return_t hsieh_avaibility_test (memcached_st *memc)
   return TEST_SUCCESS;
 }
 
+static test_return_t murmur_avaibility_test (memcached_st *memc)
+{
+  memcached_return_t expected_rc= MEMCACHED_FAILURE;
+#ifdef HAVE_MURMUR_HASH
+  expected_rc= MEMCACHED_SUCCESS;
+#endif
+  memcached_return_t rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH,
+                                                (uint64_t)MEMCACHED_HASH_MURMUR);
+  test_true(rc == expected_rc);
+
+  return TEST_SUCCESS;
+}
+
 static test_return_t one_at_a_time_run (memcached_st *memc __attribute__((unused)))
 {
   uint32_t x;
@@ -4936,6 +4980,7 @@ static test_return_t hsieh_run (memcached_st *memc __attribute__((unused)))
 static test_return_t murmur_run (memcached_st *memc __attribute__((unused)))
 {
 #ifdef WORDS_BIGENDIAN
+  (void)murmur_values;
   return TEST_SKIPPED;
 #else
   uint32_t x;
@@ -6364,6 +6409,11 @@ test_st hsieh_availability[] ={
   {0, 0, (test_callback_fn)0}
 };
 
+test_st murmur_availability[] ={
+  {"murmur_avaibility_test", 0, (test_callback_fn)murmur_avaibility_test},
+  {0, 0, (test_callback_fn)0}
+};
+
 #if 0
 test_st hash_sanity[] ={
   {"hash sanity", 0, (test_callback_fn)hash_sanity_test},
@@ -6405,6 +6455,7 @@ collection_st collection[] ={
   {"hash_sanity", 0, 0, hash_sanity},
 #endif
   {"hsieh_availability", 0, 0, hsieh_availability},
+  {"murmur_availability", 0, 0, murmur_availability},
   {"block", 0, 0, tests},
   {"binary", (test_callback_fn)pre_binary, 0, tests},
   {"nonblock", (test_callback_fn)pre_nonblock, 0, tests},