Big fix for async mode to make sure all data has been pushed through socket
[m6w6/libmemcached] / tests / test.c
index 1de861ab6d7c5970e9b422c374668091f8fa66bb..765149ecb66c7279c155cd7709919648ed132f36 100644 (file)
@@ -13,6 +13,9 @@
 
 #include "test.h"
 
+#define TEST_PORT_BASE MEMCACHED_DEFAULT_PORT+10 
+#define TEST_SERVERS 5
+
 long int timedif(struct timeval a, struct timeval b)
 {
   register int us, s;
@@ -24,6 +27,46 @@ long int timedif(struct timeval a, struct timeval b)
   return s + us;
 }
 
+char *server_startup()
+{
+  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;
+  }
+  *end_ptr= 0;
+
+  return strdup(server_string_buffer);
+}
+
+void server_shutdown(char *server_string)
+{
+  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);
+  }
+}
+
 int main(int argc, char *argv[])
 {
   unsigned int x;
@@ -43,14 +86,22 @@ int main(int argc, char *argv[])
   if (argc == 3)
     wildcard= argv[2];
 
-  if (!(server_list= getenv("MEMCACHED_SERVERS")))
-    server_list= "localhost";
+  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);
 
-  printf("servers %s\n", server_list);
   srandom(time(NULL));
 
-  servers= memcached_servers_parse(server_list);
-  assert(servers);
 
   for (x= 0; x < memcached_server_list_count(servers); x++)
   {
@@ -75,25 +126,28 @@ int main(int argc, char *argv[])
 
     for (x= 0; run->name; run++)
     {
+      unsigned int loop;
+      memcached_st *memc;
+      memcached_return rc;
+      struct timeval start_time, end_time;
+
       if (wildcard && strcmp(wildcard, run->name))
         continue;
 
       fprintf(stderr, "Testing %s", run->name);
 
-      memcached_st *memc;
-      memcached_return rc;
-      struct timeval start_time, end_time;
-
       memc= memcached_create(NULL);
       assert(memc);
 
-      if (run->requires_flush)
-        memcached_flush(memc, 0);
-
       rc= memcached_server_push(memc, servers);
       assert(rc == MEMCACHED_SUCCESS);
 
-      unsigned int loop;
+      if (run->requires_flush)
+      {
+        memcached_flush(memc, 0);
+        memcached_quit(memc);
+      }
+
       for (loop= 0; loop < memcached_server_list_count(servers); loop++)
       {
         assert(memc->hosts[loop].stack_responses == 0);
@@ -137,5 +191,7 @@ error:
 
   memcached_server_list_free(servers);
 
+  server_shutdown(server_list);
+
   return 0;
 }