diff options
| -rw-r--r-- | tests/data/test309 | 8 | ||||
| -rw-r--r-- | tests/getpart.pm | 25 | ||||
| -rwxr-xr-x | tests/runtests.pl | 216 | ||||
| -rw-r--r-- | tests/server/fake_ntlm.c | 17 | ||||
| -rw-r--r-- | tests/server/mqttd.c | 4 | ||||
| -rw-r--r-- | tests/server/rtspd.c | 15 | ||||
| -rw-r--r-- | tests/server/sws.c | 12 | ||||
| -rw-r--r-- | tests/server/tftpd.c | 53 | ||||
| -rw-r--r-- | tests/server/util.c | 16 | ||||
| -rw-r--r-- | tests/server/util.h | 6 | 
10 files changed, 183 insertions, 189 deletions
diff --git a/tests/data/test309 b/tests/data/test309 index dd0431206..80246a9c0 100644 --- a/tests/data/test309 +++ b/tests/data/test309 @@ -14,7 +14,7 @@ followlocation  HTTP/1.1 301 This is a weirdo text message swsclose
  Date: Thu, 09 Nov 2010 14:49:00 GMT
  Server: test-server/fake
 -Location: https://127.0.0.1:8991/data/3090002.txt?coolsite=yes
 +Location: https://127.0.0.1:%HTTPSPORT/data/3090002.txt?coolsite=yes
  Connection: close
  This server reply is for testing a simple Location: following to HTTPS URL @@ -33,7 +33,7 @@ If this is received, the location following worked  HTTP/1.1 301 This is a weirdo text message swsclose
  Date: Thu, 09 Nov 2010 14:49:00 GMT
  Server: test-server/fake
 -Location: https://127.0.0.1:8991/data/3090002.txt?coolsite=yes
 +Location: https://127.0.0.1:%HTTPSPORT/data/3090002.txt?coolsite=yes
  Connection: close
  HTTP/1.1 200 Followed here fine swsclose
 @@ -61,10 +61,6 @@ HTTP Location: redirect to HTTPS URL   <command>  -k http://%HOSTIP:%HTTPPORT/want/309 -L  </command> -# The data section doesn't do variable substitution, so we must assert this -<precheck> -perl -e "print 'Test requires default test server host and port' if ( '%HOSTIP' ne '127.0.0.1' || '%HTTPSPORT' ne '8991' );" -</precheck>  </client>  # Verify data after the test has been "shot" diff --git a/tests/getpart.pm b/tests/getpart.pm index 35ab30cb5..9519888ee 100644 --- a/tests/getpart.pm +++ b/tests/getpart.pm @@ -209,6 +209,31 @@ sub loadtest {      return 0;  } +sub fulltest { +    return @xml; +} + +# write the test to the given file +sub savetest { +    my ($file)=@_; + +    if(open(XML, ">$file")) { +        binmode XML; # for crapage systems, use binary +        for(@xml) { +            print XML $_; +        } +        close(XML); +    } +    else { +        # failure +        if($warning) { +            print STDERR "file $file wouldn't open!\n"; +        } +        return 1; +    } +    return 0; +} +  #  # Strip off all lines that match the specified pattern and return  # the new array. diff --git a/tests/runtests.pl b/tests/runtests.pl index 549db529f..2feb5ae56 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -156,7 +156,7 @@ my $SMBPORT;             # SMB server port  my $SMBSPORT;            # SMBS server port  my $NEGTELNETPORT;       # TELNET server port with negotiation -my $SSHSRVMD5;           # MD5 of ssh server public key +my $SSHSRVMD5 = "[uninitialized]"; # MD5 of ssh server public key  my $srcdir = $ENV{'srcdir'} || '.';  my $CURL="../src/curl".exe_ext('TOOL'); # what curl executable to run on the tests @@ -1559,7 +1559,7 @@ sub runhttpserver {      $pid2 = $pid3;      if($verbose) { -        logmsg "RUN: $srvrname server is now running PID $httppid\n"; +        logmsg "RUN: $srvrname server is on PID $httppid port $port\n";      }      sleep(1); @@ -3119,9 +3119,7 @@ sub checksystem {      logmsg ("* Port range: $minport-$maxport\n");      if($verbose) { -        logmsg "* Ports:\n"; - -        logmsg sprintf("*   HTTP/%d ", $HTTPPORT); +        logmsg "* Ports: ";          logmsg sprintf("FTP/%d ", $FTPPORT);          logmsg sprintf("FTP2/%d ", $FTP2PORT);          logmsg sprintf("RTSP/%d ", $RTSPPORT); @@ -3131,7 +3129,6 @@ sub checksystem {          }          logmsg sprintf("\n*   TFTP/%d ", $TFTPPORT);          if($http_ipv6) { -            logmsg sprintf("HTTP-IPv6/%d ", $HTTP6PORT);              logmsg sprintf("RTSP-IPv6/%d ", $RTSP6PORT);          }          if($ftp_ipv6) { @@ -3140,10 +3137,6 @@ sub checksystem {          if($tftp_ipv6) {              logmsg sprintf("TFTP-IPv6/%d ", $TFTP6PORT);          } -        logmsg sprintf("\n*   GOPHER/%d ", $GOPHERPORT); -        if($gopher_ipv6) { -            logmsg sprintf("GOPHER-IPv6/%d", $GOPHER6PORT); -        }          logmsg sprintf("\n*   SSH/%d ", $SSHPORT);          logmsg sprintf("SOCKS/%d ", $SOCKSPORT);          logmsg sprintf("POP3/%d ", $POP3PORT); @@ -3184,105 +3177,83 @@ sub checksystem {  # a command, in either case passed by reference  #  sub subVariables { -  my ($thing) = @_; - -  # ports - -  $$thing =~ s/%FTP6PORT/$FTP6PORT/g; -  $$thing =~ s/%FTP2PORT/$FTP2PORT/g; -  $$thing =~ s/%FTPSPORT/$FTPSPORT/g; -  $$thing =~ s/%FTPPORT/$FTPPORT/g; - -  $$thing =~ s/%GOPHER6PORT/$GOPHER6PORT/g; -  $$thing =~ s/%GOPHERPORT/$GOPHERPORT/g; - -  $$thing =~ s/%HTTPTLS6PORT/$HTTPTLS6PORT/g; -  $$thing =~ s/%HTTPTLSPORT/$HTTPTLSPORT/g; -  $$thing =~ s/%HTTP6PORT/$HTTP6PORT/g; -  $$thing =~ s/%HTTPSPORT/$HTTPSPORT/g; -  $$thing =~ s/%HTTP2PORT/$HTTP2PORT/g; -  $$thing =~ s/%HTTPPORT/$HTTPPORT/g; -  $$thing =~ s/%PROXYPORT/$HTTPPROXYPORT/g; -  $$thing =~ s/%MQTTPORT/$MQTTPORT/g; - -  $$thing =~ s/%IMAP6PORT/$IMAP6PORT/g; -  $$thing =~ s/%IMAPPORT/$IMAPPORT/g; - -  $$thing =~ s/%POP36PORT/$POP36PORT/g; -  $$thing =~ s/%POP3PORT/$POP3PORT/g; - -  $$thing =~ s/%RTSP6PORT/$RTSP6PORT/g; -  $$thing =~ s/%RTSPPORT/$RTSPPORT/g; - -  $$thing =~ s/%SMTP6PORT/$SMTP6PORT/g; -  $$thing =~ s/%SMTPPORT/$SMTPPORT/g; - -  $$thing =~ s/%SOCKSPORT/$SOCKSPORT/g; -  $$thing =~ s/%SSHPORT/$SSHPORT/g; - -  $$thing =~ s/%TFTP6PORT/$TFTP6PORT/g; -  $$thing =~ s/%TFTPPORT/$TFTPPORT/g; - -  $$thing =~ s/%DICTPORT/$DICTPORT/g; - -  $$thing =~ s/%SMBPORT/$SMBPORT/g; -  $$thing =~ s/%SMBSPORT/$SMBSPORT/g; - -  $$thing =~ s/%NEGTELNETPORT/$NEGTELNETPORT/g; - -  # server Unix domain socket paths - -  $$thing =~ s/%HTTPUNIXPATH/$HTTPUNIXPATH/g; - -  # client IP addresses - -  $$thing =~ s/%CLIENT6IP/$CLIENT6IP/g; -  $$thing =~ s/%CLIENTIP/$CLIENTIP/g; - -  # server IP addresses - -  $$thing =~ s/%HOST6IP/$HOST6IP/g; -  $$thing =~ s/%HOSTIP/$HOSTIP/g; - -  # misc - -  $$thing =~ s/%CURL/$CURL/g; -  $$thing =~ s/%PWD/$pwd/g; -  $$thing =~ s/%POSIX_PWD/$posix_pwd/g; - -  my $file_pwd = $pwd; -  if($file_pwd !~ /^\//) { -      $file_pwd = "/$file_pwd"; -  } - -  $$thing =~ s/%FILE_PWD/$file_pwd/g; -  $$thing =~ s/%SRCDIR/$srcdir/g; -  $$thing =~ s/%USER/$USER/g; - -  if($$thing =~ /%SSHSRVMD5/) { -      if(!$SSHSRVMD5) { -          my $msg = "Fatal: Missing SSH server pubkey MD5. Is server running?"; -          logmsg "$msg\n"; -          stopservers($verbose); -          die $msg; -      } -      $$thing =~ s/%SSHSRVMD5/$SSHSRVMD5/g; -  } - -  # The purpose of FTPTIME2 and FTPTIME3 is to provide times that can be -  # used for time-out tests and that would work on most hosts as these -  # adjust for the startup/check time for this particular host. We needed -  # to do this to make the test suite run better on very slow hosts. - -  my $ftp2 = $ftpchecktime * 2; -  my $ftp3 = $ftpchecktime * 3; - -  $$thing =~ s/%FTPTIME2/$ftp2/g; -  $$thing =~ s/%FTPTIME3/$ftp3/g; - -  # HTTP2 - -  $$thing =~ s/%H2CVER/$h2cver/g; +    my ($thing, $prefix) = @_; + +    if(!$prefix) { +        $prefix = "%"; +    } + +    # test server ports +    $$thing =~ s/${prefix}FTP6PORT/$FTP6PORT/g; +    $$thing =~ s/${prefix}FTP2PORT/$FTP2PORT/g; +    $$thing =~ s/${prefix}FTPSPORT/$FTPSPORT/g; +    $$thing =~ s/${prefix}FTPPORT/$FTPPORT/g; +    $$thing =~ s/${prefix}GOPHER6PORT/$GOPHER6PORT/g; +    $$thing =~ s/${prefix}GOPHERPORT/$GOPHERPORT/g; +    $$thing =~ s/${prefix}HTTPTLS6PORT/$HTTPTLS6PORT/g; +    $$thing =~ s/${prefix}HTTPTLSPORT/$HTTPTLSPORT/g; +    $$thing =~ s/${prefix}HTTP6PORT/$HTTP6PORT/g; +    $$thing =~ s/${prefix}HTTPSPORT/$HTTPSPORT/g; +    $$thing =~ s/${prefix}HTTP2PORT/$HTTP2PORT/g; +    $$thing =~ s/${prefix}HTTPPORT/$HTTPPORT/g; +    $$thing =~ s/${prefix}PROXYPORT/$HTTPPROXYPORT/g; +    $$thing =~ s/${prefix}MQTTPORT/$MQTTPORT/g; +    $$thing =~ s/${prefix}IMAP6PORT/$IMAP6PORT/g; +    $$thing =~ s/${prefix}IMAPPORT/$IMAPPORT/g; +    $$thing =~ s/${prefix}POP36PORT/$POP36PORT/g; +    $$thing =~ s/${prefix}POP3PORT/$POP3PORT/g; +    $$thing =~ s/${prefix}RTSP6PORT/$RTSP6PORT/g; +    $$thing =~ s/${prefix}RTSPPORT/$RTSPPORT/g; +    $$thing =~ s/${prefix}SMTP6PORT/$SMTP6PORT/g; +    $$thing =~ s/${prefix}SMTPPORT/$SMTPPORT/g; +    $$thing =~ s/${prefix}SOCKSPORT/$SOCKSPORT/g; +    $$thing =~ s/${prefix}SSHPORT/$SSHPORT/g; +    $$thing =~ s/${prefix}TFTP6PORT/$TFTP6PORT/g; +    $$thing =~ s/${prefix}TFTPPORT/$TFTPPORT/g; +    $$thing =~ s/${prefix}DICTPORT/$DICTPORT/g; +    $$thing =~ s/${prefix}SMBPORT/$SMBPORT/g; +    $$thing =~ s/${prefix}SMBSPORT/$SMBSPORT/g; +    $$thing =~ s/${prefix}NEGTELNETPORT/$NEGTELNETPORT/g; + +    # server Unix domain socket paths +    $$thing =~ s/${prefix}HTTPUNIXPATH/$HTTPUNIXPATH/g; + +    # client IP addresses +    $$thing =~ s/${prefix}CLIENT6IP/$CLIENT6IP/g; +    $$thing =~ s/${prefix}CLIENTIP/$CLIENTIP/g; + +    # server IP addresses +    $$thing =~ s/${prefix}HOST6IP/$HOST6IP/g; +    $$thing =~ s/${prefix}HOSTIP/$HOSTIP/g; + +    # misc +    $$thing =~ s/${prefix}CURL/$CURL/g; +    $$thing =~ s/${prefix}PWD/$pwd/g; +    $$thing =~ s/${prefix}POSIX_PWD/$posix_pwd/g; + +    my $file_pwd = $pwd; +    if($file_pwd !~ /^\//) { +        $file_pwd = "/$file_pwd"; +    } + +    $$thing =~ s/${prefix}FILE_PWD/$file_pwd/g; +    $$thing =~ s/${prefix}SRCDIR/$srcdir/g; +    $$thing =~ s/${prefix}USER/$USER/g; + +    $$thing =~ s/${prefix}SSHSRVMD5/$SSHSRVMD5/g; + +    # The purpose of FTPTIME2 and FTPTIME3 is to provide times that can be +    # used for time-out tests and that would work on most hosts as these +    # adjust for the startup/check time for this particular host. We needed to +    # do this to make the test suite run better on very slow hosts. +    my $ftp2 = $ftpchecktime * 2; +    my $ftp3 = $ftpchecktime * 3; + +    $$thing =~ s/${prefix}FTPTIME2/$ftp2/g; +    $$thing =~ s/${prefix}FTPTIME3/$ftp3/g; + +    # HTTP2 +    $$thing =~ s/${prefix}H2CVER/$h2cver/g;  }  sub fixarray { @@ -3498,6 +3469,25 @@ sub singletest {          $why = serverfortest($testnum);      } +    # Save a preprocessed version of the entire test file. This allows more +    # "basic" test case readers to enjoy variable replacements. +    my @entiretest = fulltest(); +    my $otest = "log/test$testnum"; +    open(D, ">$otest"); +    my $diff; +    for my $s (@entiretest) { +        my $f = $s; +        subVariables(\$s, "%"); +        if($f ne $s) { +            $diff++; +        } +        print D $s; +    } +    close(D); +    # remove the separate test file again if nothing was updated to keep +    # things simpler +    unlink($otest) if(!$diff); +      # timestamp required servers verification end      $timesrvrend{$testnum} = Time::HiRes::time(); @@ -3616,6 +3606,9 @@ sub singletest {              map s/\n/\r\n/g, @reply;          }      } +    for my $r (@reply) { +        subVariables(\$r); +    }      # this is the valid protocol blurb curl should generate      my @protocol= fixarray ( getpart("verify", "protocol") ); @@ -4462,7 +4455,7 @@ sub singletest {              $ok .= "v";          }          else { -            if(!$short && !$disablevalgrind) { +            if($verbose && !$disablevalgrind) {                  logmsg " valgrind SKIPPED\n";              }              $ok .= "-"; # skipped @@ -5662,6 +5655,9 @@ sub displaylogs {          if(($log =~ /^valgrind\d+/) && ($log !~ /^valgrind$testnum(\..*|)$/)) {              next; # skip valgrindNnn of other tests          } +        if(($log =~ /^test$testnum$/)) { +            next; # skip test$testnum since it can be very big +        }          logmsg "=== Start of file $log\n";          displaylogcontent("$LOGDIR/$log");          logmsg "=== End of file $log\n"; diff --git a/tests/server/fake_ntlm.c b/tests/server/fake_ntlm.c index c6e36b6f6..c9211f7ea 100644 --- a/tests/server/fake_ntlm.c +++ b/tests/server/fake_ntlm.c @@ -6,7 +6,7 @@   *                             \___|\___/|_| \_\_____|   *   * Copyright (C) 2010, Mandy Wu, <mandy.wu@intel.com> - * Copyright (C) 2011 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 2011 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.   *   * This software is licensed as described in the file COPYING, which   * you should have received as part of this distribution. The terms @@ -112,7 +112,6 @@ int main(int argc, char *argv[])    char buf[1024];    char logfilename[256];    FILE *stream; -  char *filename;    int error;    char *type1_input = NULL, *type3_input = NULL;    char *type1_output = NULL, *type3_output = NULL; @@ -186,12 +185,10 @@ int main(int argc, char *argv[])      path = env;    } -  filename = test2file(testnum); -  stream = fopen(filename, "rb"); +  stream = test2fopen(testnum);    if(!stream) {      error = errno;      logmsg("fopen() failed with error: %d %s", error, strerror(error)); -    logmsg("Error opening file: %s", filename);      logmsg("Couldn't open test file %ld", testnum);      exit(1);    } @@ -205,13 +202,11 @@ int main(int argc, char *argv[])      }    } -  stream = fopen(filename, "rb"); +  stream = test2fopen(testnum);    if(!stream) {      error = errno;      logmsg("fopen() failed with error: %d %s", error, strerror(error)); -    logmsg("Error opening file: %s", filename);      logmsg("Couldn't open test file %ld", testnum); -    exit(1);    }    else {      size = 0; @@ -225,11 +220,10 @@ int main(int argc, char *argv[])    while(fgets(buf, sizeof(buf), stdin)) {      if(strcmp(buf, type1_input) == 0) { -      stream = fopen(filename, "rb"); +      stream = test2fopen(testnum);        if(!stream) {          error = errno;          logmsg("fopen() failed with error: %d %s", error, strerror(error)); -        logmsg("Error opening file: %s", filename);          logmsg("Couldn't open test file %ld", testnum);          exit(1);        } @@ -247,11 +241,10 @@ int main(int argc, char *argv[])        fflush(stdout);      }      else if(strncmp(buf, type3_input, strlen(type3_input)) == 0) { -      stream = fopen(filename, "rb"); +      stream = test2fopen(testnum);        if(!stream) {          error = errno;          logmsg("fopen() failed with error: %d %s", error, strerror(error)); -        logmsg("Error opening file: %s", filename);          logmsg("Couldn't open test file %ld", testnum);          exit(1);        } diff --git a/tests/server/mqttd.c b/tests/server/mqttd.c index d9ad5923e..db5723cdd 100644 --- a/tests/server/mqttd.c +++ b/tests/server/mqttd.c @@ -446,7 +446,6 @@ static curl_socket_t mqttit(curl_socket_t fd)    size_t remaining_length = 0;    size_t bytes = 0; /* remaining length field size in bytes */    char client_id[MAX_CLIENT_ID_LENGTH]; -  char *filename;    long testno;    static const char protocol[7] = { @@ -550,8 +549,7 @@ static curl_socket_t mqttit(curl_socket_t fd)          char *data;          size_t datalen;          logmsg("Found test number %ld", testno); -        filename = test2file(testno); -        stream = fopen(filename, "rb"); +        stream = test2fopen(testno);          error = getpart(&data, &datalen, "reply", "data", stream);          if(!error)            publish(dump, fd, packet_id, topic, data, datalen); diff --git a/tests/server/rtspd.c b/tests/server/rtspd.c index c784fc8ca..2d95d8359 100644 --- a/tests/server/rtspd.c +++ b/tests/server/rtspd.c @@ -247,8 +247,6 @@ static int ProcessRequest(struct httprequest *req)      /* get the number after it */      if(ptr) {        FILE *stream; -      char *filename; -        if((strlen(doc) + strlen(request)) < 200)          msnprintf(logbuf, sizeof(logbuf), "Got request: %s %s %s/%d.%d",                    request, doc, prot_str, prot_major, prot_minor); @@ -288,13 +286,11 @@ static int ProcessRequest(struct httprequest *req)                  req->testno, req->partno);        logmsg("%s", logbuf); -      filename = test2file(req->testno); +      stream = test2fopen(req->testno); -      stream = fopen(filename, "rb");        if(!stream) {          int error = errno;          logmsg("fopen() failed with error: %d %s", error, strerror(error)); -        logmsg("Error opening file: %s", filename);          logmsg("Couldn't open test file %ld", req->testno);          req->open = FALSE; /* closes connection */          return 1; /* done */ @@ -849,17 +845,13 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)      count = strlen(buffer);    }    else { -    char *filename = test2file(req->testno); +    FILE *stream = test2fopen(req->testno);      char partbuf[80]="data"; -    FILE *stream;      if(0 != req->partno)        msnprintf(partbuf, sizeof(partbuf), "data%ld", req->partno); - -    stream = fopen(filename, "rb");      if(!stream) {        error = errno;        logmsg("fopen() failed with error: %d %s", error, strerror(error)); -      logmsg("Error opening file: %s", filename);        logmsg("Couldn't open test file");        return 0;      } @@ -879,11 +871,10 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)      }      /* re-open the same file again */ -    stream = fopen(filename, "rb"); +    stream = test2fopen(req->testno);      if(!stream) {        error = errno;        logmsg("fopen() failed with error: %d %s", error, strerror(error)); -      logmsg("Error opening file: %s", filename);        logmsg("Couldn't open test file");        free(ptr);        return 0; diff --git a/tests/server/sws.c b/tests/server/sws.c index faa1143d9..48ea26d5e 100644 --- a/tests/server/sws.c +++ b/tests/server/sws.c @@ -235,18 +235,15 @@ static bool socket_domain_is_ip(void)  static int parse_servercmd(struct httprequest *req)  {    FILE *stream; -  char *filename;    int error; -  filename = test2file(req->testno); +  stream = test2fopen(req->testno);    req->close = FALSE;    req->connmon = FALSE; -  stream = fopen(filename, "rb");    if(!stream) {      error = errno;      logmsg("fopen() failed with error: %d %s", error, strerror(error)); -    logmsg("  [1] Error opening file: %s", filename);      logmsg("  Couldn't open test file %ld", req->testno);      req->open = FALSE; /* closes connection */      return 1; /* done */ @@ -991,7 +988,6 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)    }    else {      char partbuf[80]; -    char *filename = test2file(req->testno);      /* select the <data> tag for "normal" requests and the <connect> one         for CONNECT requests (within the <reply> section) */ @@ -1004,11 +1000,10 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)      logmsg("Send response test%ld section <%s>", req->testno, partbuf); -    stream = fopen(filename, "rb"); +    stream = test2fopen(req->testno);      if(!stream) {        error = errno;        logmsg("fopen() failed with error: %d %s", error, strerror(error)); -      logmsg("  [3] Error opening file: %s", filename);        return 0;      }      else { @@ -1027,11 +1022,10 @@ static int send_doc(curl_socket_t sock, struct httprequest *req)      }      /* re-open the same file again */ -    stream = fopen(filename, "rb"); +    stream = test2fopen(req->testno);      if(!stream) {        error = errno;        logmsg("fopen() failed with error: %d %s", error, strerror(error)); -      logmsg("  [4] Error opening file: %s", filename);        free(ptr);        return 0;      } diff --git a/tests/server/tftpd.c b/tests/server/tftpd.c index 0c94e1cb7..9972ab0e4 100644 --- a/tests/server/tftpd.c +++ b/tests/server/tftpd.c @@ -944,16 +944,12 @@ static int do_tftp(struct testcase *test, struct tftphdr *tp, ssize_t size)  static int parse_servercmd(struct testcase *req)  {    FILE *stream; -  char *filename;    int error; -  filename = test2file(req->testno); - -  stream = fopen(filename, "rb"); +  stream = test2fopen(req->testno);    if(!stream) {      error = errno;      logmsg("fopen() failed with error: %d %s", error, strerror(error)); -    logmsg("  [1] Error opening file: %s", filename);      logmsg("  Couldn't open test file %ld", req->testno);      return 1; /* done */    } @@ -1036,7 +1032,7 @@ static int validate_access(struct testcase *test,      char partbuf[80]="data";      long partno;      long testno; -    char *file; +    FILE *stream;      ptr++; /* skip the slash */ @@ -1061,40 +1057,33 @@ static int validate_access(struct testcase *test,      (void)parse_servercmd(test); -    file = test2file(testno); +    stream = test2fopen(testno);      if(0 != partno)        msnprintf(partbuf, sizeof(partbuf), "data%ld", partno); -    if(file) { -      FILE *stream = fopen(file, "rb"); -      if(!stream) { -        int error = errno; -        logmsg("fopen() failed with error: %d %s", error, strerror(error)); -        logmsg("Error opening file: %s", file); -        logmsg("Couldn't open test file: %s", file); +    if(!stream) { +      int error = errno; +      logmsg("fopen() failed with error: %d %s", error, strerror(error)); +      logmsg("Couldn't open test file for test : %d", testno); +      return EACCESS; +    } +    else { +      size_t count; +      int error = getpart(&test->buffer, &count, "reply", partbuf, stream); +      fclose(stream); +      if(error) { +        logmsg("getpart() failed with error: %d", error);          return EACCESS;        } -      else { -        size_t count; -        int error = getpart(&test->buffer, &count, "reply", partbuf, stream); -        fclose(stream); -        if(error) { -          logmsg("getpart() failed with error: %d", error); -          return EACCESS; -        } -        if(test->buffer) { -          test->rptr = test->buffer; /* set read pointer */ -          test->bufsize = count;    /* set total count */ -          test->rcount = count;     /* set data left to read */ -        } -        else -          return EACCESS; +      if(test->buffer) { +        test->rptr = test->buffer; /* set read pointer */ +        test->bufsize = count;    /* set total count */ +        test->rcount = count;     /* set data left to read */        } - +      else +        return EACCESS;      } -    else -      return EACCESS;    }    else {      logmsg("no slash found in path"); diff --git a/tests/server/util.c b/tests/server/util.c index 169ca5bcb..f576b9c23 100644 --- a/tests/server/util.c +++ b/tests/server/util.c @@ -194,11 +194,21 @@ void win32_cleanup(void)  /* set by the main code to point to where the test dir is */  const char *path = "."; -char *test2file(long testno) +FILE *test2fopen(long testno)  { -  static char filename[256]; +  FILE *stream; +  char filename[256]; +  /* first try the alternative, preprocessed, file */ +  msnprintf(filename, sizeof(filename), ALTTEST_DATA_PATH, path, testno); +  stream = fopen(filename, "rb"); +  if(stream) +    return stream; + +  /* then try the source version */    msnprintf(filename, sizeof(filename), TEST_DATA_PATH, path, testno); -  return filename; +  stream = fopen(filename, "rb"); + +  return stream;  }  /* diff --git a/tests/server/util.h b/tests/server/util.h index 9c3fb9f32..73f5f45f6 100644 --- a/tests/server/util.h +++ b/tests/server/util.h @@ -28,6 +28,7 @@ void logmsg(const char *msg, ...);  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" @@ -53,8 +54,9 @@ void win32_init(void);  void win32_cleanup(void);  #endif  /* USE_WINSOCK */ -/* returns the path name to the test case file */ -char *test2file(long testno); +/* fopens the test case file */ +FILE *test2fopen(long testno); +  int wait_ms(int timeout_ms);  int write_pidfile(const char *filename);  int write_portfile(const char *filename, int port);  | 
