1#    rpmverify.at: rpm verification tests
2
3AT_BANNER([RPM verification])
4
5# ------------------------------
6#
7AT_SETUP([dependency problems])
8AT_KEYWORDS([verify])
9AT_CHECK([
10RPMDB_INIT
11
12runroot rpmbuild --quiet -bb \
13	--define "pkg one" \
14	--define "reqs deptest-two" \
15	  /data/SPECS/deptest.spec
16
17runroot rpm -U --nodeps /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
18runroot rpm -Va --nofiles
19],
20[1],
21[Unsatisfied dependencies for deptest-one-1.0-1.noarch:
22	deptest-two is needed by (installed) deptest-one-1.0-1.noarch
23],
24[])
25AT_CLEANUP
26
27# Test file verify when no errors expected.
28# Ignore dependencies here as we're not testing for them, and
29# --nogroup --nouser is required when running tests as non-root.
30AT_SETUP([files with no problems])
31AT_KEYWORDS([verify])
32AT_CHECK([
33RPMDB_INIT
34
35runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
36	/data/RPMS/hello-1.0-1.i386.rpm
37runroot rpm -Va --nodeps --nouser --nogroup
38],
39[0],
40[],
41[])
42AT_CLEANUP
43
44# Test file verify when no errors expected in verbose mode.
45AT_SETUP([files with no problems in verbose mode])
46AT_KEYWORDS([verify])
47AT_CHECK([
48RPMDB_INIT
49
50runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
51	/data/RPMS/hello-1.0-1.i386.rpm
52runroot rpm -Vva --nodeps --nouser --nogroup
53],
54[0],
55[.........    /usr/local/bin/hello
56.........    /usr/share/doc/hello-1.0
57.........  d /usr/share/doc/hello-1.0/FAQ
58],
59[])
60AT_CLEANUP
61
62# Test file verify when no errors expected in verbose mode.
63AT_SETUP([directory replaced with a directory symlink])
64AT_KEYWORDS([verify])
65AT_CHECK([
66RPMDB_INIT
67tf="${RPMTEST}"/opt/foo
68rm -rf "${RPMTEST}"/opt/*
69
70runroot rpmbuild --quiet -bb \
71        --define "ver 1.0" \
72        --define "filetype datadir" \
73        --define "filedata README1" \
74        --define "user $(id -u -n)" \
75        --define "grp $(id -g -n)" \
76          /data/SPECS/replacetest.spec
77
78runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
79mv "${RPMTEST}"/opt/foo "${RPMTEST}"/opt/was
80ln -s was "${RPMTEST}"/opt/foo
81runroot rpm -Vv replacetest
82],
83[0],
84[.........    /opt/foo
85.........    /opt/foo/README1
86.........    /opt/goo
87.........    /opt/zoo
88],
89[])
90AT_CLEANUP
91
92AT_SETUP([directory replaced with an invalid directory symlink])
93AT_KEYWORDS([verify])
94AT_XFAIL_IF([test `id -u` != 0 ])
95AT_CHECK([
96RPMDB_INIT
97tf="${RPMTEST}"/opt/foo
98rm -rf "${RPMTEST}"/opt/*
99
100runroot rpmbuild --quiet -bb \
101        --define "ver 1.0" \
102        --define "filetype datadir" \
103        --define "filedata README1" \
104          /data/SPECS/replacetest.spec
105
106runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
107mv "${RPMTEST}"/opt/foo "${RPMTEST}"/opt/was
108ln -s was "${RPMTEST}"/opt/foo
109chown -h bin "${RPMTEST}"/opt/foo
110runroot rpm -Vv --nouser --nogroup replacetest
111],
112[1],
113[....L....    /opt/foo
114.........    /opt/foo/README1
115.........    /opt/goo
116.........    /opt/zoo
117],
118[])
119AT_CLEANUP
120
121# Test file verify after mutilating the files a bit.
122AT_SETUP([verify from db, with problems present])
123AT_KEYWORDS([verify])
124AT_CHECK([
125RPMDB_INIT
126
127runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
128	/data/RPMS/hello-1.0-1.i386.rpm
129rm -f "${RPMTEST}"/usr/share/doc/hello-1.0/FAQ
130chmod u-x "${RPMTEST}"/usr/local/bin/hello
131dd if=/dev/zero of="${RPMTEST}"/usr/local/bin/hello \
132   conv=notrunc bs=1 seek=5 count=6 2> /dev/null
133runroot rpm -Va --nodeps --nouser --nogroup
134],
135[1],
136[.M5....T.    /usr/local/bin/hello
137missing   d /usr/share/doc/hello-1.0/FAQ
138],
139[])
140AT_CLEANUP
141
142# Test file verify from original package after mutilating the files a bit.
143AT_SETUP([verify from package, with problems present])
144AT_KEYWORDS([verify])
145AT_CHECK([
146RPMDB_INIT
147
148runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
149	/data/RPMS/hello-1.0-1.i386.rpm
150rm -f "${RPMTEST}"/usr/share/doc/hello-1.0/FAQ
151chmod u-x "${RPMTEST}"/usr/local/bin/hello
152dd if=/dev/zero of="${RPMTEST}"/usr/local/bin/hello \
153   conv=notrunc bs=1 seek=5 count=6 2> /dev/null
154runroot rpm -Vp --nodeps --nouser --nogroup /data/RPMS/hello-1.0-1.i386.rpm
155],
156[1],
157[.M5....T.    /usr/local/bin/hello
158missing   d /usr/share/doc/hello-1.0/FAQ
159],
160[])
161AT_CLEANUP
162
163AT_SETUP([verify file attribute filtering])
164AT_KEYWORDS([query])
165AT_CHECK([
166RPMDB_INIT
167
168runroot rpmbuild -bb --quiet \
169  /data/SPECS/vattrtest.spec
170
171runroot rpm -U /build/RPMS/noarch/vattrtest-1.0-1.noarch.rpm
172runroot_other touch /opt/vattrtest/g
173runroot_other chmod 644 /opt/vattrtest/g
174
175cmd="rpm -Vv --nouser --nogroup"
176for filter in --noconfig --noghost --noartifact -A -c -d -L; do
177    echo ${filter}
178    runroot ${cmd} ${filter} vattrtest
179done
180],
181[ignore],
182[--noconfig
183.........    /opt/vattrtest
184.........  a /opt/vattrtest/a
185.........  d /opt/vattrtest/d
186.........  g /opt/vattrtest/g
187.........  l /opt/vattrtest/l
188.........  m /opt/vattrtest/m
189.........  r /opt/vattrtest/r
190--noghost
191.........    /opt/vattrtest
192.........  a /opt/vattrtest/a
193.........  c /opt/vattrtest/c
194.........  c /opt/vattrtest/cn
195.........  d /opt/vattrtest/d
196.........  l /opt/vattrtest/l
197.........  m /opt/vattrtest/m
198.........  r /opt/vattrtest/r
199--noartifact
200.........    /opt/vattrtest
201.........  c /opt/vattrtest/c
202.........  c /opt/vattrtest/cn
203.........  d /opt/vattrtest/d
204.........  g /opt/vattrtest/g
205.........  l /opt/vattrtest/l
206.........  m /opt/vattrtest/m
207.........  r /opt/vattrtest/r
208-A
209.........  a /opt/vattrtest/a
210-c
211.........  c /opt/vattrtest/c
212.........  c /opt/vattrtest/cn
213-d
214.........  d /opt/vattrtest/d
215-L
216.........  l /opt/vattrtest/l
217],
218[])
219AT_CLEANUP
220
221# Test verify script success & failure behavior
222# Ignoring stderr spew for now
223AT_SETUP([verifyscript failure])
224AT_KEYWORDS([verify])
225AT_CHECK([
226AT_SKIP_IF([$LUA_DISABLED])
227RPMDB_INIT
228
229runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec
230runroot rpm -U --nodeps /build/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
231rm -f "${RPMTEST}"/var/checkme
232runroot rpm -V --nodeps verifyscript
233],
234[1],
235[],
236[ignore])
237AT_CLEANUP
238
239AT_SETUP([verifyscript success])
240AT_KEYWORDS([verify])
241AT_CHECK([
242AT_SKIP_IF([$LUA_DISABLED])
243RPMDB_INIT
244
245runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec
246runroot rpm -U --nodeps /build/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
247touch "${RPMTEST}"/var/checkme
248runroot rpm -V --nodeps verifyscript
249],
250[0],
251[],
252[])
253AT_CLEANUP
254
255# ------------------------------
256# shared file timestamp behavior
257AT_SETUP([shared file timestamp behavior])
258AT_KEYWORDS([verify])
259AT_CHECK([
260RPMDB_INIT
261
262# create packages sharing a file but with different timestamp
263for p in "one" "two"; do
264    runroot rpmbuild --quiet -bb \
265        --define "pkg $p" \
266	--define "filedata same_stuff" \
267          /data/SPECS/conflicttest.spec
268    sleep 1
269done
270
271# first instance of a shared file is the one that actually gets created,
272# force the order so we know what to expect as these dont depend on each other
273runroot rpm -U --noorder /build/RPMS/noarch/conflictone-1.0-1.noarch.rpm /build/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
274runroot rpm -e conflicttwo
275runroot rpm -Va --nouser --nogroup
276],
277[0],
278[],
279[])
280AT_CLEANUP
281
282# ------------------------------
283AT_SETUP([minimize writes (files)])
284AT_KEYWORDS([upgrade verify min_writes])
285RPMDB_INIT
286
287for v in "1.0" "2.0"; do
288    runroot rpmbuild --quiet -bb \
289        --define "ver $v" \
290	--define "filetype file" \
291	--define "filedata foo" \
292          /data/SPECS/replacetest.spec
293done
294
295for v in "3.0" "4.0"; do
296    runroot rpmbuild --quiet -bb \
297        --define "ver $v" \
298	--define "filetype file" \
299	--define "filedata fox" \
300          /data/SPECS/replacetest.spec
301done
302
303AT_CHECK([
304RPMDB_INIT
305tf="${RPMTEST}"/opt/foo
306rm -rf "${tf}"*
307
308runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
309cat "${tf}"
310touch -t 201703171717 ${tf}
311
312runroot rpm -U \
313	--define "_minimize_writes 1" \
314	 /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
315runroot rpm -Va --nouser --nogroup replacetest
316cat "${tf}"
317
318runroot rpm -U \
319	--define "_minimize_writes 1" \
320	/build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
321runroot rpm -Va  --nouser --nogroup replacetest
322cat "${tf}"
323
324echo "xx" > "${tf}"
325cat "${tf}"
326
327runroot rpm -U \
328	--define "_minimize_writes 1" \
329	/build/RPMS/noarch/replacetest-4.0-1.noarch.rpm
330runroot rpm -Va  --nouser --nogroup replacetest
331cat "${tf}"
332
333touch -t 201703171717 ${tf}
334
335runroot rpm -U --oldpackage \
336	--define "_minimize_writes 1" \
337	/build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
338runroot rpm -Va  --nouser --nogroup replacetest
339cat "${tf}"
340],
341[0],
342[foo
343foo
344fox
345xx
346fox
347fox
348],
349[])
350
351AT_CHECK([
352RPMDB_INIT
353tf="${RPMTEST}"/opt/foo
354rm -rf "${tf}"*
355
356runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
357cat "${tf}"
358touch -t 201703171717 ${tf}
359
360runroot rpm -Uvv --fsmdebug \
361	--define "_minimize_writes 1" \
362	 /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm > output.txt 2>&1
363runroot rpm -Va --nouser --nogroup replacetest
364grep -c "touch" output.txt
365cat "${tf}"
366
367
368runroot rpm -Uvv --fsmdebug \
369	--define "_minimize_writes 1" \
370	/build/RPMS/noarch/replacetest-3.0-1.noarch.rpm  > output.txt 2>&1
371runroot rpm -Va  --nouser --nogroup replacetest
372grep -c "touch" output.txt
373cat "${tf}"
374echo "xx" > "${tf}"
375cat "${tf}"
376
377runroot rpm -Uvv --fsmdebug \
378	--define "_minimize_writes 1" \
379	/build/RPMS/noarch/replacetest-4.0-1.noarch.rpm  > output.txt 2>&1
380runroot rpm -Va  --nouser --nogroup replacetest
381grep -c "touch" output.txt
382cat "${tf}"
383
384touch -t 201703171717 ${tf}
385
386runroot rpm -U -Uvv --fsmdebug  --oldpackage \
387	--define "_minimize_writes 1" \
388	/build/RPMS/noarch/replacetest-3.0-1.noarch.rpm  > output.txt 2>&1
389runroot rpm -Va  --nouser --nogroup replacetest
390grep -c  "touch" output.txt
391cat "${tf}"
392],
393[0],
394[foo
3952
396foo
3971
398fox
399xx
4001
401fox
4022
403fox
404],
405[])
406AT_CLEANUP
407
408AT_SETUP([minimize writes (hardlinks)])
409AT_KEYWORDS([upgrade verify min_writes])
410RPMDB_INIT
411for v in "0" "1"; do
412    runroot rpmbuild --quiet -bb --define "ver ${v}" /data/SPECS/hlbreak.spec
413done
414AT_CHECK([
415RPMDB_INIT
416runroot rpm -U --define "_minimize_writes 1" /build/RPMS/noarch/hlbreak-0-0.noarch.rpm
417runroot rpm -Vav --nouser --nogroup
418runroot rpm -U --define "_minimize_writes 1" /build/RPMS/noarch/hlbreak-1-0.noarch.rpm
419runroot rpm -Vav --nouser --nogroup
420],
421[0],
422[.........    /opt/file2
423.........    /opt/file1
424.........    /opt/file2
425],
426)
427AT_CLEANUP
428
429
430AT_SETUP([minimize writes (symlinks)])
431AT_KEYWORDS([upgrade verify min_writes])
432RPMDB_INIT
433for v in "1.0" "2.0"; do
434    runroot rpmbuild --quiet -bb \
435        --define "ver $v" \
436	--define "filetype link" \
437	--define "filedata doh" \
438          /data/SPECS/replacetest.spec
439done
440
441for v in "3.0" "4.0"; do
442    runroot rpmbuild --quiet -bb \
443        --define "ver $v" \
444	--define "filetype link" \
445	--define "filedata fox" \
446          /data/SPECS/replacetest.spec
447done
448
449AT_CHECK([
450RPMDB_INIT
451tf="${RPMTEST}"/opt/foo
452rm -rf "${tf}"*
453
454runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
455readlink "${tf}"
456
457runroot rpm -U \
458	--define "_minimize_writes 1" \
459	 /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
460runroot rpm -Va --nouser --nogroup replacetest
461readlink "${tf}"
462
463runroot rpm -U \
464	--define "_minimize_writes 1" \
465	/build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
466runroot rpm -Va  --nouser --nogroup replacetest
467readlink "${tf}"
468
469ln -sf "xx" "${tf}"
470readlink "${tf}"
471
472runroot rpm -U \
473	--define "_minimize_writes 1" \
474	/build/RPMS/noarch/replacetest-4.0-1.noarch.rpm
475runroot rpm -Va  --nouser --nogroup replacetest
476readlink "${tf}"
477
478runroot rpm -U --oldpackage \
479	--define "_minimize_writes 1" \
480	/build/RPMS/noarch/replacetest-3.0-1.noarch.rpm
481runroot rpm -Va  --nouser --nogroup replacetest
482readlink "${tf}"
483],
484[0],
485[doh
486doh
487fox
488xx
489fox
490fox
491],
492[])
493
494AT_CHECK([
495RPMDB_INIT
496tf="${RPMTEST}"/opt/foo
497rm -rf "${tf}" "${tf}".rpm*
498
499runroot rpm -i /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
500readlink "${tf}"
501
502runroot rpm -Uvv --fsmdebug \
503	--define "_minimize_writes 1" \
504	 /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm > output.txt 2>&1
505runroot rpm -Va --nouser --nogroup replacetest
506grep -c "touch" output.txt
507readlink "${tf}"
508
509
510runroot rpm -Uvv --fsmdebug \
511	--define "_minimize_writes 1" \
512	/build/RPMS/noarch/replacetest-3.0-1.noarch.rpm > output.txt 2>&1
513runroot rpm -Va  --nouser --nogroup replacetest
514grep -c "touch" output.txt
515readlink "${tf}"
516ln -sf "xx" "${tf}"
517readlink "${tf}"
518
519runroot rpm -Uvv --fsmdebug \
520	--define "_minimize_writes 1" \
521	/build/RPMS/noarch/replacetest-4.0-1.noarch.rpm  > output.txt 2>&1
522runroot rpm -Va  --nouser --nogroup replacetest
523grep -c "touch" output.txt
524readlink "${tf}"
525
526runroot rpm -U -Uvv --fsmdebug  --oldpackage \
527	--define "_minimize_writes 1" \
528	/build/RPMS/noarch/replacetest-3.0-1.noarch.rpm  > output.txt 2>&1
529runroot rpm -Va  --nouser --nogroup replacetest
530grep -c  "touch" output.txt
531readlink "${tf}"
532],
533[0],
534[doh
5352
536doh
5371
538fox
539xx
5401
541fox
5422
543fox
544],
545[])
546AT_CLEANUP
547
548AT_SETUP([minimize writes (SUID files)])
549AT_KEYWORDS([upgrade verify min_writes])
550AT_CHECK([
551RPMDB_INIT
552tf="${RPMTEST}"/opt/foo
553rm -rf "${tf}" "${tf}".rpm*
554
555for v in "1.0" "2.0"; do
556    runroot rpmbuild --quiet -bb \
557        --define "ver $v" \
558	--define "filetype file" \
559	--define "filedata foo" \
560	--define "fileattr %attr(2755,-,-)" \
561          /data/SPECS/replacetest.spec
562done
563
564runroot rpm -U /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
565runroot rpm -Va --nouser --nogroup replacetest
566runroot rpm -U \
567	--define "_minimize_writes 1" \
568	 /build/RPMS/noarch/replacetest-2.0-1.noarch.rpm
569runroot rpm -Va --nouser --nogroup replacetest
570chmod 777 "${tf}"
571runroot rpm -U \
572	--oldpackage \
573	--define "_minimize_writes 1" \
574	 /build/RPMS/noarch/replacetest-1.0-1.noarch.rpm
575runroot rpm -Va --nouser --nogroup replacetest
576],
577[0],
578[],
579[])
580AT_CLEANUP
581
582AT_SETUP([verify empty/no capabilities 1])
583AT_KEYWORDS([verify])
584AT_SKIP_IF([$CAP_DISABLED])
585AT_CHECK([
586RPMDB_INIT
587
588runroot rpm -U --nocaps --ignoreos \
589	/data/RPMS/capstest-1.0-1.noarch.rpm
590
591runroot rpm -Va --nouser --nogroup
592],
593[1],
594[........P    /a/emptyCaps1
595........P    /a/emptyCaps2
596],
597[])
598AT_CLEANUP
599
600
601AT_SETUP([verify empty/no capabilities 2])
602AT_KEYWORDS([verify])
603AT_SKIP_IF([$CAP_DISABLED])
604AT_CHECK([
605RPMDB_INIT
606
607runroot rpm -U --nocaps --nodeps --noscripts --ignorearch --ignoreos \
608	/data/RPMS/hello-1.0-1.ppc64.rpm
609
610runroot rpm -Va --nouser --nogroup --nodeps | grep "/bin/hello"
611],
612[1],
613[],
614[])
615AT_CLEANUP
616