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