nfs-utils/SOURCES/nfs-utils-2.3.3-gating-tests.patch
2021-10-08 14:02:43 +00:00

3814 lines
158 KiB
Diff

From 26dfa0f7846f14aa86048d504913d3a3be7196d0 Mon Sep 17 00:00:00 2001
From: Bruno Goncalves <bgoncalv@redhat.com>
Date: Jan 17 2019 10:02:50 +0000
Subject: [PATCH 1/6] Add CI tests
Related: rhbz#1653927
---
diff --git a/tests/export-mount-local/PURPOSE b/tests/export-mount-local/PURPOSE
new file mode 100644
index 0000000..556df42
--- /dev/null
+++ b/tests/export-mount-local/PURPOSE
@@ -0,0 +1 @@
+# nothing
diff --git a/tests/export-mount-local/_env b/tests/export-mount-local/_env
new file mode 100644
index 0000000..90b8e90
--- /dev/null
+++ b/tests/export-mount-local/_env
@@ -0,0 +1,7 @@
+export TOPLEVEL_NAMESPACE=nfs-utils
+export PKG_NAMESPACE=nfs-utils
+export RELATIVE_PATH=export-mount-local
+export PACKAGE=nfs-utils
+export PACKAGE_NAME=nfs-utils
+export PKG_LIST=nfs-utils nfs-utils-lib libnfsidmap libsss_idmap libtirpc rpcbind
+export TEST=/nfs-utils/export-mount-local
diff --git a/tests/export-mount-local/runtest.sh b/tests/export-mount-local/runtest.sh
new file mode 100755
index 0000000..e72e0f4
--- /dev/null
+++ b/tests/export-mount-local/runtest.sh
@@ -0,0 +1,304 @@
+#!/bin/bash
+# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: test for: export-mount
+# Author: Jianhong Yin <jiyin@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2014 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+[ -e /usr/bin/rhts-environment.sh ] && . /usr/bin/rhts-environment.sh
+. /usr/share/beakerlib/beakerlib.sh || exit 1
+
+#===============================================================================
+
+#signal trap
+trap "cleanup" SIGINT SIGTERM SIGHUP SIGQUIT
+cleanup() {
+ rlFileRestore
+ rm -rf $expdir $nfsmp
+}
+
+#global var define
+BZ=exp-mount-local
+expdir=/exportDir-$BZ
+nfsmp=/mnt/nfsmp-$BZ
+subexpdir=/exportDir-$BZ/sub
+tmpnfsmp=/tmp/nfsmp-$BZ
+
+host="$HOSTNAME"
+# in case "localhost.localdomain"
+echo "$host" | grep -q "localhost" && host="localhost"
+
+rlJournalStart
+ rlPhaseStartSetup do-Setup-
+ # Load beakerlib you needed
+ rlImport kernel/base
+ read ipv4 _nil <<<$(getDefaultIp)
+ read ipv6s _nil <<<$(getDefaultIp 6 global)
+ ipv6="[$ipv6s]"
+ envinfo
+ rlFileBackup /etc/exports /etc/sysconfig/nfs /etc/nfs.conf /etc/hosts
+ if [ "$host" = "localhost" ]; then
+ run "echo '$ipv4 $host' >> /etc/hosts"
+ if [ -n "$ipv6s" ]; then
+ run "echo '$ipv6s $host' >> /etc/hosts"
+ fi
+ run "cat /etc/hosts" -
+ fi
+ run 'rm -rf $expdir $nfsmp && mkdir -p $expdir $nfsmp'
+ run 'rm -rf $subexpdir $tmpnfsmp && mkdir -p $subexpdir $tmpnfsmp'
+ run 'echo "/tmp *(ro,sync)" >/etc/exports'
+ run 'service_nfs restart'
+ #avoid issues restarting the server too quickly
+ sleep 10
+ run 'ls_nfsvers'
+ rlPhaseEnd
+
+for V in $(ls_nfsvers); do
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-ipv4
+ run "exportfs -au && exportfs -iv $ipv4:$expdir -o ro,sync,no_root_squash"
+ run 'mount -o vers=$V $ipv4:$expdir $nfsmp'
+ run 'umount $nfsmp'
+ rlPhaseEnd
+ if [ -n "$ipv6s" ]; then
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-ipv6-x
+ run 'mount -o vers=$V $ipv6:$expdir $nfsmp' 1-255
+ [ $? = 0 ] && run "umount $nfsmp"
+ rlPhaseEnd
+ fi
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-host
+ run 'mount -o vers=$V $host:$expdir $nfsmp'
+ run 'umount $nfsmp'
+ rlPhaseEnd
+
+ if [ -n "$ipv6s" ]; then
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-ipv6
+ run "exportfs -au && exportfs -iv $ipv6:$expdir -o ro,sync,no_root_squash"
+ run 'mount -o vers=$V $ipv6:$expdir $nfsmp'
+ run 'umount $nfsmp'
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-ipv4-x
+ run 'mount -o vers=$V $ipv4:$expdir $nfsmp' 1-255
+ [ $? = 0 ] && run "umount $nfsmp"
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-host
+ if [ -n "$(dig -t aaaa $HOSTNAME +short)" ]; then
+ run 'mount -o vers=$V $host:$expdir $nfsmp'
+ run 'umount $nfsmp'
+ fi
+ rlPhaseEnd
+ fi
+
+ rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-host
+ run "exportfs -au && exportfs -iv $host:$expdir -o ro,sync,no_root_squash"
+ run 'mount -o vers=$V $host:$expdir $nfsmp'
+ run 'umount $nfsmp'
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-ipv4
+ run 'mount -o vers=$V $ipv4:$expdir $nfsmp'
+ run 'umount $nfsmp'
+ rlPhaseEnd
+ if [ -n "$ipv6s" ]; then
+ rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-ipv6
+ if [ -n "$(dig -t aaaa $HOSTNAME +short)" ]; then
+ run 'mount -o vers=$V $ipv6:$expdir $nfsmp'
+ run 'umount $nfsmp'
+ fi
+ rlPhaseEnd
+ fi
+
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-ipv4
+ run 'echo "$expdir *(ro,sync,no_root_squash)" >/etc/exports'
+ run 'echo "$subexpdir $ipv4(ro,sync,no_root_squash)" >>/etc/exports'
+ run 'service_nfs restart'
+ #avoid issues restarting the server too quickly
+ sleep 10
+ run 'showmount -e' -
+ run 'mount -o vers=$V $ipv4:$expdir $nfsmp'
+ run 'mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp'
+ run 'umount $nfsmp $tmpnfsmp'
+ rlPhaseEnd
+ if [ -n "$ipv6s" ]; then
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-ipv6-x
+ run 'mount -o vers=$V $ipv6:$expdir $nfsmp'
+ run 'mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp' 1-255 "should not mount sub-directory with different ip"
+ [ $? = 0 ] && run "umount $tmpnfsmp"
+ run "umount $nfsmp"
+ rlPhaseEnd
+ fi
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-host
+ run 'mount -o vers=$V $host:$expdir $nfsmp'
+ run 'mount -o vers=$V $host:$subexpdir $tmpnfsmp'
+ run 'umount $nfsmp $tmpnfsmp'
+ rlPhaseEnd
+
+ if [ -n "$ipv6s" ]; then
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-ipv4-x
+ run 'echo "$expdir *(ro,sync,no_root_squash)" >/etc/exports'
+ run 'echo "$subexpdir $ipv6s(ro,sync,no_root_squash)" >>/etc/exports'
+ run 'service_nfs restart'
+ #avoid issues restarting the server too quickly
+ sleep 10
+ run 'showmount -e' -
+ run 'mount -o vers=$V $ipv4:$expdir $nfsmp'
+ run 'mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp' 1-255 "should not mount sub-directory with different ip"
+ [ $? = 0 ] && run "umount $tmpnfsmp"
+ run "umount $nfsmp"
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-ipv6
+ run 'mount -o vers=$V $ipv6:$expdir $nfsmp'
+ run 'mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp'
+ run 'umount $nfsmp $tmpnfsmp'
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-host
+ run 'mount -o vers=$V $host:$expdir $nfsmp'
+ run 'mount -o vers=$V $host:$subexpdir $tmpnfsmp'
+ run 'umount $nfsmp $tmpnfsmp'
+ rlPhaseEnd
+ fi
+
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-ipv4
+ run 'echo "$expdir *(ro,sync,no_root_squash)" >/etc/exports'
+ run 'echo "$subexpdir $host(ro,sync,no_root_squash)" >>/etc/exports'
+ run 'service_nfs restart'
+ #avoid issues restarting the server too quickly
+ sleep 10
+ run 'showmount -e' -
+ run 'mount -o vers=$V $ipv4:$expdir $nfsmp'
+ run 'mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp'
+ run 'umount $nfsmp $tmpnfsmp'
+ rlPhaseEnd
+ if [ -n "$ipv6s" ]; then
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-ipv6
+ run 'mount -o vers=$V $ipv6:$expdir $nfsmp'
+ run 'mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp'
+ run 'umount $nfsmp $tmpnfsmp'
+ rlPhaseEnd
+ fi
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-host
+ run 'mount -o vers=$V $host:$expdir $nfsmp'
+ run 'mount -o vers=$V $host:$subexpdir $tmpnfsmp'
+ run 'umount $nfsmp $tmpnfsmp'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-nfsV$V-default-option-overridden-by-client-specific-option
+ run "echo '$expdir -ro,sync *(rw,no_root_squash)' >/etc/exports"
+ run "service_nfs restart"
+ run "mount -o vers=$V $host:$expdir $nfsmp"
+ run "touch $nfsmp/testfile && mkdir $nfsmp/testdir" 0 "exports option should be overridden by client specific."
+ run "rm -rf $nfsmp/test*"
+ run "umount $nfsmp"
+ run "echo '$expdir -ro,sec=sys,sync *(rw,no_root_squash)' >/etc/exports" 0 "sec=sys may cause it to be failed."
+ run "exportfs -rv"
+ run "mount -o vers=$V $host:$expdir $nfsmp"
+ run "touch $nfsmp/testfile && mkdir $nfsmp/testdir" 0 "exports option should be overridden by client specific."
+ run "rm -rf $nfsmp/test*"
+ run "umount $nfsmp"
+ rlPhaseEnd
+done
+
+ rlPhaseStartTest do-Test-exports-options-twice
+ run 'echo "/ *(sync,hide,no_wdelay)" > /etc/exports'
+ run "service_nfs restart"
+ #avoid issues restarting the server too quickly
+ sleep 10
+
+ # Count all options from list printed by exportfs -s(rhel-7) or exportfs -v(rhel-6)
+ allOptions=$( (exportfs -s 2>/dev/null || exportfs -v) | sed 's/^.*(//;s/)$//;s/,/\n/g' | wc -l)
+ # Count unique options from list printed by exportfs -s(rhel-7) or exportfs -v(rhel-6)
+ uniqOptions=$( (exportfs -s 2>/dev/null || exportfs -v) | sed 's/^.*(//;s/)$//;s/,/\n/g' | sort | uniq | wc -l)
+
+ log "{Info} exportfs -s(rhel-7) or exportfs -v(rhel-6) will print option list for each export path"
+ log "{Info} All options printed by exportfs -s(rhel-7) or exportfs -v(rhel-6) (sorted):"
+ run "(exportfs -s 2>/dev/null || exportfs -v) | sed 's/^.*(//;s/)$//;s/,/\n/g' | sort"
+ log "{Info} For exported path '/', there are $allOptions options printed in all options list and $uniqOptions of them are unique"
+ run 'test $uniqOptions -eq $allOptions' 0 "Should not output any options twice, quantity of all options should be equal to quantity of unique options"
+ for opt in sync hide no_wdelay; do
+ run "(exportfs -s 2>/dev/null || exportfs -v) | grep -q $opt" 0 "Option list should contain option $opt specified in /etc/exports"
+ done
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-server-side-using-bind-mount
+ run "dd if=/dev/zero of=workspace.image bs=3M count=500"
+ run "mkfs -t ext3 -F workspace.image"
+ run "mkdir -p /workspace"
+ run "mount -o loop workspace.image /workspace"
+ run "mkdir -p /workspace/vmcore /srv/nfs/vmcore"
+ run "touch /workspace/work_dir /workspace/vmcore/vmcore_dir"
+ run "mount --bind /workspace/vmcore /srv/nfs/vmcore"
+ run "echo '/srv/nfs/vmcore *(rw,no_root_squash)' > /etc/exports"
+ run "echo '/workspace *(rw,no_root_squash)' >> /etc/exports"
+ run "service_nfs restart"
+ #avoid issues restarting the server too quickly
+ sleep 10
+ run "mount $host:/workspace $nfsmp"
+ run "ls $nfsmp/work_dir"
+ run "umount $nfsmp"
+ run "exportfs -au" && run "service_nfs stop"
+ run "umount /srv/nfs/vmcore"
+ run "umount /workspace"
+ run "rm -rf /workspace /srv/nfs/vmcore"
+ run "rm workspace.image"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-mount-nfsv4-show-wrong-port
+ run "echo '$expdir *(rw,no_root_squash)' >>/etc/exports"
+ run "service_nfs restart"
+ #avoid issues restarting the server too quickly
+ sleep 10
+ run "exportfs -v"
+ run "mount -t nfs -o vers=4 localhost:$expdir $nfsmp"
+ run "mount -t nfs4 | grep $nfsmp" -
+ run "mount -t nfs4 | grep $nfsmp | grep -q port=2049" 0 "Should show port=2049"
+ run "umount $nfsmp"
+ run "echo '[nfsd]' > /etc/nfs.conf"
+ run "echo 'port=20050' >> /etc/nfs.conf"
+ run "service_nfs restart"
+ run "sleep 10"
+ run "rpcinfo -p | grep -w nfs | grep 20050"
+ run "mount -t nfs -o vers=4 localhost:$expdir $nfsmp" -
+ if [ $? -eq 0 ]; then
+ run "mount -t nfs4" -
+ run "mount -t nfs4 | grep -q port=20050" 0 "Should show port=20050"
+ run "umount $nfsmp"
+ fi
+ run "mount -t nfs -o vers=4,port=0 localhost:$expdir $nfsmp" -
+ if [ $? -eq 0 ]; then
+ run "mount -t nfs4" -
+ run "mount -t nfs4 | grep -q port=20050" 0 "Should show port=20050"
+ run "umount $nfsmp"
+ fi
+ run "mount -t nfs -o vers=4,port=20050 localhost:$expdir $nfsmp"
+ run "mount -t nfs4 | grep $nfsmp" -
+ run "mount -t nfs4 | grep $nfsmp | grep -q port=20050" 0 "Should show port=20050"
+ run "umount $nfsmp"
+ rlPhaseEnd
+
+ rlPhaseStartCleanup do-Cleanup-
+ run 'rm -rf $expdir $nfsmp $subexpdir $tmpnfsmp'
+ rlFileRestore
+ run "service_nfs restart"
+ #avoid issues restarting the server too quickly
+ sleep 10
+ rlPhaseEnd
+rlJournalEnd
+#rlJournalPrintText
+#enable_avc_check
diff --git a/tests/export-mount-local/subtest.yml b/tests/export-mount-local/subtest.yml
new file mode 100644
index 0000000..1a77920
--- /dev/null
+++ b/tests/export-mount-local/subtest.yml
@@ -0,0 +1 @@
+attr: {ssched: yes}
diff --git a/tests/exportfs/PURPOSE b/tests/exportfs/PURPOSE
new file mode 100644
index 0000000..3299ed8
--- /dev/null
+++ b/tests/exportfs/PURPOSE
@@ -0,0 +1,2 @@
+Description: test for command exportfs
+Author: Stevens Yin <jiyin@redhat.com>
diff --git a/tests/exportfs/_env b/tests/exportfs/_env
new file mode 100644
index 0000000..b57092a
--- /dev/null
+++ b/tests/exportfs/_env
@@ -0,0 +1,7 @@
+export TOPLEVEL_NAMESPACE=nfs-utils
+export PKG_NAMESPACE=nfs-utils
+export RELATIVE_PATH=exportfs
+export PACKAGE=nfs-utils
+export PACKAGE_NAME=nfs-utils
+export PKG_LIST=nfs-utils nfs-utils-lib libnfsidmap libsss_idmap libtirpc rpcbind
+export TEST=/nfs-utils/exportfs
diff --git a/tests/exportfs/runtest.sh b/tests/exportfs/runtest.sh
new file mode 100755
index 0000000..8e34a8c
--- /dev/null
+++ b/tests/exportfs/runtest.sh
@@ -0,0 +1,313 @@
+#!/bin/bash
+# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: test for command exportfs
+# Author: Stevens Yin <jiyin@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2013 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+[ -e /usr/bin/rhts-environment.sh ] && . /usr/bin/rhts-environment.sh
+. /usr/share/beakerlib/beakerlib.sh || exit 1
+
+#===============================================================================
+
+#setting locale as test check infomration on man pages
+export LC_ALL=en_US.utf8
+
+BZ=exportfs
+nfsmp=/mnt/nfsmp-$BZ
+expdir=/expdir-$BZ
+prog=exportfs
+
+rlJournalStart
+ rlPhaseStartSetup do-Setup
+ # Load beakerlib you needed
+ rlImport kernel/base
+ envinfo
+ read IP4 _nil <<<$(getDefaultIp)
+ read IP6 _nil <<<$(getDefaultIp 6)
+ if echo "$HOSTNAME" | grep -q "localhost"; then
+ hostnamectl set-hostname exportfs.test
+ fi
+ #clean nfs garbage, avoid affect from pre case
+ { exportfs -ua; service nfs stop &>/dev/null; }
+ rlFileBackup /etc/sysconfig/nfs /etc/exports
+ rlFileBackup --clean /etc/exports.d/
+ run 'rm -f /etc/exports.d/*'
+ run 'mkdir -p $nfsmp $expdir'
+ run 'echo "$expdir *(rw,no_root_squash,fsid=0)" > /etc/exports'
+ service_nfs start
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test"-$prog-with-wrong-option"
+ run 'exportfs -xxxx 2>&1' 1-255 "should exit with an error code"
+ run 'exportfs -xxxx 2>&1 | egrep -i "(usage:|try.*for more info)"' 0 "should output usage to user"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test"-$prog-IpV6"
+ run 'echo "[$IP6]:$expdir"' -
+ run 'exportfs -vi "[$IP6]:$expdir"'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-exportfs-a-and-o-check
+ run 'cp /etc/exports /etc/exports.bak'
+ run 'mkdir ${expdir}2'
+ run 'echo "${expdir}2 *(ro)" >>/etc/exports'
+ run 'exportfs -a' 0 "exportfs -a to export all directories"
+ run 'showmount -e'
+ run 'test $(showmount -e | grep $expdir | wc -l) = 2' 0 "there should be two expdir entries"
+ run 'exportfs -v'
+ run 'exportfs -v | sed -n -e "/\t/! {N; s/[\n\t]/ /g;p}" -e "/\t/p" |
+ grep "${expdir}2" | grep ro | grep -w root_squash' 0 "check the the export options"
+
+ run 'exportfs -i -o rw,no_root_squash *:${expdir}2' 0 "exportfs -i -o override default export options"
+ run 'exportfs -v'
+ run 'exportfs -v | sed -n -e "/\t/! {N; s/[\n\t]/ /g;p}" -e "/\t/p" |
+ grep "${expdir}2" | grep rw | grep -w no_root_squash' 0 "check if the options be override"
+ run 'mv /etc/exports.bak /etc/exports' 0 "Restore /etc/exports"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-reexport-check
+ run 'exportfs -rv' 0 "exportfs -rv to reexport all directories"
+ run 'exportfs -v | grep "${expdir}2"' 1 "${expdir}2 removed from /etc/exports so no entry about it exported"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-exportfs-u-check
+ run 'exportfs -u' 0 "exportfs -u unexport one or more directories"
+ run 'showmount -e | grep "$expdir"' 0 "$expdir unexport"
+ run 'exportfs *:${expdir}2'
+ run 'exportfs' -
+ run "exportfs -v -u *:$expdir" 0 "unexport one directory only"
+ run 'exportfs' -
+ run "exportfs | grep '${expdir}2'" 0 "${expdir}2 should not be unexported"
+ run 'exportfs -ua'
+ run 'exportfs -f' 0 "exportfs -f flush everything out of the kernel?s export table"
+ run 'rm -rf ${expdir}2'
+ rlPhaseEnd
+
+ # test NFS_MAXPATHLEN(1024) boundary value test
+ dname=$(echo {1..88}|sed 's/ /_/g') #dname with 254 chars
+ fpath=/$dname/$dname/$dname/$dname #fpath with 1020 chars
+ fpath2=/$dname/$dname/$dname/$dname/abc #fpath with 1024 chars
+ fpath3=/$dname/$dname/$dname/$dname/abckkkk #fpath with 1028 chars
+ rlPhaseStartTest do-Test-exportfs-pathlenth-${#fpath}-${#fpath2}-${#fpath3}
+ run "mkdir -p $fpath" 0 "create a long export path(${#fpath})"
+ run "mkdir -p $fpath2" 0 "create a long export path(${#fpath2})"
+ run "mkdir -p $fpath3" 0 "create a long export path(${#fpath3})"
+ run "exportfs -vi $IP4:$fpath &>std.log" 0 "exportfs long path(${#fpath}) should success"
+ run 'cat std.log' -
+ run 'grep "does not support NFS export" std.log' 1
+
+ run "exportfs -vi $IP4:$fpath2 &>std2.log" 0 "exportfs long path(${#fpath2}) should success"
+ run 'cat std2.log' -
+ run 'grep "does not support NFS export" std2.log' 1
+
+ run "exportfs -vi $IP4:$fpath3 &>std3.log" 1 "exportfs long path(${#fpath3}) should fail"
+ run 'cat std3.log' -
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-exportfs-dir-with-white-space
+ run 'mkdir -p "/dir with white spaces"'
+ run 'exportfs -vi $IP4:"/dir with white spaces"'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-exportfs-dir-invalid-arg-not-exist
+ run 'exportfs -ua; exportfs -i *:/not.exist &> stdout.log' 1-255
+ run 'cat stdout.log' -
+ run 'test -n stdout.log' 0 "Path not exist, should output error info to user."
+ run 'cat stdout.log | grep -i usage' 0,1 "should output the usage for invalid argument"
+ run 'exportfs' -
+ run 'test -z "$(exportfs)"' 0,1 "should not exported the invalid path"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-exportfs-dir-without-uuid-and-fsid
+ run 'exportfs -ua; exportfs -i *:/dev/shm &> stdout.log' 1-255
+ run 'cat stdout.log' -
+ run 'test -n stdout.log' 0 "Path no uuid and fsid, should output error info to user"
+ run 'exportfs' -
+ run 'test -z "$(exportfs)"' 0,1 "should not exported the invalid path"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-exportfs-when-/proc/fs/nfsd-not-mount
+ run 'mkdir -p ${expdir}_tmp'
+ run 'service nfs start'
+ run 'pkill rpc.mountd && umount /proc/fs/nfsd'
+ run 'exportfs -iv *:${expdir}_tmp'
+ run 'mount -t nfsd nfsd /proc/fs/nfsd' 0-255 "restore env: mount nfsd"
+ run 'rm -rf ${expdir}_tmp'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-option-nordirplus
+ #nfsv3 export option nordirplus support test
+ run 'service nfs start'
+ run 'exportfs -i -o nordirplus "*:$expdir"'
+ run 'mount -o vers=3 localhost:$expdir $nfsmp'
+ run 'grep $nfsmp /proc/mounts'
+ run 'grep nfs /proc/mounts | grep nordirplus' -
+ run 'man 5 exports | col -b | grep nordirplus'
+ run 'umount $nfsmp'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-extra-export.d-files-base
+ # test files under /etc/exports.d
+ run 'rm -rf /etc/exports.d'
+ run 'exportfs -r 2>&1 | grep "No such file or directory"' 1 "should not output garbage log"
+ run 'mkdir -p /etc/exports.d'
+ run 'echo "$expdir *(rw,no_root_squash)" > /etc/exports.d/test.exports'
+ run 'cp /etc/exports /etc/exports.bak'
+ run 'echo "" > /etc/exports'
+ run 'cat /etc/exports.d/test.exports' -
+ run 'exportfs -ua; exportfs -a' 0 "export all directories"
+ run 'showmount -e | grep $expdir'
+ run 'mount localhost:$expdir $nfsmp'
+ run 'grep $nfsmp /proc/mounts'
+ run 'umount $nfsmp'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-extra-export.d-files-max-filelen
+ name_max=$(getconf NAME_MAX $expdir)
+ min_export_sz=$(expr length ".exports")
+ max_export_len=$(($name_max-$min_export_sz))
+ run 'mkdir ${expdir}.max_length'
+ run 'echo "${expdir}.max_length *(ro)" > /etc/exports.d/$(printf "%0${max_export_len}d").exports'
+ run 'ls -la /etc/exports.d/' -
+ run 'exportfs -rv' 0 "exportfs -rv to reexport all directories"
+ run 'showmount -e | grep "max_length"'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-extra-export.d-files-filename-format
+ run 'mkdir ${expdir}.should_ignored'
+ run 'echo "${expdir}.should_ignored *(rw)" > /etc/exports.d/.ignored.exports'
+ run 'echo "${expdir}.should_ignored *(rw)" > /etc/exports.d/ignored.export'
+ run 'echo "${expdir}.should_ignored *(rw)" > /etc/exports.d/exports'
+ run 'ls -la /etc/exports.d/' -
+ run 'exportfs -rv' 0 "exportfs -rv to reexport all directories"
+ run 'showmount -e | grep "should_ignored"' 1
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-extra-export.d-files-filetype-link
+ run 'ln -s /etc/exports.d/ignored.export /etc/exports.d/linked.exports'
+ run 'ls -la /etc/exports.d/' -
+ run 'exportfs -rv' 0 "exportfs -rv to reexport all directories"
+ run 'showmount -e | grep "should_ignored"' 0 "should consider the link file"
+ run 'test $(showmount -e | grep $expdir | wc -l) = 3' 0 "there should be two expdir entries"
+ run 'rm -rf ${expdir}.*'
+ run 'rm -rf /etc/exports.d'
+ run 'mv /etc/exports.bak /etc/exports' 0 "Restore /etc/exports"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-option-mountpoint
+ run "service_nfs start"
+ run "exportfs -ua"
+ run "mkdir -p ${expdir}_share"
+ run "exportfs -i *:${expdir}_share -o mp"
+ run "exportfs -v" -
+ run "mountpoint ${expdir}_share" 1-255 "It is not mounted yet"
+ # The mount point will still show... but when trying to
+ # mount the directory the client mount should be failed
+ run "showmount -e | grep share" -
+ run "timeout 60 mount localhost:${expdir}_share $nfsmp" 1-123,125-255 "Should be failed without hang"
+ [ $? -eq 0 ] && run "umount $nfsmp"
+ log "{Info} Creating a small fs on loopback device and mount it."
+ run "dd if=/dev/zero of=fs_tmp.img bs=1M count=100" -
+ run "losetup /dev/loop0 fs_tmp.img" -
+ run "mkfs /dev/loop0" -
+ run "mount /dev/loop0 ${expdir}_share"
+ run "mountpoint ${expdir}_share" 0 "It should be mounted now"
+ run "showmount -e | grep share" 0 "Should be listed in output of showmount -e now"
+ run "mount localhost:${expdir}_share $nfsmp" 0 "Should success now"
+ [ $? -eq 0 ] && run "umount $nfsmp"
+ log "{Info} Recovering it."
+ run "service_nfs stop"
+ run "umount ${expdir}_share"
+ run "losetup -d /dev/loop0" -
+ run "rm -f fs_tmp.img" -
+ run "rm -rf ${expdir}_share"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-"exportfs -u incorrectly exits with a 1 whenever the exportlist has multiple FQDN exports"
+ run "exportfs -ua"
+ run "exportfs -v" -
+ run "exportfs -o rw,sync localhost:$expdir"
+ run "exportfs -o rw,sync $IP4:$expdir"
+ run "exportfs -v" -
+ run 'test $(exportfs -v | grep $expdir | wc -l) = 2'
+ run "exportfs -u $IP4:$expdir" 0 "should not exit with 1 when the exportlist has multiple FQDN exports"
+ run "exportfs -v" -
+ run 'test $(exportfs -v | grep $expdir | wc -l) = 1'
+ run "exportfs -u localhost:$expdir"
+ run "exportfs -v" -
+ run 'test $(exportfs -v | grep $expdir | wc -l) = 0'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-"exportfs -u cannot unexport when the specified path involves a trailing /"
+ run "exportfs -ua"
+ run "exportfs -o rw,sync localhost:$expdir"
+ run "exportfs -u not.exist:$expdir" 1-255 "should be failed and return error code"
+ run "exportfs -v" -
+ run "test $(exportfs | wc -l) -ne 0" 0 "Should not be cleared as previous cmd failed"
+ run "exportfs -u localhost:$expdir/" 0 "Should unexport even if path involves trailing /"
+ run "exportfs -v" -
+ run "test $(exportfs | wc -l) -eq 0" 0 "Should have nothing to export"
+ run "exportfs -ua"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-"exportfs -u can exit with status 1 if there are multiple ip exports that cannot be resolved to hostnames"
+ # Should test with un-used ip address
+ run "ping -c 1 192.168.1.100 >/dev/null || ping -c 1 192.168.1.101 >/dev/null" 1
+ [ "$?" = "0" ] && {
+ log "{WARN} Should test with un-used ip address, skip the test."
+ report_result $TEST FAIL
+ exit 0
+ }
+ run "exportfs -ua && exportfs -v" -
+ log "{INFO} Test with ip that cannot be resolved to a hostname."
+ run "exportfs -o rw,sync 192.168.1.100:$expdir"
+ run "exportfs -o rw,sync 192.168.1.101:$expdir"
+ run "exportfs -v" -
+ run 'test $(exportfs -v | grep $expdir | wc -l) = 2'
+ run "exportfs -u 192.168.1.101:$expdir" 0 "Should not exit with 1 if unexports successfully."
+ run "exportfs -v" -
+ run 'test $(exportfs -v | grep $expdir | wc -l) = 1'
+ run "exportfs -u 192.168.1.100:$expdir" 0 "Should not exit with 1 if unexports successfully."
+ run "exportfs -v" -
+ run 'test $(exportfs -v | grep $expdir | wc -l) = 0'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-'exportfs: support "security_label" export option'
+ run "exportfs -ua && exportfs -v" -
+ run "exportfs -o security_label localhost:$expdir"
+ run "exportfs -v" -
+ run "exportfs -v | grep -q security_label"
+ run "exportfs -ua"
+ rlPhaseEnd
+
+ rlPhaseStartCleanup do-Cleanup
+ rlFileRestore
+ if echo "$HOSTNAME" | grep -q "localhost"; then
+ hostnamectl set-hostname $HOSTNAME
+ fi
+ rm -rf $nfsmp $expdir
+ run "service_nfs restart"
+ rlPhaseEnd
+rlJournalEnd
+#rlJournalPrintText
+
diff --git a/tests/mount/PURPOSE b/tests/mount/PURPOSE
new file mode 100644
index 0000000..3c215eb
--- /dev/null
+++ b/tests/mount/PURPOSE
@@ -0,0 +1,2 @@
+Description: Test for command mount.nfs{,4}
+Author: Stevens Yin <jiyin@redhat.com>
diff --git a/tests/mount/_env b/tests/mount/_env
new file mode 100644
index 0000000..d016f7c
--- /dev/null
+++ b/tests/mount/_env
@@ -0,0 +1,7 @@
+export TOPLEVEL_NAMESPACE=nfs-utils
+export PKG_NAMESPACE=nfs-utils
+export RELATIVE_PATH=mount
+export PACKAGE=nfs-utils
+export PACKAGE_NAME=nfs-utils
+export PKG_LIST=nfs-utils nfs-utils-lib libnfsidmap libsss_idmap libtirpc rpcbind
+export TEST=/nfs-utils//mount
diff --git a/tests/mount/runtest.sh b/tests/mount/runtest.sh
new file mode 100755
index 0000000..fb2f585
--- /dev/null
+++ b/tests/mount/runtest.sh
@@ -0,0 +1,113 @@
+#!/bin/bash
+# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: Test for command mount.nfs{,4}
+# Author: Stevens Yin <jiyin@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2013 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+[ -e /usr/bin/rhts-environment.sh ] && . /usr/bin/rhts-environment.sh
+. /usr/share/beakerlib/beakerlib.sh || exit 1
+
+#===============================================================================
+
+mnt=/nfs-mount
+expdir=/expdir
+expdir_with_more_slash=$expdir///expdir-mount
+prog=mount.nfs
+
+rlJournalStart
+ rlPhaseStartSetup do-Setup
+ # Load beakerlib you needed
+ rlImport kernel/base
+ envinfo
+ read IP4 _nil <<<$(getDefaultIp)
+ rlFileBackup /etc/sysconfig/nfs /etc/exports
+ run "mkdir -p $mnt $expdir $expdir_with_more_slash"
+ run "echo '$expdir *(rw,no_root_squash)' > /etc/exports"
+ run "echo '$expdir_with_more_slash *(rw,no_root_squash)' >> /etc/exports"
+ run 'service_nfs restart'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-$prog-with-wrong-option
+ run "$prog -xxxx" 1-255 "should exit with an error code"
+ run "$prog -xxxx 2>&1 | egrep -i '(usage:|try.*for more info)'" 0 "should output usage to user"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-$prog-without-args
+ run "$prog" 1-255 "should exit with an error code"
+ run "$prog 2>&1 | egrep -i '(usage:|try.*for more info)'" 0 "should output usage to user"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-$prog--h
+ run "$prog -h" -
+ std=$($prog -h 2>&1)
+ run "$prog -h 2>&1 | egrep -i usage:" 0 "should output usage to user"
+ [ $? = 0 ] && {
+ options=$(echo "$std"|grep -o '\[-[a-z]\+\]')
+ [ ${#options} -gt 3 ] && {
+ optionNuma=$((${#options} - 3))
+ optionNumb=$(echo "$std" | sed -n "/\t-$options/p" | wc -l)
+ optionNumc=$(echo "$std" | sed -n "/\t-[a-zA-Z]/p" | wc -l)
+ run "test $optionNuma = $optionNumb"
+ run "test $optionNuma = $optionNumc"
+ run 'echo "$std" | sed -n "/\t-$options/p" | grep " "' 1
+ }
+ }
+ rlPhaseEnd
+
+if rpcinfo -p | awk '$2=="2"' | grep -q -w nfs; then
+ rlPhaseStartTest do-Test-$prog--o-vers=2
+ run "$prog localhost:$expdir $mnt -o vers=2"
+ run "umount -vvv $mnt &> >(tee verbose.log)"
+ run 'test $(wc -l <verbose.log) -gt 0'
+ rlPhaseEnd
+fi
+
+ rlPhaseStartTest do-Test-$prog-o-vers=3
+ run "$prog localhost:$expdir $mnt -o vers=3"
+ run "umount -vvv $mnt &> >(tee verbose.log)"
+ run 'test $(wc -l <verbose.log) -gt 0'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-$prog-default-option
+ run "$prog localhost:$expdir $mnt"
+ run "umount -vvv $mnt &> >(tee verbose.log)"
+ run 'test $(wc -l <verbose.log) -gt 0'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-$prog-with-more-slash-after-:
+ run "$prog localhost://$expdir $mnt"
+ run "umount -vvv $mnt"
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-$prog-with-more-slash-in-export-path
+ run "$prog localhost:$expdir_with_more_slash $mnt"
+ run "umount -vvv $mnt"
+ rlPhaseEnd
+
+ rlPhaseStartCleanup do-Cleanup
+ rlFileRestore
+ run "service_nfs restart"
+ rm -rf $mnt $expdir $expdir_with_more_slash
+ rlPhaseEnd
+rlJournalEnd
+#rlJournalPrintText
+
diff --git a/tests/nfs-mount-options-all/PURPOSE b/tests/nfs-mount-options-all/PURPOSE
new file mode 100644
index 0000000..191d93c
--- /dev/null
+++ b/tests/nfs-mount-options-all/PURPOSE
@@ -0,0 +1,3 @@
+Description:
+ Test nfs general mount options supported by all nfs versions.
+ Especially test it within specific scenarioes.
diff --git a/tests/nfs-mount-options-all/_env b/tests/nfs-mount-options-all/_env
new file mode 100644
index 0000000..bfd8320
--- /dev/null
+++ b/tests/nfs-mount-options-all/_env
@@ -0,0 +1,7 @@
+export TOPLEVEL_NAMESPACE=nfs-utils
+export PKG_NAMESPACE=nfs-utils
+export RELATIVE_PATH=nfs-mount-options-all
+export PACKAGE=nfs-utils
+export PACKAGE_NAME=nfs-utils
+export PKG_LIST=nfs-utils nfs-utils-lib libnfsidmap libsss_idmap libtirpc rpcbind
+export TEST=/nfs-utils/nfs-mount-options-all
diff --git a/tests/nfs-mount-options-all/runtest.sh b/tests/nfs-mount-options-all/runtest.sh
new file mode 100644
index 0000000..3ac4857
--- /dev/null
+++ b/tests/nfs-mount-options-all/runtest.sh
@@ -0,0 +1,347 @@
+#!/bin/bash
+# set -x # uncomment for debugging
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: Test for nfs mount options
+# Author: Bill Peck <bpeck@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2006 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+[ -e /usr/bin/rhts-environment.sh ] && . /usr/bin/rhts-environment.sh
+. /usr/share/beakerlib/beakerlib.sh || exit 1
+
+#===============================================================================
+
+TESTNAME=${TEST/*\//}
+expdir=/exportdir/home
+nfsmp=/mnt/$TESTNAME
+
+ORIGINAL_HOSTNAME=$HOSTNAME
+
+rlJournalStart
+ rlPhaseStartSetup do-$role-Setup-
+ # Load beakerlib you needed
+ rlImport kernel/base
+ envinfo
+ rlFileBackup /etc/sysconfig/nfs /etc/exports
+ if echo "$HOSTNAME" | grep -q "localhost"; then
+ # In case "localhost.localdomain"
+ hostnamectl set-hostname nfs-mount-options-all.test
+ HOSTNAME=nfs-mount-options-all.test
+ fi
+ run 'rm -rf $expdir $nfsmp && mkdir -p $expdir $nfsmp'
+ run 'chmod 777 $expdir'
+ run 'echo "$expdir *(rw,sync,no_root_squash)" >/etc/exports'
+ run 'service_nfs restart'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-$role-Test-fg_bg_retry_devil
+ read IP4 _nil <<<$(getDefaultIp)
+ run 'iptables -F' -
+ MNT_OPTS="vers=3,soft,fg,retry=1"
+ log "{Info} Retry 1 minute (60s) NFS mount in *foreground* before giving up."
+ run 'iptables -A INPUT -s $IP4 -j DROP' -
+ run 'iptables -L' -
+ run 'sleep 10'
+ start_time=$(date +%s)
+ run "mount ${IP4}:$expdir $nfsmp -o ${MNT_OPTS}" 1-255
+ retry_time=$((`date +%s` - start_time))
+ log "{Info} Actually the nfs.mount hang $retry_time seconds."
+ run 'ps aux | grep -v grep | grep ${MNT_OPTS}' 1
+ run 'iptables -F' -
+ run 'ip6tables -F' -
+ run 'mountpoint $nfsmp && umount $nfsmp' 1
+
+ MNT_OPTS="vers=3,soft,bg,retry=1"
+ log "{Info} Retry 1 minute (60s) NFS mount in *background* before giving up."
+ run 'iptables -A INPUT -s $IP4 -j DROP' -
+ run 'iptables -L' -
+ run 'sleep 10'
+ # When background exit and fork an childprocess, still, returns 0
+ run "mount ${IP4}:$expdir $nfsmp -o ${MNT_OPTS}" 0 "should return ok"
+ if [ $? -eq 0 ]; then
+ # bg ground, the mount fork an child process
+ run 'ps aux | grep -v grep | grep ${MNT_OPTS}' 0 "works in bg.. show background process"
+ [ $? = 0 ] && {
+ log "{Info} We are sleeping a little longer than 60 seconds (retry=1)."
+ run "sleep $((retry_time + 10))" 0 "Actually a little more than $retry_time seconds."
+ # demo mounting process should exit after 60s as retry=1 (minute)
+ run 'ps aux | grep -v grep | grep ${MNT_OPTS}' 1 "retry=1 for 60s should works file after sleep 70s"
+ }
+ fi
+ run 'iptables -F' -
+ # should not mount successfully as it expired
+ run 'mountpoint $nfsmp && umount $nfsmp' 1
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-retry-option-should-not-be-ignored
+ # test retry of the default value (2 minutes) for foreground - NFS(5)
+ run "service_nfs stop"
+ run "mount ${HOSTNAME}:$expdir $nfsmp &"
+ run "sleep 100 ; service_nfs start ; sleep 10"
+ run "nfsstat -m | grep $nfsmp" 0
+ [ $? = 0 ] && run "umount $nfsmp"
+
+ # test retry of 10 minutes for foreground
+ MNT_OPTS="retry=10"
+ log "\n{Info} ${MNT_OPTS}"
+ run "service_nfs stop"
+ run "mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS} &"
+ run "sleep 10 ; service_nfs start ; sleep 10"
+ run "nfsstat -m | grep $nfsmp" 0
+ [ $? = 0 ] && run "umount $nfsmp"
+
+ # test retry of 100 minutes for background
+ MNT_OPTS="bg,retry=100"
+ log "\n{Info} ${MNT_OPTS}"
+ run "service_nfs stop"
+ run "mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}"
+ run "sleep 10 ; service_nfs start ; sleep 10"
+ run "nfsstat -m | grep $nfsmp"
+ [ $? = 0 ] && run "umount $nfsmp"
+
+ # test retry of the default value (10000 minutes) for background - NFS(5)
+ MNT_OPTS="bg"
+ log "\n{Info} ${MNT_OPTS}"
+ run "service_nfs stop"
+ run "mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}"
+ run "sleep 10 ; service_nfs start ; sleep 10"
+ run "nfsstat -m | grep $nfsmp"
+ [ $? = 0 ] && run "umount $nfsmp"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-$role-Test-resvport_noresvport_test
+ run 'service_nfs restart'
+ MNT_OPTS="resvport"
+ log "{Info} ${MNT_OPTS}"
+ run 'mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}' 0
+ run 'mountpoint $nfsmp && umount $nfsmp'
+
+ MNT_OPTS="noresvport"
+ log "{Info} ${MNT_OPTS}"
+ run 'mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}' 1-255 "should got permission denied"
+ run 'mountpoint $nfsmp && umount $nfsmp' 1
+ rlPhaseEnd
+
+ rlPhaseStartTest do-$role-Test-cache_nocache_test
+ MNT_OPTS="noac"
+ log "\n{Info} ${MNT_OPTS}"
+ run 'chmod 777 $expdir'
+ run 'touch $expdir/foo.txt && chmod 777 $expdir/foo.txt'
+ run 'service_nfs restart'
+ run 'mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}' 0
+ [ $? -eq 0 ] && {
+ ATTR_TMP1=$(ls -al $nfsmp | grep foo.txt | awk '{ print $1 }')
+ chmod 666 $expdir/foo.txt
+ sleep 1
+ ATTR_TMP2=$(ls -al $nfsmp | grep foo.txt | awk '{ print $1 }')
+ log "{Info} $ATTR_TMP1 ~ $ATTR_TMP2"
+ run "[ x"$ATTR_TMP1" != x"$ATTR_TMP2" ]" 0 "with noac, attribution should not cached"
+ }
+ run 'mountpoint $nfsmp && umount $nfsmp'
+ run 'rm -f $expdir/foo.txt'
+
+ MNT_OPTS="ac,acregmin=20,acregmax=40,acdirmin=30,acdirmax=60"
+ log "\n{Info} ${MNT_OPTS}"
+ run 'touch $expdir/foo.txt && chmod 777 $expdir/foo.txt'
+ run 'mkdir $expdir/foo.dir && chmod 777 $expdir/foo.dir'
+ run 'mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}'
+ [ $? -eq 0 ] && {
+ ATTR_TMPREG1=$(ls -al $nfsmp | grep foo.txt | awk '{ print $1 }')
+ ATTR_TMPDIR1=$(ls -al $nfsmp | grep foo.dir | awk '{ print $1 }')
+ chmod 666 $expdir/foo.txt
+ chmod 555 $expdir/foo.dir
+ sleep 7
+ ATTR_TMPREG2=$(ls -al $nfsmp | grep foo.txt | awk '{ print $1 }')
+ sleep 7 #7+7
+ ATTR_TMPDIR2=$(ls -al $nfsmp | grep foo.dir | awk '{ print $1 }')
+ sleep 30 #7+7+30
+ ATTR_TMPREG3=$(ls -al $nfsmp | grep foo.txt | awk '{ print $1 }')
+ sleep 20 #7+7+30+20
+ ATTR_TMPDIR3=$(ls -al $nfsmp | grep foo.dir | awk '{ print $1 }')
+
+ log "{Info} Regfile Attribution: $ATTR_TMPREG1 ~ $ATTR_TMPREG2 ~ $ATTR_TMPREG3"
+ run '[ x"$ATTR_TMPREG1" == x"$ATTR_TMPREG2" -a x"$ATTR_TMPREG1" != x"$ATTR_TMPREG3" ]'
+
+ log "{Info} Directory Attribution: $ATTR_TMPDIR1 ~ $ATTR_TMPDIR2 ~ $ATTR_TMPDIR3"
+ run '[ x"$ATTR_TMPDIR1" == x"$ATTR_TMPDIR2" -a x"$ATTR_TMPDIR1" != x"$ATTR_TMPDIR3" ]'
+ }
+ run 'mountpoint $nfsmp && umount $nfsmp'
+ run 'rm -f $expdir/foo.txt'
+ run 'rm -rf $expdir/foo.dir'
+
+ MNT_OPTS="ac,actimeo=20"
+ log "\n{Info} ${MNT_OPTS}"
+ run 'mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}'
+ [ $? -eq 0 ] && {
+ run 'grep ${TESTNAME} /proc/mounts | grep "acregmin=20" | grep "acregmax=20" | grep "acdirmin=20" | grep "acdirmax=20"'
+ }
+ run 'mountpoint $nfsmp && umount $nfsmp'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-$role-Test-sharecache_nosharecache_test
+ MNT_OPTS="vers=3,nosharecache"
+ MNT_OPTS="nosharecache,ac,acregmin=30,acregmax=60"
+ log "\n{Info} ${MNT_OPTS}"
+ run 'chmod 777 $expdir'
+ run 'touch $expdir/foo.txt && chmod 777 $expdir/foo.txt'
+ run 'mkdir -p $nfsmp-{1,2}'
+ run 'service_nfs restart'
+
+ run 'mount ${HOSTNAME}:$expdir $nfsmp-1 -o ${MNT_OPTS} &&
+ mount ${HOSTNAME}:$expdir $nfsmp-2 -o ${MNT_OPTS}'
+ [ $? = 0 ] && {
+ chmod 555 $nfsmp-1/foo.txt
+ sleep 1
+ chmod 444 $nfsmp-2/foo.txt
+
+ ATTR_TMPREG1=$(ls -al $nfsmp-1 | grep foo.txt | awk '{ print $1 }')
+ ATTR_TMPREG2=$(ls -al $nfsmp-2 | grep foo.txt | awk '{ print $1 }')
+ ATTR_TMPREG3=$(ls -al $expdir/ | grep foo.txt | awk '{ print $1 }')
+
+ log "{Info} $ATTR_TMPREG1 ~ $ATTR_TMPREG2 ~ $ATTR_TMPREG3"
+ run '[ x"$ATTR_TMPREG1" == x"$ATTR_TMPREG2" -a x"$ATTR_TMPREG1" == x"$ATTR_TMPREG3" ]'
+ }
+ run 'mountpoint $nfsmp-1 && umount $nfsmp-1'
+ run 'mountpoint $nfsmp-2 && umount $nfsmp-2'
+ run 'rm -f $expdir/foo.txt'
+ run 'rm -rf $nfsmp-{1,2}'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-$role-Test-lookupcache_test
+ MNT_OPTS="ac,acdirmin=30,acdirmax=60,lookupcache=pos"
+ log "\n{Info} ${MNT_OPTS}"
+ run 'chmod 777 $expdir'
+ run 'mkdir -p $expdir/foodir && touch $expdir/foodir/foo-1.txt'
+ run 'service_nfs restart'
+ run 'mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}'
+ [ $? = 0 ] && {
+ run 'ls -l $nfsmp/foodir/ | grep foo-1.txt'
+ run 'rm -f $expdir/foodir/foo-1.txt'
+ run 'sleep 1' -
+ log "{Info} Checking again..."
+ run 'ls -l $nfsmp/foodir/ | grep foo-1.txt' 1
+ run 'umount $nfsmp'
+ }
+ run 'rm -fr $expdir'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-$role-Test-rsize-wsize
+ minSize=1024
+ minFixSize=4096
+ #maxSize=1048576
+ run "cat /proc/fs/nfsd/max_block_size" 0 "The default max block size varies depending on RAM size, with a maximum of 1M."
+ maxSize=$(cat /proc/fs/nfsd/max_block_size)
+ run 'mkdir -p $expdir'
+ run 'echo "$expdir *(rw,sync,no_root_squash)" > /etc/exports'
+ run 'service_nfs restart'
+ MNT_OPTS="rsize=1024,wsize=1024"
+ run "mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}"
+ run 'grep $nfsmp /proc/mounts' -
+ run "cat /proc/mounts | grep -q $MNT_OPTS"
+ run 'umount $nfsmp'
+ MNT_OPTS="rsize=8192,wsize=8192"
+ run "mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}"
+ run 'grep $nfsmp /proc/mounts' -
+ run "cat /proc/mounts | grep -q $MNT_OPTS"
+ run 'umount $nfsmp'
+ MNT_OPTS="rsize=1,wsize=255" # less than min_size($minSize)
+ run "mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}"
+ run 'grep $nfsmp /proc/mounts' -
+ run "cat /proc/mounts | grep -q rsize=$minFixSize,wsize=$minFixSize" 0 "Specified values lower than $minSize are replaced with $minFixSize"
+ run 'umount $nfsmp'
+ MNT_OPTS="rsize=1048577,wsize=2048576" # great than max_size($maxSize)
+ run "mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}"
+ run 'grep $nfsmp /proc/mounts' -
+ run "cat /proc/mounts | grep -q rsize=$maxSize,wsize=$maxSize" 0 "Specified values more than $maxSize are replaced with $maxSize"
+ run 'umount $nfsmp'
+ MNT_OPTS="rsize=0,wsize=0"
+ run "mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}"
+ run 'grep $nfsmp /proc/mounts' -
+ run "cat /proc/mounts | grep -q rsize=$maxSize,wsize=$maxSize" 0 "Specified values more than $maxSize are replaced with $maxSize"
+ run 'umount $nfsmp'
+ MNT_OPTS="rsize=-1,wsize=-3"
+ run "mount ${HOSTNAME}:$expdir $nfsmp -o ${MNT_OPTS}" 1-255
+ rlPhaseEnd
+
+for V in $(ls_nfsvers); do
+ rlPhaseStartTest do-$role-NFS-mount-options-can-be-lost-when-using-bg-option-vers${V}
+ run 'service_nfs stop'
+ run 'mount -v -t nfs -o rw,bg,hard,nointr,tcp,vers=$V,timeo=600,rsize=32768,wsize=32768,actimeo=0,noac localhost:$expdir $nfsmp'
+ run 'service_nfs start'
+ run 'while ! grep -q $nfsmp /proc/mounts; do sleep 15; done' -
+ run 'grep $nfsmp /proc/mounts'
+ run 'grep $nfsmp /proc/mounts | grep -q "rw,sync"'
+ if [ "$V" = "2" ]; then
+ run 'grep $nfsmp /proc/mounts | grep -q "vers=$V,rsize=8192,wsize=8192"'
+ else
+ run 'grep $nfsmp /proc/mounts | grep -q "vers=$V,rsize=32768,wsize=32768"'
+ fi
+ run 'grep $nfsmp /proc/mounts | grep -q "acregmin=0,acregmax=0,acdirmin=0,acdirmax=0,hard,noac,proto=tcp"'
+ run 'grep $nfsmp /proc/mounts | grep -q "timeo=600,retrans=2,sec=sys"'
+ run "umount $nfsmp"
+ rlPhaseEnd
+done
+
+ rlPhaseStartTest do-$role-Test-"mount-nfs-needs-descriptive-error-when-nfsvers-specified-incorrectly"
+ run "log=`mktemp -q`" 0 "Creating temporary log file"
+ log "{Info} Specify the invalid value."
+ for vers in {"v3","vers","+","*",""}; do
+ run "mount -t nfs -o vers=$vers localhost:$expdir $nfsmp 2>$log" 32 \
+ "should be failed as expected using invalid value"
+ run "mount -t nfs -o nfsvers=$vers localhost:$expdir $nfsmp 2>>$log" 32 \
+ "should be failed as expected using invalid value"
+ run "cat $log" -
+ run "egrep -q 'Bad nfs mount parameter|parsing error|invalid value' $log"
+ run ">$log" 0 "clear $log content"
+ done
+ log "{Info} Specify the valid number (maybe not supported)."
+ run "ls_nfsvers" -
+ for vers in {1,2,3,4,5,23}; do
+ if ls_nfsvers | grep -q "^$vers"; then
+ run "mount -t nfs -o vers=$vers localhost:$expdir $nfsmp"
+ run "umount $nfsmp"
+ run "mount -t nfs -o nfsvers=$vers localhost:$expdir $nfsmp"
+ run "umount $nfsmp"
+ else
+ run "mount -t nfs -o vers=$vers localhost:$expdir $nfsmp 2>$log" 32 \
+ "should be failed as expected using unsupported version"
+ [ $? = 0 ] && run "umount $nfsmp"
+ run "mount -t nfs -o nfsvers=$vers localhost:$expdir $nfsmp 2>>$log" 32 \
+ "should be failed as expected using unsupported version"
+ [ $? = 0 ] && run "umount $nfsmp"
+ run "cat $log" -
+ run "egrep -q 'not supported|parsing error|invalid value|call failed' $log"
+ run ">$log" 0 "clear $log content"
+ fi
+ done
+ run "rm -f $log" 0 "Remove temporary log file"
+ rlPhaseEnd
+
+ rlPhaseStartCleanup do-$role-Cleanup-
+ run 'mountpoint $nfsmp && umount $nfsmp' 1
+ hostnamectl set-hostname $ORIGINAL_HOSTNAME
+ run 'rm -rf $expdir $nfsmp'
+ rlFileRestore
+ run 'service_nfs restart'
+ rlPhaseEnd
+rlJournalEnd
+#rlJournalPrintText
+
diff --git a/tests/systemd-nfs/PURPOSE b/tests/systemd-nfs/PURPOSE
new file mode 100644
index 0000000..556df42
--- /dev/null
+++ b/tests/systemd-nfs/PURPOSE
@@ -0,0 +1 @@
+# nothing
diff --git a/tests/systemd-nfs/_env b/tests/systemd-nfs/_env
new file mode 100644
index 0000000..d90f45d
--- /dev/null
+++ b/tests/systemd-nfs/_env
@@ -0,0 +1,7 @@
+export TOPLEVEL_NAMESPACE=nfs-utils
+export PKG_NAMESPACE=nfs-utils
+export RELATIVE_PATH=systemd-nfs
+export PACKAGE=nfs-utils
+export PACKAGE_NAME=nfs-utils
+export PKG_LIST=nfs-utils nfs-utils-lib libnfsidmap libsss_idmap libtirpc rpcbind
+export TEST=/nfs-utils/systemd-nfs
diff --git a/tests/systemd-nfs/runtest.sh b/tests/systemd-nfs/runtest.sh
new file mode 100755
index 0000000..227ec36
--- /dev/null
+++ b/tests/systemd-nfs/runtest.sh
@@ -0,0 +1,287 @@
+#!/bin/bash
+# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: test for: nfs
+# Author: Jianhong Yin <jiyin@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2014 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+[ -e /usr/bin/rhts-environment.sh ] && . /usr/bin/rhts-environment.sh
+. /usr/share/beakerlib/beakerlib.sh || exit 1
+
+#===============================================================================
+
+#signal trap
+trap "cleanup" SIGINT SIGTERM SIGHUP SIGQUIT
+cleanup() {
+ rlFileRestore
+ run 'service_nfsconfig restart'
+ #rm -rf $expdir $nfsmp
+}
+
+#global var define
+serv=nfs
+rpm -q systemd || {
+ echo "{Warn} no systemd installed, skip the test"
+ report_result $TEST PASS
+ exit 0
+}
+
+rlJournalStart
+ rlPhaseStartSetup do-Setup-
+ # Load beakerlib you needed
+ rlImport kernel/base
+ envinfo
+ rlFileBackup /etc/exports /etc/sysconfig/nfs
+ run 'echo "/usr/share *(ro)" >/etc/exports'
+ run 'echo "RPCNFSDARGS=8" >/etc/sysconfig/nfs' 0 "avoid invalid config file"
+ run 'service_nfsconfig restart' 0 "RHEL-7.1 or later need restart nfs-config to reload /etc/sysconfig/nfs"
+ run "useradd testuserqa" -
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-start
+ run "service_$serv start" 0 "Service must start without problem"
+ run "service_$serv status" 0 "Then Status command"
+ run "service_$serv start" 0 "Already started service"
+ run "service_$serv status" 0 "Again status command"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-restart
+ run "service_$serv restart" 0 "Restarting of service"
+ run "service_$serv status" 0 "Status command"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-stop
+ run "service_$serv stop" 0 "Stopping service"
+ run "service_$serv status" 3 "Status of stopped service"
+ run "service_$serv stop" 0 "Stopping service again"
+ run "service_$serv status" 3 "Status of stopped service"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-"insufficient-rights"
+ run "service_$serv restart " 0 "Starting service for restarting under nonpriv user"
+ run "su testuserqa -c 'service_$serv stop'" 1,4 "Insufficient rights, stopping service under nonprivileged user must fail"
+ run "su testuserqa -c 'service_$serv start'" 0,1,4 "Insufficient rights, starting service under nonprivileged user must fail or pass as already started"
+ run "su testuserqa -c 'service_$serv status'" 0 "Sufficient rights, service status should be accessible to nonprivileged users"
+ run "service_$serv stop" 0 "Stopping service for starting under nonpriv user"
+ run "su testuserqa -c 'service_$serv start'" 1,4 "Insufficient rights, starting of stopped service under nonprivileged user must fail"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-"operations"
+ run "service_$serv start" 0 "Service have to implement start function"
+ run 'sleep 5' 0 "sleep a while avoid the start rate limit"
+ run "service_$serv restart" 0 "Service have to implement restart function"
+ run "service_$serv status" 0 "Service have to implement status function"
+ run 'sleep 5' 0 "sleep a while avoid the start rate limit"
+ run "service_$serv condrestart" 0 "Service have to implement condrestart function"
+ [ $? != 0 ] && run "journalctl -xn" -
+ run 'sleep 5' 0 "sleep a while avoid the start rate limit"
+ run "service_$serv try-restart" 0 "Service have to implement try-restart function"
+ [ $? != 0 ] && run "journalctl -xn" -
+ run "service_$serv reload" 0 "Service have to implement reload function"
+ [ $? != 0 ] && run "journalctl -xn" -
+ run "service_$serv force-reload" 0 "Service have to implement force-reload function"
+ [ $? != 0 ] && run "journalctl -xn" -
+ run "service_$serv noexistop" 2 "Testing proper return code when nonexisting function"
+ rlPhaseEnd
+
+ # Should do nothing if a service is already stopped or not running (according to manpage of systemctl)
+ # http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic.html#INISCRPTACT
+ rlPhaseStartTest do-Test-"operations-stopped"
+ run "service_$serv stop" 0 "Service have to implement stop function"
+ run "service_$serv condrestart" 0 "Service have to implement condrestart function"
+ run "service_$serv try-restart" 0 "Service have to implement try-restart function"
+ run "service_$serv force-reload" 0 "Service have to implement force-reload function"
+ run "service_$serv status" 3 "Above oprations should do nothing if service are not running"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-enable-disable-$serv
+ if systemctl --quiet is-enabled $serv; then
+ run "systemctl disable $serv" 0 "Disable service on boot"
+ run "systemctl is-enabled $serv" 1 "Check whether service is disabled"
+ run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ run "systemctl enable $serv" 0 "Enable service on boot"
+ run "systemctl is-enabled $serv" 0 "Check whether service is enabled"
+ run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ else
+ run "systemctl enable $serv" 0 "Enable service on boot"
+ run "systemctl is-enabled $serv" 0 "Check whether service is enabled"
+ run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ run "systemctl disable $serv" 0 "Disable service on boot"
+ run "systemctl is-enabled $serv" 1 "Check whether service is disabled"
+ run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ fi
+ rlPhaseEnd
+
+ # ystemctl enable fails for symlinks in /usr/lib/systemd/system
+ # Use a workaround to test enable/disable with nfs-server.service
+ rlPhaseStartTest do-Test-enable-disable-nfs-server
+ if systemctl --quiet is-enabled nfs-server; then
+ run "systemctl disable nfs-server" 0 "Disable nfs-serverice on boot"
+ run "systemctl is-enabled nfs-server" 1 "Check whether nfs-serverice is disabled"
+ run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ run "systemctl enable nfs-server" 0 "Enable nfs-serverice on boot"
+ run "systemctl is-enabled nfs-server" 0 "Check whether nfs-serverice is enabled"
+ run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ else
+ run "systemctl enable nfs-server" 0 "Enable nfs-serverice on boot"
+ run "systemctl is-enabled nfs-server" 0 "Check whether nfs-serverice is enabled"
+ run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ run "systemctl disable nfs-server" 0 "Disable nfs-serverice on boot"
+ run "systemctl is-enabled nfs-server" 1 "Check whether nfs-serverice is disabled"
+ run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ fi
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-nfsv4-only
+ run 'service nfs stop'
+ # MOUNTD_NFS_V2 MOUNTD_NFS_V3 was not supported in RHEL-7.x
+ run 'echo -e "RPCMOUNTDOPTS=\"-N 2 -N 3\"" >>/etc/sysconfig/nfs' 0 "enabling nfsv4 only"
+ # If in RHEL-7.1 or later need restart nfs-config service to flush /etc/sysconfig/nfs to /run/sysconfig/nfs-utils
+ # But since RHEL-7.3, nfs-config change to be ru-run during the dependent service starting
+ run 'service_nfsconfig status &>/dev/null && service_nfsconfig restart' -
+ run 'cat /run/sysconfig/nfs-utils | grep RPCMOUNTDARGS | grep "\""' 0 "quote variable in /run/sysconfig/nfs-utils"
+ run 'sleep 5' 0 "sleep a while avoid service script bug"
+ run 'service_nfs start'
+ run 'rpcinfo -s | grep -w mountd' 1 "if nfsv4 only, no mountd info in rpcinfo"
+ rlFileRestore /etc/sysconfig/nfs
+ run 'service_nfsconfig restart'
+ rlPhaseEnd
+
+ # Since nfs-service no longer starts the daemons in question. They are now split
+ # into their own services (nfs-mountd.service, rpc-statd.service, nfs-idmapd.service).
+ # Then `systemctl status nfs-server.service` cannot accurately reflect the
+ # state of the combination of daemons that are needed for a working NFS server.
+ rlPhaseStartTest do-Test-"nfs-server-is-active-even-processes-terminated"
+ run 'service_nfs restart'
+ run 'pkill rpc.mountd' -
+ run 'killall -9 nfsd' -
+ run 'ps axf | grep -e "rpc.mountd" -e "nfsd"' -
+ run 'service nfs-mountd status' 1-255
+ run 'rpcinfo -t localhost 100005' 1 "pings mountd"
+ log '{Info} nfsserver resource agent has been updated to monitor all its daemons'
+ run 'service_nfs status' 1-255,0
+ run 'service_nfs status 2>&1 | grep "active"' -
+ run 'service_nfs stop'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-"should-auto-mount-/proc/fs/nfsd"
+ run 'service_nfs restart'
+ run 'service_nfs stop'
+ run 'umount /proc/fs/nfsd'
+ run 'service_nfs start 2>&1 | grep "mount -t nfsd"' 1 "should auto mount nfsd"
+ run 'mount -t nfsd nfsd /proc/fs/nfsd' -
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-"use-rpcbind.service-in-nfs-server.service"
+ run "systemctl reset-failed" 0 "workaround for failure of starting too often"
+ log "{Info} Starting nfs while rpcbind is stopped"
+ run "service rpcbind stop; service rpcbind stop" 0 "stop twice as workaround"
+ run "service rpcbind status" 3 "rpcbind.service should be stopped"
+ run "service nfs restart"
+ run "service nfs status" 0 "should start nfs successfully"
+ run "service rpcbind status" 0 "starting nfs should bring rpcbind up"
+
+ log "{Info} Starting nfs while rpcbind is active"
+ run "service rpcbind start"
+ run "service rpcbind status" 0 "rpcbind should be active"
+ run "service nfs restart"
+ run "service nfs status" 0 "should start nfs successfully"
+ run "service rpcbind status" 0 "starting nfs should keep rpcbind up"
+
+ log "{Info} Stopping nfs while rpcbind is active"
+ run "service rpcbind start"
+ run "service rpcbind status" 0 "rpcbind should be active"
+ run "service nfs start; service nfs status"
+ run "service nfs stop; service nfs status" 3
+ run "service rpcbind status" 0 "stopping nfs should keep rpcbind up"
+
+ log "{Info} Stopping nfs while rpcbind is stopped"
+ run "service nfs start" 0 "firstly start nfs since it can bring rpcbind up"
+ run "service nfs status" 0 "should start nfs successfully"
+ run "service rpcbind stop; service rpcbind stop" 0 "stop twice as workaround"
+ run "service rpcbind status" 3 "rpcbind should be stopped"
+ run "service nfs stop"
+ # If a daemon tries to connect to port 111 systemd will start rpcbind automaticly
+ run "service rpcbind status" 0 "stopping nfs should bring rpcbind up"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-"restarting rpbind also restart the the nfs server"
+ run "systemctl reset-failed" 0 "workaround for failure of starting too often"
+ log "{Info} Starting rpcbind while nfs is stopped"
+ run "service nfs stop"
+ run "service nfs status" 3 "nfs should be stopped"
+ run "service rpcbind restart"
+ run "service nfs status" 3 "starting rpcbind should NOT bring nfs up"
+
+ log "{Info} Starting rpcbind while nfs is active"
+ run "service nfs start"
+ run "service nfs status" 0 "nfs should be active"
+ run "service rpcbind restart"
+ run "service nfs status" 0 "starting rpcbind should NOT interfere nfs"
+
+ log "{Info} Stopping rpcbind while nfs is active"
+ run "service nfs start"
+ run "service nfs status" 0 "nfs should be active"
+ run "service rpcbind start; service rpcbind stop"
+ run "service nfs status" 0 "stopping rpcbind should NOT bring nfs down"
+
+ log "{Info} Stopping rpcbind while nfs is stopped"
+ run "service nfs stop"
+ run "service nfs status" 3 "nfs should be stopped"
+ run "service rpcbind start; service rpcbind stop"
+ run "service nfs status" 3 "stopping rpcbind should NOT interfere nfs"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-fix-long-nfsd-startup-delay-in-absence-of-rpcbind
+ run "systemctl stop rpcbind"
+ run "systemctl stop nfs-server"
+ run "systemctl mask rpcbind" 0 "Mask systemd service rpcbind.service"
+ run "timeLimitRun 10 systemctl start nfs-server" 1-255 "Start service nfs-server without rpcbind will be failed due to systemd unit dependency"
+ run "systemctl unmask rpcbind"
+ run "timeLimitRun 10 systemctl stop nfs-server" -
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-"nfs-utils need to cause gssproxy reload"
+ run "cp /etc/gssproxy/gssproxy.conf /etc/gssproxy/gssproxy.conf.backup" 0 "backuping"
+ run "echo '[gssproxy]' > /etc/gssproxy/gssproxy.conf"
+ run "echo 'debug = true' >> /etc/gssproxy/gssproxy.conf"
+ run "systemctl restart gssproxy"
+#FIXME when BZ#1535424 is fixed. Should not use /var/log/messages as it is not used on Fedora any more.
+ run "echo '' > /var/log/messages"
+ run "systemctl restart nfs"
+ run "systemctl status nfs"
+ run "systemctl status gssproxy"
+ run "cat /var/log/messages | grep 'gssproxy:'" -
+ run "cat /var/log/messages | grep -q 'gssproxy:.*loaded'" 0 "should re-reading config"
+ run "mv /etc/gssproxy/gssproxy.conf.backup /etc/gssproxy/gssproxy.conf" 0 "recovering"
+ run "systemctl restart gssproxy"
+ rlPhaseEnd
+
+ rlPhaseStartCleanup do-Cleanup-
+ run "userdel -rf testuserqa" -
+ rlFileRestore
+ run 'timeLimitRun 10 service_nfsconfig restart'
+ rlPhaseEnd
+
+rlJournalEnd
+#rlJournalPrintText
+#enable_avc_check
diff --git a/tests/systemd-nfs/subtest.yml b/tests/systemd-nfs/subtest.yml
new file mode 100644
index 0000000..705c8b0
--- /dev/null
+++ b/tests/systemd-nfs/subtest.yml
@@ -0,0 +1,2 @@
+attr: {ssched: yes.dangerous}
+attr: {ssched: yes.dangerous}, setup: [--kernel-options=ipv6.disable=1]
diff --git a/tests/tests.yml b/tests/tests.yml
new file mode 100644
index 0000000..8b5bd0d
--- /dev/null
+++ b/tests/tests.yml
@@ -0,0 +1,20 @@
+---
+# Tests that run in classic context
+- hosts: localhost
+ roles:
+ - role: standard-test-rhts
+ use_beakerlib_libraries: yes
+ tags:
+ - classic
+ tests:
+ - exportfs
+ - export-mount-local
+ - mount
+ - nfs-mount-options-all
+ - systemd-nfs
+ - umount
+ required_packages:
+ - bind-utils # export-mount-local needs this package
+ - findutils # beakerlib needs find command
+ - nfs-utils
+ - redhat-lsb-core # lsb_release is needed by tests
diff --git a/tests/umount/PURPOSE b/tests/umount/PURPOSE
new file mode 100644
index 0000000..9f896d5
--- /dev/null
+++ b/tests/umount/PURPOSE
@@ -0,0 +1,2 @@
+Description: Test for command umount.nfs{,4}
+Author: Stevens Yin <jiyin@redhat.com>
diff --git a/tests/umount/_env b/tests/umount/_env
new file mode 100644
index 0000000..dd7d64f
--- /dev/null
+++ b/tests/umount/_env
@@ -0,0 +1,7 @@
+export TOPLEVEL_NAMESPACE=nfs-utils
+export PKG_NAMESPACE=nfs-utils
+export RELATIVE_PATH=umount
+export PACKAGE=nfs-utils
+export PACKAGE_NAME=nfs-utils
+export PKG_LIST=nfs-utils nfs-utils-lib libnfsidmap libsss_idmap libtirpc rpcbind
+export TEST=/nfs-utils/umount
diff --git a/tests/umount/runtest.sh b/tests/umount/runtest.sh
new file mode 100644
index 0000000..8dee5c7
--- /dev/null
+++ b/tests/umount/runtest.sh
@@ -0,0 +1,122 @@
+#!/bin/bash
+# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: Test for command umount.nfs{,4}
+# Author: Stevens Yin <jiyin@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2013 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+[ -e /usr/bin/rhts-environment.sh ] && . /usr/bin/rhts-environment.sh
+. /usr/share/beakerlib/beakerlib.sh || exit 1
+
+#===============================================================================
+
+mnt=/nfs-mount
+expDir=/expDir
+prog=umount.nfs
+
+rlJournalStart
+ rlPhaseStartSetup do-Setup
+ # Load beakerlib you needed
+ rlImport kernel/base
+ envinfo
+ read IP4 _nil <<<$(getDefaultIp)
+ rlFileBackup /etc/sysconfig/nfs /etc/exports
+ run "mkdir -p $mnt $expDir"
+ run "echo '$expDir *(rw,no_root_squash,fsid=0)' > /etc/exports"
+ run 'service_nfs restart'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-$prog-with-wrong-option
+ run "$prog -xxxx" 1-255 "should exit with an error code"
+ run "$prog -xxxx 2>&1 | egrep -i '(usage:|try.*for more info)'" 0 "should output usage to user"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-$prog-without-args
+ run "$prog" 1-255 "should exit with an error code"
+ run "$prog 2>&1 | egrep -i '(usage:|try.*for more info)'" 0 "should output usage to user"
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-$prog--h
+ run "$prog -h" -
+ std=$($prog -h 2>&1)
+ run "$prog -h 2>&1 | egrep -i usage:"
+ [ $? = 0 ] && {
+ options=$(echo "$std"|grep -o '\[-[a-z]\+\]')
+ [ ${#options} -gt 3 ] && {
+ optionNuma=$((${#options} - 3))
+ optionNumb=$(echo "$std" | sed -n "/\t-$options/p" | wc -l)
+ optionNumc=$(echo "$std" | sed -n "/\t-[a-zA-Z]/p" | wc -l)
+ run "test $optionNuma = $optionNumb"
+ run "test $optionNuma = $optionNumc"
+ run 'echo "$std" | sed -n "/\t-$options/p" | grep " "' 1
+ }
+ }
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-Cannot-umount-NFS-mp-with-spaces
+ serv=localhost
+ expdirWithSpaces="/expdir with spaces"
+ nfsmpWithSpaces="/mnt/nfsmp with spaces"
+ run 'mkdir -p "$expdirWithSpaces" "$nfsmpWithSpaces"'
+ run 'echo "\"$expdirWithSpaces\" *(rw,no_root_squash,fsid=0)" > /etc/exports'
+ run 'service_nfs restart'
+ run 'service_nfs restart 2>&1 | grep "expdir with spaces does not support"' 1 \
+ "exportfs give incorrect message for mount dir containing spaces"
+ run 'mount -t nfs "$serv:$expdirWithSpaces" "$nfsmpWithSpaces"' 0 "mount dir with spaces"
+ run 'grep "$nfsmpWithSpaces" /proc/mounts' -
+ run 'umount "$nfsmpWithSpaces"' 0 "umount dir with spaces"
+ run 'grep "$nfsmpWithSpaces" /proc/mounts' 1 "cat /proc/mounts and umount successfully"
+ run 'rm -rf "$expdirWithSpaces" "$nfsmpWithSpaces"'
+ rlPhaseEnd
+
+ rlPhaseStartTest do-Test-"[nfsv3] umount.nfs: Failed to find '' protocol"
+ log "{Info} Creating a small (separate) fs on a loopback device."
+ run "dd if=/dev/zero of=fs.img bs=1M count=1000" -
+ run "losetup /dev/loop0 fs.img" -
+ run "mkfs.ext4 /dev/loop0" -
+ run "mkdir $expDir/foo"
+ run "mount /dev/loop0 $expDir/foo"
+ log "{Info} Listing the contents of the directory to trigger a submount."
+ run "echo '$expDir *(crossmnt)' > /etc/exports"
+ run "service_nfs restart"
+ run "mount localhost:$expDir $mnt -o vers=3"
+ run "ls $mnt/foo"
+ run "cat /proc/mounts | grep $mnt" -
+ run "umount $mnt/foo &>stdout.log"
+ run "cat stdout.log" -
+ run "cat stdout.log | grep -q 'Failed'" 1 "should not output error msg"
+ run "umount $mnt"
+ log "{Info} Recovering it."
+ run "service_nfs stop"
+ run "umount $expDir/foo"
+ run "rm -rf $expDir/foo"
+ run "losetup -d /dev/loop0" -
+ run "rm -f fs.img" -
+ rlPhaseEnd
+
+ rlPhaseStartCleanup do-Cleanup
+ rlFileRestore
+ rm -rf $mnt $expDir
+ rlPhaseEnd
+rlJournalEnd
+#rlJournalPrintText
+
From 5218121ee7e9c9ed75f3d1b91bae0b2a15f154b2 Mon Sep 17 00:00:00 2001
From: Bruno Goncalves <bgoncalv@redhat.com>
Date: Jan 17 2019 20:02:54 +0000
Subject: [PATCH 2/6] fixed some test issues
---
diff --git a/tests/exportfs/runtest.sh b/tests/exportfs/runtest.sh
index 8e34a8c..69d9532 100755
--- a/tests/exportfs/runtest.sh
+++ b/tests/exportfs/runtest.sh
@@ -48,7 +48,7 @@ rlJournalStart
hostnamectl set-hostname exportfs.test
fi
#clean nfs garbage, avoid affect from pre case
- { exportfs -ua; service nfs stop &>/dev/null; }
+ { exportfs -ua; service_nfs stop &>/dev/null; }
rlFileBackup /etc/sysconfig/nfs /etc/exports
rlFileBackup --clean /etc/exports.d/
run 'rm -f /etc/exports.d/*'
@@ -148,7 +148,7 @@ rlJournalStart
rlPhaseStartTest do-Test-exportfs-when-/proc/fs/nfsd-not-mount
run 'mkdir -p ${expdir}_tmp'
- run 'service nfs start'
+ run 'service_nfs start'
run 'pkill rpc.mountd && umount /proc/fs/nfsd'
run 'exportfs -iv *:${expdir}_tmp'
run 'mount -t nfsd nfsd /proc/fs/nfsd' 0-255 "restore env: mount nfsd"
@@ -157,7 +157,7 @@ rlJournalStart
rlPhaseStartTest do-Test-option-nordirplus
#nfsv3 export option nordirplus support test
- run 'service nfs start'
+ run 'service_nfs start'
run 'exportfs -i -o nordirplus "*:$expdir"'
run 'mount -o vers=3 localhost:$expdir $nfsmp'
run 'grep $nfsmp /proc/mounts'
diff --git a/tests/systemd-nfs/runtest.sh b/tests/systemd-nfs/runtest.sh
index 227ec36..63d8593 100755
--- a/tests/systemd-nfs/runtest.sh
+++ b/tests/systemd-nfs/runtest.sh
@@ -38,7 +38,7 @@ cleanup() {
}
#global var define
-serv=nfs
+serv=nfs-server
rpm -q systemd || {
echo "{Warn} no systemd installed, skip the test"
report_result $TEST PASS
diff --git a/tests/tests.yml b/tests/tests.yml
index 8b5bd0d..865464b 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -2,7 +2,7 @@
# Tests that run in classic context
- hosts: localhost
roles:
- - role: standard-test-rhts
+ - role: standard-test-beakerlib
use_beakerlib_libraries: yes
tags:
- classic
@@ -16,5 +16,6 @@
required_packages:
- bind-utils # export-mount-local needs this package
- findutils # beakerlib needs find command
+ - iptables # nfs-mount-options-all needs this package
- nfs-utils
- redhat-lsb-core # lsb_release is needed by tests
From 69a4cec52d5d1803bfa88670501b4f8d1dcd9481 Mon Sep 17 00:00:00 2001
From: Bruno Goncalves <bgoncalv@redhat.com>
Date: Jan 18 2019 17:24:32 +0000
Subject: [PATCH 3/6] sync export-mount-local and systemd-nfs with tests from QE
---
diff --git a/tests/export-mount-local/Makefile b/tests/export-mount-local/Makefile
new file mode 100644
index 0000000..6ddfa94
--- /dev/null
+++ b/tests/export-mount-local/Makefile
@@ -0,0 +1,76 @@
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: test for: export-mount
+# Author: Jianhong Yin <jiyin@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2014 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#Generate and export TEST= PACKAGE=
+TENV=_env
+ifeq ($(PKG_TOP_DIR),)
+ export PKG_TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -e $$p/env.mk -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ export _TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -d $$p/.git -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ -include $(PKG_TOP_DIR)/env.mk
+endif
+include $(TENV)
+ifeq ($(_TOP_DIR),)
+ _TOP_DIR=/mnt/tests/$(TOPLEVEL_NAMESPACE)
+endif
+#===============================================================================
+export TESTVERSION=1.0
+
+BUILT_FILES=
+FILES=$(TENV) $(METADATA) runtest.sh Makefile PURPOSE
+
+.PHONY: all install download clean
+
+run: $(FILES) build
+ ( set +o posix; [ -e /usr/bin/rhts_environment.sh ] && . /usr/bin/rhts_environment.sh; \
+. /usr/share/beakerlib/beakerlib.sh || exit 1; \
+. runtest.sh )
+
+build: $(BUILT_FILES)
+ test -x runtest.sh || chmod a+x runtest.sh
+
+clean:
+ rm -f *~ $(BUILT_FILES)
+
+-include /usr/share/rhts/lib/rhts-make.include
+
+$(METADATA): Makefile
+ @echo "Owner: Jianhong Yin <jiyin@redhat.com>" > $(METADATA)
+ @echo "Name: $(TEST)" >> $(METADATA)
+ @echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
+ @echo "Path: $(TEST_DIR)" >> $(METADATA)
+ @echo "Description: test for: export-mount" >> $(METADATA)
+ @echo "Type: function" >> $(METADATA)
+ @echo "Type: $(PACKAGE)-level-tier1" >> $(METADATA)
+ @echo "TestTime: 30m" >> $(METADATA)
+ @echo "RunFor: $(PACKAGE)" >> $(METADATA)
+ @echo "Requires: $(PACKAGE)" >> $(METADATA)
+ @echo "Priority: Normal" >> $(METADATA)
+ @echo "License: GPLv2" >> $(METADATA)
+ @echo "Requires: library(kernel/base)" >> $(METADATA)
+ @echo "Requires: nfs-utils" >> $(METADATA)
+ @echo "Requires: bind-utils" >> $(METADATA)
+ @echo "RhtsRequires: library(kernel/base)" >> $(METADATA)
+ rhts-lint $(METADATA)
diff --git a/tests/export-mount-local/runtest.sh b/tests/export-mount-local/runtest.sh
index e72e0f4..60d0c90 100755
--- a/tests/export-mount-local/runtest.sh
+++ b/tests/export-mount-local/runtest.sh
@@ -1,39 +1,43 @@
#!/bin/bash
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#
-# Description: test for: export-mount
+# Description: test for: export-mount-local
# Author: Jianhong Yin <jiyin@redhat.com>
-#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2014 Red Hat, Inc.
#
-# This program is free software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation, either version 2 of
-# the License, or (at your option) any later version.
+# This copyrighted material is made available to anyone wishing
+# to use, modify, copy, or redistribute it subject to the terms
+# and conditions of the GNU General Public License version 2.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-# PURPOSE. See the GNU General Public License for more details.
+# PURPOSE. See the GNU General Public License for more details.
#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see http://www.gnu.org/licenses/.
+# You should have received a copy of the GNU General Public
+# License along with this program; if not, write to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ -e /usr/bin/rhts-environment.sh ] && . /usr/bin/rhts-environment.sh
. /usr/share/beakerlib/beakerlib.sh || exit 1
+# Load beakerlib you needed
+rlImport kernel/base
+envinfo
+#disable_avc_check
+
#===============================================================================
#signal trap
trap "cleanup" SIGINT SIGTERM SIGHUP SIGQUIT
cleanup() {
- rlFileRestore
- rm -rf $expdir $nfsmp
+ rlFileRestore
+ rm -rf $expdir $nfsmp
}
#global var define
@@ -41,202 +45,180 @@ BZ=exp-mount-local
expdir=/exportDir-$BZ
nfsmp=/mnt/nfsmp-$BZ
subexpdir=/exportDir-$BZ/sub
-tmpnfsmp=/tmp/nfsmp-$BZ
+tmpnfsmp=${nfsmp}-tmp
-host="$HOSTNAME"
+read ipv4 _nil <<<$(getDefaultIp)
+read ipv6s _nil <<<$(getDefaultIp 6)
+ipv6="[$ipv6s]"
# in case "localhost.localdomain"
-echo "$host" | grep -q "localhost" && host="localhost"
+if echo "$HOSTNAME" | grep -q "localhost"; then
+ ORIGINAL_HOSTNAME="$HOSTNAME"
+ HOSTNAME="$BZ"
+ hostnamectl set-hostname "$HOSTNAME"
+fi
+host="$HOSTNAME"
rlJournalStart
rlPhaseStartSetup do-Setup-
- # Load beakerlib you needed
- rlImport kernel/base
- read ipv4 _nil <<<$(getDefaultIp)
- read ipv6s _nil <<<$(getDefaultIp 6 global)
- ipv6="[$ipv6s]"
- envinfo
- rlFileBackup /etc/exports /etc/sysconfig/nfs /etc/nfs.conf /etc/hosts
- if [ "$host" = "localhost" ]; then
+ rlFileBackup /etc/{exports,auto.master} /etc/sysconfig/{nfs,autofs} /etc/nfs.conf /etc/hosts
+ if [ -n "ORIGINAL_HOSTNAME" ]; then
run "echo '$ipv4 $host' >> /etc/hosts"
- if [ -n "$ipv6s" ]; then
- run "echo '$ipv6s $host' >> /etc/hosts"
- fi
+ run "echo '$ipv6s $host' >> /etc/hosts"
run "cat /etc/hosts" -
fi
- run 'rm -rf $expdir $nfsmp && mkdir -p $expdir $nfsmp'
- run 'rm -rf $subexpdir $tmpnfsmp && mkdir -p $subexpdir $tmpnfsmp'
- run 'echo "/tmp *(ro,sync)" >/etc/exports'
- run 'service_nfs restart'
- #avoid issues restarting the server too quickly
- sleep 10
- run 'ls_nfsvers'
+ run "rm -rf $expdir $nfsmp && mkdir -p $expdir $nfsmp"
+ run "rm -rf $subexpdir $tmpnfsmp && mkdir -p $subexpdir $tmpnfsmp"
+ run "service_nfs restart"
+ run "ls_nfsvers"
rlPhaseEnd
-for V in $(ls_nfsvers); do
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-ipv4
- run "exportfs -au && exportfs -iv $ipv4:$expdir -o ro,sync,no_root_squash"
- run 'mount -o vers=$V $ipv4:$expdir $nfsmp'
- run 'umount $nfsmp'
- rlPhaseEnd
- if [ -n "$ipv6s" ]; then
+ for V in $(ls_nfsvers); do
+ # export by IPv4 and try to mount it
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-ipv4
+ run "exportfs -au && exportfs -iv $ipv4:$expdir -o ro,sync,no_root_squash"
+ run "mount -o vers=$V $ipv4:$expdir $nfsmp"
+ run "umount $nfsmp"
+ rlPhaseEnd
rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-ipv6-x
- run 'mount -o vers=$V $ipv6:$expdir $nfsmp' 1-255
- [ $? = 0 ] && run "umount $nfsmp"
+ if [ -n "$ipv6s" ]; then
+ run "mount -o vers=$V $ipv6:$expdir $nfsmp" 1-255
+ [ $? = 0 ] && run "umount $nfsmp"
+ fi
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-host-bz876847
+ run "mount -o vers=$V $host:$expdir $nfsmp"
+ run "umount $nfsmp"
rlPhaseEnd
- fi
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-host
- run 'mount -o vers=$V $host:$expdir $nfsmp'
- run 'umount $nfsmp'
- rlPhaseEnd
- if [ -n "$ipv6s" ]; then
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-ipv6
- run "exportfs -au && exportfs -iv $ipv6:$expdir -o ro,sync,no_root_squash"
- run 'mount -o vers=$V $ipv6:$expdir $nfsmp'
- run 'umount $nfsmp'
+ if [ -n "$ipv6s" ]; then
+ # export by IPv6 and try to mount it
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-ipv6
+ run "exportfs -au && exportfs -iv $ipv6:$expdir -o ro,sync,no_root_squash"
+ run "mount -o vers=$V $ipv6:$expdir $nfsmp"
+ run "umount $nfsmp"
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-ipv4-x
+ run "mount -o vers=$V $ipv4:$expdir $nfsmp" 1-255
+ [ $? = 0 ] && run "umount $nfsmp"
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-host
+ run "dig -t aaaa $HOSTNAME +short" 0 "To get the IPv6 address"
+ if [ -n "$ipv6s" ]; then
+ run "mount -o vers=$V $host:$expdir $nfsmp"
+ run "umount $nfsmp"
+ fi
+ rlPhaseEnd
+ fi
+
+ # export by hostname and try to mount it
+ rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-host
+ run "exportfs -au && exportfs -iv $host:$expdir -o ro,sync,no_root_squash"
+ run "mount -o vers=$V $host:$expdir $nfsmp"
+ run "umount $nfsmp"
rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-ipv4-x
- run 'mount -o vers=$V $ipv4:$expdir $nfsmp' 1-255
- [ $? = 0 ] && run "umount $nfsmp"
+ rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-ipv4
+ run "mount -o vers=$V $ipv4:$expdir $nfsmp"
+ run "umount $nfsmp"
rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-host
- if [ -n "$(dig -t aaaa $HOSTNAME +short)" ]; then
- run 'mount -o vers=$V $host:$expdir $nfsmp'
- run 'umount $nfsmp'
+ rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-ipv6
+ run "dig -t aaaa $HOSTNAME +short" 0 "To get the IPv6 address"
+ if [ -n "$ipv6s" ]; then
+ run "mount -o vers=$V $ipv6:$expdir $nfsmp"
+ run "umount $nfsmp"
fi
rlPhaseEnd
- fi
- rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-host
- run "exportfs -au && exportfs -iv $host:$expdir -o ro,sync,no_root_squash"
- run 'mount -o vers=$V $host:$expdir $nfsmp'
- run 'umount $nfsmp'
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-ipv4
- run 'mount -o vers=$V $ipv4:$expdir $nfsmp'
- run 'umount $nfsmp'
- rlPhaseEnd
- if [ -n "$ipv6s" ]; then
- rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-ipv6
- if [ -n "$(dig -t aaaa $HOSTNAME +short)" ]; then
- run 'mount -o vers=$V $ipv6:$expdir $nfsmp'
- run 'umount $nfsmp'
+ # export sub-directory by IPv4 and try to mount it
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-ipv4
+ run "echo '$expdir *(ro,sync,no_root_squash)' >/etc/exports"
+ run "echo '$subexpdir $ipv4(ro,sync,no_root_squash)' >>/etc/exports"
+ which systemctl >/dev/null 2>&1 && run "systemctl reset-failed"
+ run "service_nfs restart"
+ run "showmount -e" -
+ run "mount -o vers=$V $ipv4:$expdir $nfsmp"
+ run "mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp"
+ run "umount $nfsmp $tmpnfsmp"
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-ipv6-x-bz1198900
+ if [ -n "$ipv6s" ]; then
+ run "mount -o vers=$V $ipv6:$expdir $nfsmp"
+ run "mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp" 1-255 "bz1198900 should not mount sub-directory with different ip"
+ [ $? = 0 ] && run "umount $tmpnfsmp"
+ run "umount $nfsmp"
fi
rlPhaseEnd
- fi
-
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-ipv4
- run 'echo "$expdir *(ro,sync,no_root_squash)" >/etc/exports'
- run 'echo "$subexpdir $ipv4(ro,sync,no_root_squash)" >>/etc/exports'
- run 'service_nfs restart'
- #avoid issues restarting the server too quickly
- sleep 10
- run 'showmount -e' -
- run 'mount -o vers=$V $ipv4:$expdir $nfsmp'
- run 'mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp'
- run 'umount $nfsmp $tmpnfsmp'
- rlPhaseEnd
- if [ -n "$ipv6s" ]; then
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-ipv6-x
- run 'mount -o vers=$V $ipv6:$expdir $nfsmp'
- run 'mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp' 1-255 "should not mount sub-directory with different ip"
- [ $? = 0 ] && run "umount $tmpnfsmp"
- run "umount $nfsmp"
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-host
+ run "mount -o vers=$V $host:$expdir $nfsmp"
+ run "mount -o vers=$V $host:$subexpdir $tmpnfsmp"
+ run "umount $nfsmp $tmpnfsmp"
rlPhaseEnd
- fi
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-host
- run 'mount -o vers=$V $host:$expdir $nfsmp'
- run 'mount -o vers=$V $host:$subexpdir $tmpnfsmp'
- run 'umount $nfsmp $tmpnfsmp'
- rlPhaseEnd
- if [ -n "$ipv6s" ]; then
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-ipv4-x
- run 'echo "$expdir *(ro,sync,no_root_squash)" >/etc/exports'
- run 'echo "$subexpdir $ipv6s(ro,sync,no_root_squash)" >>/etc/exports'
- run 'service_nfs restart'
- #avoid issues restarting the server too quickly
- sleep 10
- run 'showmount -e' -
- run 'mount -o vers=$V $ipv4:$expdir $nfsmp'
- run 'mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp' 1-255 "should not mount sub-directory with different ip"
- [ $? = 0 ] && run "umount $tmpnfsmp"
- run "umount $nfsmp"
+ if [ -n "$ipv6s" ]; then
+ # export sub-directory by IPv6 and try to mount it
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-ipv4-x-bz1198900
+ run "echo '$expdir *(ro,sync,no_root_squash)' >/etc/exports"
+ run "echo '$subexpdir $ipv6s(ro,sync,no_root_squash)' >>/etc/exports"
+ which systemctl >/dev/null 2>&1 && run "systemctl reset-failed"
+ run "service_nfs restart"
+ run "showmount -e" -
+ run "mount -o vers=$V $ipv4:$expdir $nfsmp"
+ run "mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp" 1-255 "bz1198900 should not mount sub-directory with different ip"
+ [ $? = 0 ] && run "umount $tmpnfsmp"
+ run "umount $nfsmp"
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-ipv6
+ run "mount -o vers=$V $ipv6:$expdir $nfsmp"
+ run "mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp"
+ run "umount $nfsmp $tmpnfsmp"
+ rlPhaseEnd
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-host
+ run "mount -o vers=$V $host:$expdir $nfsmp"
+ run "mount -o vers=$V $host:$subexpdir $tmpnfsmp"
+ run "umount $nfsmp $tmpnfsmp"
+ rlPhaseEnd
+ fi
+
+ # export sub-directory by hostname and try to mount it
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-ipv4
+ run "echo '$expdir *(ro,sync,no_root_squash)' >/etc/exports"
+ run "echo '$subexpdir $host(ro,sync,no_root_squash)' >>/etc/exports"
+ which systemctl >/dev/null 2>&1 && run "systemctl reset-failed"
+ run "service_nfs restart"
+ run "showmount -e" -
+ run "mount -o vers=$V $ipv4:$expdir $nfsmp"
+ run "mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp"
+ run "umount $nfsmp $tmpnfsmp"
rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-ipv6
- run 'mount -o vers=$V $ipv6:$expdir $nfsmp'
- run 'mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp'
- run 'umount $nfsmp $tmpnfsmp'
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-ipv6
+ if [ -n "$ipv6s" ]; then
+ run "mount -o vers=$V $ipv6:$expdir $nfsmp"
+ run "mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp"
+ run "umount $nfsmp $tmpnfsmp"
+ fi
rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-host
- run 'mount -o vers=$V $host:$expdir $nfsmp'
- run 'mount -o vers=$V $host:$subexpdir $tmpnfsmp'
- run 'umount $nfsmp $tmpnfsmp'
+ rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-host
+ run "mount -o vers=$V $host:$expdir $nfsmp"
+ run "mount -o vers=$V $host:$subexpdir $tmpnfsmp"
+ run "umount $nfsmp $tmpnfsmp"
rlPhaseEnd
- fi
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-ipv4
- run 'echo "$expdir *(ro,sync,no_root_squash)" >/etc/exports'
- run 'echo "$subexpdir $host(ro,sync,no_root_squash)" >>/etc/exports'
- run 'service_nfs restart'
- #avoid issues restarting the server too quickly
- sleep 10
- run 'showmount -e' -
- run 'mount -o vers=$V $ipv4:$expdir $nfsmp'
- run 'mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp'
- run 'umount $nfsmp $tmpnfsmp'
- rlPhaseEnd
- if [ -n "$ipv6s" ]; then
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-ipv6
- run 'mount -o vers=$V $ipv6:$expdir $nfsmp'
- run 'mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp'
- run 'umount $nfsmp $tmpnfsmp'
+ rlPhaseStartTest do-Test-nfsV$V-default-option-overridden-by-client-specific-option
+ run "echo '$expdir -ro,sync *(rw,no_root_squash)' >/etc/exports"
+ run "service_nfs restart"
+ run "mount -o vers=$V $host:$expdir $nfsmp"
+ run "touch $nfsmp/testfile && mkdir $nfsmp/testdir" 0 "exports option should be overridden by client specific."
+ run "rm -rf $nfsmp/test*"
+ run "umount $nfsmp"
+ run "echo '$expdir -ro,sec=sys,sync *(rw,no_root_squash)' >/etc/exports" 0 "sec=sys may cause it to be failed."
+ run "exportfs -rv"
+ run "mount -o vers=$V $host:$expdir $nfsmp"
+ run "touch $nfsmp/testfile && mkdir $nfsmp/testdir" 0 "bz1359042 exports option should be overridden by client specific."
+ run "rm -rf $nfsmp/test*"
+ run "umount $nfsmp"
rlPhaseEnd
- fi
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-host
- run 'mount -o vers=$V $host:$expdir $nfsmp'
- run 'mount -o vers=$V $host:$subexpdir $tmpnfsmp'
- run 'umount $nfsmp $tmpnfsmp'
- rlPhaseEnd
-
- rlPhaseStartTest do-Test-nfsV$V-default-option-overridden-by-client-specific-option
- run "echo '$expdir -ro,sync *(rw,no_root_squash)' >/etc/exports"
- run "service_nfs restart"
- run "mount -o vers=$V $host:$expdir $nfsmp"
- run "touch $nfsmp/testfile && mkdir $nfsmp/testdir" 0 "exports option should be overridden by client specific."
- run "rm -rf $nfsmp/test*"
- run "umount $nfsmp"
- run "echo '$expdir -ro,sec=sys,sync *(rw,no_root_squash)' >/etc/exports" 0 "sec=sys may cause it to be failed."
- run "exportfs -rv"
- run "mount -o vers=$V $host:$expdir $nfsmp"
- run "touch $nfsmp/testfile && mkdir $nfsmp/testdir" 0 "exports option should be overridden by client specific."
- run "rm -rf $nfsmp/test*"
- run "umount $nfsmp"
- rlPhaseEnd
-done
+ done
- rlPhaseStartTest do-Test-exports-options-twice
- run 'echo "/ *(sync,hide,no_wdelay)" > /etc/exports'
- run "service_nfs restart"
- #avoid issues restarting the server too quickly
- sleep 10
-
- # Count all options from list printed by exportfs -s(rhel-7) or exportfs -v(rhel-6)
- allOptions=$( (exportfs -s 2>/dev/null || exportfs -v) | sed 's/^.*(//;s/)$//;s/,/\n/g' | wc -l)
- # Count unique options from list printed by exportfs -s(rhel-7) or exportfs -v(rhel-6)
- uniqOptions=$( (exportfs -s 2>/dev/null || exportfs -v) | sed 's/^.*(//;s/)$//;s/,/\n/g' | sort | uniq | wc -l)
-
- log "{Info} exportfs -s(rhel-7) or exportfs -v(rhel-6) will print option list for each export path"
- log "{Info} All options printed by exportfs -s(rhel-7) or exportfs -v(rhel-6) (sorted):"
- run "(exportfs -s 2>/dev/null || exportfs -v) | sed 's/^.*(//;s/)$//;s/,/\n/g' | sort"
- log "{Info} For exported path '/', there are $allOptions options printed in all options list and $uniqOptions of them are unique"
- run 'test $uniqOptions -eq $allOptions' 0 "Should not output any options twice, quantity of all options should be equal to quantity of unique options"
- for opt in sync hide no_wdelay; do
- run "(exportfs -s 2>/dev/null || exportfs -v) | grep -q $opt" 0 "Option list should contain option $opt specified in /etc/exports"
- done
- rlPhaseEnd
-
- rlPhaseStartTest do-Test-server-side-using-bind-mount
+ rlPhaseStartTest do-Test-bz1479135-server-side-using-bind-mount
run "dd if=/dev/zero of=workspace.image bs=3M count=500"
run "mkfs -t ext3 -F workspace.image"
run "mkdir -p /workspace"
@@ -247,8 +229,6 @@ done
run "echo '/srv/nfs/vmcore *(rw,no_root_squash)' > /etc/exports"
run "echo '/workspace *(rw,no_root_squash)' >> /etc/exports"
run "service_nfs restart"
- #avoid issues restarting the server too quickly
- sleep 10
run "mount $host:/workspace $nfsmp"
run "ls $nfsmp/work_dir"
run "umount $nfsmp"
@@ -259,45 +239,103 @@ done
run "rm workspace.image"
rlPhaseEnd
- rlPhaseStartTest do-Test-mount-nfsv4-show-wrong-port
- run "echo '$expdir *(rw,no_root_squash)' >>/etc/exports"
- run "service_nfs restart"
- #avoid issues restarting the server too quickly
- sleep 10
- run "exportfs -v"
- run "mount -t nfs -o vers=4 localhost:$expdir $nfsmp"
- run "mount -t nfs4 | grep $nfsmp" -
- run "mount -t nfs4 | grep $nfsmp | grep -q port=2049" 0 "Should show port=2049"
- run "umount $nfsmp"
- run "echo '[nfsd]' > /etc/nfs.conf"
- run "echo 'port=20050' >> /etc/nfs.conf"
- run "service_nfs restart"
- run "sleep 10"
- run "rpcinfo -p | grep -w nfs | grep 20050"
- run "mount -t nfs -o vers=4 localhost:$expdir $nfsmp" -
- if [ $? -eq 0 ]; then
- run "mount -t nfs4" -
- run "mount -t nfs4 | grep -q port=20050" 0 "Should show port=20050"
- run "umount $nfsmp"
- fi
- run "mount -t nfs -o vers=4,port=0 localhost:$expdir $nfsmp" -
- if [ $? -eq 0 ]; then
- run "mount -t nfs4" -
- run "mount -t nfs4 | grep -q port=20050" 0 "Should show port=20050"
- run "umount $nfsmp"
- fi
- run "mount -t nfs -o vers=4,port=20050 localhost:$expdir $nfsmp"
- run "mount -t nfs4 | grep $nfsmp" -
- run "mount -t nfs4 | grep $nfsmp | grep -q port=20050" 0 "Should show port=20050"
- run "umount $nfsmp"
+ rlPhaseStartTest do-Test-bz1465259-mount-nfsv4-show-wrong-port
+ run "echo '$expdir *(rw,no_root_squash)' > /etc/exports"
+ run "service_nfs restart"
+ run "exportfs -v"
+ run "mount -t nfs -o vers=4 localhost:$expdir $nfsmp"
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "cat /proc/mounts | grep $nfsmp | grep -q 'port='" 1 "Omit displaying 'port=' by default"
+ run "mount -o remount,ro $nfsmp"
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "cat /proc/mounts | grep $nfsmp | grep -q 'port='" 1 "Omit displaying 'port=' by default"
+ run "umount $nfsmp"
+ if [ -e "/etc/nfs.conf" ]; then
+ echo "[nfsd]" > /etc/nfs.conf
+ echo "port=20050" >> /etc/nfs.conf
+ run "cat /etc/nfs.conf" -
+ run "service_nfs restart"
+ run "sleep 10"
+ run "rpcinfo -p | grep -w nfs | grep 20050"
+ run "mount -t nfs4 -o port=20050 localhost:$expdir $nfsmp"
+ if [ $? -eq 0 ]; then
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "cat /proc/mounts | grep $nfsmp | grep -q port=20050" 0 "Should show port=20050"
+ run "mount -o remount,ro $nfsmp"
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "cat /proc/mounts | grep $nfsmp | grep -q port=20050" 0 "Should show port=20050"
+ run "umount $nfsmp"
+ fi
+ log "{Info} If NFS service is not available on the specified port"
+ run "mount -t nfs4 -o port=2049 localhost:$expdir $nfsmp" 1-255
+ if [ $? -eq 0 ]; then
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "umount $nfsmp"
+ fi
+ log "{Info} If port value is not specified"
+ if ls_nfsvers | grep -q -w 3; then
+ run "mount -t nfs -o vers=3 localhost:$expdir $nfsmp" 0 "for v2/v3 client uses port advertised by server's rpcbind service"
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "umount $nfsmp"
+ fi
+ run "mount -t nfs -o vers=4 localhost:$expdir $nfsmp" 1-255 "for v4 client uses the standard NFS port (2049) without checking"
+ if [ $? -eq 0 ]; then
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "umount $nfsmp"
+ fi
+ log "{Info} If the specified port value is 0"
+ run "mount -t nfs -o vers=4,port=0 localhost:$expdir $nfsmp"
+ if [ $? -eq 0 ]; then
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "cat /proc/mounts | grep $nfsmp | grep -q port=0" 0 "Should show port=0"
+ run "umount $nfsmp"
+ fi
+ run "echo '' > /etc/nfs.conf" 0 "Recovering"
+ fi
rlPhaseEnd
+ if ls_nfsvers | grep -q -w "4.0"; then
+ rlPhaseStartTest do-Test-bz1592915-sanity-check-clientaddr-during-mount
+ run "echo '$expdir *(rw,no_root_squash)' > /etc/exports"
+ run "service_nfs restart"
+ run "exportfs -v"
+ log "{Info} Mounting v4.0 by default"
+ run "mount -o vers=4,minorversion=0 localhost:$expdir $nfsmp -v"
+ if [ $? -eq 0 ]; then
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "umount $nfsmp"
+ fi
+ log "{Info} Setting 'clientaddr=' not match any local address"
+ # use normal mode (no verbose) to check the emitted warning
+ run "mount -o vers=4,minorversion=0,clientaddr=1.2.3.4 localhost:$expdir $nfsmp &> >(tee stdout.log)"
+ if [ $? -eq 0 ]; then
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "umount $nfsmp"
+ fi
+ run "cat stdout.log | grep -q '[warning].*not match any existing network addresses'" 0 "Should warn the administrators"
+ log "{Info} Specifying IPv4_ANY (0.0.0.0) signifying client does not want delegations"
+ run "mount -o vers=4,minorversion=0,clientaddr=0.0.0.0 localhost:$expdir $nfsmp -v"
+ if [ $? -eq 0 ]; then
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "umount $nfsmp"
+ fi
+ log "{Info} Specifying IPv6_ANY (::0) signifying client does not want delegations"
+ run "mount -o vers=4,minorversion=0,clientaddr=::0 localhost:$expdir $nfsmp -v"
+ if [ $? -eq 0 ]; then
+ run "cat /proc/mounts | grep $nfsmp" -
+ run "umount $nfsmp"
+ fi
+ rlPhaseEnd
+ fi
+
rlPhaseStartCleanup do-Cleanup-
- run 'rm -rf $expdir $nfsmp $subexpdir $tmpnfsmp'
+ run "rm -rf $expdir $nfsmp $subexpdir $tmpnfsmp"
rlFileRestore
run "service_nfs restart"
- #avoid issues restarting the server too quickly
- sleep 10
+ if [ -n "ORIGINAL_HOSTNAME" ]; then
+ HOSTNAME="$ORIGINAL_HOSTNAME"
+ hostnamectl set-hostname "$HOSTNAME"
+ fi
rlPhaseEnd
rlJournalEnd
#rlJournalPrintText
diff --git a/tests/exportfs/Makefile b/tests/exportfs/Makefile
new file mode 100644
index 0000000..d367651
--- /dev/null
+++ b/tests/exportfs/Makefile
@@ -0,0 +1,79 @@
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: test for command exportfs
+# Author: Stevens Yin <jiyin@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2013 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+TENV=_env
+ifeq ($(PKG_TOP_DIR),)
+ export PKG_TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -e $$p/env.mk -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ export _TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -d $$p/.git -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ -include $(PKG_TOP_DIR)/env.mk
+endif
+include $(TENV)
+ifeq ($(_TOP_DIR),)
+ _TOP_DIR=/mnt/tests/$(TOPLEVEL_NAMESPACE)
+endif
+#===============================================================================
+
+export TESTVERSION=1.0
+
+BUILT_FILES=
+
+FILES=$(TENV) $(METADATA) runtest.sh Makefile PURPOSE
+
+.PHONY: all install download clean
+
+run: $(FILES) build
+ ( set +o posix; [ -e /usr/bin/rhts_environment.sh ] && . /usr/bin/rhts_environment.sh; \
+. /usr/share/beakerlib/beakerlib.sh; \
+. runtest.sh )
+
+build: $(BUILT_FILES)
+ test -x runtest.sh || chmod a+x runtest.sh
+
+clean:
+ rm -f *~ $(BUILT_FILES)
+
+
+-include /usr/share/rhts/lib/rhts-make.include
+
+$(METADATA): Makefile
+ @echo "Owner: Stevens Yin <jiyin@redhat.com>" > $(METADATA)
+ @echo "Name: $(TEST)" >> $(METADATA)
+ @echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
+ @echo "Path: $(TEST_DIR)" >> $(METADATA)
+ @echo "Description: test for command exportfs" >> $(METADATA)
+ @echo "Type: Regression" >> $(METADATA)
+ @echo "TestTime: 30m" >> $(METADATA)
+ @echo "RunFor: $(PACKAGE)" >> $(METADATA)
+ @echo "Requires: $(PACKAGE)" >> $(METADATA)
+ @echo "Requires: library(kernel/base)" >> $(METADATA)
+ @echo "RhtsRequires: library(kernel/base)" >> $(METADATA)
+ @echo "Priority: Normal" >> $(METADATA)
+ @echo "License: GPLv2" >> $(METADATA)
+ @echo "Confidential: no" >> $(METADATA)
+ @echo "Destructive: no" >> $(METADATA)
+
+ rhts-lint $(METADATA)
+
diff --git a/tests/mount/Makefile b/tests/mount/Makefile
new file mode 100644
index 0000000..412b640
--- /dev/null
+++ b/tests/mount/Makefile
@@ -0,0 +1,79 @@
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: Test for command mount.nfs{,4}
+# Author: Stevens Yin <jiyin@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2013 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+TENV=_env
+ifeq ($(PKG_TOP_DIR),)
+ export PKG_TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -e $$p/env.mk -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ export _TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -d $$p/.git -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ -include $(PKG_TOP_DIR)/env.mk
+endif
+include $(TENV)
+ifeq ($(_TOP_DIR),)
+ _TOP_DIR=/mnt/tests/$(TOPLEVEL_NAMESPACE)
+endif
+#===============================================================================
+
+export TESTVERSION=1.0
+
+BUILT_FILES=
+
+FILES=$(TENV) $(METADATA) runtest.sh Makefile PURPOSE
+
+.PHONY: all install download clean
+
+run: $(FILES) build
+ ( set +o posix; [ -e /usr/bin/rhts_environment.sh ] && . /usr/bin/rhts_environment.sh; \
+. /usr/share/beakerlib/beakerlib.sh; \
+. runtest.sh )
+
+build: $(BUILT_FILES)
+ test -x runtest.sh || chmod a+x runtest.sh
+
+clean:
+ rm -f *~ $(BUILT_FILES)
+
+
+-include /usr/share/rhts/lib/rhts-make.include
+
+$(METADATA): Makefile
+ @echo "Owner: Stevens Yin <jiyin@redhat.com>" > $(METADATA)
+ @echo "Name: $(TEST)" >> $(METADATA)
+ @echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
+ @echo "Path: $(TEST_DIR)" >> $(METADATA)
+ @echo "Description: Test for command mount.nfs{,4}" >> $(METADATA)
+ @echo "Type: Regression" >> $(METADATA)
+ @echo "TestTime: 30m" >> $(METADATA)
+ @echo "RunFor: $(PACKAGE)" >> $(METADATA)
+ @echo "Requires: $(PACKAGE)" >> $(METADATA)
+ @echo "Requires: library(kernel/base)" >> $(METADATA)
+ @echo "RhtsRequires: library(kernel/base)" >> $(METADATA)
+ @echo "Priority: Normal" >> $(METADATA)
+ @echo "License: GPLv2" >> $(METADATA)
+ @echo "Confidential: no" >> $(METADATA)
+ @echo "Destructive: no" >> $(METADATA)
+
+ rhts-lint $(METADATA)
+
diff --git a/tests/nfs-mount-options-all/Makefile b/tests/nfs-mount-options-all/Makefile
new file mode 100644
index 0000000..afc24cc
--- /dev/null
+++ b/tests/nfs-mount-options-all/Makefile
@@ -0,0 +1,77 @@
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: Test for nfs mount options
+# Author: Bill Peck <bpeck@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2006 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+TENV=_env
+ifeq ($(PKG_TOP_DIR),)
+ export PKG_TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -e $$p/env.mk -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ export _TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -d $$p/.git -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ -include $(PKG_TOP_DIR)/env.mk
+endif
+include $(TENV)
+ifeq ($(_TOP_DIR),)
+ _TOP_DIR=/mnt/tests/$(TOPLEVEL_NAMESPACE)
+endif
+#===============================================================================
+
+
+export TESTVERSION=0.1
+
+.PHONY: all install download clean
+
+METADATA=testinfo.desc
+BUILT_FILES= # built executables should be added here
+FILES=$(TENV) $(METADATA) runtest.sh Makefile
+
+build: $(BUILT_FILES)
+ chmod a+x ./runtest.sh
+
+clean:
+ rm -f .*.swp *~ $(BUILT_FILES)
+
+run: $(FILES) build
+ ( set +o posix; [ -e /usr/bin/rhts_environment.sh ] && . /usr/bin/rhts_environment.sh; \
+. /usr/share/beakerlib/beakerlib.sh; \
+. runtest.sh )
+
+-include /usr/share/rhts/lib/rhts-make.include
+# Generate the testinfo.desc here:
+$(METADATA): Makefile
+ @touch $(METADATA)
+ @echo "Owner: Nicol TAO<ztao@redhat.com>" > $(METADATA)
+ @echo "Name: $(TEST)" >> $(METADATA)
+ @echo "Path: $(TEST_DIR)" >> $(METADATA)
+ @echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
+ @echo "Description: nfs general mount options supported by all nfs versions" >> $(METADATA)
+ @echo "TestTime: 45m" >> $(METADATA)
+ @echo "RunFor: $(PACKAGE_NAME)" >> $(METADATA)
+ @echo "RunFor: nfs-utils" >> $(METADATA)
+ @echo "Requires: $(PACKAGE_NAME)" >> $(METADATA)
+ @echo "Requires: library(kernel/base)" >> $(METADATA)
+ @echo "Requires: nfs-utils" >> $(METADATA)
+ @echo "RhtsRequires: library(kernel/base)" >> $(METADATA)
+ @echo "Priority: Medium" >> $(METADATA)
+ @echo "Type: Regression" >> $(METADATA)
+ @echo "License: GPL" >> $(METADATA)
diff --git a/tests/systemd-nfs/Makefile b/tests/systemd-nfs/Makefile
new file mode 100644
index 0000000..111c1fc
--- /dev/null
+++ b/tests/systemd-nfs/Makefile
@@ -0,0 +1,74 @@
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: test for: nfs
+# Author: Jianhong Yin <jiyin@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2014 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+#Generate and export TEST= PACKAGE=
+TENV=_env
+ifeq ($(PKG_TOP_DIR),)
+ export PKG_TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -e $$p/env.mk -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ export _TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -d $$p/.git -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ -include $(PKG_TOP_DIR)/env.mk
+endif
+include $(TENV)
+ifeq ($(_TOP_DIR),)
+ _TOP_DIR=/mnt/tests/$(TOPLEVEL_NAMESPACE)
+endif
+#===============================================================================
+export TESTVERSION=1.0
+
+BUILT_FILES=
+FILES=$(TENV) $(METADATA) runtest.sh Makefile PURPOSE
+
+.PHONY: all install download clean
+
+run: $(FILES) build
+ ( set +o posix; [ -e /usr/bin/rhts_environment.sh ] && . /usr/bin/rhts_environment.sh; \
+. /usr/share/beakerlib/beakerlib.sh || exit 1; \
+. runtest.sh )
+
+build: $(BUILT_FILES)
+ test -x runtest.sh || chmod a+x runtest.sh
+
+clean:
+ rm -f *~ $(BUILT_FILES)
+
+-include /usr/share/rhts/lib/rhts-make.include
+
+$(METADATA): Makefile
+ @echo "Owner: Jianhong Yin <jiyin@redhat.com>" > $(METADATA)
+ @echo "Name: $(TEST)" >> $(METADATA)
+ @echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
+ @echo "Path: $(TEST_DIR)" >> $(METADATA)
+ @echo "Description: test for: nfs" >> $(METADATA)
+ @echo "Type: regression" >> $(METADATA)
+ @echo "Type: $(PACKAGE)-level-tier1" >> $(METADATA)
+ @echo "TestTime: 30m" >> $(METADATA)
+ @echo "RunFor: $(PACKAGE)" >> $(METADATA)
+ @echo "Requires: $(PACKAGE)" >> $(METADATA)
+ @echo "Priority: Normal" >> $(METADATA)
+ @echo "License: GPLv2" >> $(METADATA)
+ @echo "Requires: nfs-utils" >> $(METADATA)
+ @echo "RhtsRequires: library(kernel/base)" >> $(METADATA)
+ rhts-lint $(METADATA)
diff --git a/tests/systemd-nfs/runtest.sh b/tests/systemd-nfs/runtest.sh
old mode 100755
new mode 100644
index 63d8593..ec2d219
--- a/tests/systemd-nfs/runtest.sh
+++ b/tests/systemd-nfs/runtest.sh
@@ -1,40 +1,44 @@
#!/bin/bash
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#
# Description: test for: nfs
# Author: Jianhong Yin <jiyin@redhat.com>
-#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2014 Red Hat, Inc.
#
-# This program is free software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation, either version 2 of
-# the License, or (at your option) any later version.
+# This copyrighted material is made available to anyone wishing
+# to use, modify, copy, or redistribute it subject to the terms
+# and conditions of the GNU General Public License version 2.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-# PURPOSE. See the GNU General Public License for more details.
+# PURPOSE. See the GNU General Public License for more details.
#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see http://www.gnu.org/licenses/.
+# You should have received a copy of the GNU General Public
+# License along with this program; if not, write to the Free
+# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ -e /usr/bin/rhts-environment.sh ] && . /usr/bin/rhts-environment.sh
. /usr/share/beakerlib/beakerlib.sh || exit 1
+# Load beakerlib you needed
+rlImport kernel/base
+envinfo
+#disable_avc_check
#===============================================================================
#signal trap
trap "cleanup" SIGINT SIGTERM SIGHUP SIGQUIT
cleanup() {
rlFileRestore
- run 'service_nfsconfig restart'
- #rm -rf $expdir $nfsmp
+ run 'service_nfs restart'
+ run 'service_nfsconfig status &>/dev/null && service_nfsconfig restart' -
+ run 'userdel -rf testuserqa' -
}
#global var define
@@ -47,135 +51,152 @@ rpm -q systemd || {
rlJournalStart
rlPhaseStartSetup do-Setup-
- # Load beakerlib you needed
- rlImport kernel/base
- envinfo
rlFileBackup /etc/exports /etc/sysconfig/nfs
run 'echo "/usr/share *(ro)" >/etc/exports'
- run 'echo "RPCNFSDARGS=8" >/etc/sysconfig/nfs' 0 "avoid invalid config file"
- run 'service_nfsconfig restart' 0 "RHEL-7.1 or later need restart nfs-config to reload /etc/sysconfig/nfs"
+ run 'echo "" > /etc/sysconfig/nfs' 0 "avoid invalid config file"
+ # If in RHEL-7.1 or later need restart nfs-config service to flush /etc/sysconfig/nfs to /run/sysconfig/nfs-utils
+ # But since RHEL-7.3, nfs-config change to be ru-run during the dependent service starting
+ run 'service_nfsconfig status &>/dev/null && service_nfsconfig restart' -
run "useradd testuserqa" -
rlPhaseEnd
rlPhaseStartTest do-Test-start
- run "service_$serv start" 0 "Service must start without problem"
- run "service_$serv status" 0 "Then Status command"
- run "service_$serv start" 0 "Already started service"
- run "service_$serv status" 0 "Again status command"
+ run "service_nfs start" 0 "Service must start without problem"
+ run "service_nfs status" 0 "Then Status command"
+ run "service_nfs start" 0 "Already started service"
+ run "service_nfs status" 0 "Again status command"
rlPhaseEnd
rlPhaseStartTest do-Test-restart
- run "service_$serv restart" 0 "Restarting of service"
- run "service_$serv status" 0 "Status command"
+ run "service_nfs restart" 0 "Restarting of service"
+ run "service_nfs status" 0 "Status command"
rlPhaseEnd
rlPhaseStartTest do-Test-stop
- run "service_$serv stop" 0 "Stopping service"
- run "service_$serv status" 3 "Status of stopped service"
- run "service_$serv stop" 0 "Stopping service again"
- run "service_$serv status" 3 "Status of stopped service"
+ run "service_nfs stop" 0 "Stopping service"
+ run "service_nfs status" 3 "Status of stopped service"
+ run "service_nfs stop" 0 "Stopping service again"
+ run "service_nfs status" 3 "Status of stopped service"
rlPhaseEnd
rlPhaseStartTest do-Test-"insufficient-rights"
- run "service_$serv restart " 0 "Starting service for restarting under nonpriv user"
- run "su testuserqa -c 'service_$serv stop'" 1,4 "Insufficient rights, stopping service under nonprivileged user must fail"
- run "su testuserqa -c 'service_$serv start'" 0,1,4 "Insufficient rights, starting service under nonprivileged user must fail or pass as already started"
- run "su testuserqa -c 'service_$serv status'" 0 "Sufficient rights, service status should be accessible to nonprivileged users"
- run "service_$serv stop" 0 "Stopping service for starting under nonpriv user"
- run "su testuserqa -c 'service_$serv start'" 1,4 "Insufficient rights, starting of stopped service under nonprivileged user must fail"
+ run "service_nfs restart " 0 "Starting service for restarting under nonpriv user"
+ run "su testuserqa -c 'service_nfs stop'" 1,4 "Insufficient rights, stopping service under nonprivileged user must fail"
+ run "su testuserqa -c 'service_nfs start'" 0,1,4 "Insufficient rights, starting service under nonprivileged user must fail or pass as already started"
+ run "su testuserqa -c 'service_nfs status'" 0 "Sufficient rights, service status should be accessible to nonprivileged users"
+ run "service_nfs stop" 0 "Stopping service for starting under nonpriv user"
+ run "su testuserqa -c 'service_nfs start'" 1,4 "Insufficient rights, starting of stopped service under nonprivileged user must fail"
rlPhaseEnd
rlPhaseStartTest do-Test-"operations"
- run "service_$serv start" 0 "Service have to implement start function"
- run 'sleep 5' 0 "sleep a while avoid the start rate limit"
- run "service_$serv restart" 0 "Service have to implement restart function"
- run "service_$serv status" 0 "Service have to implement status function"
- run 'sleep 5' 0 "sleep a while avoid the start rate limit"
- run "service_$serv condrestart" 0 "Service have to implement condrestart function"
+ run "service_nfs start" 0 "Service have to implement start function"
+ run 'sleep 5' 0 "sleep a while avoid the start rate limit, bz1160506"
+ run "service_nfs restart" 0 "Service have to implement restart function"
+ run "service_nfs status" 0 "Service have to implement status function"
+ run 'sleep 5' 0 "sleep a while avoid the start rate limit, bz1160506"
+ run "service_nfs condrestart" 0 "Service have to implement condrestart function"
[ $? != 0 ] && run "journalctl -xn" -
- run 'sleep 5' 0 "sleep a while avoid the start rate limit"
- run "service_$serv try-restart" 0 "Service have to implement try-restart function"
+ run 'sleep 5' 0 "sleep a while avoid the start rate limit, bz1160506"
+ run "service_nfs try-restart" 0 "Service have to implement try-restart function"
[ $? != 0 ] && run "journalctl -xn" -
- run "service_$serv reload" 0 "Service have to implement reload function"
+ run "service_nfs reload" 0 "Service have to implement reload function"
[ $? != 0 ] && run "journalctl -xn" -
- run "service_$serv force-reload" 0 "Service have to implement force-reload function"
+ run "service_nfs force-reload" 0 "Service have to implement force-reload function"
[ $? != 0 ] && run "journalctl -xn" -
- run "service_$serv noexistop" 2 "Testing proper return code when nonexisting function"
+ run "service_nfs noexistop" 2 "Testing proper return code when nonexisting function"
rlPhaseEnd
# Should do nothing if a service is already stopped or not running (according to manpage of systemctl)
# http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic.html#INISCRPTACT
rlPhaseStartTest do-Test-"operations-stopped"
- run "service_$serv stop" 0 "Service have to implement stop function"
- run "service_$serv condrestart" 0 "Service have to implement condrestart function"
- run "service_$serv try-restart" 0 "Service have to implement try-restart function"
- run "service_$serv force-reload" 0 "Service have to implement force-reload function"
- run "service_$serv status" 3 "Above oprations should do nothing if service are not running"
+ run "service_nfs stop" 0 "Service have to implement stop function"
+ run "service_nfs condrestart" 0 "Service have to implement condrestart function"
+ run "service_nfs try-restart" 0 "Service have to implement try-restart function"
+ run "service_nfs force-reload" 0 "Service have to implement force-reload function"
+ run "service_nfs status" 3 "Above oprations should do nothing if service are not running"
rlPhaseEnd
rlPhaseStartTest do-Test-enable-disable-$serv
if systemctl --quiet is-enabled $serv; then
run "systemctl disable $serv" 0 "Disable service on boot"
run "systemctl is-enabled $serv" 1 "Check whether service is disabled"
- run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ run "test `systemctl is-enabled nfs-server` = disabled"
run "systemctl enable $serv" 0 "Enable service on boot"
run "systemctl is-enabled $serv" 0 "Check whether service is enabled"
- run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ run "test `systemctl is-enabled nfs-server` = enabled"
else
run "systemctl enable $serv" 0 "Enable service on boot"
run "systemctl is-enabled $serv" 0 "Check whether service is enabled"
- run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ run "test `systemctl is-enabled nfs-server` = enabled"
run "systemctl disable $serv" 0 "Disable service on boot"
run "systemctl is-enabled $serv" 1 "Check whether service is disabled"
- run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ run "test `systemctl is-enabled nfs-server` = disabled"
fi
rlPhaseEnd
- # ystemctl enable fails for symlinks in /usr/lib/systemd/system
+ # As Bug 1159308 - systemctl enable fails for symlinks in /usr/lib/systemd/system
# Use a workaround to test enable/disable with nfs-server.service
- rlPhaseStartTest do-Test-enable-disable-nfs-server
+ if [ -f /usr/lib/systemd/system/nfs.service ]; then
+ rlPhaseStartTest do-Test-enable-disable-nfs-symlinks
if systemctl --quiet is-enabled nfs-server; then
- run "systemctl disable nfs-server" 0 "Disable nfs-serverice on boot"
- run "systemctl is-enabled nfs-server" 1 "Check whether nfs-serverice is disabled"
- run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
- run "systemctl enable nfs-server" 0 "Enable nfs-serverice on boot"
- run "systemctl is-enabled nfs-server" 0 "Check whether nfs-serverice is enabled"
- run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ run "systemctl disable nfs" 0 "Disable nfs on boot"
+ run "systemctl is-enabled nfs" 1 "Check whether nfs is disabled"
+ run "test `systemctl is-enabled nfs` = `systemctl is-enabled nfs-server`"
+ run "systemctl enable nfs" 0 "Enable nfs on boot"
+ run "systemctl is-enabled nfs" 0 "Check whether nfs is enabled"
+ run "test `systemctl is-enabled nfs` = `systemctl is-enabled nfs-server`"
else
- run "systemctl enable nfs-server" 0 "Enable nfs-serverice on boot"
- run "systemctl is-enabled nfs-server" 0 "Check whether nfs-serverice is enabled"
- run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
- run "systemctl disable nfs-server" 0 "Disable nfs-serverice on boot"
- run "systemctl is-enabled nfs-server" 1 "Check whether nfs-serverice is disabled"
- run "test `systemctl is-enabled nfs-server` = `systemctl is-enabled nfs`"
+ run "systemctl enable nfs" 0 "Enable nfs on boot"
+ run "systemctl is-enabled nfs" 0 "Check whether nfs is enabled"
+ run "test `systemctl is-enabled nfs` = `systemctl is-enabled nfs-server`"
+ run "systemctl disable nfs" 0 "Disable nfs on boot"
+ run "systemctl is-enabled nfs" 1 "Check whether nfs is disabled"
+ run "test `systemctl is-enabled nfs` = `systemctl is-enabled nfs-server`"
fi
rlPhaseEnd
+ fi
- rlPhaseStartTest do-Test-nfsv4-only
- run 'service nfs stop'
+ rlPhaseStartTest do-Test-bz641291-nfsv4-only
+ run 'service_nfs stop'
+ run 'cp /etc/sysconfig/nfs /etc/sysconfig/nfs.backup'
# MOUNTD_NFS_V2 MOUNTD_NFS_V3 was not supported in RHEL-7.x
- run 'echo -e "RPCMOUNTDOPTS=\"-N 2 -N 3\"" >>/etc/sysconfig/nfs' 0 "enabling nfsv4 only"
- # If in RHEL-7.1 or later need restart nfs-config service to flush /etc/sysconfig/nfs to /run/sysconfig/nfs-utils
- # But since RHEL-7.3, nfs-config change to be ru-run during the dependent service starting
+ run 'echo "RPCMOUNTDOPTS=\"-N 2 -N 3\"" > /etc/sysconfig/nfs' 0 "disabling mountd v2/v3"
run 'service_nfsconfig status &>/dev/null && service_nfsconfig restart' -
- run 'cat /run/sysconfig/nfs-utils | grep RPCMOUNTDARGS | grep "\""' 0 "quote variable in /run/sysconfig/nfs-utils"
run 'sleep 5' 0 "sleep a while avoid service script bug"
run 'service_nfs start'
+ [ -f /run/sysconfig/nfs-utils ] && \
+ run 'cat /run/sysconfig/nfs-utils | grep RPCMOUNTDARGS | grep "\""' 0 "bz1175160 quote variable in /run/sysconfig/nfs-utils"
run 'rpcinfo -s | grep -w mountd' 1 "if nfsv4 only, no mountd info in rpcinfo"
- rlFileRestore /etc/sysconfig/nfs
- run 'service_nfsconfig restart'
+ # we allow running V4-only nfsd without rpcbind
+ log "{Info} bz1433390 nfsd startup won't delay in absence of rpcbind"
+ run 'echo "RPCNFSDARGS=\"-N 2 -N 3\"" >>/etc/sysconfig/nfs' 0 "disabling nfsd v2/v3"
+ run 'service_nfsconfig status &>/dev/null && service_nfsconfig restart' -
+ run 'service_nfs restart'
+ [ -f /run/sysconfig/nfs-utils ] && \
+ run 'cat /run/sysconfig/nfs-utils | grep RPCNFSDARGS' -
+ run 'rpcinfo -s | grep -w nfs'
+ run 'service_nfs stop'
+ run 'service rpcbind stop'
+ run 'systemctl mask rpcbind' 0 "Mask systemd service rpcbind.service"
+ run 'timeLimitRun 10 service_nfs start' 0 "nfs should come up successfully without rpcbind"
+ run 'service_nfs status'
+ run 'systemctl unmask rpcbind'
+ run 'timeLimitRun 10 service_nfs stop'
+ run 'mv /etc/sysconfig/nfs.backup /etc/sysconfig/nfs'
+ run 'service_nfsconfig status &>/dev/null && service_nfsconfig restart' -
rlPhaseEnd
+ # Accoring to https://bugzilla.redhat.com/show_bug.cgi?id=1126073#c29
# Since nfs-service no longer starts the daemons in question. They are now split
# into their own services (nfs-mountd.service, rpc-statd.service, nfs-idmapd.service).
# Then `systemctl status nfs-server.service` cannot accurately reflect the
# state of the combination of daemons that are needed for a working NFS server.
- rlPhaseStartTest do-Test-"nfs-server-is-active-even-processes-terminated"
+ rlPhaseStartTest do-Test-"bz1126073-nfs-server-is-active-even-processes-terminated"
run 'service_nfs restart'
run 'pkill rpc.mountd' -
run 'killall -9 nfsd' -
run 'ps axf | grep -e "rpc.mountd" -e "nfsd"' -
- run 'service nfs-mountd status' 1-255
+ run 'service_nfs-mountd status' 1-255
run 'rpcinfo -t localhost 100005' 1 "pings mountd"
log '{Info} nfsserver resource agent has been updated to monitor all its daemons'
run 'service_nfs status' 1-255,0
@@ -183,7 +204,7 @@ rlJournalStart
run 'service_nfs stop'
rlPhaseEnd
- rlPhaseStartTest do-Test-"should-auto-mount-/proc/fs/nfsd"
+ rlPhaseStartTest do-Test-"bz1010634-should-auto-mount-/proc/fs/nfsd"
run 'service_nfs restart'
run 'service_nfs stop'
run 'umount /proc/fs/nfsd'
@@ -191,95 +212,90 @@ rlJournalStart
run 'mount -t nfsd nfsd /proc/fs/nfsd' -
rlPhaseEnd
- rlPhaseStartTest do-Test-"use-rpcbind.service-in-nfs-server.service"
+ rlPhaseStartTest do-Test-"bz1171603-use-rpcbind.service-in-nfs-server.service"
run "systemctl reset-failed" 0 "workaround for failure of starting too often"
log "{Info} Starting nfs while rpcbind is stopped"
- run "service rpcbind stop; service rpcbind stop" 0 "stop twice as workaround"
+ run "service rpcbind stop; service rpcbind stop" 0 "stop twice as workaround for bug 1257129"
run "service rpcbind status" 3 "rpcbind.service should be stopped"
- run "service nfs restart"
- run "service nfs status" 0 "should start nfs successfully"
+ run "service_nfs restart"
+ run "service_nfs status" 0 "should start nfs successfully"
run "service rpcbind status" 0 "starting nfs should bring rpcbind up"
log "{Info} Starting nfs while rpcbind is active"
run "service rpcbind start"
run "service rpcbind status" 0 "rpcbind should be active"
- run "service nfs restart"
- run "service nfs status" 0 "should start nfs successfully"
+ run "service_nfs restart"
+ run "service_nfs status" 0 "should start nfs successfully"
run "service rpcbind status" 0 "starting nfs should keep rpcbind up"
log "{Info} Stopping nfs while rpcbind is active"
run "service rpcbind start"
run "service rpcbind status" 0 "rpcbind should be active"
- run "service nfs start; service nfs status"
- run "service nfs stop; service nfs status" 3
+ run "service_nfs start; service_nfs status"
+ run "service_nfs stop; service_nfs status" 3
run "service rpcbind status" 0 "stopping nfs should keep rpcbind up"
log "{Info} Stopping nfs while rpcbind is stopped"
- run "service nfs start" 0 "firstly start nfs since it can bring rpcbind up"
- run "service nfs status" 0 "should start nfs successfully"
- run "service rpcbind stop; service rpcbind stop" 0 "stop twice as workaround"
+ run "service_nfs start" 0 "firstly start nfs since it can bring rpcbind up"
+ run "service_nfs status" 0 "should start nfs successfully"
+ run "service rpcbind stop; service rpcbind stop" 0 "stop twice as workaround for bug 1257129"
run "service rpcbind status" 3 "rpcbind should be stopped"
- run "service nfs stop"
+ run "service_nfs stop"
# If a daemon tries to connect to port 111 systemd will start rpcbind automaticly
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1266993#c7
+ run "sleep 1" 0 "Wait a while for starting"
run "service rpcbind status" 0 "stopping nfs should bring rpcbind up"
rlPhaseEnd
- rlPhaseStartTest do-Test-"restarting rpbind also restart the the nfs server"
+ rlPhaseStartTest do-Test-bz1266993-"restarting rpbind also restart the the nfs server"
run "systemctl reset-failed" 0 "workaround for failure of starting too often"
log "{Info} Starting rpcbind while nfs is stopped"
- run "service nfs stop"
- run "service nfs status" 3 "nfs should be stopped"
+ run "service_nfs stop"
+ run "service_nfs status" 3 "nfs should be stopped"
run "service rpcbind restart"
- run "service nfs status" 3 "starting rpcbind should NOT bring nfs up"
+ run "service_nfs status" 3 "starting rpcbind should NOT bring nfs up"
log "{Info} Starting rpcbind while nfs is active"
- run "service nfs start"
- run "service nfs status" 0 "nfs should be active"
+ run "service_nfs start"
+ run "service_nfs status" 0 "nfs should be active"
run "service rpcbind restart"
- run "service nfs status" 0 "starting rpcbind should NOT interfere nfs"
+ run "service_nfs status" 0 "starting rpcbind should NOT interfere nfs"
log "{Info} Stopping rpcbind while nfs is active"
- run "service nfs start"
- run "service nfs status" 0 "nfs should be active"
+ run "service_nfs start"
+ run "service_nfs status" 0 "nfs should be active"
run "service rpcbind start; service rpcbind stop"
- run "service nfs status" 0 "stopping rpcbind should NOT bring nfs down"
+ run "service_nfs status" 0 "stopping rpcbind should NOT bring nfs down"
log "{Info} Stopping rpcbind while nfs is stopped"
- run "service nfs stop"
- run "service nfs status" 3 "nfs should be stopped"
+ run "service_nfs stop"
+ run "service_nfs status" 3 "nfs should be stopped"
run "service rpcbind start; service rpcbind stop"
- run "service nfs status" 3 "stopping rpcbind should NOT interfere nfs"
- rlPhaseEnd
-
- rlPhaseStartTest do-Test-fix-long-nfsd-startup-delay-in-absence-of-rpcbind
- run "systemctl stop rpcbind"
- run "systemctl stop nfs-server"
- run "systemctl mask rpcbind" 0 "Mask systemd service rpcbind.service"
- run "timeLimitRun 10 systemctl start nfs-server" 1-255 "Start service nfs-server without rpcbind will be failed due to systemd unit dependency"
- run "systemctl unmask rpcbind"
- run "timeLimitRun 10 systemctl stop nfs-server" -
+ run "service_nfs status" 3 "stopping rpcbind should NOT interfere nfs"
rlPhaseEnd
- rlPhaseStartTest do-Test-"nfs-utils need to cause gssproxy reload"
- run "cp /etc/gssproxy/gssproxy.conf /etc/gssproxy/gssproxy.conf.backup" 0 "backuping"
- run "echo '[gssproxy]' > /etc/gssproxy/gssproxy.conf"
- run "echo 'debug = true' >> /etc/gssproxy/gssproxy.conf"
- run "systemctl restart gssproxy"
-#FIXME when BZ#1535424 is fixed. Should not use /var/log/messages as it is not used on Fedora any more.
- run "echo '' > /var/log/messages"
- run "systemctl restart nfs"
- run "systemctl status nfs"
- run "systemctl status gssproxy"
- run "cat /var/log/messages | grep 'gssproxy:'" -
- run "cat /var/log/messages | grep -q 'gssproxy:.*loaded'" 0 "should re-reading config"
- run "mv /etc/gssproxy/gssproxy.conf.backup /etc/gssproxy/gssproxy.conf" 0 "recovering"
- run "systemctl restart gssproxy"
+ rlPhaseStartTest do-Test-"nfs-utils should reload gssproxy"
+ run "cp /etc/gssproxy/gssproxy.conf /etc/gssproxy/gssproxy.conf.backup" 0 "backuping"
+ run "echo '[gssproxy]' > /etc/gssproxy/gssproxy.conf"
+ run "echo 'debug = true' >> /etc/gssproxy/gssproxy.conf"
+ log "{Info} Check reloading when gssproxy is started"
+ run "systemctl restart gssproxy"
+ run "service_nfs restart"
+ run "systemctl status gssproxy -l"
+ run "systemctl status gssproxy -l | grep 'gssproxy\[[0-9]*\]' | grep -q 'New config loaded'" 0 "Should re-reading config"
+ run "systemctl status gssproxy -l | grep 'systemd\[[0-9]*\]' | grep -q 'Reloaded GSSAPI Proxy Daemon'" 0 "Should re-reading config"
+ log "{Info} Check reloading when gssproxy is stopped"
+ run "systemctl stop gssproxy"
+ run "service_nfs restart"
+ run "systemctl status gssproxy -l"
+ run "systemctl status gssproxy -l | grep 'gssproxy\[[0-9]*\]' | grep -q 'New config loaded'" 0 "Should re-reading config"
+ run "systemctl status gssproxy -l | grep 'systemd\[[0-9]*\]' | grep -q 'Reloaded GSSAPI Proxy Daemon'" 0 "Should re-reading config"
+ run "mv /etc/gssproxy/gssproxy.conf.backup /etc/gssproxy/gssproxy.conf" 0 "recovering"
+ run "systemctl restart gssproxy"
rlPhaseEnd
rlPhaseStartCleanup do-Cleanup-
- run "userdel -rf testuserqa" -
- rlFileRestore
- run 'timeLimitRun 10 service_nfsconfig restart'
+ cleanup
rlPhaseEnd
rlJournalEnd
diff --git a/tests/umount/Makefile b/tests/umount/Makefile
new file mode 100644
index 0000000..4e4da65
--- /dev/null
+++ b/tests/umount/Makefile
@@ -0,0 +1,79 @@
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Description: Test for command umount.nfs{,4}
+# Author: Stevens Yin <jiyin@redhat.com>
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Copyright (c) 2013 Red Hat, Inc.
+#
+# This program is free software: you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation, either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied
+# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+# PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/.
+#
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+TENV=_env
+ifeq ($(PKG_TOP_DIR),)
+ export PKG_TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -e $$p/env.mk -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ export _TOP_DIR := $(shell p=$$PWD; while :; do \
+ [ -d $$p/.git -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
+ -include $(PKG_TOP_DIR)/env.mk
+endif
+include $(TENV)
+ifeq ($(_TOP_DIR),)
+ _TOP_DIR=/mnt/tests/$(TOPLEVEL_NAMESPACE)
+endif
+#===============================================================================
+
+export TESTVERSION=1.0
+
+BUILT_FILES=
+
+FILES=$(TENV) $(METADATA) runtest.sh Makefile PURPOSE
+
+.PHONY: all install download clean
+
+run: $(FILES) build
+ ( set +o posix; [ -e /usr/bin/rhts_environment.sh ] && . /usr/bin/rhts_environment.sh; \
+. /usr/share/beakerlib/beakerlib.sh; \
+. runtest.sh )
+
+build: $(BUILT_FILES)
+ test -x runtest.sh || chmod a+x runtest.sh
+
+clean:
+ rm -f *~ $(BUILT_FILES)
+
+
+-include /usr/share/rhts/lib/rhts-make.include
+
+$(METADATA): Makefile
+ @echo "Owner: Stevens Yin <jiyin@redhat.com>" > $(METADATA)
+ @echo "Name: $(TEST)" >> $(METADATA)
+ @echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
+ @echo "Path: $(TEST_DIR)" >> $(METADATA)
+ @echo "Description: Test for command umount.nfs{,4}" >> $(METADATA)
+ @echo "Type: Regression" >> $(METADATA)
+ @echo "TestTime: 30m" >> $(METADATA)
+ @echo "RunFor: $(PACKAGE)" >> $(METADATA)
+ @echo "Requires: $(PACKAGE)" >> $(METADATA)
+ @echo "Requires: library(kernel/base)" >> $(METADATA)
+ @echo "RhtsRequires: library(kernel/base)" >> $(METADATA)
+ @echo "Priority: Normal" >> $(METADATA)
+ @echo "License: GPLv2" >> $(METADATA)
+ @echo "Confidential: no" >> $(METADATA)
+ @echo "Destructive: no" >> $(METADATA)
+
+ rhts-lint $(METADATA)
+
From ae009836a573c8b55e55d9504bf72d63800d83e4 Mon Sep 17 00:00:00 2001
From: Bruno Goncalves <bgoncalv@redhat.com>
Date: Jan 21 2019 10:57:57 +0000
Subject: [PATCH 4/6] fix ipv6 test on export-mount-local
---
diff --git a/tests/export-mount-local/runtest.sh b/tests/export-mount-local/runtest.sh
index 60d0c90..29a351a 100755
--- a/tests/export-mount-local/runtest.sh
+++ b/tests/export-mount-local/runtest.sh
@@ -48,7 +48,8 @@ subexpdir=/exportDir-$BZ/sub
tmpnfsmp=${nfsmp}-tmp
read ipv4 _nil <<<$(getDefaultIp)
-read ipv6s _nil <<<$(getDefaultIp 6)
+#read ipv6s _nil <<<$(getDefaultIp 6)
+ipv6s=::1
ipv6="[$ipv6s]"
# in case "localhost.localdomain"
if echo "$HOSTNAME" | grep -q "localhost"; then
From 2371443256b25b8d6088788f791284caa012df11 Mon Sep 17 00:00:00 2001
From: Bruno Goncalves <bgoncalv@redhat.com>
Date: Jan 21 2019 15:26:27 +0000
Subject: [PATCH 5/6] add nic name to ipv6 addr
---
diff --git a/tests/export-mount-local/runtest.sh b/tests/export-mount-local/runtest.sh
index 29a351a..eeb5dde 100755
--- a/tests/export-mount-local/runtest.sh
+++ b/tests/export-mount-local/runtest.sh
@@ -47,9 +47,9 @@ nfsmp=/mnt/nfsmp-$BZ
subexpdir=/exportDir-$BZ/sub
tmpnfsmp=${nfsmp}-tmp
+read default_nic <<<$(getDefaultNic)
read ipv4 _nil <<<$(getDefaultIp)
-#read ipv6s _nil <<<$(getDefaultIp 6)
-ipv6s=::1
+read ipv6s _nil <<<$(getDefaultIp 6nfs)
ipv6="[$ipv6s]"
# in case "localhost.localdomain"
if echo "$HOSTNAME" | grep -q "localhost"; then
From 9ba8cf83a319c5894f342e931e94ce61a7c89b88 Mon Sep 17 00:00:00 2001
From: Bruno Goncalves <bgoncalv@redhat.com>
Date: Jan 23 2019 08:04:16 +0000
Subject: [PATCH 6/6] drop export-mount-local test case and add gating file
---
diff --git a/gating.yaml b/gating.yaml
new file mode 100644
index 0000000..6985029
--- /dev/null
+++ b/gating.yaml
@@ -0,0 +1,6 @@
+--- !Policy
+product_versions:
+ - rhel-8
+decision_context: osci_compose_gate
+rules:
+ - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}
diff --git a/tests/export-mount-local/Makefile b/tests/export-mount-local/Makefile
deleted file mode 100644
index 6ddfa94..0000000
--- a/tests/export-mount-local/Makefile
+++ /dev/null
@@ -1,76 +0,0 @@
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#
-# Description: test for: export-mount
-# Author: Jianhong Yin <jiyin@redhat.com>
-#
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#
-# Copyright (c) 2014 Red Hat, Inc.
-#
-# This program is free software: you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation, either version 2 of
-# the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be
-# useful, but WITHOUT ANY WARRANTY; without even the implied
-# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-# PURPOSE. See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see http://www.gnu.org/licenses/.
-#
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-#Generate and export TEST= PACKAGE=
-TENV=_env
-ifeq ($(PKG_TOP_DIR),)
- export PKG_TOP_DIR := $(shell p=$$PWD; while :; do \
- [ -e $$p/env.mk -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
- export _TOP_DIR := $(shell p=$$PWD; while :; do \
- [ -d $$p/.git -o -z "$$p" ] && { echo $$p; break; }; p=$${p%/*}; done)
- -include $(PKG_TOP_DIR)/env.mk
-endif
-include $(TENV)
-ifeq ($(_TOP_DIR),)
- _TOP_DIR=/mnt/tests/$(TOPLEVEL_NAMESPACE)
-endif
-#===============================================================================
-export TESTVERSION=1.0
-
-BUILT_FILES=
-FILES=$(TENV) $(METADATA) runtest.sh Makefile PURPOSE
-
-.PHONY: all install download clean
-
-run: $(FILES) build
- ( set +o posix; [ -e /usr/bin/rhts_environment.sh ] && . /usr/bin/rhts_environment.sh; \
-. /usr/share/beakerlib/beakerlib.sh || exit 1; \
-. runtest.sh )
-
-build: $(BUILT_FILES)
- test -x runtest.sh || chmod a+x runtest.sh
-
-clean:
- rm -f *~ $(BUILT_FILES)
-
--include /usr/share/rhts/lib/rhts-make.include
-
-$(METADATA): Makefile
- @echo "Owner: Jianhong Yin <jiyin@redhat.com>" > $(METADATA)
- @echo "Name: $(TEST)" >> $(METADATA)
- @echo "TestVersion: $(TESTVERSION)" >> $(METADATA)
- @echo "Path: $(TEST_DIR)" >> $(METADATA)
- @echo "Description: test for: export-mount" >> $(METADATA)
- @echo "Type: function" >> $(METADATA)
- @echo "Type: $(PACKAGE)-level-tier1" >> $(METADATA)
- @echo "TestTime: 30m" >> $(METADATA)
- @echo "RunFor: $(PACKAGE)" >> $(METADATA)
- @echo "Requires: $(PACKAGE)" >> $(METADATA)
- @echo "Priority: Normal" >> $(METADATA)
- @echo "License: GPLv2" >> $(METADATA)
- @echo "Requires: library(kernel/base)" >> $(METADATA)
- @echo "Requires: nfs-utils" >> $(METADATA)
- @echo "Requires: bind-utils" >> $(METADATA)
- @echo "RhtsRequires: library(kernel/base)" >> $(METADATA)
- rhts-lint $(METADATA)
diff --git a/tests/export-mount-local/PURPOSE b/tests/export-mount-local/PURPOSE
deleted file mode 100644
index 556df42..0000000
--- a/tests/export-mount-local/PURPOSE
+++ /dev/null
@@ -1 +0,0 @@
-# nothing
diff --git a/tests/export-mount-local/_env b/tests/export-mount-local/_env
deleted file mode 100644
index 90b8e90..0000000
--- a/tests/export-mount-local/_env
+++ /dev/null
@@ -1,7 +0,0 @@
-export TOPLEVEL_NAMESPACE=nfs-utils
-export PKG_NAMESPACE=nfs-utils
-export RELATIVE_PATH=export-mount-local
-export PACKAGE=nfs-utils
-export PACKAGE_NAME=nfs-utils
-export PKG_LIST=nfs-utils nfs-utils-lib libnfsidmap libsss_idmap libtirpc rpcbind
-export TEST=/nfs-utils/export-mount-local
diff --git a/tests/export-mount-local/runtest.sh b/tests/export-mount-local/runtest.sh
deleted file mode 100755
index eeb5dde..0000000
--- a/tests/export-mount-local/runtest.sh
+++ /dev/null
@@ -1,343 +0,0 @@
-#!/bin/bash
-# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# Description: test for: export-mount-local
-# Author: Jianhong Yin <jiyin@redhat.com>
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-#
-# Copyright (c) 2014 Red Hat, Inc.
-#
-# This copyrighted material is made available to anyone wishing
-# to use, modify, copy, or redistribute it subject to the terms
-# and conditions of the GNU General Public License version 2.
-#
-# This program is distributed in the hope that it will be
-# useful, but WITHOUT ANY WARRANTY; without even the implied
-# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-# PURPOSE. See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public
-# License along with this program; if not, write to the Free
-# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301, USA.
-#
-# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-[ -e /usr/bin/rhts-environment.sh ] && . /usr/bin/rhts-environment.sh
-. /usr/share/beakerlib/beakerlib.sh || exit 1
-
-# Load beakerlib you needed
-rlImport kernel/base
-envinfo
-#disable_avc_check
-
-#===============================================================================
-
-#signal trap
-trap "cleanup" SIGINT SIGTERM SIGHUP SIGQUIT
-cleanup() {
- rlFileRestore
- rm -rf $expdir $nfsmp
-}
-
-#global var define
-BZ=exp-mount-local
-expdir=/exportDir-$BZ
-nfsmp=/mnt/nfsmp-$BZ
-subexpdir=/exportDir-$BZ/sub
-tmpnfsmp=${nfsmp}-tmp
-
-read default_nic <<<$(getDefaultNic)
-read ipv4 _nil <<<$(getDefaultIp)
-read ipv6s _nil <<<$(getDefaultIp 6nfs)
-ipv6="[$ipv6s]"
-# in case "localhost.localdomain"
-if echo "$HOSTNAME" | grep -q "localhost"; then
- ORIGINAL_HOSTNAME="$HOSTNAME"
- HOSTNAME="$BZ"
- hostnamectl set-hostname "$HOSTNAME"
-fi
-host="$HOSTNAME"
-
-rlJournalStart
- rlPhaseStartSetup do-Setup-
- rlFileBackup /etc/{exports,auto.master} /etc/sysconfig/{nfs,autofs} /etc/nfs.conf /etc/hosts
- if [ -n "ORIGINAL_HOSTNAME" ]; then
- run "echo '$ipv4 $host' >> /etc/hosts"
- run "echo '$ipv6s $host' >> /etc/hosts"
- run "cat /etc/hosts" -
- fi
- run "rm -rf $expdir $nfsmp && mkdir -p $expdir $nfsmp"
- run "rm -rf $subexpdir $tmpnfsmp && mkdir -p $subexpdir $tmpnfsmp"
- run "service_nfs restart"
- run "ls_nfsvers"
- rlPhaseEnd
-
- for V in $(ls_nfsvers); do
- # export by IPv4 and try to mount it
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-ipv4
- run "exportfs -au && exportfs -iv $ipv4:$expdir -o ro,sync,no_root_squash"
- run "mount -o vers=$V $ipv4:$expdir $nfsmp"
- run "umount $nfsmp"
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-ipv6-x
- if [ -n "$ipv6s" ]; then
- run "mount -o vers=$V $ipv6:$expdir $nfsmp" 1-255
- [ $? = 0 ] && run "umount $nfsmp"
- fi
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv4-mount-host-bz876847
- run "mount -o vers=$V $host:$expdir $nfsmp"
- run "umount $nfsmp"
- rlPhaseEnd
-
- if [ -n "$ipv6s" ]; then
- # export by IPv6 and try to mount it
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-ipv6
- run "exportfs -au && exportfs -iv $ipv6:$expdir -o ro,sync,no_root_squash"
- run "mount -o vers=$V $ipv6:$expdir $nfsmp"
- run "umount $nfsmp"
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-ipv4-x
- run "mount -o vers=$V $ipv4:$expdir $nfsmp" 1-255
- [ $? = 0 ] && run "umount $nfsmp"
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-ipv6-mount-host
- run "dig -t aaaa $HOSTNAME +short" 0 "To get the IPv6 address"
- if [ -n "$ipv6s" ]; then
- run "mount -o vers=$V $host:$expdir $nfsmp"
- run "umount $nfsmp"
- fi
- rlPhaseEnd
- fi
-
- # export by hostname and try to mount it
- rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-host
- run "exportfs -au && exportfs -iv $host:$expdir -o ro,sync,no_root_squash"
- run "mount -o vers=$V $host:$expdir $nfsmp"
- run "umount $nfsmp"
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-ipv4
- run "mount -o vers=$V $ipv4:$expdir $nfsmp"
- run "umount $nfsmp"
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-host-mount-ipv6
- run "dig -t aaaa $HOSTNAME +short" 0 "To get the IPv6 address"
- if [ -n "$ipv6s" ]; then
- run "mount -o vers=$V $ipv6:$expdir $nfsmp"
- run "umount $nfsmp"
- fi
- rlPhaseEnd
-
- # export sub-directory by IPv4 and try to mount it
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-ipv4
- run "echo '$expdir *(ro,sync,no_root_squash)' >/etc/exports"
- run "echo '$subexpdir $ipv4(ro,sync,no_root_squash)' >>/etc/exports"
- which systemctl >/dev/null 2>&1 && run "systemctl reset-failed"
- run "service_nfs restart"
- run "showmount -e" -
- run "mount -o vers=$V $ipv4:$expdir $nfsmp"
- run "mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp"
- run "umount $nfsmp $tmpnfsmp"
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-ipv6-x-bz1198900
- if [ -n "$ipv6s" ]; then
- run "mount -o vers=$V $ipv6:$expdir $nfsmp"
- run "mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp" 1-255 "bz1198900 should not mount sub-directory with different ip"
- [ $? = 0 ] && run "umount $tmpnfsmp"
- run "umount $nfsmp"
- fi
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv4-mount-host
- run "mount -o vers=$V $host:$expdir $nfsmp"
- run "mount -o vers=$V $host:$subexpdir $tmpnfsmp"
- run "umount $nfsmp $tmpnfsmp"
- rlPhaseEnd
-
- if [ -n "$ipv6s" ]; then
- # export sub-directory by IPv6 and try to mount it
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-ipv4-x-bz1198900
- run "echo '$expdir *(ro,sync,no_root_squash)' >/etc/exports"
- run "echo '$subexpdir $ipv6s(ro,sync,no_root_squash)' >>/etc/exports"
- which systemctl >/dev/null 2>&1 && run "systemctl reset-failed"
- run "service_nfs restart"
- run "showmount -e" -
- run "mount -o vers=$V $ipv4:$expdir $nfsmp"
- run "mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp" 1-255 "bz1198900 should not mount sub-directory with different ip"
- [ $? = 0 ] && run "umount $tmpnfsmp"
- run "umount $nfsmp"
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-ipv6
- run "mount -o vers=$V $ipv6:$expdir $nfsmp"
- run "mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp"
- run "umount $nfsmp $tmpnfsmp"
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-ipv6-mount-host
- run "mount -o vers=$V $host:$expdir $nfsmp"
- run "mount -o vers=$V $host:$subexpdir $tmpnfsmp"
- run "umount $nfsmp $tmpnfsmp"
- rlPhaseEnd
- fi
-
- # export sub-directory by hostname and try to mount it
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-ipv4
- run "echo '$expdir *(ro,sync,no_root_squash)' >/etc/exports"
- run "echo '$subexpdir $host(ro,sync,no_root_squash)' >>/etc/exports"
- which systemctl >/dev/null 2>&1 && run "systemctl reset-failed"
- run "service_nfs restart"
- run "showmount -e" -
- run "mount -o vers=$V $ipv4:$expdir $nfsmp"
- run "mount -o vers=$V $ipv4:$subexpdir $tmpnfsmp"
- run "umount $nfsmp $tmpnfsmp"
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-ipv6
- if [ -n "$ipv6s" ]; then
- run "mount -o vers=$V $ipv6:$expdir $nfsmp"
- run "mount -o vers=$V $ipv6:$subexpdir $tmpnfsmp"
- run "umount $nfsmp $tmpnfsmp"
- fi
- rlPhaseEnd
- rlPhaseStartTest do-Test-nfsV$V-exp-sub-host-mount-host
- run "mount -o vers=$V $host:$expdir $nfsmp"
- run "mount -o vers=$V $host:$subexpdir $tmpnfsmp"
- run "umount $nfsmp $tmpnfsmp"
- rlPhaseEnd
-
- rlPhaseStartTest do-Test-nfsV$V-default-option-overridden-by-client-specific-option
- run "echo '$expdir -ro,sync *(rw,no_root_squash)' >/etc/exports"
- run "service_nfs restart"
- run "mount -o vers=$V $host:$expdir $nfsmp"
- run "touch $nfsmp/testfile && mkdir $nfsmp/testdir" 0 "exports option should be overridden by client specific."
- run "rm -rf $nfsmp/test*"
- run "umount $nfsmp"
- run "echo '$expdir -ro,sec=sys,sync *(rw,no_root_squash)' >/etc/exports" 0 "sec=sys may cause it to be failed."
- run "exportfs -rv"
- run "mount -o vers=$V $host:$expdir $nfsmp"
- run "touch $nfsmp/testfile && mkdir $nfsmp/testdir" 0 "bz1359042 exports option should be overridden by client specific."
- run "rm -rf $nfsmp/test*"
- run "umount $nfsmp"
- rlPhaseEnd
- done
-
- rlPhaseStartTest do-Test-bz1479135-server-side-using-bind-mount
- run "dd if=/dev/zero of=workspace.image bs=3M count=500"
- run "mkfs -t ext3 -F workspace.image"
- run "mkdir -p /workspace"
- run "mount -o loop workspace.image /workspace"
- run "mkdir -p /workspace/vmcore /srv/nfs/vmcore"
- run "touch /workspace/work_dir /workspace/vmcore/vmcore_dir"
- run "mount --bind /workspace/vmcore /srv/nfs/vmcore"
- run "echo '/srv/nfs/vmcore *(rw,no_root_squash)' > /etc/exports"
- run "echo '/workspace *(rw,no_root_squash)' >> /etc/exports"
- run "service_nfs restart"
- run "mount $host:/workspace $nfsmp"
- run "ls $nfsmp/work_dir"
- run "umount $nfsmp"
- run "exportfs -au" && run "service_nfs stop"
- run "umount /srv/nfs/vmcore"
- run "umount /workspace"
- run "rm -rf /workspace /srv/nfs/vmcore"
- run "rm workspace.image"
- rlPhaseEnd
-
- rlPhaseStartTest do-Test-bz1465259-mount-nfsv4-show-wrong-port
- run "echo '$expdir *(rw,no_root_squash)' > /etc/exports"
- run "service_nfs restart"
- run "exportfs -v"
- run "mount -t nfs -o vers=4 localhost:$expdir $nfsmp"
- run "cat /proc/mounts | grep $nfsmp" -
- run "cat /proc/mounts | grep $nfsmp | grep -q 'port='" 1 "Omit displaying 'port=' by default"
- run "mount -o remount,ro $nfsmp"
- run "cat /proc/mounts | grep $nfsmp" -
- run "cat /proc/mounts | grep $nfsmp | grep -q 'port='" 1 "Omit displaying 'port=' by default"
- run "umount $nfsmp"
- if [ -e "/etc/nfs.conf" ]; then
- echo "[nfsd]" > /etc/nfs.conf
- echo "port=20050" >> /etc/nfs.conf
- run "cat /etc/nfs.conf" -
- run "service_nfs restart"
- run "sleep 10"
- run "rpcinfo -p | grep -w nfs | grep 20050"
- run "mount -t nfs4 -o port=20050 localhost:$expdir $nfsmp"
- if [ $? -eq 0 ]; then
- run "cat /proc/mounts | grep $nfsmp" -
- run "cat /proc/mounts | grep $nfsmp | grep -q port=20050" 0 "Should show port=20050"
- run "mount -o remount,ro $nfsmp"
- run "cat /proc/mounts | grep $nfsmp" -
- run "cat /proc/mounts | grep $nfsmp | grep -q port=20050" 0 "Should show port=20050"
- run "umount $nfsmp"
- fi
- log "{Info} If NFS service is not available on the specified port"
- run "mount -t nfs4 -o port=2049 localhost:$expdir $nfsmp" 1-255
- if [ $? -eq 0 ]; then
- run "cat /proc/mounts | grep $nfsmp" -
- run "umount $nfsmp"
- fi
- log "{Info} If port value is not specified"
- if ls_nfsvers | grep -q -w 3; then
- run "mount -t nfs -o vers=3 localhost:$expdir $nfsmp" 0 "for v2/v3 client uses port advertised by server's rpcbind service"
- run "cat /proc/mounts | grep $nfsmp" -
- run "umount $nfsmp"
- fi
- run "mount -t nfs -o vers=4 localhost:$expdir $nfsmp" 1-255 "for v4 client uses the standard NFS port (2049) without checking"
- if [ $? -eq 0 ]; then
- run "cat /proc/mounts | grep $nfsmp" -
- run "umount $nfsmp"
- fi
- log "{Info} If the specified port value is 0"
- run "mount -t nfs -o vers=4,port=0 localhost:$expdir $nfsmp"
- if [ $? -eq 0 ]; then
- run "cat /proc/mounts | grep $nfsmp" -
- run "cat /proc/mounts | grep $nfsmp | grep -q port=0" 0 "Should show port=0"
- run "umount $nfsmp"
- fi
- run "echo '' > /etc/nfs.conf" 0 "Recovering"
- fi
- rlPhaseEnd
-
- if ls_nfsvers | grep -q -w "4.0"; then
- rlPhaseStartTest do-Test-bz1592915-sanity-check-clientaddr-during-mount
- run "echo '$expdir *(rw,no_root_squash)' > /etc/exports"
- run "service_nfs restart"
- run "exportfs -v"
- log "{Info} Mounting v4.0 by default"
- run "mount -o vers=4,minorversion=0 localhost:$expdir $nfsmp -v"
- if [ $? -eq 0 ]; then
- run "cat /proc/mounts | grep $nfsmp" -
- run "umount $nfsmp"
- fi
- log "{Info} Setting 'clientaddr=' not match any local address"
- # use normal mode (no verbose) to check the emitted warning
- run "mount -o vers=4,minorversion=0,clientaddr=1.2.3.4 localhost:$expdir $nfsmp &> >(tee stdout.log)"
- if [ $? -eq 0 ]; then
- run "cat /proc/mounts | grep $nfsmp" -
- run "umount $nfsmp"
- fi
- run "cat stdout.log | grep -q '[warning].*not match any existing network addresses'" 0 "Should warn the administrators"
- log "{Info} Specifying IPv4_ANY (0.0.0.0) signifying client does not want delegations"
- run "mount -o vers=4,minorversion=0,clientaddr=0.0.0.0 localhost:$expdir $nfsmp -v"
- if [ $? -eq 0 ]; then
- run "cat /proc/mounts | grep $nfsmp" -
- run "umount $nfsmp"
- fi
- log "{Info} Specifying IPv6_ANY (::0) signifying client does not want delegations"
- run "mount -o vers=4,minorversion=0,clientaddr=::0 localhost:$expdir $nfsmp -v"
- if [ $? -eq 0 ]; then
- run "cat /proc/mounts | grep $nfsmp" -
- run "umount $nfsmp"
- fi
- rlPhaseEnd
- fi
-
- rlPhaseStartCleanup do-Cleanup-
- run "rm -rf $expdir $nfsmp $subexpdir $tmpnfsmp"
- rlFileRestore
- run "service_nfs restart"
- if [ -n "ORIGINAL_HOSTNAME" ]; then
- HOSTNAME="$ORIGINAL_HOSTNAME"
- hostnamectl set-hostname "$HOSTNAME"
- fi
- rlPhaseEnd
-rlJournalEnd
-#rlJournalPrintText
-#enable_avc_check
diff --git a/tests/export-mount-local/subtest.yml b/tests/export-mount-local/subtest.yml
deleted file mode 100644
index 1a77920..0000000
--- a/tests/export-mount-local/subtest.yml
+++ /dev/null
@@ -1 +0,0 @@
-attr: {ssched: yes}
diff --git a/tests/tests.yml b/tests/tests.yml
index 865464b..e8d6ecb 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -8,13 +8,11 @@
- classic
tests:
- exportfs
- - export-mount-local
- mount
- nfs-mount-options-all
- systemd-nfs
- umount
required_packages:
- - bind-utils # export-mount-local needs this package
- findutils # beakerlib needs find command
- iptables # nfs-mount-options-all needs this package
- nfs-utils