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