Open ballapete opened 3 weeks ago
Listening socket's path name is too long.
In MacPorts the test programmes run in the build directory which is quite long from the start:
/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-fcgi/p5.34-fcgi/work/FCGI-0.82
≈150 characters. In C header files I can see a limit:
* [XSI] Definitions for UNIX IPC domain.
*/
struct sockaddr_un {
unsigned char sun_len; /* sockaddr len including null */
sa_family_t sun_family; /* [XSI] AF_UNIX */
char sun_path[104]; /* [XSI] path name (gag) */
};
If the sockets are created in the same directory where the code or the test files reside then a crash will happen with MacPorts. So it's probably not a problem with C data types as I presumed…
Sounds like sockets should be created in $TMPDIR not in the current directory.
I found a test that checks for the length of the pathname to te socket:
---> Testing p5.34-test-requiresinternet
Executing: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-test-requiresinternet/p5.34-test-requiresinternet/work/Test-RequiresInternet-0.05" && /usr/bin/make test
PERL_DL_NONLAZY=1 "/opt/local/bin/perl5.34" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
# Testing Test::RequiresInternet 0.05, Perl 5.034003, /opt/local/bin/perl5.34
t/00_load.t ............ ok
t/01_getserv.t ......... ok
t/02_multiple_hosts.t .. ok
t/03_badhost.t ......... skipped: no host: foobar
t/04_env.t ............. skipped: NO_NETWORK_TESTING
t/05_badarg.t .......... ok
t/06_badport.t ......... skipped: Could not find a port number for foobar
All tests successful.
Files=7, Tests=4, 1 wallclock secs ( 0.04 usr 0.01 sys + 0.59 cusr 0.09 csys = 0.73 CPU)
Result: PASS
---> Computing dependencies for p5.34-io.
---> Testing p5.34-io
Executing: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-io/p5.34-io/work/IO-1.55" && /usr/bin/make test
"/opt/local/bin/perl5.34" -MExtUtils::Command::MM -e 'cp_nonempty' -- IO.bs blib/arch/auto/IO/IO.bs 644
PERL_DL_NONLAZY=1 "/opt/local/bin/perl5.34" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches; test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/cachepropagate-tcp.t ... ok
t/cachepropagate-udp.t ... ok
Path length (162) is longer than maximum supported length (104) and will be truncated at t/cachepropagate-unix.t line 26.
t/cachepropagate-unix.t .. skipped: socketpath too long for sockaddr_un
t/gh17447.t .............. ok
t/IO.t ................... ok
t/io_const.t ............. ok
t/io_dir.t ............... ok
t/io_dup.t ............... ok
t/io_file.t .............. ok
t/io_file_export.t ....... ok
t/io_getline.t ........... ok
t/io_handle.t ............ ok
t/io_leak.t .............. skipped: No XS::APItest::sv_count() available
t/io_linenum.t ........... ok
t/io_multihomed.t ........ ok
t/io_pipe.t .............. ok
t/io_poll.t .............. ok
t/io_sel.t ............... ok
t/io_sock.t .............. ok
t/io_sock_errstr.t ....... ok
t/io_taint.t ............. ok
t/io_tell.t .............. ok
t/io_udp.t ............... ok
t/io_unix.t .............. ok
t/io_utf8.t .............. ok
t/io_utf8argv.t .......... ok
t/io_xs.t ................ ok
All tests successful.
Files=27, Tests=16670, 27 wallclock secs ( 0.82 usr 0.06 sys + 1.59 cusr 0.31 csys = 2.78 CPU)
Result: PASS
I found another software that fails tests in MacPorts: PostgreSQL.
The module builds and installs fine, but tests fail (performing them inside the MacPorts package manager, port):
time port -vs test p5.34-fcgi p5.38-fcgi ---> Computing dependencies for p5.34-fcgi. ---> Fetching distfiles for p5.34-fcgi ---> Verifying checksums for p5.34-fcgi ---> Checksumming FCGI-0.82.tar.gz ---> Extracting p5.34-fcgi ---> Extracting FCGI-0.82.tar.gz Executing: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-fcgi/p5.34-fcgi/work" && /usr/bin/gzip -dc '/opt/local/var/macports/distfiles/perl5/FCGI-0.82.tar.gz' | /usr/bin/tar -xf - ---> Configuring p5.34-fcgi Executing: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-fcgi/p5.34-fcgi/work/FCGI-0.82" && /opt/local/bin/perl5.34 Makefile.PL INSTALLDIRS=vendor CC="/usr/bin/clang" LD="/usr/bin/clang" Checking if your kit is complete... Looks good Generating a Unix-style Makefile Writing Makefile for FCGI Writing MYMETA.yml and MYMETA.json Running ./configure for you Please read configure.readme for information on how to run it yourself checking for gcc... /usr/bin/cc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether the compiler supports GNU C... yes checking whether /usr/bin/cc accepts -g... yes checking for /usr/bin/cc option to enable C11 features... none needed checking how to run the C preprocessor... /usr/bin/cc -E checking for stdio.h... yes checking for stdlib.h... yes checking for string.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for strings.h... yes checking for sys/stat.h... yes checking for sys/types.h... yes checking for unistd.h... yes checking for grep that handles long lines and -e... /opt/local/bin/ggrep checking for egrep... /opt/local/bin/ggrep -E checking for ssize_t... yes checking for sun_len in sys/un.h... yes checking for fpos_t in stdio.h... yes checking for sys/socket.h... yes checking for netdb.h... yes checking for netinet/in.h... yes checking for arpa/inet.h... yes checking for sys/time.h... yes checking for limits.h... yes checking for sys/param.h... yes checking for unistd.h... (cached) yes checking for a fileno() prototype in stdio.h... yes checking whether cross-process locking is required by accept()... no checking whether va_arg(arg, long double) crashes the compiler... no checking for an ANSI C-conforming const... yes configure: creating ./config.status config.status: creating fcgi_config.h Fixing flags in Makefile ---> Patching Makefile: /^CCFLAGS =/s|$| -isysroot/| ---> Patching Makefile: /^OTHERLDFLAGS =/s|$| -Wl,-syslibroot,/| ---> Patching Makefile: s|^(CC =).|\1 /usr/bin/clang| ---> Building p5.34-fcgi Executing: cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-fcgi/p5.34-fcgi/work/FCGI-0.82" && /usr/bin/make -j8 -w all make: Entering directory `/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-fcgi/p5.34-fcgi/work/FCGI-0.82' "/opt/local/bin/perl5.34" "/opt/local/lib/perl5/5.34/ExtUtils/xsubpp" -typemap '/opt/local/lib/perl5/5.34/ExtUtils/typemap' -typemap '/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_perl_p5-fcgi/p5.34-fcgi/work/FCGI-0.82/typemap' FCGI.xs > FCGI.xsc Running Mkbootstrap for FCGI () /usr/bin/clang -c -I. -fno-common -DPERL_DARWIN -pipe -Os -fno-strict-aliasing -fstack-protector-strong -I/opt/local/include -DPERL_USE_SAFE_PUTENV -isysroot/ -O3 -DVERSION="0.82" -DXS_VERSION="0.82" "-I/opt/local/lib/perl5/5.34/darwin-thread-multi-2level/CORE" fcgiapp.c /usr/bin/clang -c -I. -fno-common -DPERL_DARWIN -pipe -Os -fno-strict-aliasing -fstack-protector-strong -I/opt/local/include -DPERL_USE_SAFE_PUTENV -isysroot/ -O3 -DVERSION="0.82" -DXS_VERSION="0.82" "-I/opt/local/lib/perl5/5.34/darwin-thread-multi-2level/CORE" os_unix.c chmod 644 "FCGI.bs" "/opt/local/bin/perl5.34" -MExtUtils::Command::MM -e 'cp_nonempty' -- FCGI.bs blib/arch/auto/FCGI/FCGI.bs 644 cp FCGI.pm blib/arch/FCGI.pm os_unix.c:1173:70: warning: passing 'int ' to parameter of type 'socklen_t ' (aka 'unsigned int ') converts between pointers to integer types with different sign [-Wpointer-sign] socket = accept(listen_sock, (struct sockaddr )&sa, &len); ^~~~ /usr/include/sys/socket.h:681:69: note: passing argument to parameter here int accept(int, struct sockaddr __restrict, socklen_t restrict) ^ os_unix.c:1273:51: warning: passing 'int ' to parameter of type 'socklen_t ' (aka 'unsigned int ') converts between pointers to integer types with different sign [-Wpointer-sign] if (getpeername(sock, (struct sockaddr )&sa, &len) != 0 && errno == ENOTCONN) { ^~~~ /usr/include/sys/socket.h:685:74: note: passing argument to parameter here int getpeername(int, struct sockaddr * restrict, socklen_t * __restrict) ^ mv FCGI.xsc FCGI.c /usr/bin/clang -c -I. -fno-common -DPERL_DARWIN -pipe -Os -fno-strict-aliasing -fstack-protector-strong -I/opt/local/include -DPERL_USE_SAFE_PUTENV -isysroot/ -O3 -DVERSION="0.82" -DXS_VERSION="0.82" "-I/opt/local/lib/perl5/5.34/darwin-thread-multi-2level/CORE" FCGI.c 2 warnings generated. FCGI.xs:187:19: warning: using the result of an assignment as a condition without parentheses [-Wparentheses] if (was_bound = request->bound)