# rpmquery.at: test rpmquery # # 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 queries]) # ------------------------------ AT_SETUP([rpm --qf -p *.i386.rpm]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ -q --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" \ -p /data/RPMS/hello-1.0-1.i386.rpm ], [0], [hello-1.0-1.i386 ], [ignore]) AT_CLEANUP # ------------------------------ AT_SETUP([rpm --qf -p *.src.rpm]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ -q --qf "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" \ -p /data/SRPMS/hello-1.0-1.src.rpm ], [0], [hello-1.0-1.i386 ], [ignore]) AT_CLEANUP # ------------------------------ AT_SETUP([rpm -ql -p *.src.rpm]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ -ql \ -p /data/SRPMS/hello-1.0-1.src.rpm ], [0], [hello-1.0.tar.gz hello.spec ], [ignore]) AT_CLEANUP # ------------------------------ AT_SETUP([rpmspec -q]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpmspec \ -q --qf "%{name}" /data/SPECS/hello.spec ], [0], [hello], []) AT_CLEANUP # ------------------------------ AT_SETUP([rpm -ql -p *.i386.rpm]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ -ql \ -p /data/RPMS/hello-1.0-1.i386.rpm ], [0], [/usr/local/bin/hello /usr/share/doc/hello-1.0 /usr/share/doc/hello-1.0/FAQ ], [ignore]) AT_CLEANUP # ------------------------------ # Test query on manifest AT_SETUP([rpm -qp ]) AT_KEYWORDS([query]) AT_CHECK([ cat << EOF > ${RPMTEST}/query.mft /data/RPMS/hello-1.0-1.i386.rpm /data/RPMS/hello-1.0-1.ppc64.rpm /data/RPMS/foo-1.0-1.noarch.rpm EOF runroot rpm -qp --qf "%{nvr}\n" /query.mft ], [0], [hello-1.0-1 hello-1.0-1 foo-1.0-1 ], []) AT_CLEANUP # ------------------------------ # Try to check "scripts" # * Gets rpmpopt-$(VERSION) involved AT_SETUP([rpm -q --scripts -p *.i386.rpm]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ -q --scripts \ -p /data/RPMS/hello-1.0-1.i386.rpm ], [0], [preinstall program: /bin/sh postinstall program: /bin/sh preuninstall program: /bin/sh postuninstall program: /bin/sh ], [ignore]) 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 -q on installed package]) AT_KEYWORDS([rpmdb install query]) AT_CHECK([ RPMDB_CLEAR RPMDB_INIT runroot rpm \ --noscripts --nodeps --ignorearch --relocate=/usr=/check \ -i /data/RPMS/hello-1.0-1.ppc64.rpm ], [0]) # check common NVRA combinations AT_CHECK([ runroot rpm \ -q hello hello-1.0 hello-1.0-1 \ hello.ppc64 hello-1.0.ppc64 hello-1.0-1.ppc64 ], [0], [hello-1.0-1.ppc64 hello-1.0-1.ppc64 hello-1.0-1.ppc64 hello-1.0-1.ppc64 hello-1.0-1.ppc64 hello-1.0-1.ppc64 ], [ignore]) AT_CHECK([ runroot rpm \ -ql hello ], [0], [/check/local/bin/hello /check/share/doc/hello-1.0 /check/share/doc/hello-1.0/FAQ ], [ignore]) AT_CLEANUP # ------------------------------ AT_SETUP([integer array query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%{filemodes}\n]]" \ -qp /data/RPMS/hello-1.0-1.i386.rpm ], [0], [33257 16877 33188 ], []) AT_CLEANUP # ------------------------------ AT_SETUP([formatted filesbypkg query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%-10{=NAME} %{FILENAMES}\n]]" \ -qp /data/RPMS/hello-1.0-1.i386.rpm ], [0], [hello /usr/local/bin/hello hello /usr/share/doc/hello-1.0 hello /usr/share/doc/hello-1.0/FAQ ], []) AT_CLEANUP # ------------------------------ AT_SETUP([hex formatted integer array extension query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%5{longfilesizes:hex}\n]]" \ -qp /data/RPMS/hello-1.0-1.i386.rpm ], [0], [ b40 1000 24 ], []) AT_CLEANUP # ------------------------------ AT_SETUP([base64 extension query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="%{pkgid:base64}" \ -qp /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [qt8W635v5FKy1pILrW+0uw== ], []) AT_CLEANUP AT_SETUP([pgpsig extension query]) AT_KEYWORDS([query signature]) AT_CHECK([ runroot rpm \ --queryformat="%{rsaheader:pgpsig}" \ -qp /data/RPMS/hello-2.0-1.x86_64-signed.rpm ], [0], [RSA/SHA256, Thu Apr 6 13:02:33 2017, Key ID 4344591e1964c5fc], [warning: /data/RPMS/hello-2.0-1.x86_64-signed.rpm: Header V4 RSA/SHA256 Signature, key ID 1964c5fc: NOKEY ]) AT_CLEANUP # ------------------------------ AT_SETUP([integer array perms format query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%{filemodes:perms}\n]]" \ -qp /data/RPMS/hello-1.0-1.i386.rpm ], [0], [-rwxr-x--x drwxr-xr-x -rw-r--r-- ], []) AT_CLEANUP # ------------------------------ AT_SETUP([string array query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%{basenames} ]]" \ -qp /data/RPMS/hello-1.0-1.i386.rpm ], [0], [hello hello-1.0 FAQ ], []) AT_CLEANUP # ------------------------------ AT_SETUP([empty string array query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%{basenames}]]" \ -qp /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [], []) AT_CLEANUP # ------------------------------ AT_SETUP([empty string array extension array format]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%{filenames}]]" \ -qp /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [], []) AT_CLEANUP # ------------------------------ AT_SETUP([empty string array extension query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="%{filenames}" \ -qp /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [(none)], []) AT_CLEANUP # ------------------------------ AT_SETUP([different sizes arrays query 1]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%{basenames} %{changelogname}]\n]" \ -qp /data/RPMS/hello-1.0-1.i386.rpm ], [0], [], [error: incorrect format: array iterator used with different sized arrays ]) AT_CLEANUP # ------------------------------ # This is succeeds because there happens to be exactly one changelog entry # so the size matches with name. AT_SETUP([different sizes arrays query 2]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%{name} %{changelogtime}]\n]" \ -qp /data/RPMS/hello-1.0-1.i386.rpm ], [0], [hello 908877600 ], []) AT_CLEANUP # ------------------------------ AT_SETUP([different sizes arrays query 3]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%{name} %{basenames}]\n]" \ -qp /data/RPMS/hello-1.0-1.i386.rpm ], [0], [], [error: incorrect format: array iterator used with different sized arrays ]) AT_CLEANUP # ------------------------------ AT_SETUP([different sizes arrays query 4]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="[[%{=name} %{basenames}\n]]" \ -qp /data/RPMS/hello-1.0-1.i386.rpm ], [0], [hello hello hello hello-1.0 hello FAQ ], []) AT_CLEANUP # ------------------------------ AT_SETUP([non-existent string tag]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="%{vendor}" \ -qp /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [(none)], []) AT_CLEANUP # ------------------------------ AT_SETUP([non-existent integer tag query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="%{installcolor}" \ -qp /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [(none)], []) AT_CLEANUP # ------------------------------ AT_SETUP([conditional queryformat]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="%|name?{%{name}}:{no}| %|installtime?{%{installtime}}:{(not installed)}|" \ -qp /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [foo (not installed)], []) AT_CLEANUP # ------------------------------ AT_SETUP([invalid tag query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="%{notag}" \ -qp /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [], [error: incorrect format: unknown tag: "notag" ]) AT_CLEANUP # ------------------------------ AT_SETUP([invalid data for format query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="%{name:depflags}" \ -qp /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [(not a number)], []) AT_CLEANUP # ------------------------------ AT_SETUP([invalid format width query]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm \ --queryformat="%ss{size}" \ -qp /data/RPMS/foo-1.0-1.noarch.rpm ], [0], [], [error: incorrect format: invalid field width ]) AT_CLEANUP AT_SETUP([xml format]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpm -qp --xml data/RPMS/hello-2.0-1.x86_64.rpm ], [0], [ C 5411 E3yh2LNcygKhhUujAcVDLg== 5cd9874c510b67b44483f9e382a1649ef7743bac ef920781af3bf072ae9888eec3de1c589143101dff9cc0b561468d395fb766d9 hello 2.0 1 hello -- hello, world rpm Simple rpm demonstration. 1227355200 localhost 7243 GPL Testing linux x86_64 7120 4096 48 36 39 33257 16877 33188 33188 33188 0 0 0 0 0 1489670606 1489670606 908894882 908895030 908884468 c89fa87aeb1143969c0b6be9334b21d932f77f74e8f60120b5de316406369cf0 fac3b28492ecdc16da172a6f1a432ceed356ca4d9248157b2a962b395e37b3b0 678b87e217a415f05e43460e2c7b668245b412e2b4f18a75aa7399d9774ed0b4 d63fdc6c986106f57230f217d36b2395d83ecf491d2b7187af714dc8db9629e9 0 0 2 2 2 root root root root root root root root root root hello-2.0-1.src.rpm 4294967295 0 4294967295 4294967295 4294967295 8060 hello hello(x86-64) 16384 16384 16777226 16777226 16777226 16384 libc.so.6()(64bit) libc.so.6(GLIBC_2.2.5)(64bit) rpmlib(CompressedFileNames) rpmlib(FileDigests) rpmlib(PayloadFilesHavePrefix) rtld(GNU_HASH) 3.0.4-1 4.6.0-1 4.0-1 4.13.90 1227355200 908884800 Panu Matilainen <pmatilai@redhat.com> Jeff Johnson <jbj@redhat.com> - updated version - create. 1 1 1 1 1 1 2 3 4 5 /usr 8 8 2.0-1 2.0-1 0 1 2 2 2 hello hello-2.0 COPYING FAQ README /usr/bin/ /usr/share/doc/ /usr/share/doc/hello-2.0/ -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic cpio gzip 9 x86_64-redhat-linux-gnu 2 0 0 0 0 0 1 2 2 2 ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[[sha1]]=775fdcb927e4300adbe83cfacec3cfeb1f63fe17, stripped directory ASCII text 0 0 0 0 0 3 0 0 0 0 1375731713 1375731712 1375731717 8 utf-8 84a7338287bf19715c4eed0243f5cdb447eeb0ade37b2af718d4060aefca2f7c 8 ], []) AT_CLEANUP AT_SETUP([query file attribute filtering]) AT_KEYWORDS([query]) AT_CHECK([ runroot rpmbuild -bb --quiet \ /data/SPECS/vattrtest.spec pkg="/build/RPMS/noarch/vattrtest-1.0-1.noarch.rpm" cmd="rpm -qpl" for filter in --noconfig --noghost --noartifact -A -c -d -L; do echo ${filter} runroot ${cmd} ${filter} ${pkg} done ], [0], [--noconfig /opt/vattrtest /opt/vattrtest/a /opt/vattrtest/d /opt/vattrtest/g /opt/vattrtest/l /opt/vattrtest/m /opt/vattrtest/r --noghost /opt/vattrtest /opt/vattrtest/a /opt/vattrtest/c /opt/vattrtest/cn /opt/vattrtest/d /opt/vattrtest/l /opt/vattrtest/m /opt/vattrtest/r --noartifact /opt/vattrtest /opt/vattrtest/c /opt/vattrtest/cn /opt/vattrtest/d /opt/vattrtest/g /opt/vattrtest/l /opt/vattrtest/m /opt/vattrtest/r -A /opt/vattrtest/a -c /opt/vattrtest/c /opt/vattrtest/cn -d /opt/vattrtest/d -L /opt/vattrtest/l ], []) AT_CLEANUP