diff mbox series

[1/3] cpuset_regression_test: Convert to new api

Message ID 20210623071543.171021-2-lkml@jv-coder.de
State Accepted
Headers show
Series cpuset_regression_test: convert and improve | expand

Commit Message

Joerg Vehlow June 23, 2021, 7:15 a.m. UTC
From: Joerg Vehlow <joerg.vehlow@aox-tech.de>

Signed-off-by: Joerg Vehlow <joerg.vehlow@aox-tech.de>
---
 .../cpuset/cpuset_regression_test.sh          | 147 +++++++-----------
 1 file changed, 56 insertions(+), 91 deletions(-)

Comments

Richard Palethorpe Nov. 15, 2021, 9:23 a.m. UTC | #1
Joerg Vehlow <lkml@jv-coder.de> writes:

> From: Joerg Vehlow <joerg.vehlow@aox-tech.de>
>
> Signed-off-by: Joerg Vehlow <joerg.vehlow@aox-tech.de>

Reviewed-by: Richard Palethorpe <rpalethorpe@suse.com>

> ---
>  .../cpuset/cpuset_regression_test.sh          | 147 +++++++-----------
>  1 file changed, 56 insertions(+), 91 deletions(-)
>
> diff --git a/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
> index dccfd91cd..1dda19704 100755
> --- a/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
> +++ b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
> @@ -1,82 +1,65 @@
>  #!/bin/sh
> -#
> +# SPDX-License-Identifier: GPL-2.0-or-later
>  # Copyright (c) 2015 Fujitsu Ltd.
>  # Author: Zeng Linggang <zenglg.jy@cn.fujitsu.com>
>  #
> -# 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, write to the Free Software
> -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
> -#
>  # This is a regression test for commit:
> -# http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/
> -# ?id=bb2bc55
> +# http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=bb2bc55
>  #
> +# A newly created cpuset group crashed the kernel, if exclusive was set to 1,
> +# before a cpuset was set.
> +
> +TST_SETUP=setup
> +TST_CLEANUP=cleanup
> +TST_TESTFUNC=test
> +TST_NEEDS_ROOT=1
> +TST_NEEDS_TMPDIR=1
> +TST_MIN_KVER="3.18"
> +
> +. cgroup_lib.sh
> +
> +LOCAL_MOUNTPOINT="cpuset_test"
>  
> -TCID=cpuset_regression_test
> -TST_TOTAL=1
> -. test.sh
> +root_cpuset_dir=
> +cpu_exclusive="cpuset.cpu_exclusive"
> +cpus="cpuset.cpus"
> +old_cpu_exclusive_value=1
>  
>  setup()
>  {
> -	tst_require_root
> +	local cpu_num
>  
> -	if tst_kvcmp -lt "3.18"; then
> -		tst_brkm TCONF "Test must be run with kernel 3.18.0 or newer"
> -	fi
> -
> -	local cpu_num=$(tst_getconf _NPROCESSORS_ONLN)
> +	cpu_num=$(tst_getconf _NPROCESSORS_ONLN)
>  	if [ $cpu_num -lt 2 ]; then
> -		tst_brkm TCONF "We need 2 cpus at least to have test"
> +		tst_brk TCONF "We need 2 cpus at least to have test"
>  	fi
>  
> -	tst_tmpdir
> -
> -	TST_CLEANUP=cleanup
> +	if ! is_cgroup_subsystem_available_and_enabled "cpuset"; then
> +		tst_brk TCONF "Either kernel does not support cpuset controller or feature not enabled"
> +	fi
>  
>  	# We need to mount cpuset if it is not found.
> -	mount_flag=0
> -	grep -w cpuset /proc/mounts > tmpfile
> -	if [ $? -eq 0 ]; then
> -		root_cpuset_dir=$(cat tmpfile | awk '{print $2}')
> -	else
> -		root_cpuset_dir="cpuset_test"
> +	root_cpuset_dir=$(get_cgroup_mountpoint cpuset)
> +	if [ -z "$root_cpuset_dir" ]; then
> +		root_cpuset_dir="$LOCAL_MOUNTPOINT"
>  
>  		ROD_SILENT mkdir -p ${root_cpuset_dir}
> -
>  		ROD_SILENT mount -t cpuset cpuset ${root_cpuset_dir}
> -
> -		mount_flag=1
>  	fi
>  
> -	if [ -f ${root_cpuset_dir}/cpuset.cpu_exclusive ]; then
> -		cpu_exclusive=cpuset.cpu_exclusive
> -		cpus=cpuset.cpus
> -	elif [ -f ${root_cpuset_dir}/cpu_exclusive ]; then
> +	if ! [ -f ${root_cpuset_dir}/${cpu_exclusive} ]; then
>  		cpu_exclusive=cpu_exclusive
>  		cpus=cpus
> -	else
> -		tst_brkm TBROK "Both cpuset.cpu_exclusive and cpu_exclusive" \
> -			       "do not exist."
>  	fi
>  
> -	cpu_exclusive_value=$(cat ${root_cpuset_dir}/${cpu_exclusive})
> -	if [ "${cpu_exclusive_value}" != "1" ];then
> +	if ! [ -f ${root_cpuset_dir}/${cpu_exclusive} ]; then
> +		tst_brk TBROK "Both cpuset.cpu_exclusive and cpu_exclusive do not exist"
> +	fi
> +
> +	old_cpu_exclusive_value=$(cat ${root_cpuset_dir}/${cpu_exclusive})
> +	if [ "${old_cpu_exclusive_value}" != "1" ];then
>  		echo 1 > ${root_cpuset_dir}/${cpu_exclusive}
> -		if [ $? -ne 0 ]; then
> -			tst_brkm TBROK "'echo 1 >" \
> -				       "${root_cpuset_dir}/${cpu_exclusive}'" \
> -				       "failed"
> -		fi
> +		[ $? -ne 0 ] && tst_brk TBROK "'echo 1 > ${root_cpuset_dir}/${cpu_exclusive}' failed"
>  	fi
>  }
>  
> @@ -86,65 +69,47 @@ cleanup()
>  		rmdir ${root_cpuset_dir}/testdir
>  	fi
>  
> -	if [ "$cpu_exclusive_value" != 1 ]; then
> -		# Need to flush, or may be output:
> -		# "write error: Device or resource busy"
> +	if [ "$old_cpu_exclusive_value" != 1 ]; then
> +		# Need to flush, or write may fail with: "Device or resource busy"
>  		sync
> -
> -		echo ${cpu_exclusive_value} > \
> -		     ${root_cpuset_dir}/${cpu_exclusive}
> +		echo ${old_cpu_exclusive_value} > ${root_cpuset_dir}/${cpu_exclusive}
>  	fi
>  
> -	if [ "${mount_flag}" = "1" ]; then
> -		umount ${root_cpuset_dir}
> +	if [ -d "$LOCAL_MOUNTPOINT" ]; then
> +		umount ${LOCAL_MOUNTPOINT}
>  		if [ $? -ne 0 ]; then
> -			tst_resm TWARN "'umount ${root_cpuset_dir}' failed"
> +			tst_res TWARN "'umount ${LOCAL_MOUNTPOINT}' failed"
>  		fi
>  
> -		if [ -d "${root_cpuset_dir}" ]; then
> -			rmdir ${root_cpuset_dir}
> -		fi
> +		rmdir ${LOCAL_MOUNTPOINT}
>  	fi
> -
> -	tst_rmdir
>  }
>  
> -cpuset_test()
> +test()
>  {
> +	local cpu_exclusive_tmp cpus_value
> +
>  	ROD_SILENT mkdir ${root_cpuset_dir}/testdir
>  
>  	# Creat an exclusive cpuset.
>  	echo 1 > ${root_cpuset_dir}/testdir/${cpu_exclusive}
> -	if [ $? -ne 0 ]; then
> -		tst_brkm TFAIL "'echo 1 >" \
> -			       "${root_cpuset_dir}/testdir/${cpu_exclusive}'" \
> -			       "failed"
> -	fi
> -
> -	local cpu_exclusive_tmp=$(cat \
> -				  ${root_cpuset_dir}/testdir/${cpu_exclusive})
> +	[ $? -ne 0 ] && tst_brk TFAIL "'echo 1 > ${root_cpuset_dir}/testdir/${cpu_exclusive}' failed"
> +	
> +	cpu_exclusive_tmp=$(cat ${root_cpuset_dir}/testdir/${cpu_exclusive})
>  	if [ "${cpu_exclusive_tmp}" != "1" ]; then
> -		tst_brkm TFAIL "${cpu_exclusive} is '${cpu_exclusive_tmp}'," \
> -			       "expected '1'"
> +		tst_brk TFAIL "${cpu_exclusive} is '${cpu_exclusive_tmp}', expected '1'"
>  	fi
>  
> -	# ${cpus} is empty at the begin, that maybe make the system *crash*.
> +	# This may trigger the kernel crash
>  	echo 0-1 > ${root_cpuset_dir}/testdir/${cpus}
> -	if [ $? -ne 0 ]; then
> -		tst_brkm TFAIL "'echo 0-1 >" \
> -			       "${root_cpuset_dir}/testdir/${cpus}' failed"
> -	fi
> +	[ $? -ne 0 ] && tst_brk TFAIL "'echo 0-1 > ${root_cpuset_dir}/testdir/${cpus}' failed"
>  
> -	local cpus_value=$(cat ${root_cpuset_dir}/testdir/${cpus})
> +	cpus_value=$(cat ${root_cpuset_dir}/testdir/${cpus})
>  	if [ "${cpus_value}" != "0-1" ]; then
> -		tst_brkm TFAIL "${cpus} is '${cpus_value}', expected '0-1'"
> +		tst_brk TFAIL "${cpus} is '${cpus_value}', expected '0-1'"
>  	fi
>  
> -	tst_resm TPASS "Bug is not reproduced"
> +	tst_res TPASS "Bug is not reproducible"
>  }
>  
> -setup
> -
> -cpuset_test
> -
> -tst_exit
> +tst_run
> -- 
> 2.25.1
Richard Palethorpe Nov. 15, 2021, 10:36 a.m. UTC | #2
Hi,

> -cpuset_test()
> +test()
>  {
> +	local cpu_exclusive_tmp cpus_value
> +
>  	ROD_SILENT mkdir ${root_cpuset_dir}/testdir
>  
>  	# Creat an exclusive cpuset.
>  	echo 1 > ${root_cpuset_dir}/testdir/${cpu_exclusive}
> -	if [ $? -ne 0 ]; then
> -		tst_brkm TFAIL "'echo 1 >" \
> -			       "${root_cpuset_dir}/testdir/${cpu_exclusive}'" \
> -			       "failed"
> -	fi
> -
> -	local cpu_exclusive_tmp=$(cat \
> -				  ${root_cpuset_dir}/testdir/${cpu_exclusive})
> +	[ $? -ne 0 ] && tst_brk TFAIL "'echo 1 > ${root_cpuset_dir}/testdir/${cpu_exclusive}' failed"
> +	

Merged, but with the trailing whitespace in the line above removed.
diff mbox series

Patch

diff --git a/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
index dccfd91cd..1dda19704 100755
--- a/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
+++ b/testcases/kernel/controllers/cpuset/cpuset_regression_test.sh
@@ -1,82 +1,65 @@ 
 #!/bin/sh
-#
+# SPDX-License-Identifier: GPL-2.0-or-later
 # Copyright (c) 2015 Fujitsu Ltd.
 # Author: Zeng Linggang <zenglg.jy@cn.fujitsu.com>
 #
-# 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, write to the Free Software
-# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-#
 # This is a regression test for commit:
-# http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/
-# ?id=bb2bc55
+# http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=bb2bc55
 #
+# A newly created cpuset group crashed the kernel, if exclusive was set to 1,
+# before a cpuset was set.
+
+TST_SETUP=setup
+TST_CLEANUP=cleanup
+TST_TESTFUNC=test
+TST_NEEDS_ROOT=1
+TST_NEEDS_TMPDIR=1
+TST_MIN_KVER="3.18"
+
+. cgroup_lib.sh
+
+LOCAL_MOUNTPOINT="cpuset_test"
 
-TCID=cpuset_regression_test
-TST_TOTAL=1
-. test.sh
+root_cpuset_dir=
+cpu_exclusive="cpuset.cpu_exclusive"
+cpus="cpuset.cpus"
+old_cpu_exclusive_value=1
 
 setup()
 {
-	tst_require_root
+	local cpu_num
 
-	if tst_kvcmp -lt "3.18"; then
-		tst_brkm TCONF "Test must be run with kernel 3.18.0 or newer"
-	fi
-
-	local cpu_num=$(tst_getconf _NPROCESSORS_ONLN)
+	cpu_num=$(tst_getconf _NPROCESSORS_ONLN)
 	if [ $cpu_num -lt 2 ]; then
-		tst_brkm TCONF "We need 2 cpus at least to have test"
+		tst_brk TCONF "We need 2 cpus at least to have test"
 	fi
 
-	tst_tmpdir
-
-	TST_CLEANUP=cleanup
+	if ! is_cgroup_subsystem_available_and_enabled "cpuset"; then
+		tst_brk TCONF "Either kernel does not support cpuset controller or feature not enabled"
+	fi
 
 	# We need to mount cpuset if it is not found.
-	mount_flag=0
-	grep -w cpuset /proc/mounts > tmpfile
-	if [ $? -eq 0 ]; then
-		root_cpuset_dir=$(cat tmpfile | awk '{print $2}')
-	else
-		root_cpuset_dir="cpuset_test"
+	root_cpuset_dir=$(get_cgroup_mountpoint cpuset)
+	if [ -z "$root_cpuset_dir" ]; then
+		root_cpuset_dir="$LOCAL_MOUNTPOINT"
 
 		ROD_SILENT mkdir -p ${root_cpuset_dir}
-
 		ROD_SILENT mount -t cpuset cpuset ${root_cpuset_dir}
-
-		mount_flag=1
 	fi
 
-	if [ -f ${root_cpuset_dir}/cpuset.cpu_exclusive ]; then
-		cpu_exclusive=cpuset.cpu_exclusive
-		cpus=cpuset.cpus
-	elif [ -f ${root_cpuset_dir}/cpu_exclusive ]; then
+	if ! [ -f ${root_cpuset_dir}/${cpu_exclusive} ]; then
 		cpu_exclusive=cpu_exclusive
 		cpus=cpus
-	else
-		tst_brkm TBROK "Both cpuset.cpu_exclusive and cpu_exclusive" \
-			       "do not exist."
 	fi
 
-	cpu_exclusive_value=$(cat ${root_cpuset_dir}/${cpu_exclusive})
-	if [ "${cpu_exclusive_value}" != "1" ];then
+	if ! [ -f ${root_cpuset_dir}/${cpu_exclusive} ]; then
+		tst_brk TBROK "Both cpuset.cpu_exclusive and cpu_exclusive do not exist"
+	fi
+
+	old_cpu_exclusive_value=$(cat ${root_cpuset_dir}/${cpu_exclusive})
+	if [ "${old_cpu_exclusive_value}" != "1" ];then
 		echo 1 > ${root_cpuset_dir}/${cpu_exclusive}
-		if [ $? -ne 0 ]; then
-			tst_brkm TBROK "'echo 1 >" \
-				       "${root_cpuset_dir}/${cpu_exclusive}'" \
-				       "failed"
-		fi
+		[ $? -ne 0 ] && tst_brk TBROK "'echo 1 > ${root_cpuset_dir}/${cpu_exclusive}' failed"
 	fi
 }
 
@@ -86,65 +69,47 @@  cleanup()
 		rmdir ${root_cpuset_dir}/testdir
 	fi
 
-	if [ "$cpu_exclusive_value" != 1 ]; then
-		# Need to flush, or may be output:
-		# "write error: Device or resource busy"
+	if [ "$old_cpu_exclusive_value" != 1 ]; then
+		# Need to flush, or write may fail with: "Device or resource busy"
 		sync
-
-		echo ${cpu_exclusive_value} > \
-		     ${root_cpuset_dir}/${cpu_exclusive}
+		echo ${old_cpu_exclusive_value} > ${root_cpuset_dir}/${cpu_exclusive}
 	fi
 
-	if [ "${mount_flag}" = "1" ]; then
-		umount ${root_cpuset_dir}
+	if [ -d "$LOCAL_MOUNTPOINT" ]; then
+		umount ${LOCAL_MOUNTPOINT}
 		if [ $? -ne 0 ]; then
-			tst_resm TWARN "'umount ${root_cpuset_dir}' failed"
+			tst_res TWARN "'umount ${LOCAL_MOUNTPOINT}' failed"
 		fi
 
-		if [ -d "${root_cpuset_dir}" ]; then
-			rmdir ${root_cpuset_dir}
-		fi
+		rmdir ${LOCAL_MOUNTPOINT}
 	fi
-
-	tst_rmdir
 }
 
-cpuset_test()
+test()
 {
+	local cpu_exclusive_tmp cpus_value
+
 	ROD_SILENT mkdir ${root_cpuset_dir}/testdir
 
 	# Creat an exclusive cpuset.
 	echo 1 > ${root_cpuset_dir}/testdir/${cpu_exclusive}
-	if [ $? -ne 0 ]; then
-		tst_brkm TFAIL "'echo 1 >" \
-			       "${root_cpuset_dir}/testdir/${cpu_exclusive}'" \
-			       "failed"
-	fi
-
-	local cpu_exclusive_tmp=$(cat \
-				  ${root_cpuset_dir}/testdir/${cpu_exclusive})
+	[ $? -ne 0 ] && tst_brk TFAIL "'echo 1 > ${root_cpuset_dir}/testdir/${cpu_exclusive}' failed"
+	
+	cpu_exclusive_tmp=$(cat ${root_cpuset_dir}/testdir/${cpu_exclusive})
 	if [ "${cpu_exclusive_tmp}" != "1" ]; then
-		tst_brkm TFAIL "${cpu_exclusive} is '${cpu_exclusive_tmp}'," \
-			       "expected '1'"
+		tst_brk TFAIL "${cpu_exclusive} is '${cpu_exclusive_tmp}', expected '1'"
 	fi
 
-	# ${cpus} is empty at the begin, that maybe make the system *crash*.
+	# This may trigger the kernel crash
 	echo 0-1 > ${root_cpuset_dir}/testdir/${cpus}
-	if [ $? -ne 0 ]; then
-		tst_brkm TFAIL "'echo 0-1 >" \
-			       "${root_cpuset_dir}/testdir/${cpus}' failed"
-	fi
+	[ $? -ne 0 ] && tst_brk TFAIL "'echo 0-1 > ${root_cpuset_dir}/testdir/${cpus}' failed"
 
-	local cpus_value=$(cat ${root_cpuset_dir}/testdir/${cpus})
+	cpus_value=$(cat ${root_cpuset_dir}/testdir/${cpus})
 	if [ "${cpus_value}" != "0-1" ]; then
-		tst_brkm TFAIL "${cpus} is '${cpus_value}', expected '0-1'"
+		tst_brk TFAIL "${cpus} is '${cpus_value}', expected '0-1'"
 	fi
 
-	tst_resm TPASS "Bug is not reproduced"
+	tst_res TPASS "Bug is not reproducible"
 }
 
-setup
-
-cpuset_test
-
-tst_exit
+tst_run