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
