]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
oauth: Skip call-count test for libcurl 8.20.0
authorJacob Champion <jchampion@postgresql.org>
Wed, 17 Jun 2026 16:57:59 +0000 (09:57 -0700)
committerJacob Champion <jchampion@postgresql.org>
Wed, 17 Jun 2026 16:57:59 +0000 (09:57 -0700)
The call-count test in 001_server.pl runs into a recent upstream
regression in Curl:

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

The symptom is high CPU usage on some platforms during OAuth HTTP
requests. But it looks like the fix is on track for a June 2026 release,
as part of Curl 8.21.0, so just skip the test if we happen to be using
the broken version.

Reported-by: Andrew Dunstan <andrew@dunslane.net>
Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Tested-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/CAOYmi%2B%3DyrwMSsHuNJ1V14isA4iSix5Xb3P3VEp1X0BS61MdV4A%40mail.gmail.com
Backpatch-through: 18

src/test/modules/oauth_validator/t/001_server.pl

index 0d7618a5ef1cd81bd8194af841791ae6578dac83..8941a355423135401e238fead42c5d0399c71457 100644 (file)
@@ -510,17 +510,27 @@ like(
        qr@Visit https://example\.com/ and enter the code: postgresuser@,
        "call count: stderr matches");
 
-my $count_pattern = qr/\[libpq\] total number of polls: (\d+)/;
-if (like($stderr, $count_pattern, "call count: count is printed"))
+SKIP:
 {
-       # For reference, a typical flow with two retries might take between 5-15
-       # calls to the client implementation. And while this will probably continue
-       # to change across OSes and Curl updates, we're likely in trouble if we see
-       # hundreds or thousands of calls.
-       $stderr =~ $count_pattern;
-       unless (cmp_ok($1, '<', 100, "call count is reasonably small"))
+       # Curl 8.20.0 regressed this test case:
+       #
+       #     https://github.com/curl/curl/issues/21547
+       #
+       skip 'call-count test is known to fail with libcurl 8.20.0', 2
+         if $stderr =~ m/\Qinitialized libcurl 8.20.0\E/;
+
+       my $count_pattern = qr/\[libpq\] total number of polls: (\d+)/;
+       if (like($stderr, $count_pattern, "call count: count is printed"))
        {
-               diag "full stderr:\n$stderr";
+               # For reference, a typical flow with two retries might take between 5-15
+               # calls to the client implementation. And while this will probably
+               # continue to change across OSes and Curl updates, we're likely in
+               # trouble if we see hundreds or thousands of calls.
+               $stderr =~ $count_pattern;
+               unless (cmp_ok($1, '<', 100, "call count is reasonably small"))
+               {
+                       diag "full stderr:\n$stderr";
+               }
        }
 }