]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
runtests.pl: support the nonewline attribute for the data part
authorFabian Keil <fk@fabiankeil.de>
Tue, 9 Feb 2021 13:04:32 +0000 (14:04 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 10 Jan 2022 14:54:54 +0000 (15:54 +0100)
Added to FILEFORMAT

Closes #8239

tests/FILEFORMAT.md
tests/runtests.pl
tests/server/getpart.c

index 7ba1de2a60b309b8ea993a261a73cea78368f2fa..c50d0fe595750cc6eef35157a0a84dad5732038f 100644 (file)
@@ -188,7 +188,7 @@ When using curl built with Hyper, the keywords must include HTTP or HTTPS for
 'hyper mode' to kick in and make line ending checks work for tests.
 ## `<reply>`
 
-### `<data [nocheck="yes"] [sendzero="yes"] [base64="yes"] [hex="yes"]>`
+### `<data [nocheck="yes"] [sendzero="yes"] [base64="yes"] [hex="yes"] [nonewline="yes"]>`
 
 data to be sent to the client on its request and later verified that it
 arrived safely. Set `nocheck="yes"` to prevent the test script from verifying
@@ -214,6 +214,9 @@ much sense for other sections than "data").
 `hex=yes` means that the data is a sequence of hex pairs. It will get decoded
 and used as "raw" data.
 
+`nonewline=yes` means that the last byte (the trailing newline character)
+should be cut off from the data before sending or comparing it.
+
 For FTP file listings, the `<data>` section will be used *only* if you make
 sure that there has been a CWD done first to a directory named `test-[num]`
 where [num] is the test case number. Otherwise the ftp server can't know from
index 232a8824beadf7260e9bd8345c691246f25596cd..bb1fae9beae1f57d94e5dd16b27ecd3ae18f603a 100755 (executable)
@@ -3885,6 +3885,13 @@ sub singletest {
     else {
         # check against the data section
         @reply = getpart("reply", "data");
+        if(@reply) {
+            my %hash = getpartattr("reply", "data");
+            if($hash{'nonewline'}) {
+                # cut off the final newline from the final line of the data
+                chomp($reply[$#reply]);
+            }
+        }
         # get the mode attribute
         my $filemode=$replyattr{'mode'};
         if($filemode && ($filemode eq "text") && $has_textaware) {
index 68158530b12393619961b1443c5c7ff18cc828ac..57b86c0ea2524b035ad04425e5e2460896f062ff 100644 (file)
@@ -5,7 +5,7 @@
  *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
- * Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2022, 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
@@ -323,6 +323,7 @@ int getpart(char **outbuf, size_t *outlen,
   size_t datalen;
   int in_wanted_part = 0;
   int base64 = 0;
+  int nonewline = 0;
   int error;
 
   enum {
@@ -389,6 +390,8 @@ int getpart(char **outbuf, size_t *outlen,
             if(error)
               return error;
           }
+          if(nonewline)
+            (*outlen)--;
           break;
         }
       }
@@ -406,6 +409,8 @@ int getpart(char **outbuf, size_t *outlen,
             if(error)
               return error;
           }
+          if(nonewline)
+            (*outlen)--;
           break;
         }
       }
@@ -480,6 +485,10 @@ int getpart(char **outbuf, size_t *outlen,
               /* bit rough test, but "mostly" functional, */
               /* treat wanted part data as base64 encoded */
               base64 = 1;
+          if(strstr(patt, "nonewline=")) {
+            show(("* setting nonewline\n"));
+            nonewline = 1;
+          }
         }
         continue;
       }