#    rpmverify.at: rpm verification tests

AT_BANNER([RPM verification])

# ------------------------------
# 
AT_SETUP([dependency problems])
AT_KEYWORDS([verify])
AT_CHECK([
RPMDB_CLEAR
RPMDB_INIT
rm -rf "${TOPDIR}"

runroot rpmbuild --quiet -bb \
	--define "pkg one" \
	--define "reqs deptest-two" \
	  /data/SPECS/deptest.spec

runroot rpm -U --nodeps "${TOPDIR}"/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
runroot rpm -Va --nofiles
],
[1],
[Unsatisfied dependencies for deptest-one-1.0-1.noarch:
	deptest-two is needed by (installed) deptest-one-1.0-1.noarch
],
[])
AT_CLEANUP

# Test file verify when no errors expected.
# Ignore dependencies here as we're not testing for them, and
# --nogroup --nouser is required when running tests as non-root.
AT_SETUP([files with no problems])
AT_KEYWORDS([verify])
AT_CHECK([
RPMDB_CLEAR
RPMDB_INIT

runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
	/data/RPMS/hello-1.0-1.i386.rpm
runroot rpm -Va --nodeps --nouser --nogroup
],
[0],
[],
[])
AT_CLEANUP

# Test file verify when no errors expected in verbose mode.
AT_SETUP([files with no problems in verbose mode])
AT_KEYWORDS([verify])
AT_CHECK([
RPMDB_CLEAR
RPMDB_INIT

runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
	/data/RPMS/hello-1.0-1.i386.rpm
runroot rpm -Vva --nodeps --nouser --nogroup
],
[0],
[.........    /usr/local/bin/hello
.........    /usr/share/doc/hello-1.0
.........  d /usr/share/doc/hello-1.0/FAQ
],
[])
AT_CLEANUP

# Test file verify after mutilating the files a bit.
AT_SETUP([verify from db, with problems present])
AT_KEYWORDS([verify])
AT_CHECK([
RPMDB_CLEAR
RPMDB_INIT

runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
	/data/RPMS/hello-1.0-1.i386.rpm
rm -f "${RPMTEST}"/usr/share/doc/hello-1.0/FAQ
chmod u-x "${RPMTEST}"/usr/local/bin/hello
dd if=/dev/zero of="${RPMTEST}"/usr/local/bin/hello \
   conv=notrunc bs=1 seek=5 count=6 2> /dev/null
runroot rpm -Va --nodeps --nouser --nogroup
],
[1],
[.M5....T.    /usr/local/bin/hello
missing   d /usr/share/doc/hello-1.0/FAQ
],
[])
AT_CLEANUP

# Test file verify from original package after mutilating the files a bit.
AT_SETUP([verify from package, with problems present])
AT_KEYWORDS([verify])
AT_CHECK([
RPMDB_CLEAR
RPMDB_INIT

runroot rpm -U --nodeps --noscripts --ignorearch --ignoreos \
	/data/RPMS/hello-1.0-1.i386.rpm
rm -f "${RPMTEST}"/usr/share/doc/hello-1.0/FAQ
chmod u-x "${RPMTEST}"/usr/local/bin/hello
dd if=/dev/zero of="${RPMTEST}"/usr/local/bin/hello \
   conv=notrunc bs=1 seek=5 count=6 2> /dev/null
runroot rpm -Vp --nodeps --nouser --nogroup /data/RPMS/hello-1.0-1.i386.rpm
],
[1],
[.M5....T.    /usr/local/bin/hello
missing   d /usr/share/doc/hello-1.0/FAQ
],
[])
AT_CLEANUP

# Test verify script success & failure behavior
# Ignoring stderr spew for now
AT_SETUP([verifyscript failure])
AT_KEYWORDS([verify])
AT_CHECK([
RPMDB_CLEAR
RPMDB_INIT

rm -rf "${TOPDIR}"
runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec
runroot rpm -U --nodeps "${TOPDIR}"/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
rm -f "${RPMTEST}"/var/checkme
runroot rpm -V --nodeps verifyscript
],
[1],
[],
[ignore])
AT_CLEANUP

AT_SETUP([verifyscript success])
AT_KEYWORDS([verify])
AT_CHECK([
RPMDB_CLEAR
RPMDB_INIT

rm -rf "${TOPDIR}"
runroot rpmbuild --quiet -bb /data/SPECS/verifyscript.spec
runroot rpm -U --nodeps "${TOPDIR}"/RPMS/noarch/verifyscript-1.0-1.noarch.rpm
touch "${RPMTEST}"/var/checkme
runroot rpm -V --nodeps verifyscript
],
[0],
[],
[])
AT_CLEANUP

# ------------------------------
# shared file timestamp behavior
AT_SETUP([shared file timestamp behavior])
AT_KEYWORDS([verify])
AT_CHECK([
RPMDB_CLEAR
RPMDB_INIT
rm -rf "${TOPDIR}"

# create packages sharing a file but with different timestamp
for p in "one" "two"; do
    runroot rpmbuild --quiet -bb \
        --define "pkg $p" \
	--define "filedata same_stuff" \
          /data/SPECS/conflicttest.spec
    sleep 1
done

# first instance of a shared file is the one that actually gets created,
# force the order so we know what to expect as these dont depend on each other
runroot rpm -U --noorder "${TOPDIR}"/RPMS/noarch/conflictone-1.0-1.noarch.rpm "${TOPDIR}"/RPMS/noarch/conflicttwo-1.0-1.noarch.rpm
runroot rpm -e conflicttwo
runroot rpm -Va --nouser --nogroup
],
[0],
[],
[])
AT_CLEANUP
