]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tests: fix C servers to run with a dynamic log directory
authorDan Fandrich <dan@coneharvesters.com>
Wed, 29 Mar 2023 17:23:28 +0000 (10:23 -0700)
committerDan Fandrich <dan@coneharvesters.com>
Thu, 30 Mar 2023 16:53:57 +0000 (09:53 -0700)
Ref: #10818

tests/server/mqttd.c
tests/server/rtspd.c
tests/server/sws.c
tests/server/tftpd.c
tests/server/util.h

index 3f990b935c34fb3391e1541e2fd63346c38c17af..f0dab7096e692b7e23b9f5491b81b9e436038f1a 100644 (file)
@@ -112,13 +112,15 @@ struct configurable {
   int testnum;
 };
 
-#define REQUEST_DUMP  "log/server.input"
+#define REQUEST_DUMP  "server.input"
 #define CONFIG_VERSION 5
 
 static struct configurable config;
 
 const char *serverlogfile = DEFAULT_LOGFILE;
 static const char *configfile = DEFAULT_CONFIG;
+const char *logdir = "log";
+char loglockfile[256];
 
 #ifdef ENABLE_IPV6
 static bool use_ipv6 = FALSE;
@@ -504,14 +506,16 @@ static curl_socket_t mqttit(curl_socket_t fd)
   char client_id[MAX_CLIENT_ID_LENGTH];
   long testno;
   FILE *stream = NULL;
-
+  FILE *dump;
+  char dumpfile[256];
 
   static const char protocol[7] = {
     0x00, 0x04,       /* protocol length */
     'M','Q','T','T',  /* protocol name */
     0x04              /* protocol level */
   };
-  FILE *dump = fopen(REQUEST_DUMP, "ab");
+  msnprintf(dumpfile, sizeof(dumpfile), "%s/%s", logdir, REQUEST_DUMP);
+  dump = fopen(dumpfile, "ab");
   if(!dump)
     goto end;
 
@@ -772,9 +776,9 @@ static bool incoming(curl_socket_t listenfd)
       else {
         logmsg("====> Client connect, fd %d. Read config from %s",
                newfd, configfile);
-        set_advisor_read_lock(SERVERLOGS_LOCK);
+        set_advisor_read_lock(loglockfile);
         (void)mqttit(newfd); /* until done */
-        clear_advisor_read_lock(SERVERLOGS_LOCK);
+        clear_advisor_read_lock(loglockfile);
 
         logmsg("====> Client disconnect");
         sclose(newfd);
@@ -962,6 +966,11 @@ int main(int argc, char *argv[])
       if(argc>arg)
         serverlogfile = argv[arg++];
     }
+    else if(!strcmp("--logdir", argv[arg])) {
+      arg++;
+      if(argc>arg)
+        logdir = argv[arg++];
+    }
     else if(!strcmp("--ipv6", argv[arg])) {
 #ifdef ENABLE_IPV6
       ipv_inuse = "IPv6";
@@ -997,6 +1006,7 @@ int main(int argc, char *argv[])
            " --config [file]\n"
            " --version\n"
            " --logfile [file]\n"
+           " --logdir [directory]\n"
            " --pidfile [file]\n"
            " --portfile [file]\n"
            " --ipv4\n"
@@ -1006,6 +1016,9 @@ int main(int argc, char *argv[])
     }
   }
 
+  msnprintf(loglockfile, sizeof(loglockfile), "%s/%s",
+            logdir, SERVERLOGS_LOCK);
+
 #ifdef WIN32
   win32_init();
   atexit(win32_cleanup);
index 3c0a697638a2d076fbefa14272724441a9422e31..85a110f15d674d209ccb219db9875b1cd8c02064 100644 (file)
@@ -133,11 +133,13 @@ static void storerequest(char *reqbuf, size_t totalsize);
 #endif
 
 const char *serverlogfile = DEFAULT_LOGFILE;
+const char *logdir = "log";
+char loglockfile[256];
 
 #define RTSPDVERSION "curl test suite RTSP server/0.1"
 
-#define REQUEST_DUMP  "log/server.input"
-#define RESPONSE_DUMP "log/server.response"
+#define REQUEST_DUMP  "server.input"
+#define RESPONSE_DUMP "server.response"
 
 /* very-big-path support */
 #define MAXDOCNAMELEN 140000
@@ -604,6 +606,9 @@ static void storerequest(char *reqbuf, size_t totalsize)
   size_t written;
   size_t writeleft;
   FILE *dump;
+  char dumpfile[256];
+
+  msnprintf(dumpfile, sizeof(dumpfile), "%s/%s", logdir, REQUEST_DUMP);
 
   if(!reqbuf)
     return;
@@ -611,12 +616,12 @@ static void storerequest(char *reqbuf, size_t totalsize)
     return;
 
   do {
-    dump = fopen(REQUEST_DUMP, "ab");
+    dump = fopen(dumpfile, "ab");
   } while(!dump && ((error = errno) == EINTR));
   if(!dump) {
     logmsg("Error opening file %s error: %d %s",
-           REQUEST_DUMP, error, strerror(error));
-    logmsg("Failed to write request input to " REQUEST_DUMP);
+           dumpfile, error, strerror(error));
+    logmsg("Failed to write request input to %s", dumpfile);
     return;
   }
 
@@ -631,12 +636,12 @@ static void storerequest(char *reqbuf, size_t totalsize)
   } while((writeleft > 0) && ((error = errno) == EINTR));
 
   if(writeleft == 0)
-    logmsg("Wrote request (%zu bytes) input to " REQUEST_DUMP, totalsize);
+    logmsg("Wrote request (%zu bytes) input to %s", totalsize, dumpfile);
   else if(writeleft > 0) {
     logmsg("Error writing file %s error: %d %s",
-           REQUEST_DUMP, error, strerror(error));
+           dumpfile, error, strerror(error));
     logmsg("Wrote only (%zu bytes) of (%zu bytes) request input to %s",
-           totalsize-writeleft, totalsize, REQUEST_DUMP);
+           totalsize-writeleft, totalsize, dumpfile);
   }
 
 storerequest_cleanup:
@@ -646,7 +651,7 @@ storerequest_cleanup:
   } while(res && ((error = errno) == EINTR));
   if(res)
     logmsg("Error closing file %s error: %d %s",
-           REQUEST_DUMP, error, strerror(error));
+           dumpfile, error, strerror(error));
 }
 
 /* return 0 on success, non-zero on failure */
@@ -775,8 +780,11 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
   size_t responsesize;
   int error = 0;
   int res;
-
   static char weare[256];
+  char responsedump[256];
+
+  msnprintf(responsedump, sizeof(responsedump), "%s/%s",
+            logdir, RESPONSE_DUMP);
 
   logmsg("Send response number %ld part %ld", req->testno, req->partno);
 
@@ -916,12 +924,12 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
   else
     prevbounce = FALSE;
 
-  dump = fopen(RESPONSE_DUMP, "ab");
+  dump = fopen(responsedump, "ab");
   if(!dump) {
     error = errno;
     logmsg("fopen() failed with error: %d %s", error, strerror(error));
-    logmsg("Error opening file: %s", RESPONSE_DUMP);
-    logmsg("couldn't create logfile: " RESPONSE_DUMP);
+    logmsg("Error opening file: %s", responsedump);
+    logmsg("couldn't create logfile: %s", responsedump);
     free(ptr);
     free(cmd);
     return -1;
@@ -978,7 +986,7 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
   } while(res && ((error = errno) == EINTR));
   if(res)
     logmsg("Error closing file %s error: %d %s",
-           RESPONSE_DUMP, error, strerror(error));
+           responsedump, error, strerror(error));
 
   if(got_exit_signal) {
     free(ptr);
@@ -995,8 +1003,8 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
     return -1;
   }
 
-  logmsg("Response sent (%zu bytes) and written to " RESPONSE_DUMP,
-         responsesize);
+  logmsg("Response sent (%zu bytes) and written to %s",
+         responsesize, responsedump);
   free(ptr);
 
   if(cmdsize > 0) {
@@ -1091,6 +1099,11 @@ int main(int argc, char *argv[])
       if(argc>arg)
         serverlogfile = argv[arg++];
     }
+    else if(!strcmp("--logdir", argv[arg])) {
+      arg++;
+      if(argc>arg)
+        logdir = argv[arg++];
+    }
     else if(!strcmp("--ipv4", argv[arg])) {
 #ifdef ENABLE_IPV6
       ipv_inuse = "IPv4";
@@ -1125,6 +1138,7 @@ int main(int argc, char *argv[])
       puts("Usage: rtspd [option]\n"
            " --version\n"
            " --logfile [file]\n"
+           " --logdir [directory]\n"
            " --pidfile [file]\n"
            " --portfile [file]\n"
            " --ipv4\n"
@@ -1135,6 +1149,9 @@ int main(int argc, char *argv[])
     }
   }
 
+  msnprintf(loglockfile, sizeof(loglockfile), "%s/%s",
+            logdir, SERVERLOGS_LOCK);
+
 #ifdef WIN32
   win32_init();
   atexit(win32_cleanup);
@@ -1279,7 +1296,7 @@ int main(int argc, char *argv[])
     ** logs should not be read until this lock is removed by this server.
     */
 
-    set_advisor_read_lock(SERVERLOGS_LOCK);
+    set_advisor_read_lock(loglockfile);
     serverlogslocked = 1;
 
     logmsg("====> Client connect");
@@ -1351,7 +1368,7 @@ int main(int argc, char *argv[])
 
     if(serverlogslocked) {
       serverlogslocked = 0;
-      clear_advisor_read_lock(SERVERLOGS_LOCK);
+      clear_advisor_read_lock(loglockfile);
     }
 
     if(req.testno == DOCNUMBER_QUIT)
@@ -1376,7 +1393,7 @@ server_cleanup:
 
   if(serverlogslocked) {
     serverlogslocked = 0;
-    clear_advisor_read_lock(SERVERLOGS_LOCK);
+    clear_advisor_read_lock(loglockfile);
   }
 
   restore_signal_handlers(false);
index e5bb431e0886e2c9e5e87f96e8668af48d399c63..dc5c04ed59f88d502096818d94e3c6c4594388b3 100644 (file)
@@ -146,16 +146,18 @@ static void storerequest(const char *reqbuf, size_t totalsize);
 #endif
 
 const char *serverlogfile = DEFAULT_LOGFILE;
+const char *logdir = "log";
+char loglockfile[256];
 
 #define SWSVERSION "curl test suite HTTP server/0.1"
 
-#define REQUEST_DUMP  "log/server.input"
-#define RESPONSE_DUMP "log/server.response"
+#define REQUEST_DUMP  "server.input"
+#define RESPONSE_DUMP "server.response"
 
 /* when told to run as proxy, we store the logs in different files so that
    they can co-exist with the same program running as a "server" */
-#define REQUEST_PROXY_DUMP  "log/proxy.input"
-#define RESPONSE_PROXY_DUMP "log/proxy.response"
+#define REQUEST_PROXY_DUMP  "proxy.input"
+#define RESPONSE_PROXY_DUMP "proxy.response"
 
 /* file in which additional instructions may be found */
 #define DEFAULT_CMDFILE "log/ftpserver.cmd"
@@ -787,7 +789,10 @@ static void storerequest(const char *reqbuf, size_t totalsize)
   size_t written;
   size_t writeleft;
   FILE *dump;
-  const char *dumpfile = is_proxy?REQUEST_PROXY_DUMP:REQUEST_DUMP;
+  char dumpfile[256];
+
+  msnprintf(dumpfile, sizeof(dumpfile), "%s/%s",
+            logdir, is_proxy?REQUEST_PROXY_DUMP:REQUEST_DUMP);
 
   if(!reqbuf)
     return;
@@ -1011,8 +1016,11 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)
   size_t responsesize;
   int error = 0;
   int res;
-  const char *responsedump = is_proxy?RESPONSE_PROXY_DUMP:RESPONSE_DUMP;
   static char weare[256];
+  char responsedump[256];
+
+  msnprintf(responsedump, sizeof(responsedump), "%s/%s",
+            logdir, is_proxy?RESPONSE_PROXY_DUMP:RESPONSE_DUMP);
 
   switch(req->rcmd) {
   default:
@@ -1832,7 +1840,7 @@ static curl_socket_t accept_connection(curl_socket_t sock)
   */
 
   if(!serverlogslocked)
-    set_advisor_read_lock(SERVERLOGS_LOCK);
+    set_advisor_read_lock(loglockfile);
   serverlogslocked += 1;
 
   logmsg("====> Client connect");
@@ -1983,6 +1991,11 @@ int main(int argc, char *argv[])
       if(argc>arg)
         serverlogfile = argv[arg++];
     }
+    else if(!strcmp("--logdir", argv[arg])) {
+      arg++;
+      if(argc>arg)
+        logdir = argv[arg++];
+    }
     else if(!strcmp("--cmdfile", argv[arg])) {
       arg++;
       if(argc>arg)
@@ -2062,6 +2075,7 @@ int main(int argc, char *argv[])
       puts("Usage: sws [option]\n"
            " --version\n"
            " --logfile [file]\n"
+           " --logdir [directory]\n"
            " --pidfile [file]\n"
            " --portfile [file]\n"
            " --ipv4\n"
@@ -2075,6 +2089,9 @@ int main(int argc, char *argv[])
     }
   }
 
+  msnprintf(loglockfile, sizeof(loglockfile), "%s/%s",
+            logdir, SERVERLOGS_LOCK);
+
 #ifdef WIN32
   win32_init();
   atexit(win32_cleanup);
@@ -2329,7 +2346,7 @@ int main(int argc, char *argv[])
 
             serverlogslocked -= 1;
             if(!serverlogslocked)
-              clear_advisor_read_lock(SERVERLOGS_LOCK);
+              clear_advisor_read_lock(loglockfile);
 
             if(req->testno == DOCNUMBER_QUIT)
               goto sws_cleanup;
@@ -2375,7 +2392,7 @@ sws_cleanup:
 
   if(serverlogslocked) {
     serverlogslocked = 0;
-    clear_advisor_read_lock(SERVERLOGS_LOCK);
+    clear_advisor_read_lock(loglockfile);
   }
 
   restore_signal_handlers(false);
index 75aad482df684cb526d19b2a3d1196a53e8c61f6..41ae32127d7846749ffda83b3076cf361eaa909f 100644 (file)
@@ -163,7 +163,7 @@ struct bf {
 #define DEFAULT_LOGFILE "log/tftpd.log"
 #endif
 
-#define REQUEST_DUMP  "log/server.input"
+#define REQUEST_DUMP  "server.input"
 
 #define DEFAULT_PORT 8999 /* UDP */
 
@@ -215,6 +215,8 @@ static bool use_ipv6 = FALSE;
 static const char *ipv_inuse = "IPv4";
 
 const  char *serverlogfile = DEFAULT_LOGFILE;
+const char *logdir = "log";
+char loglockfile[256];
 static const char *pidname = ".tftpd.pid";
 static const char *portname = NULL; /* none by default */
 static int serverlogslocked = 0;
@@ -300,7 +302,7 @@ static void timer(int signum)
     }
     if(serverlogslocked) {
       serverlogslocked = 0;
-      clear_advisor_read_lock(SERVERLOGS_LOCK);
+      clear_advisor_read_lock(loglockfile);
     }
     exit(1);
   }
@@ -458,7 +460,7 @@ static ssize_t write_behind(struct testcase *test, int convert)
 
   if(!test->ofile) {
     char outfile[256];
-    msnprintf(outfile, sizeof(outfile), "log/upload.%ld", test->testno);
+    msnprintf(outfile, sizeof(outfile), "%s/upload.%ld", logdir, test->testno);
 #ifdef WIN32
     test->ofile = open(outfile, O_CREAT|O_RDWR|O_BINARY, 0777);
 #else
@@ -595,6 +597,11 @@ int main(int argc, char **argv)
       if(argc>arg)
         serverlogfile = argv[arg++];
     }
+    else if(!strcmp("--logdir", argv[arg])) {
+      arg++;
+      if(argc>arg)
+        logdir = argv[arg++];
+    }
     else if(!strcmp("--ipv4", argv[arg])) {
 #ifdef ENABLE_IPV6
       ipv_inuse = "IPv4";
@@ -629,6 +636,7 @@ int main(int argc, char **argv)
       puts("Usage: tftpd [option]\n"
            " --version\n"
            " --logfile [file]\n"
+           " --logdir [directory]\n"
            " --pidfile [file]\n"
            " --portfile [file]\n"
            " --ipv4\n"
@@ -639,6 +647,9 @@ int main(int argc, char **argv)
     }
   }
 
+  msnprintf(loglockfile, sizeof(loglockfile), "%s/%s",
+            logdir, SERVERLOGS_LOCK);
+
 #ifdef WIN32
   win32_init();
   atexit(win32_cleanup);
@@ -779,7 +790,7 @@ int main(int argc, char **argv)
       break;
     }
 
-    set_advisor_read_lock(SERVERLOGS_LOCK);
+    set_advisor_read_lock(loglockfile);
     serverlogslocked = 1;
 
 #ifdef ENABLE_IPV6
@@ -833,7 +844,7 @@ int main(int argc, char **argv)
 
     if(serverlogslocked) {
       serverlogslocked = 0;
-      clear_advisor_read_lock(SERVERLOGS_LOCK);
+      clear_advisor_read_lock(loglockfile);
     }
 
     logmsg("end of one transfer");
@@ -861,7 +872,7 @@ tftpd_cleanup:
 
   if(serverlogslocked) {
     serverlogslocked = 0;
-    clear_advisor_read_lock(SERVERLOGS_LOCK);
+    clear_advisor_read_lock(loglockfile);
   }
 
   restore_signal_handlers(true);
@@ -895,13 +906,17 @@ static int do_tftp(struct testcase *test, struct tftphdr *tp, ssize_t size)
 #endif
   const char *option = "mode"; /* mode is implicit */
   int toggle = 1;
+  FILE *server;
+  char dumpfile[256];
+
+  msnprintf(dumpfile, sizeof(dumpfile), "%s/%s", logdir, REQUEST_DUMP);
 
   /* Open request dump file. */
-  FILE *server = fopen(REQUEST_DUMP, "ab");
+  server = fopen(dumpfile, "ab");
   if(!server) {
     int error = errno;
     logmsg("fopen() failed with error: %d %s", error, strerror(error));
-    logmsg("Error opening file: %s", REQUEST_DUMP);
+    logmsg("Error opening file: %s", dumpfile);
     return -1;
   }
 
index d5554684b2589f8c241a5d0693f141af2a46fb08..a931e32b648c79e5d4675782517ab966526f1259 100644 (file)
@@ -32,7 +32,7 @@ long timediff(struct timeval newer, struct timeval older);
 #define TEST_DATA_PATH "%s/data/test%ld"
 #define ALTTEST_DATA_PATH "%s/log/test%ld"
 
-#define SERVERLOGS_LOCK "log/serverlogs.lock"
+#define SERVERLOGS_LOCK "serverlogs.lock"
 
 /* global variable, where to find the 'data' dir */
 extern const char *path;