• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0-or-later
3# Copyright (c) International Business Machines Corp., 2000
4# Copyright (c) 2016 Cyril Hrubis <chrubis@suse.cz>
5# Author: Robbie Williamson <robbiew@us.ibm.com>
6#
7# This is a basic $AR command test.
8
9AR="${AR:=ar}"
10TST_CNT=17
11TST_SETUP=setup
12TST_TESTFUNC=test
13TST_NEEDS_TMPDIR=1
14TST_NEEDS_CMDS="$AR"
15
16setup()
17{
18	MOD=
19	$AR --help | grep "use zero for timestamps and uids/gids (default)" >/dev/null
20	[ $? -eq 0 ] && MOD="U"
21}
22
23test1()
24{
25	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in
26	ROD $AR -ra"$MOD" file1.in lib.a $TST_DATAROOT/file2.in
27	ROD $AR -t lib.a \> ar.out
28
29	printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp
30
31	if diff ar.out ar.exp >/dev/null; then
32		tst_res TPASS "$AR added new file after another (-a)"
33	else
34		tst_res TFAIL "$AR failed to add new file after another (-a)"
35		cat ar.out
36	fi
37
38	ROD rm lib.a
39}
40
41test2()
42{
43	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \
44			       $TST_DATAROOT/file3.in $TST_DATAROOT/file4.in
45	ROD $AR -ma"$MOD" file1.in lib.a file4.in
46	ROD $AR -t lib.a \> ar.out
47
48	printf "file1.in\nfile4.in\nfile2.in\nfile3.in\n" > ar.exp
49
50	if diff ar.out ar.exp > /dev/null; then
51		tst_res TPASS "$AR moved file correctly (-ma)"
52	else
53		tst_res TFAIL "$AR failed to move file (-ma)"
54		cat ar.out
55	fi
56
57	ROD rm lib.a
58}
59
60test3()
61{
62	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in
63	ROD $AR -rb"$MOD" file3.in lib.a $TST_DATAROOT/file2.in
64	ROD $AR -t lib.a \> ar.out
65
66	printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp
67
68	if diff ar.out ar.exp; then
69		tst_res TPASS "$AR added new file before another (-b)"
70	else
71		tst_res TFAIL "$AR failed to add new file before another (-b)"
72		cat ar.out
73	fi
74
75	ROD rm lib.a
76}
77
78test4()
79{
80	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in \
81			       $TST_DATAROOT/file2.in
82	ROD $AR -mb"$MOD" file3.in lib.a file2.in
83	ROD $AR -t lib.a \> ar.out
84
85	printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp
86
87	if diff ar.out ar.exp > /dev/null; then
88		tst_res TPASS "$AR moved file correctly (-mb)"
89	else
90		tst_res TFAIL "$AR failed to move file (-mb)"
91		cat ar.out
92	fi
93
94	ROD rm lib.a
95}
96
97test5()
98{
99	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in \> ar.out
100
101	if [ -s ar.out ]; then
102		tst_res TFAIL "$AR produced output unexpectedly (-c)"
103		cat ar.out
104	else
105		tst_res TPASS "$AR haven't produced output (-c)"
106	fi
107
108	ROD rm lib.a
109}
110
111test6()
112{
113	ROD $AR -qc"$MOD" lib.a $TST_DATAROOT/file1.in \> ar.out
114
115	if [ -s ar.out ]; then
116		tst_res TFAIL "$AR produced output unexpectedly (-qc)"
117		cat ar.out
118	else
119		tst_res TPASS "$AR haven't produced output (-qc)"
120	fi
121
122	ROD rm lib.a
123}
124
125test7()
126{
127	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \
128			       $TST_DATAROOT/file3.in
129	ROD $AR -d"$MOD" lib.a file1.in file2.in
130	ROD $AR -t lib.a \> ar.out
131
132	printf "file3.in\n" > ar.exp
133
134	if diff ar.out ar.exp > /dev/null; then
135		tst_res TPASS "$AR deleted files correctly (-d)"
136	else
137		tst_res TFAIL "$AR messed up when deleting files (-d)"
138		cat ar.out
139	fi
140
141	ROD rm lib.a
142}
143
144test8()
145{
146	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \
147			       $TST_DATAROOT/file3.in
148	ROD $AR -d"$MOD" lib.a
149	ROD $AR -t lib.a \> ar.out
150
151	printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp
152
153	if diff ar.out ar.exp > /dev/null; then
154		tst_res TPASS "$AR deleted nothing (-d with empty list)"
155	else
156		tst_res TFAIL "$AR deleted files (-d with empty list)"
157		cat ar.out
158	fi
159
160	ROD rm lib.a
161}
162
163test9()
164{
165	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in
166	ROD $AR -ri"$MOD" file3.in lib.a $TST_DATAROOT/file2.in
167	ROD $AR -t lib.a \> ar.out
168
169	printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp
170
171	if diff ar.out ar.exp >/dev/null; then
172		tst_res TPASS "$AR added new file before another (-i)"
173	else
174		tst_res TFAIL "$AR failed to add new file before another (-i"
175		cat ar.out
176	fi
177
178	ROD rm lib.a
179}
180
181test10()
182{
183	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in \
184			       $TST_DATAROOT/file2.in
185	ROD $AR -mi"$MOD" file3.in lib.a file2.in
186	ROD $AR -t lib.a \> ar.out
187
188	printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp
189
190	if diff ar.out ar.exp > /dev/null; then
191		tst_res TPASS "$AR moved file correctly (-mi)"
192	else
193		tst_res TFAIL "$AR failed to move file (-mi)"
194		cat ar.out
195	fi
196
197	ROD rm lib.a
198}
199
200test11()
201{
202	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file3.in \
203			       $TST_DATAROOT/file2.in
204	ROD $AR -m"$MOD" lib.a file3.in
205	ROD $AR -t lib.a \> ar.out
206
207	printf "file1.in\nfile2.in\nfile3.in\n" > ar.exp
208
209	if diff ar.out ar.exp > /dev/null; then
210		tst_res TPASS "$AR moved file correctly (-m)"
211	else
212		tst_res TFAIL "$AR failed to move file (-m)"
213		cat ar.out
214	fi
215
216	ROD rm lib.a
217}
218
219test12()
220{
221	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \
222			       $TST_DATAROOT/file3.in
223	ROD $AR -p"$MOD" lib.a \> ar.out
224
225	printf "This is file one\nThis is file two\nThis is file three\n" > ar.exp
226
227	if diff ar.out ar.exp > /dev/null; then
228		tst_res TPASS "$AR printed file content correctly (-p)"
229	else
230		tst_res TFAIL "$AR failed to print file content (-p)"
231		cat ar.out
232	fi
233
234	ROD rm lib.a
235}
236
237test13()
238{
239
240	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \
241			       $TST_DATAROOT/file3.in
242	ROD $AR -q"$MOD" lib.a $TST_DATAROOT/file4.in
243	ROD $AR -t lib.a \> ar.out
244
245	printf "file1.in\nfile2.in\nfile3.in\nfile4.in\n" > ar.exp
246
247	if diff ar.out ar.exp > /dev/null; then
248		tst_res TPASS "$AR appended file correctly (-q)"
249	else
250		tst_res TFAIL "$AR failed to append file (-q)"
251		cat ar.out
252	fi
253
254	ROD rm lib.a
255}
256
257test14()
258{
259	ROD touch file0.in
260	ROD $AR -cr"$MOD" lib.a file0.in $TST_DATAROOT/file1.in
261
262	file0_mtime1=$($AR -tv lib.a | grep file0.in)
263	file1_mtime1=$($AR -tv lib.a | grep file1.in)
264
265	touch -c -t $(date --date='next day' +"%Y%m%d%H%M") file0.in
266
267	ROD $AR -ru"$MOD" lib.a file0.in $TST_DATAROOT/file1.in
268
269	file0_mtime2=$($AR -tv lib.a | grep file0.in)
270	file1_mtime2=$($AR -tv lib.a | grep file1.in)
271
272	if [ "$file0_mtime1" = "$file0_mtime2" ]; then
273		tst_res TFAIL "$AR haven't updated modified file0 (-u)"
274	else
275		tst_res TPASS "$AR updated modified file0 (-u)"
276	fi
277
278	if [ "$file1_mtime1" = "$file1_mtime2" ]; then
279		tst_res TPASS "$AR haven't updated unmodified file1 (-u)"
280	else
281		tst_res TFAIL "$AR updated unmodified file1 (-u)"
282	fi
283
284	ROD rm lib.a file0.in
285}
286
287test15()
288{
289	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in
290	ROD $AR -tv lib.a \> ar.out
291
292	if grep -q '[rwx-]\{9\} [0-9].*/[0-9].*\s*[0-9].*.*file1.in' ar.out; then
293		tst_res TPASS "$AR verbose listing works (-tv)"
294	else
295		tst_res TFAIL "$AR verbose listing failed (-tv)"
296		cat ar.out
297	fi
298
299	ROD rm lib.a
300}
301
302test16()
303{
304	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in \
305			       $TST_DATAROOT/file3.in
306	ROD $AR -xv"$MOD" lib.a \> ar.out
307
308	printf "x - file1.in\nx - file2.in\nx - file3.in\n" > ar.exp
309
310	if diff ar.out ar.exp > /dev/null; then
311		tst_res TPASS "$AR printed extracted filenames (-xv)"
312	else
313		tst_res TFAIL "$AR failed to print extracted filenames (-xv)"
314		cat ar.out
315	fi
316
317	if [ -e file1.in -a -e file2.in -a -e file3.in ]; then
318		tst_res TPASS "$AR extracted files correctly"
319	else
320		tst_res TFAIL "$AR failed to extract files"
321	fi
322
323	ROD rm -f lib.a file1.in file2.in file3.in
324}
325
326test17()
327{
328	ROD $AR -cr"$MOD" lib.a $TST_DATAROOT/file1.in $TST_DATAROOT/file2.in
329	ROD $AR -xv"$MOD" lib.a file2.in \> ar.out
330
331	printf "x - file2.in\n" > ar.exp
332
333	if diff ar.out ar.exp > /dev/null; then
334		tst_res TPASS "$AR printed extracted filename (-xv)"
335	else
336		tst_res TFAIL "$AR failed to print extracted filename (-xv)"
337		cat ar.out
338	fi
339
340	if [ -e file2.in ]; then
341		tst_res TPASS "$AR extracted file correctly"
342	else
343		tst_res TFAIL "$AR failed to extract file"
344	fi
345
346	ROD rm -f lib.a file2.in
347}
348
349. tst_test.sh
350tst_run
351