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