xref: /freebsd/sys/contrib/openzfs/tests/zfs-tests/include/zpool_script.shlib (revision fe75646a0234a261c0013bf1840fdac4acaf0cec)
1#
2# Common functions used by the zpool_status and zpool_iostat tests for running
3# scripts with the -c option.
4#
5# Copyright (c) 2017 Lawrence Livermore National Security, LLC.
6#
7
8. $STF_SUITE/include/libtest.shlib
9
10function test_zpool_script {
11	script="$1"
12	testpool="$2"
13	cmd="$3"
14	wholecmd="$cmd $script $testpool"
15	out="$($wholecmd)"
16
17	# Default number of columns that get printed without -c
18	if [ "$cmd" != "${cmd/iostat/_/}" ]; then
19		# iostat
20		dcols=7
21	else
22
23		# status
24		dcols=5
25	fi
26
27	# Get the new column name that the script created
28	col="$(echo "$out" | \
29	    awk '/^pool +alloc +free +read +write +/ {print $8} \
30	    /NAME +STATE +READ +WRITE +CKSUM/ {print $6}')"
31
32	if [ -z "$col" ] ; then
33		log_fail "'$wholecmd' created no new columns"
34	fi
35
36	# Count the number of columns for each vdev.  Each script should produce
37	# at least one new column value.  Even if scripts return blank, zpool
38	# will convert the blank to a '-' to make things awk-able.  Normal
39	# zpool iostat -v output is 7 columns, so if the script ran correctly
40	# we should see more than that.
41	if ! newcols=$(echo "$out" | \
42		awk '/\/dev/ {print NF-'$dcols'; if (NF <= '$dcols') {exit 1}}' | \
43		head -n 1)
44  then
45		log_fail "'$wholecmd' didn't create a new column value"
46	else
47		log_note "'$wholecmd' passed ($newcols new columns)"
48	fi
49}
50