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