From 4b8785ead653ada035ced5ddf833019336a6c41c Mon Sep 17 00:00:00 2001 From: Mooffie Date: Mon, 2 Jan 2017 06:01:36 +0200 Subject: [PATCH] extfs: rpm: add tests. Signed-off-by: Mooffie --- tests/src/vfs/extfs/helpers-list/Makefile.am | 5 + .../vfs/extfs/helpers-list/data/rpm.README | 14 + .../vfs/extfs/helpers-list/data/rpm.env_vars | 3 + .../src/vfs/extfs/helpers-list/data/rpm.input | 264 ++++++++++++++++++ .../vfs/extfs/helpers-list/data/rpm.output | 27 ++ .../extfs/helpers-list/data/rpm.rewrite.sh | 72 +++++ 6 files changed, 385 insertions(+) create mode 100644 tests/src/vfs/extfs/helpers-list/data/rpm.README create mode 100644 tests/src/vfs/extfs/helpers-list/data/rpm.env_vars create mode 100644 tests/src/vfs/extfs/helpers-list/data/rpm.input create mode 100644 tests/src/vfs/extfs/helpers-list/data/rpm.output create mode 100644 tests/src/vfs/extfs/helpers-list/data/rpm.rewrite.sh diff --git a/tests/src/vfs/extfs/helpers-list/Makefile.am b/tests/src/vfs/extfs/helpers-list/Makefile.am index 1a8e58067..a95df8a19 100644 --- a/tests/src/vfs/extfs/helpers-list/Makefile.am +++ b/tests/src/vfs/extfs/helpers-list/Makefile.am @@ -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 \ diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.README b/tests/src/vfs/extfs/helpers-list/data/rpm.README new file mode 100644 index 000000000..e08e324de --- /dev/null +++ b/tests/src/vfs/extfs/helpers-list/data/rpm.README @@ -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. diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.env_vars b/tests/src/vfs/extfs/helpers-list/data/rpm.env_vars new file mode 100644 index 000000000..a740c6438 --- /dev/null +++ b/tests/src/vfs/extfs/helpers-list/data/rpm.env_vars @@ -0,0 +1,3 @@ +MC_TEST_RPM_REWRITE="$MC_TEST_EXTFS_DATA_DIR/rpm.rewrite.sh" + +MCFASTRPM= # disable "fast mode". diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.input b/tests/src/vfs/extfs/helpers-list/data/rpm.input new file mode 100644 index 000000000..23233d52d --- /dev/null +++ b/tests/src/vfs/extfs/helpers-list/data/rpm.input @@ -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 - 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 +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 ', + '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)' +} +; diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.output b/tests/src/vfs/extfs/helpers-list/data/rpm.output new file mode 100644 index 000000000..c618cca48 --- /dev/null +++ b/tests/src/vfs/extfs/helpers-list/data/rpm.output @@ -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 diff --git a/tests/src/vfs/extfs/helpers-list/data/rpm.rewrite.sh b/tests/src/vfs/extfs/helpers-list/data/rpm.rewrite.sh new file mode 100644 index 000000000..78280380f --- /dev/null +++ b/tests/src/vfs/extfs/helpers-list/data/rpm.rewrite.sh @@ -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