xref: /freebsd/bin/mv/tests/legacy_test.sh (revision 61e21613)
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