1 # rpmpython.at: test rpm python bindings
2 # TODO: conditionalize on python availability
4 AT_BANNER([Python bindings])
6 RPMPY_TEST([module import],[
7 myprint(rpm.__version__)
12 RPMPY_TEST([macro manipulation],[
14 myprint(rpm.expandMacro('%%{?%s}' % m))
16 mname = '__no_such_macro_yet'
18 rpm.addMacro(mname, '/bin/sh')
20 rpm.addMacro(mname, '/bin/false')
35 RPMPY_TEST([basic rpmio],[
36 msg = 'Killroy was here\n'
38 # TODO: test other compression types too if built in
39 for iot in [ 'fpio', 'fdio', 'ufdio', 'gzdio' ]:
41 fd = rpm.fd(fn, 'w', iot)
43 if pos != -2 and pos != 0:
44 myprint('bad start pos %d' % fd.tell())
45 if fd.write(data) != len(data):
46 myprint('%s write fail' % iot)
48 myprint('bad file name %s' % fd.name)
51 if pos != -2 and pos != len(data):
52 myprint('bad end pos %d' % fd.tell())
53 fd = rpm.fd(fn, 'r', iot)
56 myprint('%s read fail (got %d bytes)' % (iot, len(rdata), rdata))
57 # compressed io types cant seek
61 fd = rpm.fd(fn, 'r', iot)
63 myprint('bad file name %s' % fd.name)
64 rdata = fd.read(len(msg))
66 myprint('%s sized read fail (got %d bytes)\n%s' % (iot, len(rdata), rdata))
70 RPMPY_TEST([spec parse],[
71 # TODO: add a better test spec with sub-packages etc
72 spec = rpm.spec('${RPMDATA}/SPECS/hello.spec')
73 for (name, num, flags) in spec.sources:
74 myprint('src %s %d %d' % (name, num, flags))
75 for pkg in spec.packages:
76 myprint(pkg.header.format('%{nvr}'))
77 myprint(spec.sourceHeader.format('%{nvr}'))
79 [src hello-1.0-modernize.patch 0 2
80 src hello-1.0.tar.gz 0 1
85 RPMPY_TEST([basic header manipulation],[
95 for a in ['name', 'bugurl', '__class__', '__foo__', ]:
99 except AttributeError, exc:
102 [testpkg-5:1.0-1.noarch
107 'rpm.hdr' object has no attribute '__foo__']
110 RPMPY_TEST([invalid header data],[
112 h1['basenames'] = ['bing', 'bang', 'bong']
113 h1['dirnames'] = ['/opt/', '/flopt/']
114 h1['dirindexes'] = [ 1, 0, 3 ]
116 h2['basenames'] = ['bing', 'bang', 'bong']
117 h2['dirnames'] = ['/opt/', '/flopt/']
118 h2['dirindexes'] = [ 0, 0, 1 ]
121 myprint(','.join(h['filenames']))
122 except rpm.error, exc:
126 /opt/bing,/opt/bang,/flopt/bong]
129 RPMPY_TEST([reading a package file],[
131 h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-1.0-1.ppc64.rpm')
137 RPMPY_TEST([add package to transaction],[
139 ts.addInstall('${RPMDATA}/RPMS/foo-1.0-1.noarch.rpm', 'u')
149 RPMPY_TEST([add bogus package to transaction 1],[
154 ts.addInstall(h, 'foo', 'u')
155 except rpm.error, err:
160 [adding package to transaction failed]
163 RPMPY_TEST([add bogus package to transaction 2],[
171 h['basenames'] = ['bing', 'bang', 'bong']
172 h['dirnames'] = ['/opt' '/flopt']
173 h['dirindexes'] = [ 1, 2, 3 ]
175 ts.addInstall(h, 'foo', 'u')
176 except rpm.error, err:
181 [adding package to transaction failed]
184 AT_SETUP([database iterators])
185 AT_KEYWORDS([python rpmdb])
190 --justdb --nodeps --ignorearch --ignoreos \
191 /data/RPMS/foo-1.0-1.noarch.rpm \
192 /data/RPMS/hello-2.0-1.i686.rpm
200 for h in ts.dbMatch('name'):
210 for h in ts.dbMatch('obsoletes'):
219 for h in ts.dbMatch('provides', 'hi'):
228 for h in ts.dbMatch('basenames', '/usr/share/doc/hello-2.0/FAQ'):
236 for di in ts.dbIndex('obsoletes'):
245 for di in ts.dbIndex('provides'):
256 RPMPY_TEST([dependency sets 1],[
258 h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-1.0-1.ppc64.rpm')
259 for dep in rpm.ds(h, 'requires'):
267 R libc.so.6(GLIBC_2.0)
268 R rpmlib(CompressedFileNames) <= 3.0.4-1
269 R rpmlib(PayloadFilesHavePrefix) <= 4.0-1
273 RPMPY_TEST([dependency sets 2],[
275 h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-2.0-1.i686.rpm')
276 ds = rpm.ds(h, 'provides')
277 myprint('%d %d' % (ds.Instance(), ds.Count()))
283 RPMPY_TEST([file info sets 1],[
285 h = ts.hdrFromFdno('${RPMDATA}/RPMS/hello-2.0-1.i686.rpm')
289 myprint('%x: %s' % (fi.FFlags(), fi.FN()))
293 0: /usr/share/doc/hello-2.0
294 2: /usr/share/doc/hello-2.0/COPYING
295 2: /usr/share/doc/hello-2.0/FAQ
296 2: /usr/share/doc/hello-2.0/README