gentoo/dev-perl/Fuse/files/Fuse-0.16.1-tempdir-override.patch
Kent Fredric b4afbc116a
dev-perl/Fuse: -r bump for various toolchain love and bug fixes
- Fix incorrect LICENSE
- Use sys-fs/fuse:0 as the code doesn't bind against fuse:3, even if
  present.
- Strip unwanted tests
- Disable parallel testing (has a defined order where an script ensures
  the "mount" test is run before all others, and an "unmount" script run
  at the end for cleanup, and jumbling this order messes everything up.
- Fix tests failing to load without '.' in @INC
- Patch test code to work in "${T}" instead of /tmp/, and guard against
  lots of problems with bad path handling that could fail due to shell
  interpolation, as well as avoiding a few unneeded calls to dumb things
  like qx{cat foo} which works better done natively in perl
- Borrow debians ioctl patch which may be tripping up musl
- Ensure CFLAGS passed to make/compiler
- Avoid running test suite under FEATURES="usersandbox" as the need to
  run fuse and mount filesystems for testing

Bug: https://bugs.gentoo.org/699664
Bug: https://bugs.gentoo.org/712738
Bug: https://bugs.gentoo.org/720770
Package-Manager: Portage-3.0.4, Repoman-3.0.1
Signed-off-by: Kent Fredric <kentnl@gentoo.org>
2020-09-18 16:30:49 +12:00

163 lines
5.3 KiB
Diff

From bbb2a0de816f0cb506a0bdb34c9ca7ba94e53f9a Mon Sep 17 00:00:00 2001
From: Kent Fredric <kentnl@gentoo.org>
Date: Fri, 18 Sep 2020 04:53:23 +1200
Subject: Enable overriding tempdir used for base of fuse mounts
- Add 5 new external variables to control locations for mountpoints,
scratch directories, pid files and logs:
- FUSE_TEMPDIR (weak support) : Change the base directory for various
path defaults
- FUSE_MOUNTPOINT : Change where the test filesystem is mounted
- FUSE_TESTMOUNT : Change the path to the "fusetest-" directory used
in various tests
- FUSE_PIDFILE : Change the path to the PID file for the fuse daemon
- FUSE_LOGFILE : Change the path to the log file for the fuse daemon
- Convert stringy $_opts into a proper array to avoid path escaping
headaches.
- Use `opendir` to check existence/traversability of the mountpoint
instead of a cruddy stringy system($string) call, avoiding need for
stdout redirection and dangerous path handling, as well as removing
the need for POSIX module hacks to check the exit status of "ls"
- Use array based invocation of the $_loop script to avoid problems with
path handling/escaping
- Use list-mode system(@args) for `rm` call to avoid dangerous
nightmares in path handling/escaping.
- Use native perl file IO for reading pid files instead of consuming the
output of a system("cat"), both avoiding a lot of silly shenanigans
with IPC and path handling/escaping
Signed-off-by: Kent Fredric <kentnl@gentoo.org>
---
examples/loopback.pl | 7 ++++++-
test/helper.pm | 40 ++++++++++++++++++++++++++++++----------
test/s/mount.t | 24 +++++++++++++++++-------
3 files changed, 53 insertions(+), 18 deletions(-)
diff --git a/examples/loopback.pl b/examples/loopback.pl
index ef53e9d..c1ddfc2 100755
--- a/examples/loopback.pl
+++ b/examples/loopback.pl
@@ -65,7 +65,12 @@ GetOptions(
'logfile=s' => \$logfile,
) || die('Error parsing options');
-sub fixup { return "/tmp/fusetest-" . $ENV{LOGNAME} . shift }
+sub fixup {
+ my $tempdir = $ENV{FUSE_TESTMOUNT};
+ $tempdir = "/tmp/fusetest-" . $ENV{LOGNAME}
+ unless defined $tempdir and length $tempdir;
+ return $tempdir . shift;
+}
sub x_getattr {
my ($file) = fixup(shift);
diff --git a/test/helper.pm b/test/helper.pm
index f210105..f24f2a4 100644
--- a/test/helper.pm
+++ b/test/helper.pm
@@ -4,15 +4,37 @@ package # avoid cpan indexing
use strict;
use Exporter;
use Config;
-use POSIX qw(WEXITSTATUS);
our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
@ISA = "Exporter";
-@EXPORT_OK = qw($_loop $_opts $_point $_pidfile $_real);
-my $tmp = -d '/private' ? '/private/tmp' : '/tmp';
-our($_loop, $_point, $_pidfile, $_real, $_opts) = ('examples/loopback.pl',"$tmp/fusemnt-".$ENV{LOGNAME},$ENV{'PWD'} . "/test/s/mounted.pid","$tmp/fusetest-".$ENV{LOGNAME}, '');
-$_opts = ' --pidfile ' . $_pidfile;
-$_opts .= ' --logfile /tmp/fusemnt.log';
-$_opts .= $Config{useithreads} ? ' --use-threads' : '';
+@EXPORT_OK = qw($_loop @_opts $_point $_pidfile $_real);
+
+our $_loop = 'examples/loopback.pl';
+my $tmp = $ENV{FUSE_TEMPDIR};
+$tmp = -d '/private' ? '/private/tmp' : '/tmp'
+ unless defined $tmp and length $tmp;
+
+our $_point = $ENV{FUSE_MOUNTPOINT};
+$_point = "$tmp/fusemnt-$ENV{LOGNAME}"
+ unless defined $_point and length $_point;
+
+our $_pidfile = $ENV{FUSE_PIDFILE};
+$_pidfile = "$ENV{PWD}/test/s/mounted.pid"
+ unless defined $_pidfile and length $_pidfile;
+
+our $_real = $ENV{FUSE_TESTMOUNT};
+$_real = "$tmp/fusetest-$ENV{LOGNAME}"
+ unless defined $_real and length $_real;
+
+our $_logfile = $ENV{FUSE_LOGFILE};
+$_logfile = "/tmp/fusemnt.log"
+ unless defined $_logfile and length $_logfile;
+
+our @_opts = (
+ '--pidfile' => $_pidfile,
+ '--logfile' => $_logfile,
+ ( $Config{useithreads} ? '--use-threads' : () ),
+);
+
if($0 !~ qr|s/u?mount\.t$|) {
my ($reject) = 1;
if(open my $fh, '<', $_pidfile) {
@@ -27,8 +49,6 @@ if($0 !~ qr|s/u?mount\.t$|) {
}
}
}
- system("ls $_point >/dev/null");
- $reject = 1 if (POSIX::WEXITSTATUS($?));
- die "not properly mounted\n" if $reject;
+ opendir my $dfh, $_point or die "$_point not properly mounted: $!";
}
1;
diff --git a/test/s/mount.t b/test/s/mount.t
index 0f545b7..3bf65c6 100644
--- a/test/s/mount.t
+++ b/test/s/mount.t
@@ -1,6 +1,6 @@
#!/usr/bin/perl -w
use lib './test/';
-use helper qw($_point $_loop $_opts $_real $_pidfile);
+use helper qw($_point $_loop @_opts $_real $_pidfile);
use strict;
use Errno qw(:POSIX);
use Test::More tests => 3;
@@ -21,7 +21,7 @@ open REALSTDOUT, '>&STDOUT';
open REALSTDERR, '>&STDERR';
open STDOUT, '>', '/dev/null';
open STDERR, '>&', \*STDOUT;
-system("perl -Iblib/lib -Iblib/arch $_loop $_opts $_point");
+system('perl','-Iblib/lib','-Iblib/arch',$_loop, @_opts, $_point);
open STDOUT, '>&', \*REALSTDOUT;
open STDERR, '>&', \*REALSTDERR;
@@ -33,10 +33,20 @@ while ($count++ < 50 && !$success) {
diag "Mounted in ", $count/10, " secs";
ok($success,"mount succeeded");
-system("rm -rf $_real");
-unless($success) {
- kill('INT',`cat $_pidfile`);
- unlink($_pidfile);
-} else {
+
+system("rm","-vrf",$_real);
+if ($success) {
mkdir($_real);
+} else {
+ my $pid;
+ if ( open my $fh, '<', "$_pidfile" ) {
+ local $/ = undef;
+ $pid = scalar <$fh>;
+ } else {
+ warn "Can't read pidfile $_pidfile, $!"
+ }
+ if ( $pid ) {
+ kill('INT',$pid);
+ }
+ unlink($_pidfile);
}
--
2.28.0