~avsej/libmemcached/touch-command

« back to all changes in this revision

Viewing changes to tests/mem_functions.cc

  • Committer: Sergey Avseyev
  • Date: 2011-06-28 09:37:20 UTC
  • Revision ID: sergey.avseyev@gmail.com-20110628093720-yv26cuk9pfxxmbz0
Implement TOUCH command

Show diffs side-by-side

added added

removed removed

Lines of Context:
5025
5025
  return TEST_SUCCESS;
5026
5026
}
5027
5027
 
 
5028
static test_return_t test_memcached_touch(memcached_st *memc)
 
5029
{
 
5030
  test_return_t test_rc;
 
5031
  test_rc= pre_binary(memc);
 
5032
 
 
5033
  if (test_rc != TEST_SUCCESS)
 
5034
    return test_rc;
 
5035
 
 
5036
  const char *key= "touchkey";
 
5037
  const char *val= "touchval";
 
5038
  size_t len;
 
5039
  uint32_t flags;
 
5040
  memcached_return rc;
 
5041
  char *value;
 
5042
 
 
5043
  value= memcached_get(memc, key, strlen(key), &len, &flags, &rc);
 
5044
  test_true(len == 0);
 
5045
  test_false(value);
 
5046
  test_true(rc == MEMCACHED_NOTFOUND);
 
5047
 
 
5048
  rc= memcached_set(memc, key, strlen(key), val, strlen(val), 2, 0);
 
5049
  test_true(rc == MEMCACHED_SUCCESS);
 
5050
 
 
5051
  sleep(1);
 
5052
 
 
5053
  value= memcached_get(memc, key, strlen(key), &len, &flags, &rc);
 
5054
  test_true(len == 8);
 
5055
  test_strcmp(value, val);
 
5056
  test_true(rc == MEMCACHED_SUCCESS);
 
5057
 
 
5058
  rc= memcached_touch(memc, key, strlen(key), 3);
 
5059
  if (rc == MEMCACHED_PROTOCOL_ERROR) { // 'touch' not implemented on server
 
5060
    return TEST_SKIPPED;
 
5061
  }
 
5062
  test_true(rc == MEMCACHED_SUCCESS);
 
5063
 
 
5064
  sleep(2);
 
5065
 
 
5066
  value= memcached_get(memc, key, strlen(key), &len, &flags, &rc);
 
5067
  test_true(len == 8);
 
5068
  test_strcmp(value, val);
 
5069
  test_true(rc == MEMCACHED_SUCCESS);
 
5070
 
 
5071
  sleep(2);
 
5072
 
 
5073
  value= memcached_get(memc, key, strlen(key), &len, &flags, &rc);
 
5074
  test_true(len == 0);
 
5075
  test_false(value);
 
5076
  test_true(rc == MEMCACHED_NOTFOUND);
 
5077
 
 
5078
  return TEST_SUCCESS;
 
5079
}
 
5080
 
 
5081
static test_return_t test_memcached_touch_with_prefix(memcached_st *orig_memc)
 
5082
{
 
5083
  const char *key= "touchkey";
 
5084
  const char *val= "touchval";
 
5085
  const char *prefix= "namespace:";
 
5086
  memcached_return rc;
 
5087
  test_return_t test_rc;
 
5088
  memcached_st *memc= memcached_clone(NULL, orig_memc);
 
5089
 
 
5090
  test_rc= pre_binary(memc);
 
5091
  if (test_rc != TEST_SUCCESS)
 
5092
    return test_rc;
 
5093
 
 
5094
  rc = memcached_callback_set(memc, MEMCACHED_CALLBACK_PREFIX_KEY, (void *)prefix);
 
5095
  test_true(rc == MEMCACHED_SUCCESS);
 
5096
 
 
5097
  rc= memcached_set(memc, key, strlen(key), val, strlen(val), 2, 0);
 
5098
  test_true(rc == MEMCACHED_SUCCESS);
 
5099
 
 
5100
  rc= memcached_touch(memc, key, strlen(key), 3);
 
5101
  if (rc == MEMCACHED_PROTOCOL_ERROR) { // 'touch' not implemented on server
 
5102
    return TEST_SKIPPED;
 
5103
  }
 
5104
  test_true(rc == MEMCACHED_SUCCESS);
 
5105
 
 
5106
  return TEST_SUCCESS;
 
5107
}
 
5108
 
 
5109
 
5028
5110
static test_return_t ketama_compatibility_spymemcached(memcached_st *)
5029
5111
{
5030
5112
  uint64_t value;
6444
6526
  {0, 0, (test_callback_fn*)0}
6445
6527
};
6446
6528
 
 
6529
test_st touch_tests[] ={
 
6530
  {"memcached_touch", 0, (test_callback_fn*)test_memcached_touch},
 
6531
  {"memcached_touch_with_prefix", 0, (test_callback_fn*)test_memcached_touch_with_prefix},
 
6532
  {0, 0, (test_callback_fn*)0}
 
6533
};
6447
6534
 
6448
6535
test_st parser_tests[] ={
6449
6536
  {"behavior", 0, (test_callback_fn*)behavior_parser_test },
6535
6622
  {"parser", 0, 0, parser_tests},
6536
6623
  {"virtual buckets", 0, 0, virtual_bucket_tests},
6537
6624
  {"memcached_server_get_last_disconnect", 0, 0, memcached_server_get_last_disconnect_tests},
 
6625
  {"touch", 0, 0, touch_tests},
6538
6626
  {0, 0, 0, 0}
6539
6627
};
6540
6628