From b0650321b1622c870ecea517d68f07c20c14ff31 Mon Sep 17 00:00:00 2001 From: Steve Dickson Date: Thu, 13 Jan 2022 10:42:19 -0500 Subject: [PATCH] Added the tests directory for the gatings tests (bz 1996211) Signed-off-by: Steve Dickson Resolves: bz1996211 --- nfs-utils.spec | 5 +- tests/nfs-mount-options-all/run.sh | 347 +++++++++++++++++++++++++++++ tests/tests.yml | 21 ++ 3 files changed, 372 insertions(+), 1 deletion(-) create mode 100644 tests/nfs-mount-options-all/run.sh create mode 100644 tests/tests.yml diff --git a/nfs-utils.spec b/nfs-utils.spec index ff4e79a..8b22cc4 100644 --- a/nfs-utils.spec +++ b/nfs-utils.spec @@ -2,7 +2,7 @@ Summary: NFS utilities and supporting clients and daemons for the kernel NFS ser Name: nfs-utils URL: http://linux-nfs.org/ Version: 2.5.4 -Release: 7%{?dist} +Release: 8%{?dist} Epoch: 1 # group all 32bit related archs @@ -448,6 +448,9 @@ fi %{_mandir}/*/nfsiostat.8.gz %changelog +* Thu Jan 13 2022 Steve Dickson 2.5.4-8 +- Added the tests directory for the gatings tests (bz 1996211) + * Tue Jan 11 2022 Steve Dickson 2.5.4-7 - Added a gating.yaml file (bz 1996211) - gssd: fix crash in debug message. (bz 1999476) diff --git a/tests/nfs-mount-options-all/run.sh b/tests/nfs-mount-options-all/run.sh new file mode 100644 index 0000000..397c7ca --- /dev/null +++ b/tests/nfs-mount-options-all/run.sh @@ -0,0 +1,347 @@ +#!/bin/bash +# set -x # uncomment for debugging +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Description: Test for nfs mount options +# Author: Bill Peck +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# 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/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..2bd4ee7 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,21 @@ +--- +# Tests that run in classic context +- hosts: localhost + roles: + - role: standard-test-beakerlib + use_beakerlib_libraries: yes + tags: + - classic + repositories: + - repo: "git://pkgs.devel.redhat.com/tests/nfs-utils" + dest: "tests" + version: "6f3c1af32931edef9c0a2829a570156ec3ba94d6" + tests: + - tests/commands/utils/umount + - tests/commands/utils/exportfs + - tests/commands/utils/mount + - tests/services/systemd/nfs + - tests/function/nfs-mount-options-all + required_packages: + - nfs-utils + - redhat-lsb-core # lsb_release is needed by tests