extfs: rpm: add tests.

Signed-off-by: Mooffie <mooffie@gmail.com>
This commit is contained in:
Mooffie 2017-01-02 06:01:36 +02:00
parent e3cef7576b
commit 4b8785ead6
6 changed files with 385 additions and 0 deletions

View File

@ -38,6 +38,11 @@ data_files_to_distribute = \
data/lslR.3.spaces-iso-noslash.input \
data/lslR.3.spaces-iso-noslash.output \
data/lslR.README \
data/rpm.README \
data/rpm.env_vars \
data/rpm.input \
data/rpm.output \
data/rpm.rewrite.sh \
data/u7z.README \
data/u7z.complex.env_vars \
data/u7z.complex.input \

View File

@ -0,0 +1,14 @@
The *.input files for the rpm helper are what we call "tags files".
They're generated by rpm2tags.
The rpm package chosen was glib2-2.46.2-4.el7.i686.rpm (downloadable from
rpmfind.net), as it has scriptlets that demonstrate the INFO/SCRIPTS dir.
--
The way this test works is a bit unconventional:
We aren't overriding one or two variables in the helper but, instead,
inject a code snippet into it (see 'rpm.rewrite.sh'). This lets us
override a couple of functions to imitate the 'rpm' binary.

View File

@ -0,0 +1,3 @@
MC_TEST_RPM_REWRITE="$MC_TEST_EXTFS_DATA_DIR/rpm.rewrite.sh"
MCFASTRPM= # disable "fast mode".

View File

@ -0,0 +1,264 @@
# -*- mode: perl -*-
# vim: filetype=perl
#
# This "tags file" was created by running the following command:
#
# $ perl rpm2tags.pl glib2-2.46.2-4.el7.i686.rpm
#
# This file is used in our tests instead of the corresponding RPM file.
# This lets us run the tests on systems where 'rpm' is not installed.
$tags = {
'CONFLICTFLAGS:depflags' => '(none)',
'P' => 'glib2',
'FILELANGS' => '',
'VERSION' => '2.46.2',
'CHANGELOGTEXT' => '- Backport a patch to fix a segfault in file monitor code
- Resolves: #1375753',
'POSTIN' => '/sbin/ldconfig
gio-querymodules-32 /usr/lib/gio/modules',
'FILECONTEXTS' => '(none)',
'TRIGGERTYPE' => '(none)',
'GROUP' => 'System Environment/Libraries',
'DESCRIPTION' => 'GLib is the low-level core library that forms the basis for projects
such as GTK+ and GNOME. It provides data structure handling for C,
portability wrappers, and interfaces for such runtime functionality
as an event loop, threads, dynamic loading, and an object system.',
'NEVR' => 'glib2-2.46.2-4.el7',
'NOPATCH' => '(none)',
'SOURCEPACKAGE' => '(none)',
'VERBOSE' => '(none)',
'REQUIRENEVRS' => '/bin/sh',
'TRIGGERSCRIPTFLAGS' => '(none)',
'VENDOR' => 'CentOS',
'DSAHEADER' => '(none)',
'PRETRANSPROG' => '(none)',
'PROVIDES' => 'glib2',
'EXCLUSIVEOS' => '(none)',
'NVRA' => 'glib2-2.46.2-4.el7.i686',
'URL' => 'http://www.gtk.org',
'DISTRIBUTION' => '(none)',
'OBSOLETENEVRS' => '(none)',
'O' => '(none)',
'SIGPGP' => '8902150305005831e31824c6a8a7f4a80eb50108452c0ff9011ff528bd335c28b6dab1b1b783cde246b3ca8df41216124a66c86bb13d864fb68fcaffaff69a7c0638c20445cef0d8712b66430ef959b823b7c48253b46e9646fc15bb07024abcd160df2c42be0a3aed81b79ebce4779eee5510148683e10ae0da26959abe5c0df821b18a64a9d0f0c87e4be02c7644999c4dc735aaf36f88e652b12fe786a2fc22e9e9ecee1156681d8ac6f5b088b9593ea5fd0c1c62e14b5b1863d019ab04ab6008ab736e9643bd45fcab373a407b669c4efd4973d36b59411146bf21f1b1caca15ea36616ee510e0a57e5ac412fbc5094637f9bdb3bdb07cf0a5a84a560aeed5b92e99ef796025fdfe25a1dd1ea58e24f7218d2b2a76286c4859feb02c6b1221055a3ba4f61dd997c9a240a7127439c5184f18432da6c9588e5166a665d10d78673067fe006411171eee32e28ff548c1500376b4851691925f0d5fa855c62312d71c8444077a397cfda03e4e026ba065fef29bf5922fc68522e4a394e1e851049b965c9d1a680df8c94c41b703667ff84db43e45a1508916d76ac45928d00fe60643366484d5215cb9e08c4737f0c9d27c3f812fecd72aef6195e07badeab549f1f57adcd860e3e3ea7006faa32d63b9dc65d46a06c0f9ce6d15541e612b76bc2d61d154c18700fe92be41e78dff5679f7cfb69fb430edf873dd8a7adf9e4214ff6d09d814314be641408c073d3a17da631463a8ea6522',
'PREINPROG' => '(none)',
'ENHANCENAME' => '(none)',
'INSTALLCOLOR' => '(none)',
'OLDENHANCESNAME' => '(none)',
'OBSOLETES' => '(none)',
'ARCH' => 'i686',
'RECOMMENDVERSION' => '(none)',
'OBSOLETEFLAGS:depflags' => '(none)',
'POSTUNPROG' => '/bin/sh',
'POLICYTYPES' => '(none)',
'RECOMMENDFLAGS' => '(none)',
'CLASSDICT' => 'ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1171bf18928201e1c6ec8e190e64303762a1f4d9, stripped',
'CONFLICTS' => '(none)',
'NOSOURCE' => '(none)',
'EXCLUDEOS' => '(none)',
'FILEMTIMES' => '1478898094',
'DBINSTANCE' => '0',
'ORIGBASENAMES' => '(none)',
'ENHANCEVERSION' => '(none)',
'FILEFLAGS' => '0',
'FSCONTEXTS' => '(none)',
'PROVIDEVERSION' => '2.46.2-4.el7',
'FILEMD5S' => 'f64bee32e178161f3340ebd97e83193f9302ef5dc22a83608e3923bf450c847d',
'BASENAMES' => 'gapplication',
'POLICYTYPESINDEXES' => '(none)',
'PROVIDENEVRS' => 'glib2 = 2.46.2-4.el7',
'OS' => 'linux',
'POSTINPROG' => '/bin/sh',
'OLDSUGGESTSVERSION' => '(none)',
'INSTALLTID' => '(none)',
'PROVIDEFLAGS:depflags' => '=',
'PREUNFLAGS' => '(none)',
'OLDFILENAMES' => '(none)',
'BUILDARCHS' => '(none)',
'ORIGDIRNAMES' => '(none)',
'SUGGESTFLAGS' => '(none)',
'INSTFILENAMES' => '(none)',
'FILEUSERNAME' => 'root',
'CONFLICTNEVRS' => '(none)',
'PROVIDENAME' => 'glib2',
'LICENSE' => 'LGPLv2+',
'OLDSUGGESTS' => '(none)',
'RECOMMENDNAME' => '(none)',
'PATCHESVERSION' => '(none)',
'DISTTAG' => '(none)',
'FILEDIGESTS' => 'f64bee32e178161f3340ebd97e83193f9302ef5dc22a83608e3923bf450c847d',
'EXCLUSIVEARCH' => '(none)',
'V' => '2.46.2',
'OLDENHANCESVERSION' => '(none)',
'POSTTRANSFLAGS' => '(none)',
'SUPPLEMENTNEVRS' => '(none)',
'XPM' => '(none)',
'PREUN' => '(none)',
'ORDERFLAGS' => '(none)',
'ORIGFILENAMES' => '(none)',
'GIF' => '(none)',
'ORIGDIRINDEXES' => '(none)',
'SOURCERPM' => 'glib2-2.46.2-4.el7.src.rpm',
'OBSOLETEFLAGS' => '(none)',
'PRETRANSFLAGS' => '(none)',
'POSTUNFLAGS' => '(none)',
'ICON' => '(none)',
'PREINFLAGS' => '(none)',
'PREIN' => '(none)',
'DIRINDEXES' => '0',
'HEADERI18NTABLE' => 'C',
'POSTTRANS' => '(none)',
'BUILDTIME:date' => 'Fri Nov 11 23:01:44 2016',
'ORDERVERSION' => '(none)',
'SUPPLEMENTNAME' => '(none)',
'CHANGELOGTIME' => '1473854400',
'FILECAPS' => '(none)',
'RECOMMENDS' => '(none)',
'PAYLOADFORMAT' => 'cpio',
'RPMVERSION' => '4.11.3',
'SIZE' => '11147850',
'FILEINODES' => '1',
'SUPPLEMENTVERSION' => '(none)',
'N' => 'glib2',
'PROVIDEFLAGS' => '8',
'FILECOLORS' => '1',
'REMOVETID' => '(none)',
'INSTPREFIXES' => '(none)',
'PATCHESFLAGS' => '(none)',
'HDRID' => '60af3b40a992bea6f874a1ebde5a2abecfe729ab',
'OBSOLETEVERSION' => '(none)',
'EXCLUDEARCH' => '(none)',
'ENHANCEFLAGS' => '(none)',
'REQUIRENAME' => '/bin/sh',
'LONGSIGSIZE' => '2374912',
'C' => '(none)',
'TRIGGERINDEX' => '(none)',
'SOURCE' => '(none)',
'SUGGESTNAME' => '(none)',
'BUILDHOST' => 'c1bm.rdu2.centos.org',
'VERIFYSCRIPT' => '(none)',
'HEADERIMAGE' => '(none)',
'POSTTRANSPROG' => '(none)',
'SUPPLEMENTS' => '(none)',
'FILELINKTOS' => '',
'EVR' => '2.46.2-4.el7',
'SUPPLEMENTFLAGS' => '(none)',
'VCS' => '(none)',
'SIGSIZE' => '2374912',
'NAME' => 'glib2',
'SIGGPG' => '(none)',
'RECOMMENDNEVRS' => '(none)',
'NVR' => 'glib2-2.46.2-4.el7',
'TRIGGERCONDS' => '(none)',
'OLDENHANCES' => '(none)',
'VERIFYSCRIPTFLAGS' => '(none)',
'EPOCH' => '(none)',
'PLATFORM' => 'i686-redhat-linux-gnu',
'REQUIREFLAGS:depflags' => '',
'CONFLICTFLAGS' => '(none)',
'POLICYFLAGS' => '(none)',
'SOURCEPKGID' => '(none)',
'CHANGELOGNAME' => 'Kalev Lember <klember@redhat.com> - 2.46.2-4',
'BUGURL' => '(none)',
'POSTINFLAGS' => '(none)',
'RECONTEXTS' => '(none)',
'INSTALLTIME' => '(none)',
'HEADERCOLOR' => '1',
'PATCH' => '(none)',
'TRIGGERFLAGS' => '(none)',
'PAYLOADFLAGS' => '2',
'REQUIREVERSION' => '',
'DEPENDSDICT' => '1375731723',
'POLICIES' => '(none)',
'ORDERNAME' => '(none)',
'_INFO' => 'Name : glib2
Version : 2.46.2
Release : 4.el7
Architecture: i686
Install Date: (not installed)
Group : System Environment/Libraries
Size : 11147850
License : LGPLv2+
Signature : RSA/SHA256, Sun Nov 20 19:53:28 2016, Key ID 24c6a8a7f4a80eb5
Source RPM : glib2-2.46.2-4.el7.src.rpm
Build Date : Fri Nov 11 23:01:44 2016
Build Host : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.gtk.org
Summary : A library of handy utility functions
Description :
GLib is the low-level core library that forms the basis for projects
such as GTK+ and GNOME. It provides data structure handling for C,
portability wrappers, and interfaces for such runtime functionality
as an event loop, threads, dynamic loading, and an object system.
',
'LONGARCHIVESIZE' => '11168196',
'OLDSUGGESTSFLAGS' => '(none)',
'RELEASE' => '4.el7',
'FILENLINKS' => '1',
'NEVRA' => 'glib2-2.46.2-4.el7.i686',
'POSTUN' => '/sbin/ldconfig
[ ! -x /usr/bin/gio-querymodules-32 ] || \\
gio-querymodules-32 /usr/lib/gio/modules',
'BUILDTIME' => '1478898104',
'LONGFILESIZES' => '14936',
'OLDSUGGESTSNAME' => '(none)',
'POLICYNAMES' => '(none)',
'PREFIXES' => '(none)',
'TRIGGERSCRIPTS' => '(none)',
'PUBKEYS' => '(none)',
'SHA1HEADER' => '60af3b40a992bea6f874a1ebde5a2abecfe729ab',
'SUGGESTVERSION' => '(none)',
'E' => '(none)',
'COOKIE' => '(none)',
'FILEDIGESTALGO' => '8',
'PRETRANS' => '(none)',
'FILEGROUPNAME' => 'root',
'DIRNAMES' => '/usr/bin/',
'R' => '4.el7',
'CONFLICTVERSION' => '(none)',
'FILEMODES' => '33261',
'TRIGGERVERSION' => '(none)',
'HEADERREGIONS' => '(none)',
'SUGGESTS' => '(none)',
'OLDENHANCESFLAGS' => '(none)',
'TRIGGERSCRIPTPROG' => '(none)',
'FILEVERIFYFLAGS' => '4294967295',
'FILEDEPENDSN' => '15',
'FILEREQUIRE' => 'libc.so.6(GLIBC_2.2) libc.so.6(GLIBC_2.4) libc.so.6(GLIBC_2.0) libgio-2.0.so.0 libgobject-2.0.so.0 libgmodule-2.0.so.0 libz.so.1 libselinux.so.1 libresolv.so.2 libffi.so.6 libdl.so.2 libglib-2.0.so.0 libpthread.so.0 libc.so.6 rtld(GNU_HASH)',
'FILERDEVS' => '0',
'PKGID' => 'd8300bd6ae89fd3d471b823d4da55e5e',
'FILEDEVICES' => '1',
'FILENAMES' => '/usr/bin/gapplication',
'ENHANCES' => '(none)',
'EPOCHNUM' => '0',
'VERIFYSCRIPTPROG' => '(none)',
'PREUNPROG' => '(none)',
'CONFLICTNAME' => '(none)',
'FILESIZES' => '14936',
'FILEPROVIDE' => '',
'ARCHIVESIZE' => '11168196',
'RSAHEADER' => '8902150305005831e31824c6a8a7f4a80eb50108cdf90ffc09656e816376ef5f32f146d136999f958f3e1338f21e0cac90bac97795d92c29301478a97f8b72afee0505896fa7c31195612542ba972da405323e3ec910ecc45350459220f39f2437a9ccbc3f9052b3d042d0e4a6d687f9be827b9c766d7fc680b2d99aebafe5134a54e64f0452be09b5592360d940ed3f3f3b14de7b0b124f510cfbdbd118e1638ee280edcbf6a9f916925f1b0bda0980935aedab1f9bfc342dceae437fa14736cdff2fe330ad37ab2719f6a3de84aaf3982a575a6f4980bc8a8e10a7ba51f53ed967a6c99638565147bbb0b2427c176ffbb8be5774b45f79388ff1407e6976608c3592784b971b791f0eca73a8a2ddafa70f656e3e565c9523aa1f4e78a56acdf39a91ebd90a481c0f02186f4bca965ecf889d075a87922830ed2c701d39ce627c362b222ed153c07b532a875744e1c54e9245c1044cf93520b208384d15413aba6b3425c457781862efd215a24c0c37c32c3ab29af785adfe418d5e86af53662163a9fed16dbac3ff4704120af67e0eb584a4f8766e510e6366eb5fcce0938253962b03972eca392e61f0f979f0dd7a554273d5ca463933033d67be82c7b31bcc2ef5c477907d3734aa596aefb7988a259d48d160413590243b56850eeab96ffa76d06b86faa0b6c9fd6fe43e902669444284e1947aa652673eb58214db9d19d0447de5bd036a45e9746ab4039f4dab7c73481a1bfb5a4d',
'FILESTATES' => '(none)',
'PACKAGER' => 'CentOS BuildSystem <http://bugs.centos.org>',
'SUMMARY' => 'A library of handy utility functions',
'OPTFLAGS' => '-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m32 -march=x86-64 -mtune=generic -mfpmath=sse -fasynchronous-unwind-tables',
'OBSOLETENAME' => '(none)',
'REQUIRES' => '/bin/sh',
'FILECLASS' => 'ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=1171bf18928201e1c6ec8e190e64303762a1f4d9, stripped',
'PAYLOADCOMPRESSOR' => 'xz',
'HEADERSIGNATURES' => '(none)',
'PATCHESNAME' => '(none)',
'CHANGELOGTIME:date' => 'Wed Sep 14 15:00:00 2016',
'ENHANCENEVRS' => '(none)',
'SIGMD5' => 'd8300bd6ae89fd3d471b823d4da55e5e',
'FILEDEPENDSX' => '0',
'DISTURL' => '(none)',
'REQUIREFLAGS' => '1280',
'TRIGGERNAME' => '(none)',
'LONGSIZE' => '11147850',
'SUGGESTNEVRS' => '(none)'
}
;

View File

@ -0,0 +1,27 @@
-r--r--r-- 1 0 0 868 2016-11-11 00:00:00 HEADER
-r-xr-xr-x 1 0 0 39 2016-11-11 00:00:00 INSTALL
-r-xr-xr-x 1 0 0 39 2016-11-11 00:00:00 UPGRADE
dr-xr-xr-x 3 0 0 0 2016-11-11 00:00:00 INFO
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/NAME-VERSION-RELEASE
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/GROUP
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/BUILDHOST
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SOURCERPM
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/BUILDTIME
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/RPMVERSION
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/OS
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SIZE
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/VENDOR
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/DESCRIPTION
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SUMMARY
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SCRIPTS/POSTIN
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SCRIPTS/POSTUN
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SCRIPTS/ALL
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SCRIPTS/POSTINPROG
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/SCRIPTS/POSTUNPROG
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/PACKAGER
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/URL
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/LICENSE
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/REQUIRES
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/PROVIDES
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 INFO/CHANGELOG
-r--r--r-- 1 0 0 0 2016-11-11 00:00:00 CONTENTS.cpio

View File

@ -0,0 +1,72 @@
#
# This file gets source'd into our rpm helper.
#
# It imitates the 'rpm' program by overriding a few functions.
#
# The tags file.
TAGSF="$MC_TEST_EXTFS_INPUT"
. "$MC_TEST_EXTFS_CONFIG_SH" # Gain access to $PERL.
# ----------------------------------------------------------------------------
#
# Overrides helper's.
#
# Imitates 'rpm --querytags'.
#
# @Mock
#
mcrpmfs_getSupportedTags()
{
$PERL -e '
$tagsf = $ARGV[0];
do $tagsf or die("$tagsf: $!");
print join("\n", keys %$tags);
' \
"$TAGSF"
}
# ----------------------------------------------------------------------------
#
# Imitates 'rpm -qp --qf <TEMPLATE> <PACKAGE_FILE>'.
#
# (It ignores <PACKAGE_FILE>, using our input instead.)
#
# E.g.: given "Name: %{NAME} Ver: %{VERSION}",
# prints "Name: php-pear-Twig Ver: 1.0.0".
#
rpm_qf()
{
$PERL -w -e '
$tagsf = $ARGV[0];
$tmplt = $ARGV[1];
do $tagsf or die("$tagsf: $!");
$tmplt =~ s/\\n/\n/g;
$tmplt =~ s/%\{(.*?)\}/
(my $tag = $1) =~ s,^RPMTAG_,,; # Tag names may be specified with or without this prefix.
exists $tags->{$tag} ? $tags->{$tag} : "(none)"
/eg;
print $tmplt;
' \
"$TAGSF" "$1"
}
RPM_QUERY_FMT=rpm_qf # Tell the helper to use it instead of the 'rpm' binary.
# ----------------------------------------------------------------------------
#
# Overrides helper's.
#
# @Mock
#
mcrpmfs_getDesription()
{
rpm_qf "%{_INFO}"
}
# ----------------------------------------------------------------------------