return 0;
}
+/*
+ Set the value, then quit to make sure it is flushed.
+ Come back in and test that add fails.
+*/
uint8_t add_test(memcached_st *memc)
{
memcached_return rc;
char *key= "foo";
char *value= "when we sanitize";
+ rc= memcached_set(memc, key, strlen(key),
+ value, strlen(value),
+ (time_t)0, (uint16_t)0);
+ assert(rc == MEMCACHED_SUCCESS);
+ memcached_quit(memc);
rc= memcached_add(memc, key, strlen(key),
value, strlen(value),
(time_t)0, (uint16_t)0);
while ((results= memcached_fetch_result(memc, &results_obj, &rc)) != NULL)
assert(!results);
- assert(rc == MEMCACHED_NOTFOUND);
+ assert(rc == MEMCACHED_END);
for (x= 0; x < 3; x++)
{
assert(results);
}
assert(!results);
- assert(rc == MEMCACHED_NOTFOUND);
+ assert(rc == MEMCACHED_END);
for (x= 0; x < 3; x++)
{
}
assert(!return_value);
assert(return_value_length == 0);
- assert(rc == MEMCACHED_NOTFOUND);
+ assert(rc == MEMCACHED_END);
for (x= 0; x < 3; x++)
{
value= memcached_get(memc, keys[0], key_length[0],
&value_length, &flags, &rc);
assert(value == NULL);
+ assert(rc == MEMCACHED_NOTFOUND);
rc= memcached_mget(memc, keys, key_length, 4);
+ assert(rc == MEMCACHED_SUCCESS);
count= 0;
while ((value= memcached_fetch(memc, return_key, &return_key_length,
&value_length, &flags, &rc)))
count++;
assert(count == 0);
+ assert(rc == MEMCACHED_END);
for (x= 0; x < 4; x++)
{
assert(rc == MEMCACHED_SUCCESS);
}
- for (x= 0; x < 10; x++)
+ for (x= 0; x < 2; x++)
{
value= memcached_get(memc, keys[0], key_length[0],
&value_length, &flags, &rc);
free(value);
rc= memcached_mget(memc, keys, key_length, 4);
+ assert(rc == MEMCACHED_SUCCESS);
count= 3;
/* We test for purge of partial complete fetches */
for (count= 3; count; count--)
{
value= memcached_fetch(memc, return_key, &return_key_length,
&value_length, &flags, &rc);
- free(value);
assert(rc == MEMCACHED_SUCCESS);
+ assert(!(memcmp(value, insert_data, value_length)));
+ assert(value_length);
+ free(value);
}
}
return 0;
}
+uint8_t user_supplied_bug8(memcached_st *memc)
+{
+ memcached_return rc;
+ memcached_st *mine;
+ memcached_st *clone;
+
+ memcached_server_st *servers;
+ char *server_list= "memcache1.memcache.bk.sapo.pt:11211, memcache1.memcache.bk.sapo.pt:11212, memcache1.memcache.bk.sapo.pt:11213, memcache1.memcache.bk.sapo.pt:11214, memcache2.memcache.bk.sapo.pt:11211, memcache2.memcache.bk.sapo.pt:11212, memcache2.memcache.bk.sapo.pt:11213, memcache2.memcache.bk.sapo.pt:11214";
+
+ 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);
+ clone= memcached_clone(NULL, mine);
+
+ memcached_quit(mine);
+ memcached_quit(clone);
+
+
+ memcached_free(mine);
+ memcached_free(clone);
+
+ return 0;
+}
+
/* Test flag store/retrieve */
uint8_t user_supplied_bug7(memcached_st *memc)
{
return MEMCACHED_SUCCESS;
}
+memcached_return pre_hsieh(memcached_st *memc)
+{
+ memcached_hash value= MEMCACHED_HASH_HSIEH;
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, &value);
+
+ return MEMCACHED_SUCCESS;
+}
+
memcached_return pre_hash_fnv1_64(memcached_st *memc)
{
memcached_hash value= MEMCACHED_HASH_FNV1_64;
return MEMCACHED_SUCCESS;
}
+memcached_return enable_consistent(memcached_st *memc)
+{
+ memcached_server_distribution value= MEMCACHED_DISTRIBUTION_CONSISTENT;
+ memcached_hash hash;
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, &value);
+ pre_hsieh(memc);
+
+ value= (memcached_server_distribution)memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_DISTRIBUTION);
+ assert(value == MEMCACHED_DISTRIBUTION_CONSISTENT);
+
+ hash= (memcached_hash)memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_HASH);
+ assert(hash == MEMCACHED_HASH_HSIEH);
+
+
+ return MEMCACHED_SUCCESS;
+}
+
memcached_return enable_cas(memcached_st *memc)
{
unsigned int set= 1;
{"set", 0, set_test },
{"set2", 0, set_test2 },
{"set3", 0, set_test3 },
- {"add", 0, add_test },
+ {"add", 1, add_test },
{"replace", 0, replace_test },
{"delete", 1, delete_test },
{"get", 1, get_test },
{"user_supplied_bug5", 1, user_supplied_bug5 },
{"user_supplied_bug6", 1, user_supplied_bug6 },
{"user_supplied_bug7", 1, user_supplied_bug7 },
+ {"user_supplied_bug8", 1, user_supplied_bug8 },
{0, 0, 0}
};
{"nodelay", pre_nodelay, 0, tests},
{"md5", pre_md5, 0, tests},
{"crc", pre_crc, 0, tests},
+ {"hsieh", pre_hsieh, 0, tests},
{"fnv1_64", pre_hash_fnv1_64, 0, tests},
{"fnv1a_64", pre_hash_fnv1a_64, 0, tests},
{"fnv1_32", pre_hash_fnv1_32, 0, tests},
{"unix_socket_nodelay", pre_nodelay, 0, tests},
{"poll_timeout", poll_timeout, 0, tests},
{"gets", enable_cas, 0, tests},
+ {"consistent", enable_consistent, 0, tests},
// {"udp", pre_udp, 0, tests},
{"version_1_2_3", check_for_1_2_3, 0, version_1_2_3},
{"string", 0, 0, string_tests},
{"result", 0, 0, result_tests},
{"user", 0, 0, user_tests},
{"generate", 0, 0, generate_tests},
+ {"generate_hsieh", pre_hsieh, 0, generate_tests},
+ {"generate_hsieh_consistent", enable_consistent, 0, generate_tests},
+ {"generate_md5", pre_md5, 0, generate_tests},
{"generate_nonblock", pre_nonblock, 0, generate_tests},
{0, 0, 0, 0}
};