if (setting_value)
assert(rc == MEMCACHED_NOTSTORED || rc == MEMCACHED_STORED);
else
- assert(rc == MEMCACHED_NOTSTORED);
+ assert(rc == MEMCACHED_NOTSTORED || rc == MEMCACHED_DATA_EXISTS);
return 0;
}
assert(rc == MEMCACHED_BAD_KEY_PROVIDED);
}
+ /* Make sure zero length keys are marked as bad */
+ set= 1;
+ rc= memcached_behavior_set(clone, MEMCACHED_BEHAVIOR_VERIFY_KEY, set);
+ assert(rc == MEMCACHED_SUCCESS);
+ string= memcached_get(clone, key, 0,
+ &string_length, &flags, &rc);
+ assert(rc == MEMCACHED_BAD_KEY_PROVIDED);
+ assert(string_length == 0);
+ assert(!string);
+
memcached_free(clone);
return 0;
return 0;
}
+/* Check the validity of chinese key*/
+test_return user_supplied_bug17(memcached_st *memc)
+{
+ memcached_return rc;
+ char *key= "豆瓣";
+ char *value="我们在炎热抑郁的夏天无法停止豆瓣";
+ char *value2;
+ size_t length;
+ uint32_t flags;
+
+ rc= memcached_set(memc, key, strlen(key),
+ value, strlen(value),
+ (time_t)0, 0);
+
+ assert(rc == MEMCACHED_SUCCESS);
+
+ value2= memcached_get(memc, key, strlen(key),
+ &length, &flags, &rc);
+
+ assert(length==strlen(value));
+ assert(rc == MEMCACHED_SUCCESS);
+ assert(memcmp(value, value2, length)==0);
+
+ return 0;
+}
+
+
test_return result_static(memcached_st *memc)
{
memcached_result_st result;
assert(value == MEMCACHED_HASH_MD5);
return MEMCACHED_SUCCESS;
}
+
+memcached_return pre_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)
+ {
+ 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;
+}
+
void my_free(memcached_st *ptr, void *mem)
{
free(mem);
memcached_version(memc);
if (memc->hosts[0].major_version >= 1 &&
- memc->hosts[0].minor_version >= 2 &&
- memc->hosts[0].micro_version >= 4)
+ (memc->hosts[0].minor_version == 2 &&
+ memc->hosts[0].micro_version >= 4) || memc->hosts[0].minor_version > 2)
{
memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, set);
memcached_version(memc);
if (memc->hosts[0].major_version >= 1 &&
- memc->hosts[0].minor_version >= 2 &&
- memc->hosts[0].micro_version >= 4)
+ (memc->hosts[0].minor_version == 2 && memc->hosts[0].micro_version >= 4)
+ || memc->hosts[0].minor_version > 2)
return MEMCACHED_SUCCESS;
return MEMCACHED_FAILURE;
return MEMCACHED_SUCCESS;
}
+memcached_return pre_settimer(memcached_st *memc)
+{
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SND_TIMEOUT, 1000);
+ memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_RCV_TIMEOUT, 1000);
+
+ return MEMCACHED_SUCCESS;
+}
+
memcached_return poll_timeout(memcached_st *memc)
{
int32_t timeout;
{"user_supplied_bug14", 1, user_supplied_bug14 },
{"user_supplied_bug15", 1, user_supplied_bug15 },
{"user_supplied_bug16", 1, user_supplied_bug16 },
+ {"user_supplied_bug17", 1, user_supplied_bug17 },
{0, 0, 0}
};
collection_st collection[] ={
{"block", 0, 0, tests},
+ {"binary", pre_binary, 0, tests},
{"nonblock", pre_nonblock, 0, tests},
{"nodelay", pre_nodelay, 0, tests},
+ {"settimer", pre_settimer, 0, tests},
{"md5", pre_md5, 0, tests},
{"crc", pre_crc, 0, tests},
{"hsieh", pre_hsieh, 0, tests},