xref: /dragonfly/tools/regression/bin/mv/regress.sh (revision 46c7fb85)
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