# rpmdb.at: test rpmdb access # # Copyright (C) 2007 Ralf Corsépius # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA AT_BANNER([RPM database access]) # ------------------------------ # Attempt to initialize a rpmdb AT_SETUP([rpm --initdb]) AT_KEYWORDS([rpmdb]) AT_CHECK([ RPMDB_INIT ], [0], [ignore], [ignore]) AT_CLEANUP # ------------------------------ # Run rpm -qa on an empty rpmdb AT_SETUP([rpm -qa 1]) AT_KEYWORDS([rpmdb query]) AT_CHECK([ RPMDB_INIT runroot rpm \ -qa ], [0]) AT_CLEANUP # Run rpm -qa on a non-existent rpmdb AT_SETUP([rpm -qa 2]) AT_KEYWORDS([rpmdb query]) AT_CHECK([ RPMTEST_SETUP runroot rpm \ -qa ], [0], [], [ignore]) AT_CLEANUP AT_SETUP([rpm -qa 3]) AT_KEYWORDS([rpmdb query]) RPMDB_INIT AT_CHECK([ runroot rpm -U --nodeps --ignorearch --ignoreos --nosignature \ /data/RPMS/foo-1.0-1.noarch.rpm \ /data/RPMS/hello-2.0-1.x86_64-signed.rpm runroot rpm -qa | sort ], [0], [foo-1.0-1.noarch hello-2.0-1.x86_64 ], []) AT_CHECK([ runroot rpmkeys --import /data/keys/rpm.org-rsa-2048-test.pub runroot rpm -qa | sort ], [0], [foo-1.0-1.noarch gpg-pubkey-1964c5fc-58e63918 hello-2.0-1.x86_64 ], []) AT_CLEANUP # ------------------------------ # Run rpm -q where exists in the db. AT_SETUP([rpm -q foo]) AT_KEYWORDS([rpmdb query]) AT_CHECK([ RPMDB_INIT runroot rpm -i \ /data/RPMS/foo-1.0-1.noarch.rpm runroot rpm -q foo ], [0], [foo-1.0-1.noarch ], []) AT_CLEANUP # ------------------------------ # Run rpm -q - where exists in the db. AT_SETUP([rpm -q foo-]) AT_KEYWORDS([rpmdb query]) AT_CHECK([ RPMDB_INIT runroot rpm -i \ /data/RPMS/foo-1.0-1.noarch.rpm runroot rpm -q foo- ], [1], [package foo- is not installed ], []) AT_CLEANUP AT_SETUP([rpmdb header numbering]) AT_KEYWORDS([rpmdb]) AT_CHECK([ RPMDB_INIT for i in 1 2 3; do runroot rpm -i /data/RPMS/foo-1.0-1.noarch.rpm runroot rpm -q --qf "%{dbinstance} %{name}\n" foo runroot rpm -e foo done ], [0], [1 foo 2 foo 3 foo ], []) AT_CLEANUP AT_SETUP([rpm -q --querybynumber]) AT_KEYWORDS([rpmdb query]) AT_CHECK([ RPMDB_INIT runroot rpm -i \ /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [], []) AT_CHECK([ runroot rpm -q --querybynumber 1 ], [0], [foo-1.0-1.noarch ], []) AT_CHECK([ runroot rpm -q --querybynumber 999 ], [1], [], [error: record 999 could not be read ]) AT_CLEANUP # ------------------------------ # install a noarch package into a local rpmdb without --relocate and --nodeps # * Should always succeed AT_SETUP([rpm -i *.noarch.rpm]) AT_KEYWORDS([rpmdb install]) AT_CHECK([ RPMDB_INIT runroot rpm -i \ /data/RPMS/foo-1.0-1.noarch.rpm ], [0]) AT_CLEANUP # ------------------------------ # reinstall a noarch package (with no files) AT_SETUP([rpm -U --replacepkgs 1]) AT_KEYWORDS([rpmdb install]) AT_CHECK([ RPMDB_INIT tpkg="/data/RPMS/foo-1.0-1.noarch.rpm" runroot rpm -i "${tpkg}" && runroot rpm -U --replacepkgs "${tpkg}" && runroot rpm -qa ], [0], [foo-1.0-1.noarch ], []) AT_CLEANUP # ------------------------------ # reinstall a package with different file policies AT_SETUP([rpm -U --replacepkgs 2]) AT_KEYWORDS([rpmdb install]) AT_CHECK([ RPMDB_INIT tpkg="/data/RPMS/hello-2.0-1.i686.rpm" runroot rpm -U --nodeps --ignorearch "${tpkg}" && runroot rpm -U --nodeps --ignorearch --nodocs --replacepkgs "${tpkg}" && runroot rpm -e hello test -d "${RPMTEST}"/usr/share/doc/hello-2.0 ], [1], [], []) AT_CLEANUP # ------------------------------ # reinstall a package with different file policies AT_SETUP([rpm --reinstall 1]) AT_KEYWORDS([rpmdb install]) AT_CHECK([ RPMDB_INIT tpkg="/data/RPMS/hello-2.0-1.i686.rpm" runroot rpm -U --nodeps --ignorearch "${tpkg}" && runroot rpm --reinstall --nodeps --ignorearch --nodocs "${tpkg}" && runroot rpm -e hello test -d "${RPMTEST}"/usr/share/doc/hello-2.0 ], [1], [], []) AT_CLEANUP # ------------------------------ # install a package into a local rpmdb # * Shall only work with relocation # * Use --ignorearch because we don't know the arch AT_SETUP([rpm -i --relocate=.. *.i386.rpm]) AT_KEYWORDS([rpmdb install]) AT_CHECK([ RPMDB_INIT runroot rpm -i \ --noscripts --nodeps --ignorearch --relocate=/usr=/check \ /data/RPMS/hello-1.0-1.i386.rpm ], [0]) AT_CLEANUP # ------------------------------ # install a package into a local rpmdb # * Shall only work with relocation # * Use --ignorearch because we don't know the arch AT_SETUP([rpm -i --relocate=.. *.ppc64.rpm]) AT_KEYWORDS([rpmdb install]) AT_CHECK([ RPMDB_INIT runroot rpm -i \ --noscripts --nodeps --ignorearch --relocate=/usr=/check \ /data/RPMS/hello-1.0-1.ppc64.rpm ], [0], [ignore], [ignore]) AT_CLEANUP AT_SETUP([rpmdb --rebuilddb]) AT_KEYWORDS([rpmdb]) AT_CHECK([ RPMDB_INIT runroot rpm -U --noscripts --nodeps --ignorearch \ /data/RPMS/hello-1.0-1.i386.rpm runroot rpm -qa --qf "%{nevra} %{dbinstance}\n" runroot rpm -U --noscripts --nodeps --ignorearch \ /data/RPMS/hello-2.0-1.i686.rpm runroot rpm -qa --qf "%{nevra} %{dbinstance}\n" runroot rpmdb --rebuilddb runroot rpm -qa --qf "%{nevra} %{dbinstance}\n" ], [], [hello-1.0-1.i386 1 hello-2.0-1.i686 2 hello-2.0-1.i686 1 ], []) AT_CLEANUP # ------------------------------ # Attempt to initialize, rebuild and verify a db AT_SETUP([rpmdb --rebuilddb and verify empty database]) AT_KEYWORDS([rpmdb]) AT_CHECK([ RPMDB_INIT runroot rpmdb --rebuilddb runroot rpmdb --verifydb ], [0], [], []) AT_CLEANUP # ------------------------------ # Install and verify status AT_SETUP([rpm -U and verify status]) AT_KEYWORDS([install rpmdb query]) AT_CHECK([ RPMDB_INIT runroot rpmbuild --quiet -bb \ --define "pkg status" \ --define "filedata same_stuff" \ /data/SPECS/conflicttest.spec runroot rpm -U /build/RPMS/noarch/conflictstatus-1.0-1.noarch.rpm runroot rpm -qls conflictstatus ], [0], [normal /usr/share/my.version ], []) AT_CLEANUP # ------------------------------ # Install and verify status AT_SETUP([rpm -U with _install_lang and verify status]) AT_KEYWORDS([install rpmdb query]) AT_CHECK([ RPMDB_INIT runroot rpmbuild --quiet -bb \ /data/SPECS/flangtest.spec runroot rpm -U --define "_install_langs de:fi" /build/RPMS/noarch/flangtest-1.0-1.noarch.rpm runroot rpm -qls flangtest ], [0], [normal /usr/share/flangtest/de.txt normal /usr/share/flangtest/empty.txt not installed /usr/share/flangtest/en.txt normal /usr/share/flangtest/fi.txt normal /usr/share/flangtest/none.txt not installed /usr/share/flangtest/pl.txt ], []) AT_CLEANUP # ------------------------------ AT_SETUP([rpmdb query special chars]) AT_KEYWORDS([install rpmdb query]) RPMDB_INIT for v in "1.0+2" "1.0^2" "1.0~2"; do runroot rpmbuild --quiet -bb \ --define "ver $v" \ /data/SPECS/versiontest.spec done AT_CHECK([ RPMDB_INIT runroot rpm -U '/build/RPMS/noarch/versiontest-1.0+2-1.noarch.rpm' runroot rpm -q 'versiontest-1.0+2-1' ], [0], [versiontest-1.0+2-1.noarch ], []) AT_CHECK([ RPMDB_INIT runroot rpm -U '/build/RPMS/noarch/versiontest-1.0^2-1.noarch.rpm' runroot rpm -q 'versiontest-1.0^2-1' ], [0], [versiontest-1.0^2-1.noarch ], []) AT_CHECK([ RPMDB_INIT runroot rpm -U '/build/RPMS/noarch/versiontest-1.0~2-1.noarch.rpm' runroot rpm -q 'versiontest-1.0~2-1' ], [0], [versiontest-1.0~2-1.noarch ], []) AT_CLEANUP