X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2Ftest.c;h=7a5e3132a238c5a5d693574e86a1d6b039d2fe44;hb=b4de8d3fd063b9017797dd9809ab3acb8a537606;hp=990f15e7483afc02e4dc2d22f79404aa4274ce20;hpb=c2f8357ab8824490ac5df233ab1dbba52989ac97;p=m6w6%2Flibmemcached diff --git a/tests/test.c b/tests/test.c index 990f15e7..7a5e3132 100644 --- a/tests/test.c +++ b/tests/test.c @@ -2,7 +2,6 @@ Sample test application. */ #include -#include #include #include #include @@ -11,75 +10,70 @@ #include #include #include +#include "server.h" #include "test.h" -#define TEST_PORT_BASE MEMCACHED_DEFAULT_PORT+10 -#define TEST_SERVERS 5 - -long int timedif(struct timeval a, struct timeval b) +static long int timedif(struct timeval a, struct timeval b) { register int us, s; - us = a.tv_usec - b.tv_usec; + us = (int)(a.tv_usec - b.tv_usec); us /= 1000; - s = a.tv_sec - b.tv_sec; + s = (int)(a.tv_sec - b.tv_sec); s *= 1000; return s + us; } -char *server_startup() +static const char *test_strerror(test_return_t code) { - unsigned int x; - char server_string_buffer[8096]; - char *end_ptr; - - end_ptr= server_string_buffer; - - for (x= 0; x < TEST_SERVERS; x++) - { - char buffer[1024]; /* Nothing special for number */ - int count; - - sprintf(buffer, "memcached -d -P /tmp/%umemc.pid -p %u", x, x+ TEST_PORT_BASE); - system(buffer); - count= sprintf(end_ptr, "localhost:%u,", x + TEST_PORT_BASE); - end_ptr+= count; + switch (code) { + case TEST_SUCCESS: + return "ok"; + case TEST_FAILURE: + return "failed"; + case TEST_MEMORY_ALLOCATION_FAILURE: + return "memory allocation"; + case TEST_SKIPPED: + return "skipped"; + case TEST_MAXIMUM_RETURN: + default: + fprintf(stderr, "Unknown return value\n"); + abort(); } - *end_ptr= 0; - return strdup(server_string_buffer); } -void server_shutdown(char *server_string) +void create_core(void) { - unsigned int x; - - if (server_string) - { - for (x= 0; x < TEST_SERVERS; x++) - { - char buffer[1024]; /* Nothing special for number */ - sprintf(buffer, "cat /tmp/%umemc.pid | xargs kill", x); - system(buffer); - } - - free(server_string); - } + if (getenv("LIBMEMCACHED_NO_COREDUMP") == NULL && fork() == 0) + abort(); } int main(int argc, char *argv[]) { + test_return_t failed; unsigned int x; - char *server_list; char *collection_to_run= NULL; char *wildcard= NULL; + server_startup_st *startup_ptr; memcached_server_st *servers; + world_st world; collection_st *collection; - uint8_t failed; + collection_st *next; + void *world_ptr; - collection= gets_collections(); + memset(&world, 0, sizeof(world_st)); + get_world(&world); + collection= world.collections; + + if (world.create) + world_ptr= world.create(); + else + world_ptr= NULL; + startup_ptr= (server_startup_st *)world_ptr; + servers= (memcached_server_st *)startup_ptr->servers; if (argc > 1) collection_to_run= argv[1]; @@ -87,40 +81,12 @@ int main(int argc, char *argv[]) if (argc == 3) wildcard= argv[2]; - if ((server_list= getenv("MEMCACHED_SERVERS"))) - { - printf("servers %s\n", server_list); - servers= memcached_servers_parse(server_list); - server_list= NULL; - } - else - { - server_list= server_startup(); - printf("servers %s\n", server_list); - servers= memcached_servers_parse(server_list); - } - assert(servers); - - srandom(time(NULL)); - - - for (x= 0; x < memcached_server_list_count(servers); x++) - { - printf("\t%s : %u\n", servers[x].hostname, servers[x].port); - assert(servers[x].stack_responses == 0); - assert(servers[x].fd == -1); - assert(servers[x].cursor_active == 0); - } - - printf("\n"); - - collection_st *next; for (next= collection; next->name; next++) { test_st *run; run= next->tests; - if (collection_to_run && fnmatch(collection_to_run, next->name, FNM_CASEFOLD)) + if (collection_to_run && fnmatch(collection_to_run, next->name, 0)) continue; fprintf(stderr, "\n%s\n\n", next->name); @@ -129,19 +95,20 @@ int main(int argc, char *argv[]) { unsigned int loop; memcached_st *memc; - memcached_return rc; + memcached_return_t rc; struct timeval start_time, end_time; + long int load_time; - if (wildcard && fnmatch(wildcard, run->name, FNM_CASEFOLD)) + if (wildcard && fnmatch(wildcard, run->name, 0)) continue; fprintf(stderr, "Testing %s", run->name); memc= memcached_create(NULL); - assert(memc); + test_truth(memc); rc= memcached_server_push(memc, servers); - assert(rc == MEMCACHED_SUCCESS); + test_truth(rc == MEMCACHED_SUCCESS); if (run->requires_flush) { @@ -151,14 +118,12 @@ int main(int argc, char *argv[]) for (loop= 0; loop < memcached_server_list_count(servers); loop++) { - assert(memc->hosts[loop].stack_responses == 0); - assert(memc->hosts[loop].fd == -1); - assert(memc->hosts[loop].cursor_active == 0); + test_truth(memc->hosts[loop].fd == -1); + test_truth(memc->hosts[loop].cursor_active == 0); } if (next->pre) { - memcached_return rc; rc= next->pre(memc); if (rc != MEMCACHED_SUCCESS) @@ -171,18 +136,15 @@ int main(int argc, char *argv[]) gettimeofday(&start_time, NULL); failed= run->function(memc); gettimeofday(&end_time, NULL); - long int load_time= timedif(end_time, start_time); - if (failed) - fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ failed ]\n", load_time / 1000, - load_time % 1000); - else - fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ ok ]\n", load_time / 1000, - load_time % 1000); + load_time= timedif(end_time, start_time); + + fprintf(stderr, "\t\t\t\t\t %ld.%03ld [ %s ]\n", load_time / 1000, + load_time % 1000, test_strerror(failed)); if (next->post) (void)next->post(memc); - assert(memc); + test_truth(memc); error: memcached_free(memc); } @@ -190,9 +152,8 @@ error: fprintf(stderr, "All tests completed successfully\n\n"); - memcached_server_list_free(servers); - - server_shutdown(server_list); + if (world.destroy) + world.destroy(world_ptr); return 0; }