From mboxrd@z Thu Jan 1 00:00:00 1970 From: Cristian Marussi Date: Thu, 20 Dec 2018 18:21:46 +0000 Subject: [LTP] [PATCH v2 1/4] cgroup_regression_test.sh ported to newlib In-Reply-To: <20181220182149.48326-1-cristian.marussi@arm.com> References: <20181220182149.48326-1-cristian.marussi@arm.com> Message-ID: <20181220182149.48326-2-cristian.marussi@arm.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: ltp@lists.linux.it Ported to newlib and removed most global vars usage. Signed-off-by: Cristian Marussi --- .../cgroup/cgroup_regression_test.sh | 217 +++++++++--------- 1 file changed, 110 insertions(+), 107 deletions(-) diff --git a/testcases/kernel/controllers/cgroup/cgroup_regression_test.sh b/testcases/kernel/controllers/cgroup/cgroup_regression_test.sh index 6cfc63866..1b4dfb45e 100755 --- a/testcases/kernel/controllers/cgroup/cgroup_regression_test.sh +++ b/testcases/kernel/controllers/cgroup/cgroup_regression_test.sh @@ -22,71 +22,83 @@ ## ## ################################################################################ -cd $LTPROOT/testcases/bin +TST_TESTFUNC=do_test +TST_SETUP=do_setup +TST_CLEANUP=do_cleanup +TST_CNT=10 +TST_NEEDS_ROOT=1 +TST_NEEDS_CMDS="dmesg mountpoint mount umount cat kill find mkdir rmdir grep" -export TCID="cgroup_regression_test" -export TST_TOTAL=10 -export TST_COUNT=1 +. tst_test.sh -failed=0 +do_setup() +{ + cd $LTPROOT/testcases/bin -if tst_kvcmp -lt "2.6.29"; then - tst_brkm TCONF ignored "test must be run with kernel 2.6.29 or newer" - exit 32 -fi + mkdir cgroup/ -if [ ! -f /proc/cgroups ]; then - tst_brkm TCONF ignored "Kernel does not support for control groups; skipping testcases"; - exit 32 -fi + if tst_kvcmp -lt "2.6.29"; then + tst_brk TCONF ignored "test must be run with kernel 2.6.29 or newer" + fi -if [ "x$(id -ru)" != x0 ]; then - tst_brkm TCONF ignored "Test must be run as root" - exit 32 -fi + if [ ! -f /proc/cgroups ]; then + tst_brk TCONF ignored "Kernel does not support for control groups; skipping testcases"; + fi -dmesg -c > /dev/null -nr_bug=`dmesg | grep -c "kernel BUG"` -nr_null=`dmesg | grep -c "kernel NULL pointer dereference"` -nr_warning=`dmesg | grep -c "^WARNING"` -nr_lockdep=`dmesg | grep -c "possible recursive locking detected"` + dmesg -c > /dev/null + NR_BUG=`dmesg | grep -c "kernel BUG"` + NR_NULL=`dmesg | grep -c "kernel NULL pointer dereference"` + NR_WARNING=`dmesg | grep -c "^WARNING"` + NR_LOCKDEP=`dmesg | grep -c "possible recursive locking detected"` +} + +do_cleanup() +{ + cd $LTPROOT/testcases/bin + + if mountpoint -q cgroup/ + then + find cgroup/ -maxdepth 1 -depth -exec rmdir {} + + umount cgroup/ + rmdir cgroup/ + fi +} # check_kernel_bug - check if some kind of kernel bug happened check_kernel_bug() { - new_bug=`dmesg | grep -c "kernel BUG"` - new_null=`dmesg | grep -c "kernel NULL pointer dereference"` - new_warning=`dmesg | grep -c "^WARNING"` - new_lockdep=`dmesg | grep -c "possible recursive locking detected"` + local new_bug=`dmesg | grep -c "kernel BUG"` + local new_null=`dmesg | grep -c "kernel NULL pointer dereference"` + local new_warning=`dmesg | grep -c "^WARNING"` + local new_lockdep=`dmesg | grep -c "possible recursive locking detected"` # no kernel bug is detected - if [ $new_bug -eq $nr_bug -a $new_warning -eq $nr_warning -a \ - $new_null -eq $nr_null -a $new_lockdep -eq $nr_lockdep ]; then + if [ $new_bug -eq $NR_BUG -a $new_warning -eq $NR_WARNING -a \ + $new_null -eq $NR_NULL -a $new_lockdep -eq $NR_LOCKDEP ]; then return 1 fi # some kernel bug is detected - if [ $new_bug -gt $nr_bug ]; then - tst_resm TFAIL "kernel BUG was detected!" + if [ $new_bug -gt $NR_BUG ]; then + tst_res TFAIL "kernel BUG was detected!" fi - if [ $new_warning -gt $nr_warning ]; then - tst_resm TFAIL "kernel WARNING was detected!" + if [ $new_warning -gt $NR_WARNING ]; then + tst_res TFAIL "kernel WARNING was detected!" fi - if [ $new_null -gt $nr_null ]; then - tst_resm TFAIL "kernel NULL pointer dereference!" + if [ $new_null -gt $NR_NULL ]; then + tst_res TFAIL "kernel NULL pointer dereference!" fi - if [ $new_lockdep -gt $nr_lockdep ]; then - tst_resm TFAIL "kernel lockdep warning was detected!" + if [ $new_lockdep -gt $NR_LOCKDEP ]; then + tst_res TFAIL "kernel lockdep warning was detected!" fi - nr_bug=$new_bug - nr_null=$new_null - nr_warning=$new_warning - nr_lockdep=$new_lockdep + NR_BUG=$new_bug + NR_NULL=$new_null + NR_WARNING=$new_warning + NR_LOCKDEP=$new_lockdep echo "check_kernel_bug found something!" dmesg - failed=1 return 0 } @@ -107,8 +119,7 @@ test_1() mount -t cgroup -o none,name=foo cgroup cgroup/ if [ $? -ne 0 ]; then - tst_resm TFAIL "failed to mount cgroup filesystem" - failed=1 + tst_res TFAIL "failed to mount cgroup filesystem" /bin/kill -SIGTERM $! return fi @@ -116,7 +127,7 @@ test_1() check_kernel_bug if [ $? -eq 1 ]; then - tst_resm TPASS "no kernel bug was found" + tst_res TPASS "no kernel bug was found" fi /bin/kill -SIGTERM $! @@ -132,11 +143,13 @@ test_1() #--------------------------------------------------------------------------- test_2() { + local val1 + local val2 + mount -t cgroup -o none,name=foo cgroup cgroup/ if [ $? -ne 0 ]; then - tst_resm TFAIL "Failed to mount cgroup filesystem" - failed=1 - return 1 + tst_res TFAIL "Failed to mount cgroup filesystem" + return fi echo 0 > cgroup/notify_on_release @@ -148,16 +161,15 @@ test_2() val2=`cat cgroup/1/notify_on_release` if [ $val1 -ne 0 -o $val2 -ne 1 ]; then - tst_resm TFAIL "wrong notify_on_release value" - failed=1 + tst_res TFAIL "wrong notify_on_release value" else - tst_resm TPASS "notify_on_release is inherited" + tst_res TPASS "notify_on_release is inherited" fi rmdir cgroup/0 cgroup/1 umount cgroup/ - return $failed + return } #--------------------------------------------------------------------------- @@ -173,14 +185,14 @@ test_3() local cpu_subsys_path if [ ! -e /proc/sched_debug ]; then - tst_resm TCONF "CONFIG_SCHED_DEBUG is not enabled" + tst_res TCONF "CONFIG_SCHED_DEBUG is not enabled" return fi if grep -q -w "cpu" /proc/cgroups ; then cpu_subsys_path=$(grep -w cpu /proc/mounts | awk '{ print $2 }') else - tst_resm TCONF "CONFIG_CGROUP_SCHED is not enabled" + tst_res TCONF "CONFIG_CGROUP_SCHED is not enabled" return fi @@ -188,8 +200,7 @@ test_3() if [ -z "$cpu_subsys_path" ]; then mount -t cgroup -o cpu xxx cgroup/ if [ $? -ne 0 ]; then - tst_resm TFAIL "Failed to mount cpu subsys" - failed=1 + tst_res TFAIL "Failed to mount cpu subsys" return fi cpu_subsys_path=cgroup @@ -207,7 +218,7 @@ test_3() check_kernel_bug if [ $? -eq 1 ]; then - tst_resm TPASS "no kernel bug was found" + tst_res TPASS "no kernel bug was found" fi rmdir $cpu_subsys_path/* 2> /dev/null @@ -223,15 +234,17 @@ test_3() #--------------------------------------------------------------------------- test_4() { + local lines + if [ ! -e /proc/lockdep ]; then - tst_resm TCONF "CONFIG_LOCKDEP is not enabled" + tst_res TCONF "CONFIG_LOCKDEP is not enabled" return fi # MAX_LOCKDEP_SUBCLASSES is 8, so number of subsys should be > 8 lines=`cat /proc/cgroups | wc -l` if [ $lines -le 9 ]; then - tst_resm TCONF "require more than 8 cgroup subsystems" + tst_res TCONF "require more than 8 cgroup subsystems" return fi @@ -242,11 +255,10 @@ test_4() dmesg | grep -q "MAX_LOCKDEP_SUBCLASSES too low" if [ $? -eq 0 ]; then - tst_resm TFAIL "lockdep BUG was found" - failed=1 + tst_res TFAIL "lockdep BUG was found" return else - tst_resm TPASS "no lockdep BUG was found" + tst_res TPASS "no lockdep BUG was found" fi } @@ -264,14 +276,14 @@ test_5() local failing local mntpoint - lines=`cat /proc/cgroups | wc -l` + local lines=`cat /proc/cgroups | wc -l` if [ $lines -le 2 ]; then - tst_resm TCONF "require at least 2 cgroup subsystems" + tst_res TCONF "require at least 2 cgroup subsystems" return fi - subsys1=`tail -n 1 /proc/cgroups | awk '{ print $1 }'` - subsys2=`tail -n 2 /proc/cgroups | head -1 | awk '{ print $1 }'` + local subsys1=`tail -n 1 /proc/cgroups | awk '{ print $1 }'` + local subsys2=`tail -n 2 /proc/cgroups | head -1 | awk '{ print $1 }'` # Accounting here for the fact that the chosen subsystems could # have been already previously mounted at boot time: in such a @@ -287,8 +299,7 @@ test_5() failing=$subsys1 mount -t cgroup -o $subsys1,$subsys2 xxx $mntpoint/ if [ $? -ne 0 ]; then - tst_resm TFAIL "mount $subsys1 and $subsys2 failed" - failed=1 + tst_res TFAIL "mount $subsys1 and $subsys2 failed" return fi else @@ -302,10 +313,9 @@ test_5() # This 2nd mount has been properly configured to fail mount -t cgroup -o $failing xxx $mntpoint/ 2> /dev/null if [ $? -eq 0 ]; then - tst_resm TFAIL "mount $failing should fail" + tst_res TFAIL "mount $failing should fail" # Do NOT unmount pre-existent mountpoints... - [ -z "$mounted" ] && umount $mntpoint - failed=1 + [ -z "$mounted" ] && umount $mntpoint/ return fi @@ -321,7 +331,7 @@ test_5() check_kernel_bug if [ $? -eq 1 ]; then - tst_resm TPASS "no kernel bug was found" + tst_res TPASS "no kernel bug was found" fi # clean up @@ -329,7 +339,7 @@ test_5() wait $! rmdir $mntpoint/0 # Do NOT unmount pre-existent mountpoints... - [ -z "$mounted" ] && umount $mntpoint + [ -z "$mounted" ] && umount $mntpoint/ } #--------------------------------------------------------------------------- @@ -342,15 +352,15 @@ test_6() { grep -q -w "ns" /proc/cgroups if [ $? -ne 0 ]; then - tst_resm TCONF "CONFIG_CGROUP_NS" + tst_res TCONF "CONFIG_CGROUP_NS" return fi # run the test for 30 secs ./test_6_1.sh & - pid1=$! + local pid1=$! ./test_6_2 & - pid2=$! + local pid2=$! sleep 30 /bin/kill -SIGUSR1 $pid1 @@ -360,7 +370,7 @@ test_6() check_kernel_bug if [ $? -eq 1 ]; then - tst_resm TPASS "no kernel bug was found" + tst_res TPASS "no kernel bug was found" fi # clean up @@ -379,12 +389,12 @@ test_6() #--------------------------------------------------------------------------- test_7_1() { - subsys_path=$(grep -w $subsys /proc/mounts | cut -d ' ' -f 2) + local subsys=$1 + local subsys_path=$(grep -w $subsys /proc/mounts | cut -d ' ' -f 2) if [ -z "$subsys_path" ]; then mount -t cgroup -o $subsys xxx cgroup/ if [ $? -ne 0 ]; then - tst_resm TFAIL "failed to mount $subsys" - failed=1 + tst_res TFAIL "failed to mount $subsys" return fi subsys_path=cgroup @@ -407,10 +417,11 @@ test_7_1() test_7_2() { + local subsys=$1 + mount -t cgroup -o none,name=foo cgroup cgroup/ if [ $? -ne 0 ]; then - tst_resm TFAIL "failed to mount cgroup" - failed=1 + tst_res TFAIL "failed to mount cgroup" return fi @@ -441,19 +452,19 @@ test_7_2() test_7() { - lines=`cat /proc/cgroups | wc -l` + local lines=`cat /proc/cgroups | wc -l` if [ $lines -le 2 ]; then - tst_resm TCONF "require at least 2 cgroup subsystems" + tst_res TCONF "require at least 2 cgroup subsystems" slt_result $SLT_Untested return fi - subsys=`tail -n 1 /proc/cgroups | awk '{ print $1 }'` + local subsys=`tail -n 1 /proc/cgroups | awk '{ print $1 }'` # remount to add new subsystems to the hierarchy - i=1 + local i=1 while [ $i -le 2 ] ; do - test_7_$i + test_7_$i $subsys if [ $? -ne 0 ]; then return fi @@ -465,7 +476,7 @@ test_7() : $(( i += 1 )) done - tst_resm TPASS "no kernel bug was found" + tst_res TPASS "no kernel bug was found" } #--------------------------------------------------------------------------- @@ -478,22 +489,20 @@ test_8() { mount -t cgroup -o none,name=foo cgroup cgroup/ if [ $? -ne 0 ]; then - tst_resm TFAIL "failed to mount cgroup filesystem" - failed=1 + tst_res TFAIL "failed to mount cgroup filesystem" return fi ./getdelays -C cgroup/tasks > /dev/null 2>&1 if [ $? -eq 0 ]; then - tst_resm TFAIL "should have failed to get cgroupstat of tasks file" + tst_res TFAIL "should have failed to get cgroupstat of tasks file" umount cgroup/ - failed=1 return fi check_kernel_bug if [ $? -eq 1 ]; then - tst_resm TPASS "no kernel bug was found" + tst_res TPASS "no kernel bug was found" fi umount cgroup/ @@ -510,9 +519,9 @@ test_8() test_9() { ./test_9_1.sh & - pid1=$! + local pid1=$! ./test_9_2.sh & - pid2=$! + local pid2=$! sleep 30 /bin/kill -SIGUSR1 $pid1 $pid2 @@ -523,7 +532,7 @@ test_9() check_kernel_bug if [ $? -eq 1 ]; then - tst_resm TPASS "no kernel warning was found" + tst_res TPASS "no kernel warning was found" fi } @@ -537,9 +546,9 @@ test_9() test_10() { ./test_10_1.sh & - pid1=$! + local pid1=$! ./test_10_2.sh & - pid2=$! + local pid2=$! sleep 30 /bin/kill -SIGUSR1 $pid1 $pid2 @@ -552,21 +561,15 @@ test_10() check_kernel_bug if [ $? -eq 1 ]; then - tst_resm TPASS "no kernel warning was found" + tst_res TPASS "no kernel warning was found" fi } -# main - -mkdir cgroup/ - -for ((cur = 1; cur <= $TST_TOTAL; cur++)) +do_test() { - export TST_COUNT=$cur + local cur=$1 test_$cur } -find cgroup/ -maxdepth 1 -depth -exec rmdir {} + - -exit $failed +tst_run -- 2.17.1