curl / trurl

trurl is a command line tool for URL parsing and manipulation.
https://curl.se/trurl/
Other
3.15k stars 102 forks source link

test fails if built against libcurl 8.3.0 #239

Closed abbbi closed 10 months ago

abbbi commented 11 months ago

hi there,

debian QA team has scheduled an archive wide rebuild and it seems trurl fails within its testsuite on debian/sid:

96: failed --verify --json ftp://example.org/ '' git://curl.se/ --- stdout --- expected: [{'url': 'ftp://example.org/', 'parts': {'scheme': 'ftp', 'host': 'example.org', 'path': '/'}}] got: [{'url': 'ftp://example.org/', 'parts': {'scheme': 'ftp', 'host': 'example.org', 'path': '/'}}] --- returncode --- expected: 9 got: 9 --- stderr --- expected: 'trurl error: No host part in the URL []\ntrurl error: Try trurl -h for help\n' got: 'trurl error: Malformed input to a URL function []\ntrurl error: Try trurl -h for help\n'

and:

109: failed emanuele6://curl.se/trurl '' https://example.org/ --- stdout --- expected: 'emanuele6://curl.se/trurl\nhttps://example.org/\n' got: 'emanuele6://curl.se/trurl\nhttps://example.org/\n' --- returncode --- expected: 0 got: 0 --- stderr --- expected: 'trurl note: No host part in the URL []\n' got: 'trurl note: Malformed input to a URL function []\n'

full report:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1052828

./trurl -v
trurl version 0.8 libcurl/8.3.0 [built-with 8.3.0]
features: punycode white-space zone-id url-strerror normalize-ipv4

It seems (for whatever reason) the output of trurl in stderr is not the one expected in the testsuite for both cases and i can reproduce:

root@cefix-sid-amd64-3iyj:/srv/new/trurl# ./trurl --verify --json ftp://example.org '' git://curl.se/
[
  {
    "url": "ftp://example.org/",
    "parts": {
      "scheme": "ftp",
      "host": "example.org",
      "path": "/"
    }
  }
]
trurl error: Malformed input to a URL function []
trurl error: Try trurl -h for help
jacobmealey commented 11 months ago

Hmmm it looks like something in url api may have changed in the recent curl release? If I build trurl against an older version the tests pass but when I build against 8.3.0 the tests fail in the same way described by @abbbi and our github actions use a pretty old version of curl so that's why it wasn't caught earlier.

abbbi commented 11 months ago

the changed behavior is caused by following commit in curl url api:

https://github.com/curl/curl/pull/11715/commits/b664b008f07b49336e3ea03516a7f46d13e0fec2

fix for:

https://github.com/curl/curl/issues/11714

reverting this one in libcurl and linking trurl against shields the old behavior:

./trurl: /home/abi/trl/curl/lib/.libs/libcurl.so.4: no version information available (required by ./trurl)
[
  {
    "url": "ftp://example.org/",
    "parts": {
      "scheme": "ftp",
      "host": "example.org",
      "path": "/"
    }
  }
]
trurl error: No host part in the URL []
trurl error: Try trurl -h for help
emanuele6 commented 11 months ago

It is simply getting a different error message. Since errors for those tests now differ in different versions of libcurl, and the exact errors do not matter, you could just change the stderr expectation for those tests to true:

diff --git a/tests.json b/tests.json
index 8222c14..fe48b6c 100644
--- a/tests.json
+++ b/tests.json
@@ -1488,7 +1488,7 @@
                 }
             ],
             "returncode": 9,
-            "stderr": "trurl error: No host part in the URL []\ntrurl error: Try trurl -h for help\n"
+            "stderr": true
         }
     },
     {
@@ -1744,7 +1744,7 @@
         "expected": {
             "stdout": "emanuele6://curl.se/trurl\nhttps://example.org/\n",
             "returncode": 0,
-            "stderr": "trurl note: No host part in the URL []\n"
+            "stderr": true
         }
     },
     {

This is already supported by the test runner, and will be satisfied if the command results in anything being written to stderr instead of exactly "trurl error: No host part in the URL []\ntrurl error: Try trurl -h for help\n". (it will only not be satisfied if nothing is written to stderr)

abbbi commented 11 months ago

@emanuele6 thanks, i just added this patch to the debian package for now. PR (#240)