1# rpmdb.at: test rpmdb access 2# 3# Copyright (C) 2007 Ralf Corsépius <corsepiu@fedoraproject.org> 4# 5# This program is free software; you can redistribute it and/or modify 6# it under the terms of the GNU General Public License as published by 7# the Free Software Foundation; either version 2 of the License, or 8# (at your option) any later version. 9# 10# This program is distributed in the hope that it will be useful, 11# but WITHOUT ANY WARRANTY; without even the implied warranty of 12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13# GNU General Public License for more details. 14# 15# You should have received a copy of the GNU General Public License 16# along with this program; if not, write to the Free Software 17# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 18 19AT_BANNER([RPM database access]) 20 21# ------------------------------ 22# Attempt to initialize a rpmdb 23AT_SETUP([rpm --initdb]) 24AT_KEYWORDS([rpmdb]) 25AT_CHECK([ 26RPMDB_INIT 27], 28[0], 29[ignore], 30[ignore]) 31AT_CLEANUP 32 33# ------------------------------ 34# Run rpm -qa on an empty rpmdb 35AT_SETUP([rpm -qa]) 36AT_KEYWORDS([rpmdb query]) 37AT_CHECK([ 38RPMDB_INIT 39runroot rpm \ 40 -qa 41], 42[0]) 43AT_CLEANUP 44 45# ------------------------------ 46# Run rpm -q <package> where <package> exists in the db. 47AT_SETUP([rpm -q foo]) 48AT_KEYWORDS([rpmdb query]) 49AT_CHECK([ 50RPMDB_INIT 51 52runroot rpm -i \ 53 /data/RPMS/foo-1.0-1.noarch.rpm 54 55runroot rpm -q foo 56 57], 58[0], 59[foo-1.0-1.noarch 60], 61[]) 62AT_CLEANUP 63 64# ------------------------------ 65# Run rpm -q <package>- where <package> exists in the db. 66AT_SETUP([rpm -q foo-]) 67AT_KEYWORDS([rpmdb query]) 68AT_CHECK([ 69RPMDB_INIT 70 71runroot rpm -i \ 72 /data/RPMS/foo-1.0-1.noarch.rpm 73 74runroot rpm -q foo- 75 76], 77[1], 78[package foo- is not installed 79], 80[]) 81AT_CLEANUP 82 83AT_SETUP([rpmdb header numbering]) 84AT_KEYWORDS([rpmdb]) 85AT_CHECK([ 86RPMDB_INIT 87 88for i in 1 2 3; do 89 runroot rpm -i /data/RPMS/foo-1.0-1.noarch.rpm 90 runroot rpm -q --qf "%{dbinstance} %{name}\n" foo 91 runroot rpm -e foo 92done 93 94], 95[0], 96[1 foo 972 foo 983 foo 99], 100[]) 101AT_CLEANUP 102 103AT_SETUP([rpm -q --querybynumber]) 104AT_KEYWORDS([rpmdb query]) 105AT_CHECK([ 106RPMDB_INIT 107 108runroot rpm -i \ 109 /data/RPMS/foo-1.0-1.noarch.rpm 110 111], 112[0], 113[], 114[]) 115 116AT_CHECK([ 117runroot rpm -q --querybynumber 1 118], 119[0], 120[foo-1.0-1.noarch 121], 122[]) 123 124AT_CHECK([ 125runroot rpm -q --querybynumber 999 126], 127[1], 128[], 129[error: record 999 could not be read 130]) 131AT_CLEANUP 132 133# ------------------------------ 134# install a noarch package into a local rpmdb without --relocate and --nodeps 135# * Should always succeed 136AT_SETUP([rpm -i *.noarch.rpm]) 137AT_KEYWORDS([rpmdb install]) 138 139AT_CHECK([ 140RPMDB_INIT 141 142runroot rpm -i \ 143 /data/RPMS/foo-1.0-1.noarch.rpm 144], 145[0]) 146 147AT_CLEANUP 148 149# ------------------------------ 150# reinstall a noarch package (with no files) 151AT_SETUP([rpm -U --replacepkgs 1]) 152AT_KEYWORDS([rpmdb install]) 153 154AT_CHECK([ 155RPMDB_INIT 156 157tpkg="/data/RPMS/foo-1.0-1.noarch.rpm" 158 159runroot rpm -i "${tpkg}" && 160 runroot rpm -U --replacepkgs "${tpkg}" && 161 runroot rpm -qa 162], 163[0], 164[foo-1.0-1.noarch 165], 166[]) 167 168AT_CLEANUP 169 170# ------------------------------ 171# reinstall a package with different file policies 172AT_SETUP([rpm -U --replacepkgs 2]) 173AT_KEYWORDS([rpmdb install]) 174 175AT_CHECK([ 176RPMDB_INIT 177 178tpkg="/data/RPMS/hello-2.0-1.i686.rpm" 179 180runroot rpm -U --nodeps --ignorearch "${tpkg}" && 181 runroot rpm -U --nodeps --ignorearch --nodocs --replacepkgs "${tpkg}" && 182 runroot rpm -e hello 183test -d "${RPMTEST}"/usr/share/doc/hello-2.0 184], 185[1], 186[], 187[]) 188AT_CLEANUP 189 190# ------------------------------ 191# reinstall a package with different file policies 192AT_SETUP([rpm --reinstall 1]) 193AT_KEYWORDS([rpmdb install]) 194 195AT_CHECK([ 196RPMDB_INIT 197 198tpkg="/data/RPMS/hello-2.0-1.i686.rpm" 199 200runroot rpm -U --nodeps --ignorearch "${tpkg}" && 201 runroot rpm --reinstall --nodeps --ignorearch --nodocs "${tpkg}" && 202 runroot rpm -e hello 203test -d "${RPMTEST}"/usr/share/doc/hello-2.0 204], 205[1], 206[], 207[]) 208AT_CLEANUP 209 210# ------------------------------ 211# install a package into a local rpmdb 212# * Shall only work with relocation 213# * Use --ignorearch because we don't know the arch 214AT_SETUP([rpm -i --relocate=.. *.i386.rpm]) 215AT_KEYWORDS([rpmdb install]) 216AT_CHECK([ 217RPMDB_INIT 218 219runroot rpm -i \ 220 --noscripts --nodeps --ignorearch --relocate=/usr=/check \ 221 /data/RPMS/hello-1.0-1.i386.rpm 222], 223[0]) 224 225AT_CLEANUP 226 227 228# ------------------------------ 229# install a package into a local rpmdb 230# * Shall only work with relocation 231# * Use --ignorearch because we don't know the arch 232AT_SETUP([rpm -i --relocate=.. *.ppc64.rpm]) 233AT_KEYWORDS([rpmdb install]) 234AT_CHECK([ 235RPMDB_INIT 236 237runroot rpm -i \ 238 --noscripts --nodeps --ignorearch --relocate=/usr=/check \ 239 /data/RPMS/hello-1.0-1.ppc64.rpm 240], 241[0], 242[ignore], 243[ignore]) 244 245AT_CLEANUP 246 247AT_SETUP([rpmdb --rebuilddb]) 248AT_KEYWORDS([rpmdb]) 249AT_CHECK([ 250RPMDB_INIT 251 252runroot rpm -U --noscripts --nodeps --ignorearch \ 253 /data/RPMS/hello-1.0-1.i386.rpm 254runroot rpm -qa --qf "%{nevra} %{dbinstance}\n" 255runroot rpm -U --noscripts --nodeps --ignorearch \ 256 /data/RPMS/hello-2.0-1.i686.rpm 257runroot rpm -qa --qf "%{nevra} %{dbinstance}\n" 258runroot rpmdb --rebuilddb 259runroot rpm -qa --qf "%{nevra} %{dbinstance}\n" 260], 261[], 262[hello-1.0-1.i386 1 263hello-2.0-1.i686 2 264hello-2.0-1.i686 1 265], 266[]) 267AT_CLEANUP 268 269# ------------------------------ 270# Attempt to initialize, rebuild and verify a db 271AT_SETUP([rpmdb --rebuilddb and verify empty database]) 272AT_KEYWORDS([rpmdb]) 273AT_CHECK([ 274RPMDB_INIT 275runroot rpmdb --rebuilddb 276runroot rpmdb --verifydb 277], 278[0], 279[], 280[]) 281AT_CLEANUP 282 283# ------------------------------ 284# Install and verify status 285AT_SETUP([rpm -U and verify status]) 286AT_KEYWORDS([install rpmdb query]) 287AT_CHECK([ 288RPMDB_INIT 289 290runroot rpmbuild --quiet -bb \ 291 --define "pkg status" \ 292 --define "filedata same_stuff" \ 293 /data/SPECS/conflicttest.spec 294 295runroot rpm -U /build/RPMS/noarch/conflictstatus-1.0-1.noarch.rpm 296runroot rpm -qls conflictstatus 297], 298[0], 299[normal /usr/share/my.version 300], 301[]) 302AT_CLEANUP 303 304# ------------------------------ 305# Install and verify status 306AT_SETUP([rpm -U with _install_lang and verify status]) 307AT_KEYWORDS([install rpmdb query]) 308AT_CHECK([ 309RPMDB_INIT 310 311runroot rpmbuild --quiet -bb \ 312 /data/SPECS/flangtest.spec 313 314runroot rpm -U --define "_install_langs de:fi" /build/RPMS/noarch/flangtest-1.0-1.noarch.rpm 315runroot rpm -qls flangtest 316], 317[0], 318[normal /usr/share/flangtest/de.txt 319normal /usr/share/flangtest/empty.txt 320not installed /usr/share/flangtest/en.txt 321normal /usr/share/flangtest/fi.txt 322normal /usr/share/flangtest/none.txt 323not installed /usr/share/flangtest/pl.txt 324], 325[]) 326AT_CLEANUP 327 328# ------------------------------ 329# Install and verify files exist on disk 330AT_SETUP([rpm -U and verify files on disk]) 331AT_KEYWORDS([install rpmdb]) 332AT_CHECK([ 333RPMDB_INIT 334rm -rf "${RPMTEST}"/opt/* 335 336runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec 337runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm 338find "${RPMTEST}"/opt | wc -l 339], 340[0], 341[6 342], 343[]) 344AT_CLEANUP 345 346# ------------------------------ 347# Install, erase and oerify files removed from disk 348# Note /opt is not owned by the pkg so it gets left behind 349AT_SETUP([rpm -e and verify files removed]) 350AT_KEYWORDS([install rpmdb]) 351AT_CHECK([ 352RPMDB_INIT 353rm -rf "${RPMTEST}"/opt/* 354 355runroot rpmbuild --quiet -bb /data/SPECS/selfconflict.spec 356runroot rpm -U /build/RPMS/noarch/selfconflict-1.0-1.noarch.rpm 357runroot rpm -e selfconflict 358find "${RPMTEST}"/opt | wc -l 359], 360[0], 361[1 362], 363[]) 364AT_CLEANUP 365