Hi,

sorry to bring this old thread back to light.

On Tue, Oct 08, 2024 at 12:55:00AM +0300, Heikki Linnakangas wrote:
> In the meanwhile, here is a one more version of the test patches, with a
> SKIP that checks that IO::Socket::UNIX works.

I've only realized recently, but those postmaster tap tests have been
failing during Debian package build (see e.g. [0]) on hurd-i386/amd64 with

|send: Cannot determine peer address at t/002_connection_limits.pl line 136.

This wasn't widely noticed because both architectures are on the (not
small) list of arches where test suite failures are ignored[1] but I
think nowadays it is the only (or one of the very few) remaining
issue(s). I encountered it now when I tried to turn on
--enable-tap-tests on fruitcrow.

The Perl code run through strace shows it runs connect(), then
getpeername() and then sendto(), as seen here[2]. However, getpeername()
on Unix sockets is not implemented on the Hurd yet[3] (granted, FSVO
"yet", the issue is 20 years old). I've opened an issue in Perl asking
to work around this here: https://github.com/Perl/perl5/issues/24195

Would something like the attached be acceptable in the interim to have
this test be skipped on the Hurd as well?


Michael

[0] 
https://buildd.debian.org/status/fetch.php?pkg=postgresql-18&arch=hurd-amd64&ver=18.2-1&stamp=1770913648&raw=0
[1] 
https://salsa.debian.org/postgresql/postgresql-common/-/blob/master/server/postgresql.mk?ref_type=heads#L164
[2] https://github.com/Perl/perl5/blob/blead/dist/IO/lib/IO/Socket.pm#L294
[3] http://savannah.gnu.org/bugs/?func=detailitem&item_id=12434
From b5638c1959308665486ca9241997d48cae1485eb Mon Sep 17 00:00:00 2001
From: Michael Banck <[email protected]>
Date: Fri, 13 Feb 2026 16:34:45 +0100
Subject: [PATCH v1] Add an additional check in raw_connect_works for the Hurd.

The function raw_connect_works() tests whether raw sockets work for the
postmaster TAP tests. While creating the socket does work on the Hurd,
the TAP test does a subsequent send() on it which fails on the Hurd with
"Cannot determine peer address". To circumvent this, try a send() and
catch this error as well.
---
 src/test/perl/PostgreSQL/Test/Cluster.pm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/test/perl/PostgreSQL/Test/Cluster.pm b/src/test/perl/PostgreSQL/Test/Cluster.pm
index e267ba868fe..ee3170660fc 100644
--- a/src/test/perl/PostgreSQL/Test/Cluster.pm
+++ b/src/test/perl/PostgreSQL/Test/Cluster.pm
@@ -380,9 +380,10 @@ sub raw_connect_works
 	{
 		eval {
 			my $sock = $self->raw_connect();
+			$sock->send('foo');
 			$sock->close();
 		};
-		if ($@ =~ /not implemented/)
+		if ($@ =~ /not implemented/ or $@ =~ /Cannot determine peer address/)
 		{
 			diag "IO::Socket::UNIX does not work: $@";
 			return 0;
-- 
2.39.5

Reply via email to