2 Sample test application.
10 void init_test(memcached_st
*not_used
)
14 (void)memcached_create(&memc
);
15 memcached_free(&memc
);
18 void allocation_test(memcached_st
*not_used
)
21 memc
= memcached_create(NULL
);
26 void connection_test(memcached_st
*memc
)
30 rc
= memcached_server_add(memc
, "localhost", 0);
31 assert(rc
== MEMCACHED_SUCCESS
);
34 void error_test(memcached_st
*memc
)
38 for (rc
= MEMCACHED_SUCCESS
; rc
< MEMCACHED_MAXIMUM_RETURN
; rc
++)
40 printf("Error %d -> %s\n", rc
, memcached_strerror(memc
, rc
));
44 void set_test(memcached_st
*memc
)
48 char *value
= "when we sanitize";
50 rc
= memcached_server_add(memc
, "localhost", 0);
51 assert(rc
== MEMCACHED_SUCCESS
);
52 rc
= memcached_set(memc
, key
, strlen(key
),
54 (time_t)0, (uint16_t)0);
55 assert(rc
== MEMCACHED_SUCCESS
);
58 void add_test(memcached_st
*memc
)
62 char *value
= "when we sanitize";
64 rc
= memcached_server_add(memc
, "localhost", 0);
65 assert(rc
== MEMCACHED_SUCCESS
);
66 rc
= memcached_add(memc
, key
, strlen(key
),
68 (time_t)0, (uint16_t)0);
69 assert(rc
== MEMCACHED_NOTSTORED
);
72 void replace_test(memcached_st
*memc
)
76 char *value
= "when we sanitize";
78 rc
= memcached_server_add(memc
, "localhost", 0);
79 assert(rc
== MEMCACHED_SUCCESS
);
80 rc
= memcached_replace(memc
, key
, strlen(key
),
82 (time_t)0, (uint16_t)0);
83 assert(rc
== MEMCACHED_SUCCESS
);
86 void delete_test(memcached_st
*memc
)
90 char *value
= "when we sanitize";
92 rc
= memcached_server_add(memc
, "localhost", 0);
93 assert(rc
== MEMCACHED_SUCCESS
);
94 rc
= memcached_set(memc
, key
, strlen(key
),
96 (time_t)0, (uint16_t)0);
97 assert(rc
== MEMCACHED_SUCCESS
);
99 rc
= memcached_delete(memc
, key
, strlen(key
), (time_t)0);
100 assert(rc
== MEMCACHED_SUCCESS
);
103 void flush_test(memcached_st
*memc
)
107 rc
= memcached_server_add(memc
, "localhost", 0);
108 assert(rc
== MEMCACHED_SUCCESS
);
109 rc
= memcached_flush(memc
, 0);
110 assert(rc
== MEMCACHED_SUCCESS
);
113 void get_test(memcached_st
*memc
)
118 size_t string_length
;
121 rc
= memcached_server_add(memc
, "localhost", 0);
122 assert(rc
== MEMCACHED_SUCCESS
);
124 string
= memcached_get(memc
, key
, strlen(key
),
125 &string_length
, &flags
, &rc
);
127 assert(rc
== MEMCACHED_NOTFOUND
);
128 assert(string_length
== 0);
132 void get_test2(memcached_st
*memc
)
136 char *value
= "when we sanitize";
138 size_t string_length
;
141 rc
= memcached_server_add(memc
, "localhost", 0);
142 assert(rc
== MEMCACHED_SUCCESS
);
144 rc
= memcached_set(memc
, key
, strlen(key
),
145 value
, strlen(value
),
146 (time_t)0, (uint16_t)0);
147 assert(rc
== MEMCACHED_SUCCESS
);
149 string
= memcached_get(memc
, key
, strlen(key
),
150 &string_length
, &flags
, &rc
);
153 assert(rc
== MEMCACHED_SUCCESS
);
154 assert(string_length
== strlen(value
));
155 assert(!memcmp(string
, value
, string_length
));
160 void set_test2(memcached_st
*memc
)
164 char *value
= "train in the brain";
165 size_t value_length
= strlen(value
);
168 rc
= memcached_server_add(memc
, "localhost", 0);
169 assert(rc
== MEMCACHED_SUCCESS
);
171 for (x
= 0; x
< 10; x
++)
173 rc
= memcached_set(memc
, key
, strlen(key
),
175 (time_t)0, (uint16_t)0);
176 assert(rc
== MEMCACHED_SUCCESS
);
180 void set_test3(memcached_st
*memc
)
185 size_t value_length
= 8191;
188 value
= (char*)malloc(value_length
);
191 for (x
= 0; x
< value_length
; x
++)
192 value
[x
] = (char) (x
% 127);
194 rc
= memcached_server_add(memc
, "localhost", 0);
195 assert(rc
== MEMCACHED_SUCCESS
);
197 for (x
= 0; x
< 1; x
++)
199 rc
= memcached_set(memc
, key
, strlen(key
),
201 (time_t)0, (uint16_t)0);
202 assert(rc
== MEMCACHED_SUCCESS
);
208 void get_test3(memcached_st
*memc
)
213 size_t value_length
= 8191;
215 size_t string_length
;
219 value
= (char*)malloc(value_length
);
222 for (x
= 0; x
< value_length
; x
++)
223 value
[x
] = (char) (x
% 127);
225 rc
= memcached_server_add(memc
, "localhost", 0);
226 assert(rc
== MEMCACHED_SUCCESS
);
228 rc
= memcached_set(memc
, key
, strlen(key
),
230 (time_t)0, (uint16_t)0);
231 assert(rc
== MEMCACHED_SUCCESS
);
233 string
= memcached_get(memc
, key
, strlen(key
),
234 &string_length
, &flags
, &rc
);
236 assert(rc
== MEMCACHED_SUCCESS
);
238 assert(string_length
== value_length
);
239 assert(!memcmp(string
, value
, string_length
));
245 void get_test4(memcached_st
*memc
)
250 size_t value_length
= 8191;
252 size_t string_length
;
256 value
= (char*)malloc(value_length
);
259 for (x
= 0; x
< value_length
; x
++)
260 value
[x
] = (char) (x
% 127);
262 rc
= memcached_server_add(memc
, "localhost", 0);
263 assert(rc
== MEMCACHED_SUCCESS
);
265 rc
= memcached_set(memc
, key
, strlen(key
),
267 (time_t)0, (uint16_t)0);
268 assert(rc
== MEMCACHED_SUCCESS
);
270 for (x
= 0; x
< 10; x
++)
272 string
= memcached_get(memc
, key
, strlen(key
),
273 &string_length
, &flags
, &rc
);
275 assert(rc
== MEMCACHED_SUCCESS
);
277 assert(string_length
== value_length
);
278 assert(!memcmp(string
, value
, string_length
));
285 void stats_servername_test(memcached_st
*memc
)
288 memcached_stat_st stat
;
289 rc
= memcached_stat_servername(&stat
, NULL
,
291 MEMCACHED_DEFAULT_PORT
);
294 void increment_test(memcached_st
*memc
)
296 unsigned int new_number
;
301 rc
= memcached_server_add(memc
, "localhost", 0);
302 assert(rc
== MEMCACHED_SUCCESS
);
304 rc
= memcached_set(memc
, key
, strlen(key
),
305 value
, strlen(value
),
306 (time_t)0, (uint16_t)0);
307 assert(rc
== MEMCACHED_SUCCESS
);
309 rc
= memcached_increment(memc
, key
, strlen(key
),
311 assert(rc
== MEMCACHED_SUCCESS
);
312 assert(new_number
== 1);
314 rc
= memcached_increment(memc
, key
, strlen(key
),
316 assert(rc
== MEMCACHED_SUCCESS
);
317 assert(new_number
== 2);
320 void decrement_test(memcached_st
*memc
)
322 unsigned int new_number
;
327 rc
= memcached_server_add(memc
, "localhost", 0);
328 assert(rc
== MEMCACHED_SUCCESS
);
330 rc
= memcached_set(memc
, key
, strlen(key
),
331 value
, strlen(value
),
332 (time_t)0, (uint16_t)0);
333 assert(rc
== MEMCACHED_SUCCESS
);
335 rc
= memcached_decrement(memc
, key
, strlen(key
),
337 assert(rc
== MEMCACHED_SUCCESS
);
338 assert(new_number
== 2);
340 rc
= memcached_decrement(memc
, key
, strlen(key
),
342 assert(rc
== MEMCACHED_SUCCESS
);
343 assert(new_number
== 1);
346 void quit_test(memcached_st
*memc
)
350 char *value
= "sanford and sun";
352 rc
= memcached_server_add(memc
, "localhost", 0);
353 assert(rc
== MEMCACHED_SUCCESS
);
355 rc
= memcached_set(memc
, key
, strlen(key
),
356 value
, strlen(value
),
357 (time_t)10, (uint16_t)3);
358 assert(rc
== MEMCACHED_SUCCESS
);
359 memcached_quit(memc
);
361 rc
= memcached_set(memc
, key
, strlen(key
),
362 value
, strlen(value
),
363 (time_t)50, (uint16_t)9);
364 assert(rc
== MEMCACHED_SUCCESS
);
367 void mget_test(memcached_st
*memc
)
370 char *keys
[]= {"fudge", "son", "food"};
371 size_t key_length
[]= {5, 3, 4};
375 char return_key
[MEMCACHED_MAX_KEY
];
376 size_t return_key_length
;
378 size_t return_value_length
;
380 rc
= memcached_server_add(memc
, "localhost", 0);
381 assert(rc
== MEMCACHED_SUCCESS
);
383 /* We need to empty the server before continueing test */
384 rc
= memcached_flush(memc
, 0);
385 assert(rc
== MEMCACHED_SUCCESS
);
387 rc
= memcached_mget(memc
, keys
, key_length
, 3);
388 assert(rc
== MEMCACHED_SUCCESS
);
390 while ((return_value
= memcached_fetch(memc
, return_key
, &return_key_length
,
391 &return_value_length
, &flags
, &rc
)) != NULL
)
393 assert(return_value
);
395 assert(!return_value
);
396 assert(return_value_length
== 0);
397 assert(rc
== MEMCACHED_NOTFOUND
);
399 for (x
= 0; x
< 3; x
++)
401 rc
= memcached_set(memc
, keys
[x
], key_length
[x
],
402 keys
[x
], key_length
[x
],
403 (time_t)50, (uint16_t)9);
404 assert(rc
== MEMCACHED_SUCCESS
);
407 rc
= memcached_mget(memc
, keys
, key_length
, 3);
408 assert(rc
== MEMCACHED_SUCCESS
);
411 while ((return_value
= memcached_fetch(memc
, return_key
, &return_key_length
,
412 &return_value_length
, &flags
, &rc
)))
414 assert(return_value
);
415 assert(rc
== MEMCACHED_SUCCESS
);
416 assert(key_length
[x
] == return_value_length
);
417 assert(!memcmp(return_value
, keys
[x
], return_value_length
));
423 void get_stats_keys(memcached_st
*memc
)
427 memcached_stat_st stat
;
430 list
= memcached_stat_get_keys(memc
, &stat
, &rc
);
431 assert(rc
== MEMCACHED_SUCCESS
);
432 for (ptr
= list
; *ptr
; ptr
++)
433 printf("Found key %s\n", *ptr
);
438 void get_stats(memcached_st
*memc
)
444 memcached_stat_st
*stat
;
446 rc
= memcached_server_add(memc
, "localhost", 0);
447 assert(rc
== MEMCACHED_SUCCESS
);
449 stat
= memcached_stat(memc
, NULL
, &rc
);
450 assert(rc
== MEMCACHED_SUCCESS
);
452 assert(rc
== MEMCACHED_SUCCESS
);
455 for (x
= 0; x
< memcached_server_count(memc
); x
++)
457 list
= memcached_stat_get_keys(memc
, &stat
[x
], &rc
);
458 assert(rc
== MEMCACHED_SUCCESS
);
459 for (ptr
= list
; *ptr
; ptr
++)
460 printf("Found key %s\n", *ptr
);
468 void get_stats_multiple(memcached_st
*memc
)
474 memcached_stat_st
*stat
;
476 rc
= memcached_server_add(memc
, "localhost", 0);
477 assert(rc
== MEMCACHED_SUCCESS
);
478 rc
= memcached_server_add(memc
, "localhost", 5555);
479 assert(rc
== MEMCACHED_SUCCESS
);
481 stat
= memcached_stat(memc
, NULL
, &rc
);
482 assert(rc
== MEMCACHED_SUCCESS
);
484 assert(rc
== MEMCACHED_SUCCESS
);
487 for (x
= 0; x
< memcached_server_count(memc
); x
++)
489 list
= memcached_stat_get_keys(memc
, &stat
[x
], &rc
);
490 assert(rc
== MEMCACHED_SUCCESS
);
491 for (ptr
= list
; *ptr
; ptr
++)
492 printf("Found key %s\n", *ptr
);
500 void add_host_test(memcached_st
*memc
)
503 memcached_server_st
*servers
;
505 char servername
[]= "0.example.com";
507 rc
= memcached_server_add(memc
, "localhost", 0);
508 assert(rc
== MEMCACHED_SUCCESS
);
510 servers
= memcached_server_list_append(NULL
, servername
, 400, &rc
);
512 assert(1 == memcached_server_list_count(servers
));
514 for (x
= 2; x
< 20; x
++)
516 char buffer
[SMALL_STRING_LEN
];
518 snprintf(buffer
, SMALL_STRING_LEN
, "%u.example.com", 400+x
);
519 servers
= memcached_server_list_append(servers
, buffer
, 401,
521 assert(rc
== MEMCACHED_SUCCESS
);
522 assert(x
== memcached_server_list_count(servers
));
525 rc
= memcached_server_push(memc
, servers
);
526 assert(rc
== MEMCACHED_SUCCESS
);
527 rc
= memcached_server_push(memc
, servers
);
528 assert(rc
== MEMCACHED_SUCCESS
);
530 memcached_server_list_free(servers
);
533 void add_host_test1(memcached_st
*memc
)
537 char servername
[]= "0.example.com";
538 memcached_server_st
*servers
;
540 servers
= memcached_server_list_append(NULL
, servername
, 400, &rc
);
542 assert(1 == memcached_server_list_count(servers
));
544 for (x
= 2; x
< 20; x
++)
546 char buffer
[SMALL_STRING_LEN
];
548 snprintf(buffer
, SMALL_STRING_LEN
, "%u.example.com", 400+x
);
549 servers
= memcached_server_list_append(servers
, buffer
, 401,
551 assert(rc
== MEMCACHED_SUCCESS
);
552 assert(x
== memcached_server_list_count(servers
));
555 rc
= memcached_server_push(memc
, servers
);
556 assert(rc
== MEMCACHED_SUCCESS
);
557 rc
= memcached_server_push(memc
, servers
);
558 assert(rc
== MEMCACHED_SUCCESS
);
560 memcached_server_list_free(servers
);
563 typedef struct test_st test_st
;
567 unsigned int requires_flush
;
568 void (*function
)(memcached_st
*memc
);
571 int main(int argc
, char *argv
[])
575 /* Clean the server before beginning testing */
577 {"flush", 0, flush_test
},
578 {"init", 0, init_test
},
579 {"allocation", 0, allocation_test
},
580 {"error", 0, error_test
},
581 {"set", 0, set_test
},
582 {"set2", 0, set_test2
},
583 {"set3", 0, set_test3
},
584 {"add", 0, add_test
},
585 {"replace", 0, replace_test
},
586 {"delete", 1, delete_test
},
587 {"get", 0, get_test
},
588 {"get2", 0, get_test2
},
589 {"get3", 0, get_test3
},
590 {"get4", 0, get_test4
},
591 {"stats_servername", 0, stats_servername_test
},
592 {"increment", 0, increment_test
},
593 {"decrement", 0, decrement_test
},
594 {"quit", 0, quit_test
},
595 {"mget", 0, mget_test
},
596 {"get_stats", 0, get_stats
},
597 {"add_host_test", 0, add_host_test
},
598 {"get_stats_keys", 0, get_stats_keys
},
602 fprintf(stderr
, "\nBlock tests\n\n");
603 for (x
= 0; tests
[x
].function_name
; x
++)
606 memc
= memcached_create(NULL
);
608 fprintf(stderr
, "Testing %s", tests
[x
].function_name
);
609 tests
[x
].function(memc
);
610 fprintf(stderr
, "\t\t\t\t\t[ ok ]\n");
612 memcached_free(memc
);
615 fprintf(stderr
, "\nNonblock tests\n\n");
616 for (x
= 0; tests
[x
].function_name
; x
++)
619 memc
= memcached_create(NULL
);
621 fprintf(stderr
, "Testing %s", tests
[x
].function_name
);
622 memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_NO_BLOCK
, NULL
);
623 tests
[x
].function(memc
);
624 fprintf(stderr
, "\t\t\t\t\t[ ok ]\n");
626 memcached_free(memc
);
629 fprintf(stderr
, "\nTCP Nodelay tests\n\n");
630 for (x
= 0; tests
[x
].function_name
; x
++)
633 memc
= memcached_create(NULL
);
635 fprintf(stderr
, "Testing %s", tests
[x
].function_name
);
636 memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_NO_BLOCK
, NULL
);
637 memcached_behavior_set(memc
, MEMCACHED_BEHAVIOR_TCP_NODELAY
, NULL
);
638 tests
[x
].function(memc
);
639 fprintf(stderr
, "\t\t\t\t\t[ ok ]\n");
641 memcached_free(memc
);
645 /* The multiple tests */
649 memc
= memcached_create(NULL
);
651 get_stats_multiple(memc
);
652 memcached_free(memc
);
655 /* Clean up whatever we might have left */
658 memc
= memcached_create(NULL
);
661 memcached_free(memc
);