Message ID | 20201031115601.157591-4-omosnace@redhat.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Test all filesystems by default | expand |
On Sat, 2020-10-31 at 12:56 +0100, Ondrej Mosnacek wrote: > Run [fs_]filesystem tests always for all common filesystems (xfs, > ext4, > jfs, vfat). Use symlinks to achieve this without changing much code > while still allowing to run the test script directly (optionally > specifying the filesystem type). These ran okay using 'make test', however when I moved to tests/filesystem and ran ./test the fs_type was .. Also when I moved to filesystems/xfs and ran ./test, the move mount failed because mount does not like sym links and resolves to realpath. I've had a go at fixing these and I've noted the changes below (please feel free to rework). The fs_filesystem also has the same issues. > > Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com> > --- > tests/Makefile | 8 ++++++-- > tests/filesystem/ext4 | 1 + > tests/filesystem/jfs | 1 + > tests/filesystem/test | 14 ++++++++++++-- > tests/filesystem/vfat | 1 + > tests/filesystem/xfs | 1 + > tests/fs_filesystem/ext4 | 1 + > tests/fs_filesystem/jfs | 1 + > tests/fs_filesystem/test | 14 ++++++++++++-- > tests/fs_filesystem/vfat | 1 + > tests/fs_filesystem/xfs | 1 + > 11 files changed, 38 insertions(+), 6 deletions(-) > create mode 120000 tests/filesystem/ext4 > create mode 120000 tests/filesystem/jfs > create mode 120000 tests/filesystem/vfat > create mode 120000 tests/filesystem/xfs > create mode 120000 tests/fs_filesystem/ext4 > create mode 120000 tests/fs_filesystem/jfs > create mode 120000 tests/fs_filesystem/vfat > create mode 120000 tests/fs_filesystem/xfs > > diff --git a/tests/Makefile b/tests/Makefile > index 001639b..b441031 100644 > --- a/tests/Makefile > +++ b/tests/Makefile > @@ -4,6 +4,7 @@ SBINDIR ?= $(PREFIX)/sbin > POLDEV ?= $(PREFIX)/share/selinux/devel > INCLUDEDIR ?= $(PREFIX)/include > SELINUXFS ?= /sys/fs/selinux > +FILESYSTEMS ?= ext4 xfs jfs vfat > > export CFLAGS+=-g -O0 -Wall -D_GNU_SOURCE > > @@ -17,6 +18,9 @@ MOD_POL_VERS := $(shell $(CHECKMODULE) -V |cut -f 2 > -d '-') > MAX_KERNEL_POLICY := $(shell cat $(SELINUXFS)/policyvers) > POL_TYPE := $(shell ./pol_detect $(SELINUXFS)) > > +# Filter out unavailable filesystems > +FILESYSTEMS := $(foreach fs,$(FILESYSTEMS),$(shell modprobe $(fs) && > echo $(fs))) > + > SUBDIRS:= domain_trans entrypoint execshare exectrace > execute_no_trans \ > fdreceive inherit link mkdir msg open ptrace readlink relabel > rename \ > rxdir sem setattr setnice shm sigkill stat sysctl task_create \ > @@ -111,7 +115,7 @@ SUBDIRS += lockdown > endif > > ifeq ($(shell grep -q filesystem > $(POLDEV)/include/support/all_perms.spt && echo true),true) > -SUBDIRS += filesystem > +SUBDIRS += $(addprefix filesystem/,$(FILESYSTEMS)) > ifeq ($(shell grep -q all_filesystem_perms.*watch > $(POLDEV)/include/support/all_perms.spt && echo true),true) > export CFLAGS += -DHAVE_FS_WATCH_PERM > endif > @@ -119,7 +123,7 @@ endif > > ifeq ($(shell grep -q filesystem > $(POLDEV)/include/support/all_perms.spt && echo true),true) > ifneq ($(shell ./kvercmp $$(uname -r) 5.2),-1) > -SUBDIRS += fs_filesystem > +SUBDIRS += $(addprefix fs_filesystem/,$(FILESYSTEMS)) > endif > endif > > diff --git a/tests/filesystem/ext4 b/tests/filesystem/ext4 > new file mode 120000 > index 0000000..945c9b4 > --- /dev/null > +++ b/tests/filesystem/ext4 > @@ -0,0 +1 @@ > +. > \ No newline at end of file > diff --git a/tests/filesystem/jfs b/tests/filesystem/jfs > new file mode 120000 > index 0000000..945c9b4 > --- /dev/null > +++ b/tests/filesystem/jfs > @@ -0,0 +1 @@ > +. > \ No newline at end of file > diff --git a/tests/filesystem/test b/tests/filesystem/test > index 7d4654d..6b37b76 100755 > --- a/tests/filesystem/test > +++ b/tests/filesystem/test > @@ -12,6 +12,17 @@ BEGIN { > $basedir = $0; > $basedir =~ s|(.*)/[^/]*|$1|; > > + # extract test_name and move up one dir if started from a subdir > + $test_name = $basedir; > + $test_name =~ s|.*/([^/]*)|$1|; > + if ( $test_name eq "fs_filesystem" ) { > + $fs_type = " "; > + } > + else { > + $fs_type = $test_name; > + $basedir =~ s|(.*)/[^/]*|$1|; > + } > + I changed the above to this: # extract test_name and move up one dir if started from a subdir $test_name = $basedir; $test_name =~ s|.*/([^/]*)|$1|; if ( $test_name eq "." ) { $cwd = `pwd 2>/dev/null`; chomp($cwd); my($d_name) = ($cwd =~ m#/([^/]+)$#); if ( $d_name eq "filesystem" ) { $fs_type = " "; } else { $fs_type = $d_name; } } else { $fs_type = $test_name; $basedir =~ s|(.*)/[^/]*|$1|; } > # Options: -v Verbose, -e enable udisks(8) daemon, -f filesystem > type > $v = " "; > $disable_udisks = 1; > @@ -20,8 +31,7 @@ BEGIN { > $nfs_enabled = 0; > $vfat_enabled = 0; > > - $i = 0; > - $fs_type = " "; > + $i = 0; > foreach $arg (@ARGV) { > if ( $arg eq "-v" ) { > $v = $arg; Also to fix the move mount sym link problem I changed: # mount(2) MS_BIND | MS_PRIVATE requires an absolute path to a private mount # point before MS_MOVE $cwd = `pwd 2>/dev/null`; chomp($cwd); if ( $basedir eq "." ) { $target = `realpath -e $cwd`; chomp($target); $private_path = "$target/mntpoint"; } else { $private_path = "$cwd/$basedir/mntpoint"; } The reason the move mount check failed was because I was passing the original sym link paths such as: ..../tests/filesystem/vfat to mount.c that had a compare to check if moved. However it was mounted on the real path (..../tests/filesystem/..) not the sym link. > diff --git a/tests/filesystem/vfat b/tests/filesystem/vfat > new file mode 120000 > index 0000000..945c9b4 > --- /dev/null > +++ b/tests/filesystem/vfat > @@ -0,0 +1 @@ > +. > \ No newline at end of file > diff --git a/tests/filesystem/xfs b/tests/filesystem/xfs > new file mode 120000 > index 0000000..945c9b4 > --- /dev/null > +++ b/tests/filesystem/xfs > @@ -0,0 +1 @@ > +. > \ No newline at end of file > diff --git a/tests/fs_filesystem/ext4 b/tests/fs_filesystem/ext4 > new file mode 120000 > index 0000000..945c9b4 > --- /dev/null > +++ b/tests/fs_filesystem/ext4 > @@ -0,0 +1 @@ > +. > \ No newline at end of file > diff --git a/tests/fs_filesystem/jfs b/tests/fs_filesystem/jfs > new file mode 120000 > index 0000000..945c9b4 > --- /dev/null > +++ b/tests/fs_filesystem/jfs > @@ -0,0 +1 @@ > +. > \ No newline at end of file > diff --git a/tests/fs_filesystem/test b/tests/fs_filesystem/test > index 5dedf83..ec71d92 100755 > --- a/tests/fs_filesystem/test > +++ b/tests/fs_filesystem/test > @@ -12,6 +12,17 @@ BEGIN { > $basedir = $0; > $basedir =~ s|(.*)/[^/]*|$1|; > > + # extract test_name and move up one dir if started from a subdir > + $test_name = $basedir; > + $test_name =~ s|.*/([^/]*)|$1|; > + if ( $test_name eq "fs_filesystem" ) { > + $fs_type = " "; > + } > + else { > + $fs_type = $test_name; > + $basedir =~ s|(.*)/[^/]*|$1|; > + } > + > # Some code in tests/filesystem is reused > $filesystem_dir = "$basedir/../filesystem"; > > @@ -23,8 +34,7 @@ BEGIN { > $nfs_enabled = 0; > $vfat_enabled = 0; > > - $i = 0; > - $fs_type = " "; > + $i = 0; > foreach $arg (@ARGV) { > if ( $arg eq "-v" ) { > $v = $arg; > diff --git a/tests/fs_filesystem/vfat b/tests/fs_filesystem/vfat > new file mode 120000 > index 0000000..945c9b4 > --- /dev/null > +++ b/tests/fs_filesystem/vfat > @@ -0,0 +1 @@ > +. > \ No newline at end of file > diff --git a/tests/fs_filesystem/xfs b/tests/fs_filesystem/xfs > new file mode 120000 > index 0000000..945c9b4 > --- /dev/null > +++ b/tests/fs_filesystem/xfs > @@ -0,0 +1 @@ > +. > \ No newline at end of file
On Sat, Oct 31, 2020 at 7:05 PM Richard Haines <richard_c_haines@btinternet.com> wrote: > On Sat, 2020-10-31 at 12:56 +0100, Ondrej Mosnacek wrote: > > Run [fs_]filesystem tests always for all common filesystems (xfs, > > ext4, > > jfs, vfat). Use symlinks to achieve this without changing much code > > while still allowing to run the test script directly (optionally > > specifying the filesystem type). > > These ran okay using 'make test', however when I moved to > tests/filesystem and ran ./test the fs_type was .. Also when I moved to > filesystems/xfs and ran ./test, the move mount failed because mount > does not like sym links and resolves to realpath. > > I've had a go at fixing these and I've noted the changes below (please > feel free to rework). The fs_filesystem also has the same issues. Heh, I should've tried it before making that claim :) > > > > Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com> > > --- > > tests/Makefile | 8 ++++++-- > > tests/filesystem/ext4 | 1 + > > tests/filesystem/jfs | 1 + > > tests/filesystem/test | 14 ++++++++++++-- > > tests/filesystem/vfat | 1 + > > tests/filesystem/xfs | 1 + > > tests/fs_filesystem/ext4 | 1 + > > tests/fs_filesystem/jfs | 1 + > > tests/fs_filesystem/test | 14 ++++++++++++-- > > tests/fs_filesystem/vfat | 1 + > > tests/fs_filesystem/xfs | 1 + > > 11 files changed, 38 insertions(+), 6 deletions(-) > > create mode 120000 tests/filesystem/ext4 > > create mode 120000 tests/filesystem/jfs > > create mode 120000 tests/filesystem/vfat > > create mode 120000 tests/filesystem/xfs > > create mode 120000 tests/fs_filesystem/ext4 > > create mode 120000 tests/fs_filesystem/jfs > > create mode 120000 tests/fs_filesystem/vfat > > create mode 120000 tests/fs_filesystem/xfs > > [...] > > diff --git a/tests/filesystem/test b/tests/filesystem/test > > index 7d4654d..6b37b76 100755 > > --- a/tests/filesystem/test > > +++ b/tests/filesystem/test > > @@ -12,6 +12,17 @@ BEGIN { > > $basedir = $0; > > $basedir =~ s|(.*)/[^/]*|$1|; > > > > + # extract test_name and move up one dir if started from a subdir > > + $test_name = $basedir; > > + $test_name =~ s|.*/([^/]*)|$1|; > > + if ( $test_name eq "fs_filesystem" ) { > > + $fs_type = " "; > > + } > > + else { > > + $fs_type = $test_name; > > + $basedir =~ s|(.*)/[^/]*|$1|; > > + } > > + > > I changed the above to this: > > # extract test_name and move up one dir if started from a subdir > $test_name = $basedir; > $test_name =~ s|.*/([^/]*)|$1|; > if ( $test_name eq "." ) { > $cwd = `pwd 2>/dev/null`; > chomp($cwd); > my($d_name) = ($cwd =~ m#/([^/]+)$#); > if ( $d_name eq "filesystem" ) { > $fs_type = " "; > } > else { > $fs_type = $d_name; > } > } > else { > $fs_type = $test_name; > $basedir =~ s|(.*)/[^/]*|$1|; > } Yes, I'll need to use something similar. Thanks! > > > # Options: -v Verbose, -e enable udisks(8) daemon, -f filesystem > > type > > $v = " "; > > $disable_udisks = 1; > > @@ -20,8 +31,7 @@ BEGIN { > > $nfs_enabled = 0; > > $vfat_enabled = 0; > > > > - $i = 0; > > - $fs_type = " "; > > + $i = 0; > > foreach $arg (@ARGV) { > > if ( $arg eq "-v" ) { > > $v = $arg; > > > > Also to fix the move mount sym link problem I changed: > > # mount(2) MS_BIND | MS_PRIVATE requires an absolute path to a private > mount > # point before MS_MOVE > $cwd = `pwd 2>/dev/null`; > chomp($cwd); > if ( $basedir eq "." ) { > $target = `realpath -e $cwd`; > chomp($target); > $private_path = "$target/mntpoint"; > } > else { > $private_path = "$cwd/$basedir/mntpoint"; > } > > The reason the move mount check failed was because I was passing the > original sym link paths such as: ..../tests/filesystem/vfat to mount.c > that had a compare to check if moved. However it was mounted on the > real path (..../tests/filesystem/..) not the sym link. I think I might have a simpler way to solve this... I'll have to try it.
diff --git a/tests/Makefile b/tests/Makefile index 001639b..b441031 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -4,6 +4,7 @@ SBINDIR ?= $(PREFIX)/sbin POLDEV ?= $(PREFIX)/share/selinux/devel INCLUDEDIR ?= $(PREFIX)/include SELINUXFS ?= /sys/fs/selinux +FILESYSTEMS ?= ext4 xfs jfs vfat export CFLAGS+=-g -O0 -Wall -D_GNU_SOURCE @@ -17,6 +18,9 @@ MOD_POL_VERS := $(shell $(CHECKMODULE) -V |cut -f 2 -d '-') MAX_KERNEL_POLICY := $(shell cat $(SELINUXFS)/policyvers) POL_TYPE := $(shell ./pol_detect $(SELINUXFS)) +# Filter out unavailable filesystems +FILESYSTEMS := $(foreach fs,$(FILESYSTEMS),$(shell modprobe $(fs) && echo $(fs))) + SUBDIRS:= domain_trans entrypoint execshare exectrace execute_no_trans \ fdreceive inherit link mkdir msg open ptrace readlink relabel rename \ rxdir sem setattr setnice shm sigkill stat sysctl task_create \ @@ -111,7 +115,7 @@ SUBDIRS += lockdown endif ifeq ($(shell grep -q filesystem $(POLDEV)/include/support/all_perms.spt && echo true),true) -SUBDIRS += filesystem +SUBDIRS += $(addprefix filesystem/,$(FILESYSTEMS)) ifeq ($(shell grep -q all_filesystem_perms.*watch $(POLDEV)/include/support/all_perms.spt && echo true),true) export CFLAGS += -DHAVE_FS_WATCH_PERM endif @@ -119,7 +123,7 @@ endif ifeq ($(shell grep -q filesystem $(POLDEV)/include/support/all_perms.spt && echo true),true) ifneq ($(shell ./kvercmp $$(uname -r) 5.2),-1) -SUBDIRS += fs_filesystem +SUBDIRS += $(addprefix fs_filesystem/,$(FILESYSTEMS)) endif endif diff --git a/tests/filesystem/ext4 b/tests/filesystem/ext4 new file mode 120000 index 0000000..945c9b4 --- /dev/null +++ b/tests/filesystem/ext4 @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/tests/filesystem/jfs b/tests/filesystem/jfs new file mode 120000 index 0000000..945c9b4 --- /dev/null +++ b/tests/filesystem/jfs @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/tests/filesystem/test b/tests/filesystem/test index 7d4654d..6b37b76 100755 --- a/tests/filesystem/test +++ b/tests/filesystem/test @@ -12,6 +12,17 @@ BEGIN { $basedir = $0; $basedir =~ s|(.*)/[^/]*|$1|; + # extract test_name and move up one dir if started from a subdir + $test_name = $basedir; + $test_name =~ s|.*/([^/]*)|$1|; + if ( $test_name eq "fs_filesystem" ) { + $fs_type = " "; + } + else { + $fs_type = $test_name; + $basedir =~ s|(.*)/[^/]*|$1|; + } + # Options: -v Verbose, -e enable udisks(8) daemon, -f filesystem type $v = " "; $disable_udisks = 1; @@ -20,8 +31,7 @@ BEGIN { $nfs_enabled = 0; $vfat_enabled = 0; - $i = 0; - $fs_type = " "; + $i = 0; foreach $arg (@ARGV) { if ( $arg eq "-v" ) { $v = $arg; diff --git a/tests/filesystem/vfat b/tests/filesystem/vfat new file mode 120000 index 0000000..945c9b4 --- /dev/null +++ b/tests/filesystem/vfat @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/tests/filesystem/xfs b/tests/filesystem/xfs new file mode 120000 index 0000000..945c9b4 --- /dev/null +++ b/tests/filesystem/xfs @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/tests/fs_filesystem/ext4 b/tests/fs_filesystem/ext4 new file mode 120000 index 0000000..945c9b4 --- /dev/null +++ b/tests/fs_filesystem/ext4 @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/tests/fs_filesystem/jfs b/tests/fs_filesystem/jfs new file mode 120000 index 0000000..945c9b4 --- /dev/null +++ b/tests/fs_filesystem/jfs @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/tests/fs_filesystem/test b/tests/fs_filesystem/test index 5dedf83..ec71d92 100755 --- a/tests/fs_filesystem/test +++ b/tests/fs_filesystem/test @@ -12,6 +12,17 @@ BEGIN { $basedir = $0; $basedir =~ s|(.*)/[^/]*|$1|; + # extract test_name and move up one dir if started from a subdir + $test_name = $basedir; + $test_name =~ s|.*/([^/]*)|$1|; + if ( $test_name eq "fs_filesystem" ) { + $fs_type = " "; + } + else { + $fs_type = $test_name; + $basedir =~ s|(.*)/[^/]*|$1|; + } + # Some code in tests/filesystem is reused $filesystem_dir = "$basedir/../filesystem"; @@ -23,8 +34,7 @@ BEGIN { $nfs_enabled = 0; $vfat_enabled = 0; - $i = 0; - $fs_type = " "; + $i = 0; foreach $arg (@ARGV) { if ( $arg eq "-v" ) { $v = $arg; diff --git a/tests/fs_filesystem/vfat b/tests/fs_filesystem/vfat new file mode 120000 index 0000000..945c9b4 --- /dev/null +++ b/tests/fs_filesystem/vfat @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/tests/fs_filesystem/xfs b/tests/fs_filesystem/xfs new file mode 120000 index 0000000..945c9b4 --- /dev/null +++ b/tests/fs_filesystem/xfs @@ -0,0 +1 @@ +. \ No newline at end of file
Run [fs_]filesystem tests always for all common filesystems (xfs, ext4, jfs, vfat). Use symlinks to achieve this without changing much code while still allowing to run the test script directly (optionally specifying the filesystem type). Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com> --- tests/Makefile | 8 ++++++-- tests/filesystem/ext4 | 1 + tests/filesystem/jfs | 1 + tests/filesystem/test | 14 ++++++++++++-- tests/filesystem/vfat | 1 + tests/filesystem/xfs | 1 + tests/fs_filesystem/ext4 | 1 + tests/fs_filesystem/jfs | 1 + tests/fs_filesystem/test | 14 ++++++++++++-- tests/fs_filesystem/vfat | 1 + tests/fs_filesystem/xfs | 1 + 11 files changed, 38 insertions(+), 6 deletions(-) create mode 120000 tests/filesystem/ext4 create mode 120000 tests/filesystem/jfs create mode 120000 tests/filesystem/vfat create mode 120000 tests/filesystem/xfs create mode 120000 tests/fs_filesystem/ext4 create mode 120000 tests/fs_filesystem/jfs create mode 120000 tests/fs_filesystem/vfat create mode 120000 tests/fs_filesystem/xfs