Merge
authorBrian Aker <brian@tangent.org>
Tue, 6 Jan 2009 22:08:49 +0000 (14:08 -0800)
committerBrian Aker <brian@tangent.org>
Tue, 6 Jan 2009 22:08:49 +0000 (14:08 -0800)
1  2 
tests/function.c

diff --combined tests/function.c
index 7ec22d4cdb38bdb97e0f68ad3e01564816c1e2d4,deccab144f8214f97535df653a74c191dd697a42..411c12b68880e073993ce6f0950d5ece59a8ad83
@@@ -395,13 -395,10 +395,13 @@@ static test_return  cas2_test(memcached
  static test_return  cas_test(memcached_st *memc)
  {
    memcached_return rc;
 -  char *key= "fun";
 -  size_t key_length= strlen("fun");
 -  char *value= "we the people";
 -  size_t value_length= strlen("we the people");
 +  const char *key= "fun";
 +  size_t key_length= strlen(key);
 +  const char *value= "we the people";
 +  size_t value_length= strlen(value);
 +  const char *value2= "change the value";
 +  size_t value2_length= strlen(value2);
 +
    memcached_result_st results_obj;
    memcached_result_st *results;
    unsigned int set= 1;
    assert(results);
    assert(rc == MEMCACHED_SUCCESS);
    WATCHPOINT_ASSERT(memcached_result_cas(results));
 -
 -  assert(!memcmp(value, "we the people", strlen("we the people")));
 -  assert(strlen("we the people") == value_length);
 +  assert(!memcmp(value, memcached_result_value(results), value_length));
 +  assert(strlen(memcached_result_value(results)) == value_length);
    assert(rc == MEMCACHED_SUCCESS);
 +  uint64_t cas = memcached_result_cas(results);
  
 -  rc= memcached_cas(memc, key, key_length,
 -                    "change the value", strlen("change the value"), 
 -                    0, 0, memcached_result_cas(results));
 -
 +  #if 0
 +  results= memcached_fetch_result(memc, &results_obj, &rc);
 +  assert(rc == MEMCACHED_END);
 +  assert(results == NULL);
 +#endif
 +  
 +  rc= memcached_cas(memc, key, key_length, value2, value2_length, 0, 0, cas);
    assert(rc == MEMCACHED_SUCCESS);
  
 -  rc= memcached_cas(memc, key, key_length,
 -                    "change the value", strlen("change the value"), 
 -                    0, 0, 23);
 -
 +  /*
 +   * The item will have a new cas value, so try to set it again with the old
 +   * value. This should fail!
 +   */
 +  rc= memcached_cas(memc, key, key_length, value2, value2_length, 0, 0, cas);
    assert(rc == MEMCACHED_DATA_EXISTS);
  
 -
    memcached_result_free(&results_obj);
  
    return 0;
@@@ -1403,11 -1397,13 +1403,11 @@@ static test_return  user_supplied_bug1(
      sprintf(key, "%d", x);
      rc = memcached_set(memc, key, strlen(key), 
                         randomstuff, strlen(randomstuff), 10, 0);
 -    WATCHPOINT_ERROR(rc);
      assert(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED);
      /* If we fail, lets try again */
      if (rc != MEMCACHED_SUCCESS && rc != MEMCACHED_BUFFERED)
        rc = memcached_set(memc, key, strlen(key), 
                           randomstuff, strlen(randomstuff), 10, 0);
 -    WATCHPOINT_ERROR(rc);
      assert(rc == MEMCACHED_SUCCESS || rc == MEMCACHED_BUFFERED);
    }
  
@@@ -1935,11 -1931,7 +1935,11 @@@ static test_return  user_supplied_bug12
                            1, &number_value);
  
    assert(value == NULL);
 -  assert(rc == MEMCACHED_NOTFOUND);
 +  /* The binary protocol will set the key if it doesn't exist */
 +  if (memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL) == 1) 
 +    assert(rc == MEMCACHED_SUCCESS);
 +  else
 +    assert(rc == MEMCACHED_NOTFOUND);
  
    rc= memcached_set(memc, "autoincrement", strlen("autoincrement"), "1", 1, 0, 0);
  
@@@ -2158,33 -2150,6 +2158,33 @@@ test_return user_supplied_bug19(memcach
    return 0;
  }
  
 +/* CAS test from Andei */
 +test_return user_supplied_bug20(memcached_st *memc)
 +{
 +  memcached_return status;
 +  memcached_result_st *result, result_obj;
 +  char *key = "abc";
 +  size_t key_len = strlen("abc");
 +  char *value = "foobar";
 +  size_t value_len = strlen(value);
 +
 +  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, 1);
 +
 +  status = memcached_set(memc, key, key_len, value, value_len, (time_t)0, (uint32_t)0);
 +  assert(status == MEMCACHED_SUCCESS);
 +
 +  status = memcached_mget(memc, &key, &key_len, 1);
 +  assert(status == MEMCACHED_SUCCESS);
 +
 +  memcached_result_create(memc, &result_obj);
 +  result= memcached_fetch_result(memc, &result_obj, &status);
 +
 +  assert(result);
 +  assert(status == MEMCACHED_SUCCESS);
 +
 +  return 0;
 +}
 +
  #include "ketama_test_cases.h"
  test_return user_supplied_bug18(memcached_st *trash)
  {
@@@ -2640,6 -2605,29 +2640,29 @@@ static memcached_return  pre_nonblock(m
    return MEMCACHED_SUCCESS;
  }
  
+ static memcached_return  pre_nonblock_binary(memcached_st *memc)
+ {
+   memcached_return rc= MEMCACHED_FAILURE;
+   memcached_st *clone;
+   clone= memcached_clone(NULL, memc);
+   assert(clone);
+   // The memcached_version needs to be done on a clone, because the server
+   // will not toggle protocol on an connection.
+   memcached_version(clone);
+   if (clone->hosts[0].major_version >= 1 && clone->hosts[0].minor_version > 2) 
+   {
+     memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, 0);
+     rc = memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1);
+     assert(rc == MEMCACHED_SUCCESS);
+     assert(memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL) == 1);
+   }
+   memcached_free(clone);
+   return rc;
+ }
  static memcached_return  pre_murmur(memcached_st *memc)
  {
    memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_MURMUR);
@@@ -3057,16 -3045,24 +3080,25 @@@ test_st user_tests[] =
    {"user_supplied_bug8", 1, user_supplied_bug8 },
    {"user_supplied_bug9", 1, user_supplied_bug9 },
    {"user_supplied_bug10", 1, user_supplied_bug10 },
 -//  {"user_supplied_bug11", 1, user_supplied_bug11 },
 +  {"user_supplied_bug11", 1, user_supplied_bug11 },
    {"user_supplied_bug12", 1, user_supplied_bug12 },
    {"user_supplied_bug13", 1, user_supplied_bug13 },
    {"user_supplied_bug14", 1, user_supplied_bug14 },
    {"user_supplied_bug15", 1, user_supplied_bug15 },
    {"user_supplied_bug16", 1, user_supplied_bug16 },
+ #ifndef __sun
+   /* 
+   ** It seems to be something weird with the character sets.. 
+   ** value_fetch is unable to parse the value line (iscntrl "fails"), so I
+   ** guess I need to find out how this is supposed to work.. Perhaps I need
+   ** to run the test in a specific locale (I tried zh_CN.UTF-8 without success,
+   ** so just disable the code for now...).
+   */
    {"user_supplied_bug17", 1, user_supplied_bug17 },
+ #endif
    {"user_supplied_bug18", 1, user_supplied_bug18 },
    {"user_supplied_bug19", 1, user_supplied_bug19 },
 +  {"user_supplied_bug20", 1, user_supplied_bug20 },
    {0, 0, 0}
  };
  
@@@ -3131,6 -3127,7 +3163,7 @@@ collection_st collection[] =
    {"string", 0, 0, string_tests},
    {"result", 0, 0, result_tests},
    {"async", pre_nonblock, 0, async_tests},
+   {"async_binary", pre_nonblock_binary, 0, async_tests},
    {"user", 0, 0, user_tests},
    {"generate", 0, 0, generate_tests},
    {"generate_hsieh", pre_hsieh, 0, generate_tests},