1*57718be8SEnji Cooper# $NetBSD: t_vfs.sh,v 1.6 2012/08/04 03:56:47 riastradh Exp $ 2*57718be8SEnji Cooper# 3*57718be8SEnji Cooper# Copyright (c) 2011 The NetBSD Foundation, Inc. 4*57718be8SEnji Cooper# All rights reserved. 5*57718be8SEnji Cooper# 6*57718be8SEnji Cooper# Redistribution and use in source and binary forms, with or without 7*57718be8SEnji Cooper# modification, are permitted provided that the following conditions 8*57718be8SEnji Cooper# are met: 9*57718be8SEnji Cooper# 1. Redistributions of source code must retain the above copyright 10*57718be8SEnji Cooper# notice, this list of conditions and the following disclaimer. 11*57718be8SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright 12*57718be8SEnji Cooper# notice, this list of conditions and the following disclaimer in the 13*57718be8SEnji Cooper# documentation and/or other materials provided with the distribution. 14*57718be8SEnji Cooper# 15*57718be8SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16*57718be8SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17*57718be8SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18*57718be8SEnji Cooper# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19*57718be8SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20*57718be8SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21*57718be8SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22*57718be8SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23*57718be8SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24*57718be8SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25*57718be8SEnji Cooper# POSSIBILITY OF SUCH DAMAGE. 26*57718be8SEnji Cooper# 27*57718be8SEnji Cooper 28*57718be8SEnji Cooperimg=ffs.img 29*57718be8SEnji Cooperrumpsrv_ffs=\ 30*57718be8SEnji Cooper"rump_server -lrumpvfs -lrumpfs_ffs -lrumpdev_disk -d key=/img,hostpath=${img},size=host" 31*57718be8SEnji Cooperexport RUMP_SERVER=unix://csock 32*57718be8SEnji Cooper 33*57718be8SEnji Cooperdomount() 34*57718be8SEnji Cooper{ 35*57718be8SEnji Cooper 36*57718be8SEnji Cooper mntdir=$1 37*57718be8SEnji Cooper [ $# -eq 0 ] && mntdir=/rump/mnt 38*57718be8SEnji Cooper atf_check -s exit:0 -e ignore mount_ffs /img ${mntdir} 39*57718be8SEnji Cooper} 40*57718be8SEnji Cooper 41*57718be8SEnji Cooperdounmount() 42*57718be8SEnji Cooper{ 43*57718be8SEnji Cooper 44*57718be8SEnji Cooper atf_check -s exit:0 umount -R ${mntdir} 45*57718be8SEnji Cooper} 46*57718be8SEnji Cooper 47*57718be8SEnji Cooperremount() 48*57718be8SEnji Cooper{ 49*57718be8SEnji Cooper 50*57718be8SEnji Cooper dounmount 51*57718be8SEnji Cooper domount /rump/mnt2 52*57718be8SEnji Cooper} 53*57718be8SEnji Cooper 54*57718be8SEnji Coopersimpletest() 55*57718be8SEnji Cooper{ 56*57718be8SEnji Cooper local name="${1}"; shift 57*57718be8SEnji Cooper 58*57718be8SEnji Cooper atf_test_case "${name}" cleanup 59*57718be8SEnji Cooper eval "${name}_head() { }" 60*57718be8SEnji Cooper eval "${name}_body() { \ 61*57718be8SEnji Cooper atf_check -s exit:0 rump_server -lrumpvfs ${RUMP_SERVER} ; \ 62*57718be8SEnji Cooper export LD_PRELOAD=/usr/lib/librumphijack.so ; \ 63*57718be8SEnji Cooper ${name} " "${@}" "; \ 64*57718be8SEnji Cooper }" 65*57718be8SEnji Cooper eval "${name}_cleanup() { \ 66*57718be8SEnji Cooper rump.halt 67*57718be8SEnji Cooper }" 68*57718be8SEnji Cooper} 69*57718be8SEnji Cooper 70*57718be8SEnji Coopertest_case() 71*57718be8SEnji Cooper{ 72*57718be8SEnji Cooper local name="${1}"; shift 73*57718be8SEnji Cooper 74*57718be8SEnji Cooper atf_test_case "${name}" cleanup 75*57718be8SEnji Cooper eval "${name}_head() { }" 76*57718be8SEnji Cooper eval "${name}_body() { \ 77*57718be8SEnji Cooper atf_check -s exit:0 -o ignore newfs -F -s 20000 ${img} ; \ 78*57718be8SEnji Cooper atf_check -s exit:0 ${rumpsrv_ffs} ${RUMP_SERVER} ; \ 79*57718be8SEnji Cooper export LD_PRELOAD=/usr/lib/librumphijack.so ; \ 80*57718be8SEnji Cooper mkdir /rump/mnt /rump/mnt2 ; \ 81*57718be8SEnji Cooper domount ; \ 82*57718be8SEnji Cooper ${name} " "${@}" "; \ 83*57718be8SEnji Cooper dounmount ${mntdir} 84*57718be8SEnji Cooper }" 85*57718be8SEnji Cooper eval "${name}_cleanup() { \ 86*57718be8SEnji Cooper rump.halt 87*57718be8SEnji Cooper }" 88*57718be8SEnji Cooper} 89*57718be8SEnji Cooper 90*57718be8SEnji Coopertest_case paxcopy 91*57718be8SEnji Coopertest_case cpcopy 92*57718be8SEnji Coopertest_case mv_nox 93*57718be8SEnji Coopertest_case ln_nox 94*57718be8SEnji Cooper 95*57718be8SEnji Cooper# 96*57718be8SEnji Cooper# use rumphijack to cp/pax stuff onto an image, unmount it, remount it 97*57718be8SEnji Cooper# at a different location, and check that we have an identical copy 98*57718be8SEnji Cooper# (we make a local copy to avoid the minor possibility that someone 99*57718be8SEnji Cooper# modifies the source dir data while the test is running) 100*57718be8SEnji Cooper# 101*57718be8SEnji Cooperpaxcopy() 102*57718be8SEnji Cooper{ 103*57718be8SEnji Cooper parent=$(dirname $(atf_get_srcdir)) 104*57718be8SEnji Cooper thedir=$(basename $(atf_get_srcdir)) 105*57718be8SEnji Cooper atf_check -s exit:0 pax -rw -s,${parent},, $(atf_get_srcdir) . 106*57718be8SEnji Cooper atf_check -s exit:0 pax -rw ${thedir} /rump/mnt 107*57718be8SEnji Cooper remount 108*57718be8SEnji Cooper atf_check -s exit:0 diff -ru ${thedir} /rump/mnt2/${thedir} 109*57718be8SEnji Cooper} 110*57718be8SEnji Cooper 111*57718be8SEnji Coopercpcopy() 112*57718be8SEnji Cooper{ 113*57718be8SEnji Cooper thedir=$(basename $(atf_get_srcdir)) 114*57718be8SEnji Cooper atf_check -s exit:0 cp -Rp $(atf_get_srcdir) . 115*57718be8SEnji Cooper atf_check -s exit:0 cp -Rp ${thedir} /rump/mnt 116*57718be8SEnji Cooper remount 117*57718be8SEnji Cooper atf_check -s exit:0 diff -ru ${thedir} /rump/mnt2/${thedir} 118*57718be8SEnji Cooper} 119*57718be8SEnji Cooper 120*57718be8SEnji Cooper# 121*57718be8SEnji Cooper# non-crosskernel mv (non-simple test since this uses rename(2) 122*57718be8SEnji Cooper# which is not supported by rumpfs) 123*57718be8SEnji Cooper# 124*57718be8SEnji Cooper 125*57718be8SEnji Coopermv_nox() 126*57718be8SEnji Cooper{ 127*57718be8SEnji Cooper # stat default format sans changetime and filename 128*57718be8SEnji Cooper statstr='%d %i %Sp %l %Su %Sg %r %z \"%Sa\" \"%Sm\" \"%SB\" %k %b %#Xf' 129*57718be8SEnji Cooper 130*57718be8SEnji Cooper atf_check -s exit:0 touch /rump/mnt/filename 131*57718be8SEnji Cooper atf_check -s exit:0 -o save:stat.out \ 132*57718be8SEnji Cooper stat -f "${statstr}" /rump/mnt/filename 133*57718be8SEnji Cooper atf_check -s exit:0 mkdir /rump/mnt/dir 134*57718be8SEnji Cooper atf_check -s exit:0 mv /rump/mnt/filename /rump/mnt/dir/same 135*57718be8SEnji Cooper atf_check -s exit:0 -o file:stat.out \ 136*57718be8SEnji Cooper stat -f "${statstr}" /rump/mnt/dir/same 137*57718be8SEnji Cooper} 138*57718be8SEnji Cooper 139*57718be8SEnji Cooperln_nox() 140*57718be8SEnji Cooper{ 141*57718be8SEnji Cooper # Omit st_nlink too, since it will increase. 142*57718be8SEnji Cooper statstr='%d %i %Sp %Su %Sg %r %z \"%Sa\" \"%Sm\" \"%SB\" %k %b %#Xf' 143*57718be8SEnji Cooper 144*57718be8SEnji Cooper atf_check -s exit:0 touch /rump/mnt/filename 145*57718be8SEnji Cooper atf_check -s exit:0 -o save:stat.out \ 146*57718be8SEnji Cooper stat -f "${statstr}" /rump/mnt/filename 147*57718be8SEnji Cooper atf_check -s exit:0 mkdir /rump/mnt/dir 148*57718be8SEnji Cooper atf_check -s exit:0 ln /rump/mnt/filename /rump/mnt/dir/same 149*57718be8SEnji Cooper atf_check -s exit:0 -o file:stat.out \ 150*57718be8SEnji Cooper stat -f "${statstr}" /rump/mnt/filename 151*57718be8SEnji Cooper atf_check -s exit:0 -o file:stat.out \ 152*57718be8SEnji Cooper stat -f "${statstr}" /rump/mnt/dir/same 153*57718be8SEnji Cooper} 154*57718be8SEnji Cooper 155*57718be8SEnji Coopersimpletest mv_x 156*57718be8SEnji Coopersimpletest ln_x 157*57718be8SEnji Coopersimpletest runonprefix 158*57718be8SEnji Coopersimpletest blanket 159*57718be8SEnji Coopersimpletest doubleblanket 160*57718be8SEnji Cooper 161*57718be8SEnji Cooper# 162*57718be8SEnji Cooper# do a cross-kernel mv 163*57718be8SEnji Cooper# 164*57718be8SEnji Coopermv_x() 165*57718be8SEnji Cooper{ 166*57718be8SEnji Cooper thedir=$(basename $(atf_get_srcdir)) 167*57718be8SEnji Cooper atf_check -s exit:0 cp -Rp $(atf_get_srcdir) . 168*57718be8SEnji Cooper atf_check -s exit:0 cp -Rp ${thedir} ${thedir}.2 169*57718be8SEnji Cooper atf_check -s exit:0 mv ${thedir} /rump 170*57718be8SEnji Cooper atf_check -s exit:0 diff -ru ${thedir}.2 /rump/${thedir} 171*57718be8SEnji Cooper} 172*57718be8SEnji Cooper 173*57718be8SEnji Cooper# 174*57718be8SEnji Cooper# Fail to make a cross-kernel hard link. 175*57718be8SEnji Cooper# 176*57718be8SEnji Cooperln_x() 177*57718be8SEnji Cooper{ 178*57718be8SEnji Cooper atf_check -s exit:0 touch ./loser 179*57718be8SEnji Cooper atf_check -s not-exit:0 -e ignore ln ./loser /rump/. 180*57718be8SEnji Cooper} 181*57718be8SEnji Cooper 182*57718be8SEnji Cooperrunonprefix() 183*57718be8SEnji Cooper{ 184*57718be8SEnji Cooper atf_check -s exit:0 -o ignore stat /rump/dev 185*57718be8SEnji Cooper atf_check -s exit:1 -e ignore stat /rumpdev 186*57718be8SEnji Cooper} 187*57718be8SEnji Cooper 188*57718be8SEnji Cooperblanket() 189*57718be8SEnji Cooper{ 190*57718be8SEnji Cooper export RUMPHIJACK='blanket=/dev,path=/rump' 191*57718be8SEnji Cooper atf_check -s exit:0 -o save:stat.out \ 192*57718be8SEnji Cooper stat -f "${statstr}" /rump/dev/null 193*57718be8SEnji Cooper atf_check -s exit:0 -o file:stat.out \ 194*57718be8SEnji Cooper stat -f "${statstr}" /dev/null 195*57718be8SEnji Cooper} 196*57718be8SEnji Cooper 197*57718be8SEnji Cooperdoubleblanket() 198*57718be8SEnji Cooper{ 199*57718be8SEnji Cooper atf_check -s exit:0 mkdir /rump/dir 200*57718be8SEnji Cooper atf_check -s exit:0 ln -s dir /rump/dirtoo 201*57718be8SEnji Cooper 202*57718be8SEnji Cooper export RUMPHIJACK='blanket=/dirtoo:/dir' 203*57718be8SEnji Cooper atf_check -s exit:0 touch /dir/file 204*57718be8SEnji Cooper 205*57718be8SEnji Cooper atf_check -s exit:0 -o save:stat.out \ 206*57718be8SEnji Cooper stat -f "${statstr}" /dir/file 207*57718be8SEnji Cooper atf_check -s exit:0 -o file:stat.out \ 208*57718be8SEnji Cooper stat -f "${statstr}" /dirtoo/file 209*57718be8SEnji Cooper} 210*57718be8SEnji Cooper 211*57718be8SEnji Cooperatf_init_test_cases() 212*57718be8SEnji Cooper{ 213*57718be8SEnji Cooper 214*57718be8SEnji Cooper atf_add_test_case paxcopy 215*57718be8SEnji Cooper atf_add_test_case cpcopy 216*57718be8SEnji Cooper atf_add_test_case mv_x 217*57718be8SEnji Cooper atf_add_test_case ln_x 218*57718be8SEnji Cooper atf_add_test_case mv_nox 219*57718be8SEnji Cooper atf_add_test_case ln_nox 220*57718be8SEnji Cooper atf_add_test_case runonprefix 221*57718be8SEnji Cooper atf_add_test_case blanket 222*57718be8SEnji Cooper atf_add_test_case doubleblanket 223*57718be8SEnji Cooper} 224