1310803Sasomers# Copyright (c) 2016 Alan Somers 2310803Sasomers# All rights reserved. 3310803Sasomers# 4310803Sasomers# Redistribution and use in source and binary forms, with or without 5310803Sasomers# modification, are permitted provided that the following conditions 6310803Sasomers# are met: 7310803Sasomers# 1. Redistributions of source code must retain the above copyright 8310803Sasomers# notice, this list of conditions and the following disclaimer. 9310803Sasomers# 2. Redistributions in binary form must reproduce the above copyright 10310803Sasomers# notice, this list of conditions and the following disclaimer in the 11310803Sasomers# documentation and/or other materials provided with the distribution. 12310803Sasomers# 13310803Sasomers# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14310803Sasomers# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15310803Sasomers# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16310803Sasomers# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17310803Sasomers# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18310803Sasomers# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19310803Sasomers# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20310803Sasomers# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21310803Sasomers# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22310803Sasomers# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23310803Sasomers# SUCH DAMAGE. 24310803Sasomers# 25310803Sasomers# $FreeBSD: stable/11/tests/sys/geom/class/nop/nop_test.sh 329789 2018-02-22 02:12:47Z asomers $ 26310803Sasomers 27310803SasomersMD_DEVS="md.devs" 28310803SasomersPLAINFILES=plainfiles 29310803Sasomers 30329789Sasomersatf_test_case preserve_props cleanup 31329789Sasomerspreserve_props_head() 32310803Sasomers{ 33329789Sasomers atf_set "descr" "gnop should preserve basic GEOM properties" 34310803Sasomers atf_set "require.user" "root" 35310803Sasomers atf_set "timeout" 15 36310803Sasomers} 37329789Sasomerspreserve_props_body() 38310803Sasomers{ 39327081Smarkj load_gnop 40310803Sasomers us=$(alloc_md) 41310803Sasomers atf_check gnop create /dev/${us} 42310803Sasomers md_secsize=$(diskinfo ${us} | cut -wf 2) 43310803Sasomers md_mediasize=$(diskinfo ${us} | cut -wf 3) 44310803Sasomers md_stripesize=$(diskinfo ${us} | cut -wf 5) 45310803Sasomers nop_secsize=$(diskinfo ${us}.nop | cut -wf 2) 46310803Sasomers nop_mediasize=$(diskinfo ${us}.nop | cut -wf 3) 47310803Sasomers nop_stripesize=$(diskinfo ${us}.nop | cut -wf 5) 48310803Sasomers atf_check_equal "$md_secsize" "$nop_secsize" 49310803Sasomers atf_check_equal "$md_mediasize" "$nop_mediasize" 50310803Sasomers atf_check_equal "$md_stripesize" "$nop_stripesize" 51310803Sasomers} 52329789Sasomerspreserve_props_cleanup() 53310803Sasomers{ 54310803Sasomers common_cleanup 55310803Sasomers} 56310803Sasomers 57329789Sasomersatf_test_case preserve_disk_props cleanup 58329789Sasomerspreserve_disk_props_head() 59329789Sasomers{ 60329789Sasomers atf_set "descr" "gnop should preserve properties for disks" 61329789Sasomers atf_set "require.user" "root" 62329789Sasomers atf_set "require.config" "disks" 63329789Sasomers atf_set "timeout" 15 64329789Sasomers} 65329789Sasomerspreserve_disk_props_body() 66329789Sasomers{ 67329789Sasomers load_gnop 68329789Sasomers disks=`atf_config_get disks` 69329789Sasomers disk=${disks%% *} 70329789Sasomers if [ -z "$disk" ]; then 71329789Sasomers atf_skip "Must define disks (see tests(7))" 72329789Sasomers fi 73329789Sasomers atf_check gnop create ${disk} 74329789Sasomers 75329789Sasomers disk_ident=$(diskinfo -s ${disk}) 76329789Sasomers disk_physpath=$(diskinfo -p ${disk}) 77329789Sasomers disk_descr=$(diskinfo -v ${disk} | awk '/Disk descr/ {print $1}') 78329789Sasomers disk_trim=$(diskinfo -v ${disk} | awk '/TRIM.UNMAP/ {print $1}') 79329789Sasomers disk_rotrate=$(diskinfo -v ${disk} | awk '/Rotation rate/ {print $1}') 80329789Sasomers disk_zonemode=$(diskinfo -v ${disk} | awk '/Zone Mode/ {print $1}') 81329789Sasomers nop_ident=$(diskinfo -s ${disk}.nop) 82329789Sasomers nop_physpath=$(diskinfo -p ${disk}.nop) 83329789Sasomers nop_descr=$(diskinfo -v ${disk}.nop | awk '/Disk descr/ {print $1}') 84329789Sasomers nop_trim=$(diskinfo -v ${disk}.nop | awk '/TRIM.UNMAP/ {print $1}') 85329789Sasomers nop_rotrate=$(diskinfo -v ${disk}.nop | awk '/Rotation/ {print $1}') 86329789Sasomers nop_zonemode=$(diskinfo -v ${disk}.nop | awk '/Zone Mode/ {print $1}') 87329789Sasomers atf_check_equal "$disk_ident" "$nop_ident" 88329789Sasomers atf_check_equal "$disk_physpath" "$nop_physpath" 89329789Sasomers atf_check_equal "$disk_descr" "$nop_descr" 90329789Sasomers atf_check_equal "$disk_trim" "$nop_trim" 91329789Sasomers atf_check_equal "$disk_rotrate" "$nop_rotrate" 92329789Sasomers atf_check_equal "$disk_zonemode" "$nop_zonemode" 93329789Sasomers} 94329789Sasomerspreserve_disk_props_cleanup() 95329789Sasomers{ 96329789Sasomers disk_cleanup 97329789Sasomers common_cleanup 98329789Sasomers} 99329789Sasomers 100310803Sasomersatf_test_case io cleanup 101310803Sasomersio_head() 102310803Sasomers{ 103310803Sasomers atf_set "descr" "I/O works on gnop devices" 104310803Sasomers atf_set "require.user" "root" 105310803Sasomers atf_set "timeout" 15 106310803Sasomers} 107310803Sasomersio_body() 108310803Sasomers{ 109327081Smarkj load_gnop 110310803Sasomers us=$(alloc_md) 111310803Sasomers atf_check gnop create /dev/${us} 112310803Sasomers 113310803Sasomers echo src >> $PLAINFILES 114310803Sasomers echo dst >> $PLAINFILES 115310803Sasomers dd if=/dev/random of=src bs=1m count=1 >/dev/null 2>&1 116310803Sasomers dd if=src of=/dev/${us}.nop bs=1m count=1 > /dev/null 2>&1 117310803Sasomers dd if=/dev/${us}.nop of=dst bs=1m count=1 > /dev/null 2>&1 118310803Sasomers 119310803Sasomers atf_check_equal `md5 -q src` `md5 -q dst` 120310803Sasomers} 121310803Sasomersio_cleanup() 122310803Sasomers{ 123310803Sasomers common_cleanup 124310803Sasomers} 125310803Sasomers 126329789Sasomersatf_test_case physpath cleanup 127329789Sasomersphyspath_head() 128329789Sasomers{ 129329789Sasomers atf_set "descr" "Test gnop's -z option" 130329789Sasomers atf_set "require.user" "root" 131329789Sasomers atf_set "timeout" 15 132329789Sasomers} 133329789Sasomersphyspath_body() 134329789Sasomers{ 135329789Sasomers load_gnop 136329789Sasomers us=$(alloc_md) 137329789Sasomers physpath="some/physical/path" 138329789Sasomers atf_check gnop create -z $physpath /dev/${us} 139329789Sasomers gnop_physpath=$(diskinfo -p ${us}.nop) 140329789Sasomers atf_check_equal "$physpath" "$gnop_physpath" 141329789Sasomers} 142329789Sasomersphyspath_cleanup() 143329789Sasomers{ 144329789Sasomers common_cleanup 145329789Sasomers} 146329789Sasomers 147329789Sasomersatf_test_case physpath_blank cleanup 148329789Sasomersphyspath_blank_head() 149329789Sasomers{ 150329789Sasomers atf_set "descr" "gnop can set physical path to the empty string" 151329789Sasomers atf_set "require.user" "root" 152329789Sasomers atf_set "require.config" "disks" 153329789Sasomers atf_set "timeout" 15 154329789Sasomers} 155329789Sasomersphyspath_blank_body() 156329789Sasomers{ 157329789Sasomers load_gnop 158329789Sasomers disks=`atf_config_get disks` 159329789Sasomers disk=${disks%% *} 160329789Sasomers if [ -z "$disk" ]; then 161329789Sasomers atf_skip "Must define disks (see tests(7))" 162329789Sasomers fi 163329789Sasomers 164329789Sasomers atf_check gnop create -z "" ${disk} 165329789Sasomers gnop_physpath=$(diskinfo -p ${disk}.nop) 166329789Sasomers atf_check_equal "" "$gnop_physpath" 167329789Sasomers} 168329789Sasomersphyspath_blank_cleanup() 169329789Sasomers{ 170329789Sasomers disk_cleanup 171329789Sasomers common_cleanup 172329789Sasomers} 173329789Sasomers 174310803Sasomersatf_test_case size cleanup 175310803Sasomerssize_head() 176310803Sasomers{ 177310803Sasomers atf_set "descr" "Test gnop's -s option" 178310803Sasomers atf_set "require.user" "root" 179310803Sasomers atf_set "timeout" 15 180310803Sasomers} 181310803Sasomerssize_body() 182310803Sasomers{ 183327081Smarkj load_gnop 184310803Sasomers us=$(alloc_md) 185310803Sasomers for mediasize in 65536 524288 1048576; do 186310803Sasomers atf_check gnop create -s ${mediasize} /dev/${us} 187310803Sasomers gnop_mediasize=`diskinfo /dev/${us}.nop | cut -wf 3` 188310803Sasomers atf_check_equal "${mediasize}" "${gnop_mediasize}" 189310803Sasomers atf_check gnop destroy /dev/${us}.nop 190310803Sasomers done 191310803Sasomers # We shouldn't be able to extend the provider's size 192310803Sasomers atf_check -s not-exit:0 -e ignore gnop create -s 2097152 /dev/${us} 193310803Sasomers} 194310803Sasomerssize_cleanup() 195310803Sasomers{ 196310803Sasomers common_cleanup 197310803Sasomers} 198310803Sasomers 199310803Sasomersatf_test_case stripesize cleanup 200310803Sasomersstripesize_head() 201310803Sasomers{ 202310803Sasomers atf_set "descr" "Test gnop's -p and -P options" 203310803Sasomers atf_set "require.user" "root" 204310803Sasomers atf_set "timeout" 15 205310803Sasomers} 206310803Sasomersstripesize_body() 207310803Sasomers{ 208327081Smarkj load_gnop 209310803Sasomers us=$(alloc_md) 210310803Sasomers for ss in 512 1024 2048 4096 8192; do 211310803Sasomers for sofs in `seq 0 512 ${ss}`; do 212310803Sasomers [ "$sofs" -eq "$ss" ] && continue 213310803Sasomers atf_check gnop create -p ${ss} -P ${sofs} /dev/${us} 214310803Sasomers gnop_ss=`diskinfo /dev/${us}.nop | cut -wf 5` 215310803Sasomers gnop_sofs=`diskinfo /dev/${us}.nop | cut -wf 6` 216310803Sasomers atf_check_equal "${ss}" "${gnop_ss}" 217310803Sasomers atf_check_equal "${sofs}" "${gnop_sofs}" 218310803Sasomers atf_check gnop destroy /dev/${us}.nop 219310803Sasomers done 220310803Sasomers done 221310803Sasomers} 222310803Sasomersstripesize_cleanup() 223310803Sasomers{ 224310803Sasomers common_cleanup 225310803Sasomers} 226310803Sasomers 227310803Sasomersatf_init_test_cases() 228310803Sasomers{ 229310803Sasomers atf_add_test_case io 230329789Sasomers atf_add_test_case physpath 231329789Sasomers atf_add_test_case physpath_blank 232329789Sasomers atf_add_test_case preserve_props 233329789Sasomers atf_add_test_case preserve_disk_props 234310803Sasomers atf_add_test_case stripesize 235310803Sasomers atf_add_test_case size 236310803Sasomers} 237310803Sasomers 238310803Sasomersalloc_md() 239310803Sasomers{ 240310803Sasomers local md 241310803Sasomers 242310803Sasomers md=$(mdconfig -a -t swap -s 1M) || atf_fail "mdconfig -a failed" 243310803Sasomers echo ${md} >> $MD_DEVS 244310803Sasomers echo ${md} 245310803Sasomers} 246310803Sasomers 247310803Sasomerscommon_cleanup() 248310803Sasomers{ 249310803Sasomers if [ -f "$MD_DEVS" ]; then 250310803Sasomers while read test_md; do 251310803Sasomers gnop destroy -f ${test_md}.nop 2>/dev/null 252310803Sasomers mdconfig -d -u $test_md 2>/dev/null 253310803Sasomers done < $MD_DEVS 254310803Sasomers rm $MD_DEVS 255310803Sasomers fi 256310803Sasomers 257310803Sasomers if [ -f "$PLAINFILES" ]; then 258310803Sasomers while read f; do 259310803Sasomers rm -f ${f} 260310803Sasomers done < ${PLAINFILES} 261310803Sasomers rm ${PLAINFILES} 262310803Sasomers fi 263310803Sasomers true 264310803Sasomers} 265327081Smarkj 266329789Sasomersdisk_cleanup() 267329789Sasomers{ 268329789Sasomers disks=`atf_config_get disks` 269329789Sasomers disk=${disks%% *} 270329789Sasomers if [ -n "$disk" ]; then 271329789Sasomers gnop destroy -f ${disk}.nop 2>/dev/null 272329789Sasomers fi 273329789Sasomers} 274329789Sasomers 275327081Smarkjload_gnop() 276327081Smarkj{ 277327081Smarkj if ! kldstat -q -m g_nop; then 278327081Smarkj geom nop load || atf_skip "could not load module for geom nop" 279327081Smarkj fi 280327081Smarkj} 281