t_vfs.sh revision 272345
1234285Sdim# $NetBSD: t_vfs.sh,v 1.6 2012/08/04 03:56:47 riastradh Exp $ 2234285Sdim# 3234285Sdim# Copyright (c) 2011 The NetBSD Foundation, Inc. 4234285Sdim# All rights reserved. 5234285Sdim# 6234285Sdim# Redistribution and use in source and binary forms, with or without 7234285Sdim# modification, are permitted provided that the following conditions 8234285Sdim# are met: 9234285Sdim# 1. Redistributions of source code must retain the above copyright 10234285Sdim# notice, this list of conditions and the following disclaimer. 11234285Sdim# 2. Redistributions in binary form must reproduce the above copyright 12234285Sdim# notice, this list of conditions and the following disclaimer in the 13234285Sdim# documentation and/or other materials provided with the distribution. 14234285Sdim# 15234285Sdim# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16234285Sdim# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17234285Sdim# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18234285Sdim# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19234285Sdim# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20234285Sdim# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21234285Sdim# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22234285Sdim# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23234285Sdim# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24234285Sdim# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25234285Sdim# POSSIBILITY OF SUCH DAMAGE. 26234285Sdim# 27234285Sdim 28234285Sdimimg=ffs.img 29234285Sdimrumpsrv_ffs=\ 30234285Sdim"rump_server -lrumpvfs -lrumpfs_ffs -lrumpdev_disk -d key=/img,hostpath=${img},size=host" 31234285Sdimexport RUMP_SERVER=unix://csock 32261991Sdim 33234285Sdimdomount() 34234285Sdim{ 35234285Sdim 36234285Sdim mntdir=$1 37234285Sdim [ $# -eq 0 ] && mntdir=/rump/mnt 38234285Sdim atf_check -s exit:0 -e ignore mount_ffs /img ${mntdir} 39234285Sdim} 40234285Sdim 41234285Sdimdounmount() 42234285Sdim{ 43234285Sdim 44234285Sdim atf_check -s exit:0 umount -R ${mntdir} 45234285Sdim} 46249423Sdim 47249423Sdimremount() 48249423Sdim{ 49234285Sdim 50234285Sdim dounmount 51234285Sdim domount /rump/mnt2 52249423Sdim} 53234285Sdim 54234285Sdimsimpletest() 55234285Sdim{ 56234285Sdim local name="${1}"; shift 57234285Sdim 58234285Sdim atf_test_case "${name}" cleanup 59276479Sdim eval "${name}_head() { }" 60276479Sdim eval "${name}_body() { \ 61234285Sdim atf_check -s exit:0 rump_server -lrumpvfs ${RUMP_SERVER} ; \ 62234285Sdim export LD_PRELOAD=/usr/lib/librumphijack.so ; \ 63234285Sdim ${name} " "${@}" "; \ 64234285Sdim }" 65234285Sdim eval "${name}_cleanup() { \ 66234285Sdim rump.halt 67234285Sdim }" 68234285Sdim} 69234285Sdim 70234285Sdimtest_case() 71234285Sdim{ 72234285Sdim local name="${1}"; shift 73251662Sdim 74251662Sdim atf_test_case "${name}" cleanup 75251662Sdim eval "${name}_head() { }" 76251662Sdim eval "${name}_body() { \ 77251662Sdim atf_check -s exit:0 -o ignore newfs -F -s 20000 ${img} ; \ 78288943Sdim atf_check -s exit:0 ${rumpsrv_ffs} ${RUMP_SERVER} ; \ 79251662Sdim export LD_PRELOAD=/usr/lib/librumphijack.so ; \ 80251662Sdim mkdir /rump/mnt /rump/mnt2 ; \ 81251662Sdim domount ; \ 82234285Sdim ${name} " "${@}" "; \ 83234285Sdim dounmount ${mntdir} 84234285Sdim }" 85234285Sdim eval "${name}_cleanup() { \ 86234285Sdim rump.halt 87234285Sdim }" 88234285Sdim} 89234285Sdim 90251662Sdimtest_case paxcopy 91251662Sdimtest_case cpcopy 92251662Sdimtest_case mv_nox 93234285Sdimtest_case ln_nox 94276479Sdim 95234285Sdim# 96276479Sdim# use rumphijack to cp/pax stuff onto an image, unmount it, remount it 97234285Sdim# at a different location, and check that we have an identical copy 98234285Sdim# (we make a local copy to avoid the minor possibility that someone 99234285Sdim# modifies the source dir data while the test is running) 100276479Sdim# 101234285Sdimpaxcopy() 102234285Sdim{ 103234285Sdim parent=$(dirname $(atf_get_srcdir)) 104234285Sdim thedir=$(basename $(atf_get_srcdir)) 105234285Sdim atf_check -s exit:0 pax -rw -s,${parent},, $(atf_get_srcdir) . 106234285Sdim atf_check -s exit:0 pax -rw ${thedir} /rump/mnt 107234285Sdim remount 108234285Sdim atf_check -s exit:0 diff -ru ${thedir} /rump/mnt2/${thedir} 109234285Sdim} 110234285Sdim 111251662Sdimcpcopy() 112251662Sdim{ 113251662Sdim thedir=$(basename $(atf_get_srcdir)) 114234285Sdim atf_check -s exit:0 cp -Rp $(atf_get_srcdir) . 115280031Sdim atf_check -s exit:0 cp -Rp ${thedir} /rump/mnt 116288943Sdim remount 117234285Sdim atf_check -s exit:0 diff -ru ${thedir} /rump/mnt2/${thedir} 118234285Sdim} 119234285Sdim 120243830Sdim# 121234285Sdim# non-crosskernel mv (non-simple test since this uses rename(2) 122234285Sdim# which is not supported by rumpfs) 123234285Sdim# 124234285Sdim 125234285Sdimmv_nox() 126234285Sdim{ 127296417Sdim # stat default format sans changetime and filename 128234285Sdim statstr='%d %i %Sp %l %Su %Sg %r %z \"%Sa\" \"%Sm\" \"%SB\" %k %b %#Xf' 129243830Sdim 130234285Sdim atf_check -s exit:0 touch /rump/mnt/filename 131234285Sdim atf_check -s exit:0 -o save:stat.out \ 132234285Sdim stat -f "${statstr}" /rump/mnt/filename 133234285Sdim atf_check -s exit:0 mkdir /rump/mnt/dir 134234285Sdim atf_check -s exit:0 mv /rump/mnt/filename /rump/mnt/dir/same 135234285Sdim atf_check -s exit:0 -o file:stat.out \ 136234285Sdim stat -f "${statstr}" /rump/mnt/dir/same 137280031Sdim} 138234285Sdim 139234285Sdimln_nox() 140234285Sdim{ 141234285Sdim # Omit st_nlink too, since it will increase. 142234285Sdim statstr='%d %i %Sp %Su %Sg %r %z \"%Sa\" \"%Sm\" \"%SB\" %k %b %#Xf' 143234285Sdim 144234285Sdim atf_check -s exit:0 touch /rump/mnt/filename 145234285Sdim atf_check -s exit:0 -o save:stat.out \ 146234285Sdim stat -f "${statstr}" /rump/mnt/filename 147234285Sdim atf_check -s exit:0 mkdir /rump/mnt/dir 148234285Sdim atf_check -s exit:0 ln /rump/mnt/filename /rump/mnt/dir/same 149234285Sdim atf_check -s exit:0 -o file:stat.out \ 150234285Sdim stat -f "${statstr}" /rump/mnt/filename 151234285Sdim atf_check -s exit:0 -o file:stat.out \ 152234285Sdim stat -f "${statstr}" /rump/mnt/dir/same 153251662Sdim} 154251662Sdim 155251662Sdimsimpletest mv_x 156280031Sdimsimpletest ln_x 157251662Sdimsimpletest runonprefix 158251662Sdimsimpletest blanket 159251662Sdimsimpletest doubleblanket 160251662Sdim 161251662Sdim# 162251662Sdim# do a cross-kernel mv 163251662Sdim# 164251662Sdimmv_x() 165251662Sdim{ 166251662Sdim thedir=$(basename $(atf_get_srcdir)) 167251662Sdim atf_check -s exit:0 cp -Rp $(atf_get_srcdir) . 168243830Sdim atf_check -s exit:0 cp -Rp ${thedir} ${thedir}.2 169243830Sdim atf_check -s exit:0 mv ${thedir} /rump 170243830Sdim atf_check -s exit:0 diff -ru ${thedir}.2 /rump/${thedir} 171243830Sdim} 172243830Sdim 173280031Sdim# 174243830Sdim# Fail to make a cross-kernel hard link. 175243830Sdim# 176243830Sdimln_x() 177243830Sdim{ 178243830Sdim atf_check -s exit:0 touch ./loser 179243830Sdim atf_check -s not-exit:0 -e ignore ln ./loser /rump/. 180243830Sdim} 181243830Sdim 182243830Sdimrunonprefix() 183296417Sdim{ 184243830Sdim atf_check -s exit:0 -o ignore stat /rump/dev 185243830Sdim atf_check -s exit:1 -e ignore stat /rumpdev 186234285Sdim} 187234285Sdim 188280031Sdimblanket() 189234285Sdim{ 190234285Sdim export RUMPHIJACK='blanket=/dev,path=/rump' 191234285Sdim atf_check -s exit:0 -o save:stat.out \ 192234285Sdim stat -f "${statstr}" /rump/dev/null 193234285Sdim atf_check -s exit:0 -o file:stat.out \ 194234285Sdim stat -f "${statstr}" /dev/null 195234285Sdim} 196234285Sdim 197234285Sdimdoubleblanket() 198234285Sdim{ 199234285Sdim atf_check -s exit:0 mkdir /rump/dir 200234285Sdim atf_check -s exit:0 ln -s dir /rump/dirtoo 201234285Sdim 202234285Sdim export RUMPHIJACK='blanket=/dirtoo:/dir' 203234285Sdim atf_check -s exit:0 touch /dir/file 204234285Sdim 205234285Sdim atf_check -s exit:0 -o save:stat.out \ 206234285Sdim stat -f "${statstr}" /dir/file 207234285Sdim atf_check -s exit:0 -o file:stat.out \ 208234285Sdim stat -f "${statstr}" /dirtoo/file 209234285Sdim} 210234285Sdim 211234285Sdimatf_init_test_cases() 212234285Sdim{ 213234285Sdim 214234285Sdim atf_add_test_case paxcopy 215234285Sdim atf_add_test_case cpcopy 216234285Sdim atf_add_test_case mv_x 217234285Sdim atf_add_test_case ln_x 218234285Sdim atf_add_test_case mv_nox 219234285Sdim atf_add_test_case ln_nox 220234285Sdim atf_add_test_case runonprefix 221234285Sdim atf_add_test_case blanket 222234285Sdim atf_add_test_case doubleblanket 223234285Sdim} 224243830Sdim