1*46c7fb85SJohn Marino#!/bin/sh 2*46c7fb85SJohn Marino# $FreeBSD$ 3*46c7fb85SJohn Marino 4*46c7fb85SJohn Marino# A directory in a device different from that where the tests are run 5*46c7fb85SJohn MarinoTMPDIR=/tmp/regress.$$ 6*46c7fb85SJohn MarinoCOUNT=0 7*46c7fb85SJohn Marino 8*46c7fb85SJohn Marino# Begin an individual test 9*46c7fb85SJohn Marinobegin() 10*46c7fb85SJohn Marino{ 11*46c7fb85SJohn Marino COUNT=`expr $COUNT + 1` 12*46c7fb85SJohn Marino OK=1 13*46c7fb85SJohn Marino if [ -z "$FS" ] 14*46c7fb85SJohn Marino then 15*46c7fb85SJohn Marino NAME="$1" 16*46c7fb85SJohn Marino else 17*46c7fb85SJohn Marino NAME="$1 (cross device)" 18*46c7fb85SJohn Marino fi 19*46c7fb85SJohn Marino rm -rf testdir $TMPDIR/testdir 20*46c7fb85SJohn Marino mkdir -p testdir $TMPDIR/testdir 21*46c7fb85SJohn Marino cd testdir 22*46c7fb85SJohn Marino} 23*46c7fb85SJohn Marino 24*46c7fb85SJohn Marino# End an individual test 25*46c7fb85SJohn Marinoend() 26*46c7fb85SJohn Marino{ 27*46c7fb85SJohn Marino if [ $OK = 1 ] 28*46c7fb85SJohn Marino then 29*46c7fb85SJohn Marino printf 'ok ' 30*46c7fb85SJohn Marino else 31*46c7fb85SJohn Marino printf 'not ok ' 32*46c7fb85SJohn Marino fi 33*46c7fb85SJohn Marino echo "$COUNT - $NAME" 34*46c7fb85SJohn Marino cd .. 35*46c7fb85SJohn Marino rm -rf testdir $TMPDIR/testdir 36*46c7fb85SJohn Marino} 37*46c7fb85SJohn Marino 38*46c7fb85SJohn Marino# Make a file that can later be verified 39*46c7fb85SJohn Marinomkf() 40*46c7fb85SJohn Marino{ 41*46c7fb85SJohn Marino CN=`basename $1` 42*46c7fb85SJohn Marino echo "$CN-$CN" >$1 43*46c7fb85SJohn Marino} 44*46c7fb85SJohn Marino 45*46c7fb85SJohn Marino# Verify that the file specified is correct 46*46c7fb85SJohn Marinockf() 47*46c7fb85SJohn Marino{ 48*46c7fb85SJohn Marino if [ -f $2 ] && echo "$1-$1" | diff - $2 >/dev/null 49*46c7fb85SJohn Marino then 50*46c7fb85SJohn Marino ok 51*46c7fb85SJohn Marino else 52*46c7fb85SJohn Marino notok 53*46c7fb85SJohn Marino fi 54*46c7fb85SJohn Marino} 55*46c7fb85SJohn Marino 56*46c7fb85SJohn Marino# Make a fifo that can later be verified 57*46c7fb85SJohn Marinomkp() 58*46c7fb85SJohn Marino{ 59*46c7fb85SJohn Marino mkfifo $1 60*46c7fb85SJohn Marino} 61*46c7fb85SJohn Marino 62*46c7fb85SJohn Marino# Verify that the file specified is correct 63*46c7fb85SJohn Marinockp() 64*46c7fb85SJohn Marino{ 65*46c7fb85SJohn Marino if [ -p $2 ] 66*46c7fb85SJohn Marino then 67*46c7fb85SJohn Marino ok 68*46c7fb85SJohn Marino else 69*46c7fb85SJohn Marino notok 70*46c7fb85SJohn Marino fi 71*46c7fb85SJohn Marino} 72*46c7fb85SJohn Marino 73*46c7fb85SJohn Marino# Make a directory that can later be verified 74*46c7fb85SJohn Marinomkd() 75*46c7fb85SJohn Marino{ 76*46c7fb85SJohn Marino CN=`basename $1` 77*46c7fb85SJohn Marino mkdir -p $1/"$CN-$CN" 78*46c7fb85SJohn Marino} 79*46c7fb85SJohn Marino 80*46c7fb85SJohn Marino# Verify that the directory specified is correct 81*46c7fb85SJohn Marinockd() 82*46c7fb85SJohn Marino{ 83*46c7fb85SJohn Marino if [ -d $2/$1-$1 ] 84*46c7fb85SJohn Marino then 85*46c7fb85SJohn Marino ok 86*46c7fb85SJohn Marino else 87*46c7fb85SJohn Marino notok 88*46c7fb85SJohn Marino fi 89*46c7fb85SJohn Marino} 90*46c7fb85SJohn Marino 91*46c7fb85SJohn Marino# Verify that the specified file does not exist 92*46c7fb85SJohn Marino# (is not there) 93*46c7fb85SJohn Marinocknt() 94*46c7fb85SJohn Marino{ 95*46c7fb85SJohn Marino if [ -r $1 ] 96*46c7fb85SJohn Marino then 97*46c7fb85SJohn Marino notok 98*46c7fb85SJohn Marino else 99*46c7fb85SJohn Marino ok 100*46c7fb85SJohn Marino fi 101*46c7fb85SJohn Marino} 102*46c7fb85SJohn Marino 103*46c7fb85SJohn Marino# A part of a test succeeds 104*46c7fb85SJohn Marinook() 105*46c7fb85SJohn Marino{ 106*46c7fb85SJohn Marino : 107*46c7fb85SJohn Marino} 108*46c7fb85SJohn Marino 109*46c7fb85SJohn Marino# A part of a test fails 110*46c7fb85SJohn Marinonotok() 111*46c7fb85SJohn Marino{ 112*46c7fb85SJohn Marino OK=0 113*46c7fb85SJohn Marino} 114*46c7fb85SJohn Marino 115*46c7fb85SJohn Marino# Verify that the exit code passed is for unsuccessful termination 116*46c7fb85SJohn Marinockfail() 117*46c7fb85SJohn Marino{ 118*46c7fb85SJohn Marino if [ $1 -gt 0 ] 119*46c7fb85SJohn Marino then 120*46c7fb85SJohn Marino ok 121*46c7fb85SJohn Marino else 122*46c7fb85SJohn Marino notok 123*46c7fb85SJohn Marino fi 124*46c7fb85SJohn Marino} 125*46c7fb85SJohn Marino 126*46c7fb85SJohn Marino# Verify that the exit code passed is for successful termination 127*46c7fb85SJohn Marinockok() 128*46c7fb85SJohn Marino{ 129*46c7fb85SJohn Marino if [ $1 -eq 0 ] 130*46c7fb85SJohn Marino then 131*46c7fb85SJohn Marino ok 132*46c7fb85SJohn Marino else 133*46c7fb85SJohn Marino notok 134*46c7fb85SJohn Marino fi 135*46c7fb85SJohn Marino} 136*46c7fb85SJohn Marino 137*46c7fb85SJohn Marino# Run all tests locally and across devices 138*46c7fb85SJohn Marinoecho 1..32 139*46c7fb85SJohn Marinofor FS in '' $TMPDIR/testdir/ 140*46c7fb85SJohn Marinodo 141*46c7fb85SJohn Marino begin 'Rename file' 142*46c7fb85SJohn Marino mkf fa 143*46c7fb85SJohn Marino mv fa ${FS}fb 144*46c7fb85SJohn Marino ckok $? 145*46c7fb85SJohn Marino ckf fa ${FS}fb 146*46c7fb85SJohn Marino cknt fa 147*46c7fb85SJohn Marino end 148*46c7fb85SJohn Marino 149*46c7fb85SJohn Marino begin 'Move files into directory' 150*46c7fb85SJohn Marino mkf fa 151*46c7fb85SJohn Marino mkf fb 152*46c7fb85SJohn Marino mkdir -p ${FS}1/2/3 153*46c7fb85SJohn Marino mv fa fb ${FS}1/2/3 154*46c7fb85SJohn Marino ckok $? 155*46c7fb85SJohn Marino ckf fa ${FS}1/2/3/fa 156*46c7fb85SJohn Marino ckf fb ${FS}1/2/3/fb 157*46c7fb85SJohn Marino cknt fa 158*46c7fb85SJohn Marino cknt fb 159*46c7fb85SJohn Marino end 160*46c7fb85SJohn Marino 161*46c7fb85SJohn Marino begin 'Move file from directory to file' 162*46c7fb85SJohn Marino mkdir -p 1/2/3 163*46c7fb85SJohn Marino mkf 1/2/3/fa 164*46c7fb85SJohn Marino mv 1/2/3/fa ${FS}fb 165*46c7fb85SJohn Marino ckok $? 166*46c7fb85SJohn Marino ckf fa ${FS}fb 167*46c7fb85SJohn Marino cknt 1/2/3/fa 168*46c7fb85SJohn Marino end 169*46c7fb85SJohn Marino 170*46c7fb85SJohn Marino begin 'Move file from directory to existing file' 171*46c7fb85SJohn Marino mkdir -p 1/2/3 172*46c7fb85SJohn Marino mkf 1/2/3/fa 173*46c7fb85SJohn Marino :> ${FS}fb 174*46c7fb85SJohn Marino mv 1/2/3/fa ${FS}fb 175*46c7fb85SJohn Marino ckok $? 176*46c7fb85SJohn Marino ckf fa ${FS}fb 177*46c7fb85SJohn Marino cknt 1/2/3/fa 178*46c7fb85SJohn Marino end 179*46c7fb85SJohn Marino 180*46c7fb85SJohn Marino begin 'Move file from directory to existing directory' 181*46c7fb85SJohn Marino mkdir -p 1/2/3 182*46c7fb85SJohn Marino mkf 1/2/3/fa 183*46c7fb85SJohn Marino mkdir -p ${FS}db/fa 184*46c7fb85SJohn Marino # Should fail per POSIX step 3a: 185*46c7fb85SJohn Marino # Destination path is a file of type directory and 186*46c7fb85SJohn Marino # source_file is not a file of type directory 187*46c7fb85SJohn Marino mv 1/2/3/fa ${FS}db 2>/dev/null 188*46c7fb85SJohn Marino ckfail $? 189*46c7fb85SJohn Marino ckf fa 1/2/3/fa 190*46c7fb85SJohn Marino end 191*46c7fb85SJohn Marino 192*46c7fb85SJohn Marino begin 'Move file from directory to directory' 193*46c7fb85SJohn Marino mkdir -p da1/da2/da3 194*46c7fb85SJohn Marino mkdir -p ${FS}db1/db2/db3 195*46c7fb85SJohn Marino mkf da1/da2/da3/fa 196*46c7fb85SJohn Marino mv da1/da2/da3/fa ${FS}db1/db2/db3/fb 197*46c7fb85SJohn Marino ckok $? 198*46c7fb85SJohn Marino ckf fa ${FS}db1/db2/db3/fb 199*46c7fb85SJohn Marino cknt da1/da2/da3/fa 200*46c7fb85SJohn Marino end 201*46c7fb85SJohn Marino 202*46c7fb85SJohn Marino begin 'Rename directory' 203*46c7fb85SJohn Marino mkd da 204*46c7fb85SJohn Marino mv da ${FS}db 205*46c7fb85SJohn Marino ckok $? 206*46c7fb85SJohn Marino ckd da ${FS}db 207*46c7fb85SJohn Marino cknt da 208*46c7fb85SJohn Marino end 209*46c7fb85SJohn Marino 210*46c7fb85SJohn Marino begin 'Move directory to directory name' 211*46c7fb85SJohn Marino mkd da1/da2/da3/da 212*46c7fb85SJohn Marino mkdir -p ${FS}db1/db2/db3 213*46c7fb85SJohn Marino mv da1/da2/da3/da ${FS}db1/db2/db3/db 214*46c7fb85SJohn Marino ckok $? 215*46c7fb85SJohn Marino ckd da ${FS}db1/db2/db3/db 216*46c7fb85SJohn Marino cknt da1/da2/da3/da 217*46c7fb85SJohn Marino end 218*46c7fb85SJohn Marino 219*46c7fb85SJohn Marino begin 'Move directory to directory' 220*46c7fb85SJohn Marino mkd da1/da2/da3/da 221*46c7fb85SJohn Marino mkdir -p ${FS}db1/db2/db3 222*46c7fb85SJohn Marino mv da1/da2/da3/da ${FS}db1/db2/db3 223*46c7fb85SJohn Marino ckok $? 224*46c7fb85SJohn Marino ckd da ${FS}db1/db2/db3/da 225*46c7fb85SJohn Marino cknt da1/da2/da3/da 226*46c7fb85SJohn Marino end 227*46c7fb85SJohn Marino 228*46c7fb85SJohn Marino begin 'Move directory to existing empty directory' 229*46c7fb85SJohn Marino mkd da1/da2/da3/da 230*46c7fb85SJohn Marino mkdir -p ${FS}db1/db2/db3/da 231*46c7fb85SJohn Marino mv da1/da2/da3/da ${FS}db1/db2/db3 232*46c7fb85SJohn Marino ckok $? 233*46c7fb85SJohn Marino ckd da ${FS}db1/db2/db3/da 234*46c7fb85SJohn Marino cknt da1/da2/da3/da 235*46c7fb85SJohn Marino end 236*46c7fb85SJohn Marino 237*46c7fb85SJohn Marino begin 'Move directory to existing non-empty directory' 238*46c7fb85SJohn Marino mkd da1/da2/da3/da 239*46c7fb85SJohn Marino mkdir -p ${FS}db1/db2/db3/da/full 240*46c7fb85SJohn Marino # Should fail (per the semantics of rename(2)) 241*46c7fb85SJohn Marino mv da1/da2/da3/da ${FS}db1/db2/db3 2>/dev/null 242*46c7fb85SJohn Marino ckfail $? 243*46c7fb85SJohn Marino ckd da da1/da2/da3/da 244*46c7fb85SJohn Marino end 245*46c7fb85SJohn Marino 246*46c7fb85SJohn Marino begin 'Move directory to existing file' 247*46c7fb85SJohn Marino mkd da1/da2/da3/da 248*46c7fb85SJohn Marino mkdir -p ${FS}db1/db2/db3 249*46c7fb85SJohn Marino :> ${FS}db1/db2/db3/da 250*46c7fb85SJohn Marino # Should fail per POSIX step 3b: 251*46c7fb85SJohn Marino # Destination path is a file not of type directory 252*46c7fb85SJohn Marino # and source_file is a file of type directory 253*46c7fb85SJohn Marino mv da1/da2/da3/da ${FS}db1/db2/db3/da 2>/dev/null 254*46c7fb85SJohn Marino ckfail $? 255*46c7fb85SJohn Marino ckd da da1/da2/da3/da 256*46c7fb85SJohn Marino end 257*46c7fb85SJohn Marino 258*46c7fb85SJohn Marino begin 'Rename fifo' 259*46c7fb85SJohn Marino mkp fa 260*46c7fb85SJohn Marino mv fa ${FS}fb 261*46c7fb85SJohn Marino ckok $? 262*46c7fb85SJohn Marino ckp fa ${FS}fb 263*46c7fb85SJohn Marino cknt fa 264*46c7fb85SJohn Marino end 265*46c7fb85SJohn Marino 266*46c7fb85SJohn Marino begin 'Move fifos into directory' 267*46c7fb85SJohn Marino mkp fa 268*46c7fb85SJohn Marino mkp fb 269*46c7fb85SJohn Marino mkdir -p ${FS}1/2/3 270*46c7fb85SJohn Marino mv fa fb ${FS}1/2/3 271*46c7fb85SJohn Marino ckok $? 272*46c7fb85SJohn Marino ckp fa ${FS}1/2/3/fa 273*46c7fb85SJohn Marino ckp fb ${FS}1/2/3/fb 274*46c7fb85SJohn Marino cknt fa 275*46c7fb85SJohn Marino cknt fb 276*46c7fb85SJohn Marino end 277*46c7fb85SJohn Marino 278*46c7fb85SJohn Marino begin 'Move fifo from directory to fifo' 279*46c7fb85SJohn Marino mkdir -p 1/2/3 280*46c7fb85SJohn Marino mkp 1/2/3/fa 281*46c7fb85SJohn Marino mv 1/2/3/fa ${FS}fb 282*46c7fb85SJohn Marino ckok $? 283*46c7fb85SJohn Marino ckp fa ${FS}fb 284*46c7fb85SJohn Marino cknt 1/2/3/fa 285*46c7fb85SJohn Marino end 286*46c7fb85SJohn Marino 287*46c7fb85SJohn Marino begin 'Move fifo from directory to directory' 288*46c7fb85SJohn Marino mkdir -p da1/da2/da3 289*46c7fb85SJohn Marino mkdir -p ${FS}db1/db2/db3 290*46c7fb85SJohn Marino mkp da1/da2/da3/fa 291*46c7fb85SJohn Marino mv da1/da2/da3/fa ${FS}db1/db2/db3/fb 292*46c7fb85SJohn Marino ckok $? 293*46c7fb85SJohn Marino ckp fa ${FS}db1/db2/db3/fb 294*46c7fb85SJohn Marino cknt da1/da2/da3/fa 295*46c7fb85SJohn Marino end 296*46c7fb85SJohn Marinodone 297