Update for async delete.
[m6w6/libmemcached] / tests / test.c
1 /*
2 Sample test application.
3 */
4 #include <assert.h>
5 #include <memcached.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9 #include <sys/time.h>
10
11 long int timedif(struct timeval a, struct timeval b)
12 {
13 register int us, s;
14
15 us = a.tv_usec - b.tv_usec;
16 us /= 1000;
17 s = a.tv_sec - b.tv_sec;
18 s *= 1000;
19 return s + us;
20 }
21
22 void init_test(memcached_st *not_used)
23 {
24 memcached_st memc;
25
26 (void)memcached_create(&memc);
27 memcached_free(&memc);
28 }
29
30 void allocation_test(memcached_st *not_used)
31 {
32 memcached_st *memc;
33 memc= memcached_create(NULL);
34 assert(memc);
35 memcached_free(memc);
36 }
37
38 void connection_test(memcached_st *memc)
39 {
40 memcached_return rc;
41
42 rc= memcached_server_add(memc, "localhost", 0);
43 assert(rc == MEMCACHED_SUCCESS);
44 }
45
46 void error_test(memcached_st *memc)
47 {
48 memcached_return rc;
49
50 for (rc= MEMCACHED_SUCCESS; rc < MEMCACHED_MAXIMUM_RETURN; rc++)
51 {
52 printf("Error %d -> %s\n", rc, memcached_strerror(memc, rc));
53 }
54 }
55
56 void set_test(memcached_st *memc)
57 {
58 memcached_return rc;
59 char *key= "foo";
60 char *value= "when we sanitize";
61
62 rc= memcached_set(memc, key, strlen(key),
63 value, strlen(value),
64 (time_t)0, (uint16_t)0);
65 assert(rc == MEMCACHED_SUCCESS);
66 }
67
68 void add_test(memcached_st *memc)
69 {
70 memcached_return rc;
71 char *key= "foo";
72 char *value= "when we sanitize";
73
74 rc= memcached_add(memc, key, strlen(key),
75 value, strlen(value),
76 (time_t)0, (uint16_t)0);
77 assert(rc == MEMCACHED_NOTSTORED);
78 }
79
80 void replace_test(memcached_st *memc)
81 {
82 memcached_return rc;
83 char *key= "foo";
84 char *value= "when we sanitize";
85
86 rc= memcached_replace(memc, key, strlen(key),
87 value, strlen(value),
88 (time_t)0, (uint16_t)0);
89 assert(rc == MEMCACHED_SUCCESS);
90 }
91
92 void delete_test(memcached_st *memc)
93 {
94 memcached_return rc;
95 char *key= "foo";
96 char *value= "when we sanitize";
97
98 rc= memcached_set(memc, key, strlen(key),
99 value, strlen(value),
100 (time_t)0, (uint16_t)0);
101 assert(rc == MEMCACHED_SUCCESS);
102
103 rc= memcached_delete(memc, key, strlen(key), (time_t)0);
104 WATCHPOINT_ERROR(rc);
105 assert(rc == MEMCACHED_SUCCESS);
106 }
107
108 void flush_test(memcached_st *memc)
109 {
110 memcached_return rc;
111
112 rc= memcached_flush(memc, 0);
113 assert(rc == MEMCACHED_SUCCESS);
114 }
115
116 void get_test(memcached_st *memc)
117 {
118 memcached_return rc;
119 char *key= "foo";
120 char *string;
121 size_t string_length;
122 uint16_t flags;
123
124 string= memcached_get(memc, key, strlen(key),
125 &string_length, &flags, &rc);
126
127 assert(rc == MEMCACHED_NOTFOUND);
128 assert(string_length == 0);
129 assert(!string);
130 }
131
132 void get_test2(memcached_st *memc)
133 {
134 memcached_return rc;
135 char *key= "foo";
136 char *value= "when we sanitize";
137 char *string;
138 size_t string_length;
139 uint16_t flags;
140
141 rc= memcached_set(memc, key, strlen(key),
142 value, strlen(value),
143 (time_t)0, (uint16_t)0);
144 assert(rc == MEMCACHED_SUCCESS);
145
146 string= memcached_get(memc, key, strlen(key),
147 &string_length, &flags, &rc);
148
149 assert(string);
150 assert(rc == MEMCACHED_SUCCESS);
151 assert(string_length == strlen(value));
152 assert(!memcmp(string, value, string_length));
153
154 free(string);
155 }
156
157 void set_test2(memcached_st *memc)
158 {
159 memcached_return rc;
160 char *key= "foo";
161 char *value= "train in the brain";
162 size_t value_length= strlen(value);
163 unsigned int x;
164
165 for (x= 0; x < 10; x++)
166 {
167 rc= memcached_set(memc, key, strlen(key),
168 value, value_length,
169 (time_t)0, (uint16_t)0);
170 assert(rc == MEMCACHED_SUCCESS);
171 }
172 }
173
174 void set_test3(memcached_st *memc)
175 {
176 memcached_return rc;
177 char *key= "foo";
178 char *value;
179 size_t value_length= 8191;
180 unsigned int x;
181
182 value = (char*)malloc(value_length);
183 assert(value);
184
185 for (x= 0; x < value_length; x++)
186 value[x] = (char) (x % 127);
187
188 for (x= 0; x < 1; x++)
189 {
190 rc= memcached_set(memc, key, strlen(key),
191 value, value_length,
192 (time_t)0, (uint16_t)0);
193 assert(rc == MEMCACHED_SUCCESS);
194 }
195
196 free(value);
197 }
198
199 void get_test3(memcached_st *memc)
200 {
201 memcached_return rc;
202 char *key= "foo";
203 char *value;
204 size_t value_length= 8191;
205 char *string;
206 size_t string_length;
207 uint16_t flags;
208 int x;
209
210 value = (char*)malloc(value_length);
211 assert(value);
212
213 for (x= 0; x < value_length; x++)
214 value[x] = (char) (x % 127);
215
216 rc= memcached_set(memc, key, strlen(key),
217 value, value_length,
218 (time_t)0, (uint16_t)0);
219 assert(rc == MEMCACHED_SUCCESS);
220
221 string= memcached_get(memc, key, strlen(key),
222 &string_length, &flags, &rc);
223
224 WATCHPOINT_ERRNO(memc->my_errno);
225 WATCHPOINT_ERROR(rc);
226 assert(rc == MEMCACHED_SUCCESS);
227 assert(string);
228 assert(string_length == value_length);
229 assert(!memcmp(string, value, string_length));
230
231 free(string);
232 free(value);
233 }
234
235 void get_test4(memcached_st *memc)
236 {
237 memcached_return rc;
238 char *key= "foo";
239 char *value;
240 size_t value_length= 8191;
241 char *string;
242 size_t string_length;
243 uint16_t flags;
244 int x;
245
246 value = (char*)malloc(value_length);
247 assert(value);
248
249 for (x= 0; x < value_length; x++)
250 value[x] = (char) (x % 127);
251
252 rc= memcached_set(memc, key, strlen(key),
253 value, value_length,
254 (time_t)0, (uint16_t)0);
255 assert(rc == MEMCACHED_SUCCESS);
256
257 for (x= 0; x < 10; x++)
258 {
259 string= memcached_get(memc, key, strlen(key),
260 &string_length, &flags, &rc);
261
262 assert(rc == MEMCACHED_SUCCESS);
263 assert(string);
264 assert(string_length == value_length);
265 assert(!memcmp(string, value, string_length));
266 free(string);
267 }
268
269 free(value);
270 }
271
272 void stats_servername_test(memcached_st *memc)
273 {
274 memcached_return rc;
275 memcached_stat_st stat;
276 rc= memcached_stat_servername(&stat, NULL,
277 "localhost",
278 MEMCACHED_DEFAULT_PORT);
279 }
280
281 void increment_test(memcached_st *memc)
282 {
283 unsigned int new_number;
284 memcached_return rc;
285 char *key= "number";
286 char *value= "0";
287
288 rc= memcached_set(memc, key, strlen(key),
289 value, strlen(value),
290 (time_t)0, (uint16_t)0);
291 assert(rc == MEMCACHED_SUCCESS);
292
293 rc= memcached_increment(memc, key, strlen(key),
294 1, &new_number);
295 assert(rc == MEMCACHED_SUCCESS);
296 assert(new_number == 1);
297
298 rc= memcached_increment(memc, key, strlen(key),
299 1, &new_number);
300 assert(rc == MEMCACHED_SUCCESS);
301 assert(new_number == 2);
302 }
303
304 void decrement_test(memcached_st *memc)
305 {
306 unsigned int new_number;
307 memcached_return rc;
308 char *key= "number";
309 char *value= "3";
310
311 rc= memcached_set(memc, key, strlen(key),
312 value, strlen(value),
313 (time_t)0, (uint16_t)0);
314 assert(rc == MEMCACHED_SUCCESS);
315
316 rc= memcached_decrement(memc, key, strlen(key),
317 1, &new_number);
318 assert(rc == MEMCACHED_SUCCESS);
319 assert(new_number == 2);
320
321 rc= memcached_decrement(memc, key, strlen(key),
322 1, &new_number);
323 assert(rc == MEMCACHED_SUCCESS);
324 assert(new_number == 1);
325 }
326
327 void quit_test(memcached_st *memc)
328 {
329 memcached_return rc;
330 char *key= "fudge";
331 char *value= "sanford and sun";
332
333 rc= memcached_set(memc, key, strlen(key),
334 value, strlen(value),
335 (time_t)10, (uint16_t)3);
336 assert(rc == MEMCACHED_SUCCESS);
337 memcached_quit(memc);
338
339 rc= memcached_set(memc, key, strlen(key),
340 value, strlen(value),
341 (time_t)50, (uint16_t)9);
342 assert(rc == MEMCACHED_SUCCESS);
343 }
344
345 void mget_test(memcached_st *memc)
346 {
347 memcached_return rc;
348 char *keys[]= {"fudge", "son", "food"};
349 size_t key_length[]= {5, 3, 4};
350 unsigned int x;
351 uint16_t flags;
352
353 char return_key[MEMCACHED_MAX_KEY];
354 size_t return_key_length;
355 char *return_value;
356 size_t return_value_length;
357
358 /* We need to empty the server before continueing test */
359 rc= memcached_flush(memc, 0);
360 assert(rc == MEMCACHED_SUCCESS);
361
362 rc= memcached_mget(memc, keys, key_length, 3);
363 assert(rc == MEMCACHED_SUCCESS);
364
365 while ((return_value= memcached_fetch(memc, return_key, &return_key_length,
366 &return_value_length, &flags, &rc)) != NULL)
367 {
368 assert(return_value);
369 }
370 assert(!return_value);
371 assert(return_value_length == 0);
372 assert(rc == MEMCACHED_NOTFOUND);
373
374 for (x= 0; x < 3; x++)
375 {
376 rc= memcached_set(memc, keys[x], key_length[x],
377 keys[x], key_length[x],
378 (time_t)50, (uint16_t)9);
379 assert(rc == MEMCACHED_SUCCESS);
380 }
381
382 rc= memcached_mget(memc, keys, key_length, 3);
383 assert(rc == MEMCACHED_SUCCESS);
384
385 x= 0;
386 while ((return_value= memcached_fetch(memc, return_key, &return_key_length,
387 &return_value_length, &flags, &rc)))
388 {
389 assert(return_value);
390 assert(rc == MEMCACHED_SUCCESS);
391 assert(return_key_length == return_value_length);
392 assert(!memcmp(return_value, return_key, return_value_length));
393 free(return_value);
394 x++;
395 }
396 }
397
398 void get_stats_keys(memcached_st *memc)
399 {
400 char **list;
401 char **ptr;
402 memcached_stat_st stat;
403 memcached_return rc;
404
405 list= memcached_stat_get_keys(memc, &stat, &rc);
406 assert(rc == MEMCACHED_SUCCESS);
407 for (ptr= list; *ptr; ptr++)
408 printf("Found key %s\n", *ptr);
409 fflush(stdout);
410
411 free(list);
412 }
413
414 void get_stats(memcached_st *memc)
415 {
416 unsigned int x;
417 char **list;
418 char **ptr;
419 memcached_return rc;
420 memcached_stat_st *stat;
421
422 stat= memcached_stat(memc, NULL, &rc);
423 assert(rc == MEMCACHED_SUCCESS);
424
425 assert(rc == MEMCACHED_SUCCESS);
426 assert(stat);
427
428 for (x= 0; x < memcached_server_count(memc); x++)
429 {
430 list= memcached_stat_get_keys(memc, &stat[x], &rc);
431 assert(rc == MEMCACHED_SUCCESS);
432 for (ptr= list; *ptr; ptr++)
433 printf("Found key %s\n", *ptr);
434
435 free(list);
436 }
437
438 free(stat);
439 }
440
441 void add_host_test(memcached_st *memc)
442 {
443 unsigned int x;
444 memcached_server_st *servers;
445 memcached_return rc;
446 char servername[]= "0.example.com";
447
448 servers= memcached_server_list_append(NULL, servername, 400, &rc);
449 assert(servers);
450 assert(1 == memcached_server_list_count(servers));
451
452 for (x= 2; x < 20; x++)
453 {
454 char buffer[SMALL_STRING_LEN];
455
456 snprintf(buffer, SMALL_STRING_LEN, "%u.example.com", 400+x);
457 servers= memcached_server_list_append(servers, buffer, 401,
458 &rc);
459 assert(rc == MEMCACHED_SUCCESS);
460 assert(x == memcached_server_list_count(servers));
461 }
462
463 rc= memcached_server_push(memc, servers);
464 assert(rc == MEMCACHED_SUCCESS);
465 rc= memcached_server_push(memc, servers);
466 assert(rc == MEMCACHED_SUCCESS);
467
468 memcached_server_list_free(servers);
469 }
470
471 /* We don't test the behavior itself, we test the switches */
472 void behavior_test(memcached_st *memc)
473 {
474 unsigned long long value;
475 unsigned int set= 1;
476
477 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, &set);
478 value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NO_BLOCK);
479 assert(value == 1);
480
481 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, &set);
482 value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY);
483 assert(value == 1);
484
485 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_MD5_HASHING, &set);
486 value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_MD5_HASHING);
487 assert(value == 1);
488
489 set= 0;
490
491 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, &set);
492 value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_NO_BLOCK);
493 assert(value == 0);
494
495 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, &set);
496 value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY);
497 assert(value == 0);
498
499 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_MD5_HASHING, &set);
500 value= memcached_behavior_get(memc, MEMCACHED_BEHAVIOR_MD5_HASHING);
501 assert(value == 0);
502 }
503
504 /* Test case provided by Cal Haldenbrand */
505 void user_supplied_bug1(memcached_st *memc)
506 {
507 unsigned int setter= 1;
508 unsigned int x;
509
510 long total= 0;
511 int size= 0;
512 srand(time(NULL));
513 char key[10];
514 char *randomstuff = (char *)malloc(6 * 1024);
515 memset(randomstuff, 0, 6 * 1024);
516
517 memcached_return rc;
518
519 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, &setter);
520 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, &setter);
521
522
523 /* add key */
524 for (x= 0 ; total < 20 * 1024576 ; x++ )
525 {
526 unsigned int j= 0;
527
528 size= (rand() % ( 5 * 1024 ) ) + 400;
529 memset(randomstuff, 0, 6 * 1024);
530 assert(size < 6 * 1024); /* Being safe here */
531
532 for (j= 0 ; j < size ;j++)
533 randomstuff[j] = (char) (rand() % 26) + 97;
534
535 total += size;
536 sprintf(key, "%d", x);
537 rc = memcached_set(memc, key, strlen(key),
538 randomstuff, strlen(randomstuff), 10, 0);
539 /* If we fail, lets try again */
540 if (rc != MEMCACHED_SUCCESS)
541 rc = memcached_set(memc, key, strlen(key),
542 randomstuff, strlen(randomstuff), 10, 0);
543 assert(rc == MEMCACHED_SUCCESS);
544 }
545 }
546 void add_host_test1(memcached_st *memc)
547 {
548 unsigned int x;
549 memcached_return rc;
550 char servername[]= "0.example.com";
551 memcached_server_st *servers;
552
553 servers= memcached_server_list_append(NULL, servername, 400, &rc);
554 assert(servers);
555 assert(1 == memcached_server_list_count(servers));
556
557 for (x= 2; x < 20; x++)
558 {
559 char buffer[SMALL_STRING_LEN];
560
561 snprintf(buffer, SMALL_STRING_LEN, "%u.example.com", 400+x);
562 servers= memcached_server_list_append(servers, buffer, 401,
563 &rc);
564 assert(rc == MEMCACHED_SUCCESS);
565 assert(x == memcached_server_list_count(servers));
566 }
567
568 rc= memcached_server_push(memc, servers);
569 assert(rc == MEMCACHED_SUCCESS);
570 rc= memcached_server_push(memc, servers);
571 assert(rc == MEMCACHED_SUCCESS);
572
573 memcached_server_list_free(servers);
574 }
575
576 typedef struct test_st test_st;
577
578 struct test_st {
579 char *function_name;
580 unsigned int requires_flush;
581 void (*function)(memcached_st *memc);
582 };
583
584 int main(int argc, char *argv[])
585 {
586 unsigned int x;
587 char *server_list;
588 char *test_to_run= NULL;
589 char *wildcard= NULL;
590 memcached_server_st *servers;
591
592 if (argc > 2)
593 test_to_run= argv[1];
594
595 if (argc == 3)
596 wildcard= argv[2];
597
598 if (!(server_list= getenv("MEMCACHED_SERVERS")))
599 server_list= "localhost";
600
601 printf("servers %s\n", server_list);
602 srandom(time(NULL));
603
604 servers= memcached_servers_parse(server_list);
605 assert(servers);
606
607 for (x= 0; x < memcached_server_list_count(servers); x++)
608 {
609 printf("\t%s : %u\n", servers[x].hostname, servers[x].port);
610 assert(servers[x].stack_responses == 0);
611 assert(servers[x].fd == -1);
612 assert(servers[x].cursor_active == 0);
613 }
614
615 printf("\n");
616
617 /* Clean the server before beginning testing */
618 test_st tests[] ={
619 {"flush", 0, flush_test },
620 {"init", 0, init_test },
621 {"allocation", 0, allocation_test },
622 {"error", 0, error_test },
623 {"set", 0, set_test },
624 {"set2", 0, set_test2 },
625 {"set3", 0, set_test3 },
626 {"add", 0, add_test },
627 {"replace", 0, replace_test },
628 {"delete", 1, delete_test },
629 {"get", 0, get_test },
630 {"get2", 0, get_test2 },
631 {"get3", 0, get_test3 },
632 {"get4", 0, get_test4 },
633 {"stats_servername", 0, stats_servername_test },
634 {"increment", 0, increment_test },
635 {"decrement", 0, decrement_test },
636 {"quit", 0, quit_test },
637 {"mget", 0, mget_test },
638 {"get_stats", 0, get_stats },
639 {"add_host_test", 0, add_host_test },
640 {"get_stats_keys", 0, get_stats_keys },
641 {"behavior_test", 0, get_stats_keys },
642 {0, 0, 0}
643 };
644
645 test_st user_tests[] ={
646 {"user_supplied_bug1", 0, user_supplied_bug1 },
647 {0, 0, 0}
648 };
649
650 if ((test_to_run && !strcmp(test_to_run, "block")) || !test_to_run)
651 {
652 fprintf(stderr, "\nBlock tests\n\n");
653 for (x= 0; tests[x].function_name; x++)
654 {
655 if (wildcard)
656 if (strcmp(wildcard, tests[x].function_name))
657 continue;
658
659 memcached_st *memc;
660 memcached_return rc;
661 struct timeval start_time, end_time;
662
663 memc= memcached_create(NULL);
664 assert(memc);
665
666 rc= memcached_server_push(memc, servers);
667 assert(rc == MEMCACHED_SUCCESS);
668
669 unsigned int loop;
670 for (loop= 0; loop < memcached_server_list_count(servers); loop++)
671 {
672 assert(memc->hosts[loop].stack_responses == 0);
673 assert(memc->hosts[loop].fd == -1);
674 assert(memc->hosts[loop].cursor_active == 0);
675 }
676
677 fprintf(stderr, "Testing %s", tests[x].function_name);
678 gettimeofday(&start_time, NULL);
679 tests[x].function(memc);
680 gettimeofday(&end_time, NULL);
681 long int load_time= timedif(end_time, start_time);
682 fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000,
683 load_time % 1000);
684 assert(memc);
685 memcached_free(memc);
686 }
687 }
688
689 if ((test_to_run && !strcmp(test_to_run, "nonblock")) || !test_to_run)
690 {
691 fprintf(stderr, "\nNonblock tests\n\n");
692 for (x= 0; tests[x].function_name; x++)
693 {
694 if (wildcard)
695 if (strcmp(wildcard, tests[x].function_name))
696 continue;
697
698 memcached_st *memc;
699 memcached_return rc;
700 struct timeval start_time, end_time;
701
702 memc= memcached_create(NULL);
703 assert(memc);
704
705 rc= memcached_server_push(memc, servers);
706 assert(rc == MEMCACHED_SUCCESS);
707
708 fprintf(stderr, "Testing %s", tests[x].function_name);
709 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL);
710 gettimeofday(&start_time, NULL);
711 tests[x].function(memc);
712 gettimeofday(&end_time, NULL);
713 long int load_time= timedif(end_time, start_time);
714 fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000,
715 load_time % 1000);
716 assert(memc);
717 memcached_free(memc);
718 }
719 }
720
721 if ((test_to_run && !strcmp(test_to_run, "nodelay")) || !test_to_run)
722 {
723 fprintf(stderr, "\nTCP Nodelay tests\n\n");
724 for (x= 0; tests[x].function_name; x++)
725 {
726 if (wildcard)
727 if (strcmp(wildcard, tests[x].function_name))
728 continue;
729
730 memcached_st *memc;
731 memcached_return rc;
732 struct timeval start_time, end_time;
733
734 memc= memcached_create(NULL);
735 assert(memc);
736
737 rc= memcached_server_push(memc, servers);
738 assert(rc == MEMCACHED_SUCCESS);
739
740 fprintf(stderr, "Testing %s", tests[x].function_name);
741 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_NO_BLOCK, NULL);
742 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_TCP_NODELAY, NULL);
743 gettimeofday(&start_time, NULL);
744 tests[x].function(memc);
745 gettimeofday(&end_time, NULL);
746 long int load_time= timedif(end_time, start_time);
747 fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000,
748 load_time % 1000);
749 assert(memc);
750 memcached_free(memc);
751 }
752 }
753
754 if ((test_to_run && !strcmp(test_to_run, "md5")) || !test_to_run)
755 {
756 fprintf(stderr, "\nMD5 Hashing\n\n");
757 for (x= 0; tests[x].function_name; x++)
758 {
759 if (wildcard)
760 if (strcmp(wildcard, tests[x].function_name))
761 continue;
762
763 memcached_st *memc;
764 memcached_return rc;
765 struct timeval start_time, end_time;
766
767 memc= memcached_create(NULL);
768 assert(memc);
769
770 rc= memcached_server_push(memc, servers);
771 assert(rc == MEMCACHED_SUCCESS);
772
773 fprintf(stderr, "Testing %s", tests[x].function_name);
774 memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_MD5_HASHING, NULL);
775 gettimeofday(&start_time, NULL);
776 tests[x].function(memc);
777 gettimeofday(&end_time, NULL);
778 long int load_time= timedif(end_time, start_time);
779 fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000,
780 load_time % 1000);
781 assert(memc);
782 memcached_free(memc);
783 }
784 }
785
786 if ((test_to_run && !strcmp(test_to_run, "user")) || !test_to_run)
787 {
788 fprintf(stderr, "\nUser Supplied tests\n\n");
789 for (x= 0; user_tests[x].function_name; x++)
790 {
791 if (wildcard)
792 if (strcmp(wildcard, tests[x].function_name))
793 continue;
794
795 memcached_st *memc;
796 memcached_return rc;
797 struct timeval start_time, end_time;
798
799 memc= memcached_create(NULL);
800 assert(memc);
801
802 rc= memcached_server_push(memc, servers);
803 assert(rc == MEMCACHED_SUCCESS);
804
805 fprintf(stderr, "Testing %s", user_tests[x].function_name);
806 gettimeofday(&start_time, NULL);
807 user_tests[x].function(memc);
808 gettimeofday(&end_time, NULL);
809 long int load_time= timedif(end_time, start_time);
810 fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000,
811 load_time % 1000);
812 assert(memc);
813 memcached_free(memc);
814 }
815 }
816
817 /* Clean up whatever we might have left */
818 {
819 memcached_st *memc;
820 memc= memcached_create(NULL);
821 assert(memc);
822 flush_test(memc);
823 memcached_free(memc);
824 }
825
826 fprintf(stderr, "All tests completed successfully\n\n");
827
828 return 0;
829 }