From 6a6773becc3c71068fa3867678d74aa413fd684a Mon Sep 17 00:00:00 2001 From: Jacob Champion Date: Mon, 15 Jun 2026 14:48:17 -0700 Subject: [PATCH v2 3/4] oauth: Skip call-count test for libcurl 8.20.0 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 Reported-by: Tom Lane Discussion: https://postgr.es/m/CAOYmi%2B%3DyrwMSsHuNJ1V14isA4iSix5Xb3P3VEp1X0BS61MdV4A%40mail.gmail.com --- .../modules/oauth_validator/t/001_server.pl | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/test/modules/oauth_validator/t/001_server.pl b/src/test/modules/oauth_validator/t/001_server.pl index 0d7618a5ef1..6c93fe3bc4d 100644 --- a/src/test/modules/oauth_validator/t/001_server.pl +++ b/src/test/modules/oauth_validator/t/001_server.pl @@ -510,17 +510,30 @@ 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 + # + my ($version, $verr) = + run_command([ "oauth_hook_client", "--curl-version" ]); + + skip 'call-count test is known to fail with libcurl 8.20.0', 2 + if $version =~ m/\Qlibcurl 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"; + } } } -- 2.34.1