X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=tests%2Fserver.c;h=70c0ae3b52e2497d06323292c5cb5547c1fb5124;hb=03982cb00168ed0b3fc06d063c29076a9ffe1699;hp=68b3d80146416ede910f85a8c963369dc09d8d98;hpb=51d1a5f37c90faa416a5fbd9238aafbde718b074;p=awesomized%2Flibmemcached diff --git a/tests/server.c b/tests/server.c index 68b3d801..70c0ae3b 100644 --- a/tests/server.c +++ b/tests/server.c @@ -13,7 +13,7 @@ Startup, and shutdown the memcached servers. */ -#define TEST_PORT_BASE MEMCACHED_DEFAULT_PORT+10 +#define TEST_PORT_BASE MEMCACHED_DEFAULT_PORT+10 #include "config.h" @@ -24,13 +24,14 @@ #include #include #include +#include #include +#include + #include "server.h" void server_startup(server_startup_st *construct) { - unsigned int x; - if ((construct->server_list= getenv("MEMCACHED_SERVERS"))) { printf("servers %s\n", construct->server_list); @@ -45,14 +46,31 @@ void server_startup(server_startup_st *construct) char *end_ptr; end_ptr= server_string_buffer; - for (x= 0; x < construct->count; x++) + for (uint32_t x= 0; x < construct->count; x++) { char buffer[1024]; /* Nothing special for number */ int count; int status; + in_port_t port; + + { + char *var; + char variable_buffer[1024]; + + snprintf(variable_buffer, sizeof(variable_buffer), "LIBMEMCACHED_PORT_%u", x); + + if ((var= getenv(variable_buffer))) + { + port= (in_port_t)atoi(var); + } + else + { + port= (in_port_t)(x + TEST_PORT_BASE); + } + } sprintf(buffer, "/tmp/%umemc.pid", x); - if (access(buffer, F_OK) == 0) + if (access(buffer, F_OK) == 0) { FILE *fp= fopen(buffer, "r"); remove(buffer); @@ -60,9 +78,9 @@ void server_startup(server_startup_st *construct) if (fp != NULL) { if (fgets(buffer, sizeof(buffer), fp) != NULL) - { + { pid_t pid= (pid_t)atoi(buffer); - if (pid != 0) + if (pid != 0) kill(pid, SIGTERM); } @@ -72,21 +90,62 @@ void server_startup(server_startup_st *construct) if (x == 0) { - sprintf(buffer, "%s -d -P /tmp/%umemc.pid -t 1 -p %u -U %u -m 128", - MEMCACHED_BINARY, x, x + TEST_PORT_BASE, x + TEST_PORT_BASE); - } + sprintf(buffer, "%s -d -u root -P /tmp/%umemc.pid -t 1 -p %u -U %u -m 128", + MEMCACHED_BINARY, x, port, port); + } else { - sprintf(buffer, "%s -d -P /tmp/%umemc.pid -t 1 -p %u -U %u", - MEMCACHED_BINARY, x, x + TEST_PORT_BASE, x + TEST_PORT_BASE); + sprintf(buffer, "%s -d -u root -P /tmp/%umemc.pid -t 1 -p %u -U %u", + MEMCACHED_BINARY, x, port, port); } - fprintf(stderr, "STARTING SERVER: %s\n", buffer); - status= system(buffer); - count= sprintf(end_ptr, "localhost:%u,", x + TEST_PORT_BASE); + if (libmemcached_util_ping("localhost", port, NULL)) + { + fprintf(stderr, "Server on port %u already exists\n", port); + } + else + { + status= system(buffer); + fprintf(stderr, "STARTING SERVER: %s status:%d\n", buffer, status); + } + count= sprintf(end_ptr, "localhost:%u,", port); end_ptr+= count; } *end_ptr= 0; + for (uint32_t x= 0; x < construct->count; x++) + { + uint32_t counter= 3; + char buffer[1024]; /* Nothing special for number */ + + snprintf(buffer, sizeof(buffer), "/tmp/%umemc.pid", x); + + while (--counter) + { + int memcached_pid; + + FILE *file; + file= fopen(buffer, "r"); + if (file == NULL) + { +#ifndef WIN32 + struct timespec req= { .tv_sec= 0, .tv_nsec= 5000 }; + nanosleep(&req, NULL); +#endif + continue; + } + char *found= fgets(buffer, sizeof(buffer), file); + if (!found) + { + abort(); + } + // Yes, we currently pitch this and don't make use of it. + memcached_pid= atoi(buffer); + fclose(file); + } + + + } + construct->server_list= strdup(server_string_buffer); } printf("servers %s\n", construct->server_list); @@ -97,9 +156,9 @@ void server_startup(server_startup_st *construct) srandom((unsigned int)time(NULL)); - for (x= 0; x < memcached_server_list_count(construct->servers); x++) + for (uint32_t x= 0; x < memcached_server_list_count(construct->servers); x++) { - printf("\t%s : %d\n", construct->servers[x].hostname, construct->servers[x].port); + printf("\t%s : %d\n", memcached_server_name(&construct->servers[x]), memcached_server_port(&construct->servers[x])); assert(construct->servers[x].fd == -1); assert(construct->servers[x].cursor_active == 0); } @@ -109,17 +168,15 @@ void server_startup(server_startup_st *construct) void server_shutdown(server_startup_st *construct) { - unsigned int x; - if (construct->server_list) { - for (x= 0; x < construct->count; x++) + for (uint32_t x= 0; x < construct->count; x++) { char buffer[1024]; /* Nothing special for number */ sprintf(buffer, "cat /tmp/%umemc.pid | xargs kill", x); /* We have to check the return value of this or the compiler will yell */ int sys_ret= system(buffer); - assert(sys_ret != -1); + assert(sys_ret != -1); sprintf(buffer, "/tmp/%umemc.pid", x); unlink(buffer); }