19 #include <glib/gstdio.h>
20 #include "libmemcached/memcached.h"
25 #include "../lib/grn-assertions.h"
26 #include "../lib/grn-test-memcached-assertions.h"
27 #include "../lib/grn-test-server.h"
30 static gchar *val1 = NULL, *val2 = NULL;
31 static size_t val1_len, val2_len;
32 static struct memcached_st *memc = NULL;
33 static struct memcached_server_st *servers = NULL;
47 gcut_assert_error(error);
49 memc = memcached_create(NULL);
50 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, 1);
55 cut_message(
"memcached server connect failed."));
57 memcached_flush(memc, 0);
63 if (val1) { free(val1); val1 = NULL; }
64 if (val2) { free(val2); val2 = NULL; }
67 memcached_server_list_free(servers);
74 g_object_unref(server);
85 memcached_set(memc,
"key", 3,
"value", 5, 0, 0xdeadbeefU),
86 cut_message(
"memcached set failed."));
88 val1 = memcached_get(memc,
"key", 3, &val1_len, &flags, &rc);
90 cut_assert_equal_string(
"value", val1);
91 cut_assert_equal_uint(0xdeadbeefU, flags);
99 const int timeout = 1;
102 memcached_set(memc,
"key", 1,
"value", 5, timeout, 0xdeadbeefU),
103 cut_message(
"memcached set with expiration failed."));
105 val1 = memcached_get(memc,
"key", 1, &val1_len, &flags, &rc);
107 rc, cut_message(
"memcached get with expiration failed."));
108 cut_assert_equal_string(
"value", val1);
109 cut_assert_equal_uint(0xdeadbeefU, flags);
113 val2 = memcached_get(memc,
"key", 1, &val2_len, &flags, &rc);
115 MEMCACHED_NOTFOUND, rc,
116 cut_message(
"memcached get with expiration error."));
123 memcached_return rc = MEMCACHED_SUCCESS;
134 memcached_add(memc,
"key", 3,
"value", 5, 0, 0xdeadbeefU),
135 cut_message(
"memcached add failed."));
139 memcached_add(memc,
"key", 3,
"new-value", 9, 0, 0xdeadbeefU),
140 cut_message(
"memcached add succeeded."));
142 val1 = memcached_get(memc,
"key", 3, &val1_len, &flags, &rc);
144 cut_assert_equal_string(
"value", val1);
145 cut_assert_equal_uint(0xdeadbeefU, flags);
156 memcached_replace(memc,
"key", 3,
"value", 5, 0, 0xdeadbeefU),
157 cut_message(
"memcached replace succeeded."));
162 memcached_add(memc,
"key", 3,
"value", 5, 0, 0xdeadbeefU),
163 cut_message(
"memcached add failed."));
166 memcached_replace(memc,
"key", 3,
"new-value", 9, 0, 0xdeadbeefU),
167 cut_message(
"memcached replace failed."));
169 val1 = memcached_get(memc,
"key", 3, &val1_len, &flags, &rc);
171 cut_assert_equal_string(
"new-value", val1);
172 cut_assert_equal_uint(0xdeadbeefU, flags);
182 memcached_set(memc,
"key", 3,
"to be flushed", 13, 0, 0xdeadbeefU),
183 cut_message(
"memcached set failed."));
185 memcached_flush(memc, 0);
187 val1 = memcached_get(memc,
"key", 3, &val1_len, &flags, &rc);
189 MEMCACHED_NOTFOUND, rc,
190 cut_message(
"memcached get succeeded."));
196 const int sleep_time = 1;
201 memcached_set(memc,
"key", 3,
"to be flushed", 13, 0, 0xdeadbeefU),
202 cut_message(
"memcached set failed."));
204 memcached_flush(memc, sleep_time);
206 val1 = memcached_get(memc,
"key", 3, &val1_len, &flags, &rc);
208 cut_assert_equal_string(
"to be flushed", val1);
209 cut_assert_equal_uint(0xdeadbeefU, flags);
211 sleep(sleep_time + 1);
213 val2 = memcached_get(memc,
"key", 3, &val2_len, &flags, &rc);
215 MEMCACHED_NOTFOUND, rc,
216 cut_message(
"memcached get succeeded."));
224 const char *key =
"caskey";
225 size_t key_len = strlen(key);
226 const char* keys[2] = { (
char *)key, NULL };
227 size_t key_lens[2] = { key_len, 0 };
229 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_SUPPORT_CAS, 1);
231 memcached_set(memc, key, key_len,
"cas test", 8, 0, 0xdeadbeefU),
232 cut_message(
"memcached set failed."));
236 memcached_result_st *results;
237 memcached_result_st results_obj;
239 results = memcached_result_create(memc, &results_obj);
241 memcached_mget(memc, keys, key_lens, 1),
242 cut_message(
"memcached mget failed."));
243 results = memcached_fetch_result(memc, &results_obj, &rc);
244 cut_assert_not_null(results,
245 cut_message(
"memcached fetch result failed."));
247 cas = memcached_result_cas(results);
248 cut_assert_operator(cas, !=, 0,
249 cut_message(
"memcached cas value is non-zero."));
252 memcached_cas(memc, key, key_len,
"cas changed", 12, 0, 0, cas),
253 cut_message(
"memcached cas failed."));
257 memcached_cas(memc, key, key_len,
"cas changed", 12, 0, 0, cas),
258 cut_message(
"memcached cas value is same."));
260 memcached_result_free(&results_obj);
270 memcached_increment_with_initial(memc,
"incr", 4, 1, 30, 0, &intval));
271 gcut_assert_equal_uint64(30, intval);
274 memcached_increment_with_initial(memc,
"incr", 4, 3, 0, 0, &intval));
275 gcut_assert_equal_uint64(33, intval);
286 memcached_increment_with_initial(memc,
"decr", 4, 30, 99, 0, &intval));
287 gcut_assert_equal_uint64(99, intval);
290 memcached_decrement_with_initial(memc,
"decr", 4, 17, 0, 0, &intval));
291 gcut_assert_equal_uint64(82, intval);