diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/002-rpmvercmp.phpt | 95 | ||||
-rw-r--r-- | tests/003-rpminfo.phpt | 2 | ||||
-rw-r--r-- | tests/005-rpminfo-full.phpt | 6 | ||||
-rw-r--r-- | tests/006-rpminfo-errors.phpt | 8 | ||||
-rw-r--r-- | tests/007-rpmdbinfo.phpt | 30 | ||||
-rw-r--r-- | tests/008-rpmdbsearch.phpt | 67 | ||||
-rw-r--r-- | tests/009-rpmdbinfo2.phpt | 22 | ||||
-rw-r--r-- | tests/011-rpmvercmp_error8.phpt | 37 | ||||
-rw-r--r-- | tests/012-rpmaddtag.phpt | 16 | ||||
-rw-r--r-- | tests/013-rpmdbsearch-error.phpt | 16 | ||||
-rw-r--r-- | tests/014-stream.phpt | 97 | ||||
-rw-r--r-- | tests/bidon.rpm | bin | 6972 -> 7599 bytes | |||
-rw-r--r-- | tests/bidon.spec | 42 |
13 files changed, 409 insertions, 29 deletions
diff --git a/tests/002-rpmvercmp.phpt b/tests/002-rpmvercmp.phpt index 6cffef0..c53a183 100644 --- a/tests/002-rpmvercmp.phpt +++ b/tests/002-rpmvercmp.phpt @@ -3,27 +3,82 @@ Check for rpmvercmp function --SKIPIF-- <?php if (!extension_loaded("rpminfo")) print "skip"; ?> --FILE-- -<?php -var_dump(rpmvercmp("1.0", "1.1")); -var_dump(rpmvercmp("1.1", "1.0")); -var_dump(rpmvercmp("1.0", "1.0")); -// Errors -var_dump(rpmvercmp()); -var_dump(rpmvercmp("a")); -var_dump(rpmvercmp("a", "b", "c")); -?> -Done ---EXPECTF-- -int(-1) -int(1) -int(0) +<?php +$cases = [ + ['1.0', '1.1', -1], + ['1.1', '1.0', 1], + ['1.0', '1.0', 0], + ['1.0', '1', 1], + ['1', '1.1', -1], + ['2.0.14-22.el7_0', '2.0.14.1-35.el7_6', -1], + ['', '', 0], + ['0:1', '1', 0], + ['0:1', '1:1', -1], + ['1:1', '2', 1], + ['1~RC1', '1', -1], + ['1~RC1', '1', -1], + ['1~RC1-1', '1-0', -1], + ['1~beta', '1~RC', 1], + ['1-1', '1-2', -1], + ['1.1-1', '1-1.1', 1], + ['1.1-1~a', '1.1-1', -1], + ['1.2.3-4', '1.2.3p1-2', -1], + ['1.2.3-4', '1.2.3+a-2', -1], +]; +$ok = true; +foreach ($cases as $case) { + list($a,$b,$expected) = $case; + $result = rpmvercmp($a,$b); + if ($result !== $expected) { + $ok = false; + printf("rpmvercmp(%s, %s) = %d when %d expected\n", $a, $b, $result, $expected); + } +} + +$cases = [ + ['1', '2', '>', false], + ['1', '2', 'gt', false], + ['1', '2', '>=', false], + ['1', '2', 'ge', false], + ['1', '1', '>=', true], + ['1', '1', 'ge', true], + + ['1', '2', '<', true], + ['1', '2', 'lt', true], + ['1', '2', '<=', true], + ['1', '2', 'le', true], + ['1', '1', '<=', true], + ['1', '1', 'le', true], -Warning: rpmvercmp() expects exactly 2 parameters, 0 given in %s/002-rpmvercmp.php on line 6 -NULL + ['1', '1', '=', true], + ['1', '1', '==', true], + ['1', '1', 'eq', true], -Warning: rpmvercmp() expects exactly 2 parameters, 1 given in %s/002-rpmvercmp.php on line 7 -NULL + ['1', '2', '=', false], + ['1', '2', '==', false], + ['1', '2', 'eq', false], -Warning: rpmvercmp() expects exactly 2 parameters, 3 given in %s/002-rpmvercmp.php on line 8 -NULL + ['1', '1', '!=', false], + ['1', '1', '<>', false], + ['1', '1', 'ne', false], + + ['1', '2', '!=', true], + ['1', '2', '<>', true], + ['1', '2', 'ne', true], +]; +foreach ($cases as $case) { + list($a,$b,$op,$expected) = $case; + $result = rpmvercmp($a,$b,$op); + if ($result !== $expected) { + $ok = false; + printf("rpmvercmp(%s, %s, %s) = %s when %s expected\n", + $a, $b, $op, $result ? "true" : "false", $expected ? "true" : "false"); + } +} + +if ($ok) echo "OK\n"; +?> +Done +--EXPECTF-- +OK Done diff --git a/tests/003-rpminfo.phpt b/tests/003-rpminfo.phpt index beb7b47..919bcc9 100644 --- a/tests/003-rpminfo.phpt +++ b/tests/003-rpminfo.phpt @@ -14,7 +14,7 @@ array(5) { ["Version"]=> string(1) "1" ["Release"]=> - string(11) "1.fc27.remi" + string(1) "3" ["Summary"]=> string(5) "Bidon" ["Arch"]=> diff --git a/tests/005-rpminfo-full.phpt b/tests/005-rpminfo-full.phpt index 38f5bab..15c158d 100644 --- a/tests/005-rpminfo-full.phpt +++ b/tests/005-rpminfo-full.phpt @@ -24,9 +24,11 @@ Done --- bidon.rpm --- string(5) "bidon" string(15) "A dummy package" -array(1) { +array(2) { [0]=> - string(8) "- create" + string(14) "- add symlinks" + [1]=> + string(20) "- add some hardlinks" } bool(false) array(1) { diff --git a/tests/006-rpminfo-errors.phpt b/tests/006-rpminfo-errors.phpt index edacbdb..5d205d7 100644 --- a/tests/006-rpminfo-errors.phpt +++ b/tests/006-rpminfo-errors.phpt @@ -21,15 +21,15 @@ Done + PHP Warnings Warning: rpminfo(): Can't open '%s/tests/missing.rpm': No such file or directory in %s on line %d -bool(false) +NULL Warning: rpminfo(): Can't read '%s/tests/006-rpminfo-errors.php': Argument is not a RPM file in %s on line %d -bool(false) +NULL + PHP Warnings -bool(false) +NULL string(%d) "Can't open '%s/tests/missing.rpm': No such file or directory" -bool(false) +NULL string(%d) "Can't read '%s/tests/006-rpminfo-errors.php': Argument is not a RPM file" bool(true) NULL diff --git a/tests/007-rpmdbinfo.phpt b/tests/007-rpmdbinfo.phpt index 6fe3116..4a977d1 100644 --- a/tests/007-rpmdbinfo.phpt +++ b/tests/007-rpmdbinfo.phpt @@ -1,15 +1,19 @@ --TEST-- -Check for rpmdbinfo function +Check for rpmdbinfo function on Name --SKIPIF-- <?php if (!extension_loaded("rpminfo")) print "skip"; ?> --FILE-- <?php var_dump(rpmdbinfo('doesntexistsinrpmdb')); var_dump(rpmdbinfo('bash')); +var_dump(rpmaddtag(RPMTAG_INSTALLTIME)); +var_dump(rpmaddtag(RPMTAG_BUILDTIME)); +var_dump(rpmaddtag(RPMTAG_INSTALLTIME)); +var_dump(rpmdbinfo('bash')); ?> Done --EXPECTF-- -bool(false) +NULL array(1) { [0]=> array(5) { @@ -25,4 +29,26 @@ array(1) { string(%d) "%s" } } +bool(true) +bool(true) +bool(false) +array(1) { + [0]=> + array(7) { + ["Name"]=> + string(4) "bash" + ["Version"]=> + string(%d) "%s" + ["Release"]=> + string(%d) "%s" + ["Summary"]=> + string(26) "The GNU Bourne Again shell" + ["Buildtime"]=> + int(%d) + ["Installtime"]=> + int(%d) + ["Arch"]=> + string(%d) "%s" + } +} Done diff --git a/tests/008-rpmdbsearch.phpt b/tests/008-rpmdbsearch.phpt new file mode 100644 index 0000000..f348b92 --- /dev/null +++ b/tests/008-rpmdbsearch.phpt @@ -0,0 +1,67 @@ +--TEST-- +Check for rpmdbinfo function +--SKIPIF-- +<?php if (!extension_loaded("rpminfo")) print "skip"; ?> +--FILE-- +<?php +echo "Name / glob\n"; +$a = rpmdbsearch('php*', RPMTAG_NAME , RPMMIRE_GLOB); +var_dump(count($a) > 1); + +echo "Name / regex\n"; +$a = rpmdbsearch('^php', RPMTAG_NAME, RPMMIRE_REGEX); +var_dump(count($a) > 1); + +echo "Installed file\n"; +$a = rpmdbsearch(PHP_BINARY, RPMTAG_INSTFILENAMES); +var_dump(count($a) == 1); + +$phprpm = $a[0]['Name']; +$p = rpmdbinfo($phprpm, 1); + +echo "Pkgid\n"; +$a = rpmdbsearch($p[0]['Sigmd5'], RPMTAG_PKGID); +var_dump($a[0]['Name'] == $phprpm); + +echo "Hdrid\n"; +$a = rpmdbsearch($p[0]['Sha1header'], RPMTAG_HDRID); +var_dump($a[0]['Name'] == $phprpm); +var_dump(count($a[0]) < 10); + +echo "Hdrid (full)\n"; +$a = rpmdbsearch($p[0]['Sha1header'], RPMTAG_HDRID, -1, true); +var_dump($a[0]['Name'] == $phprpm); +var_dump($a[0]['Sha1header'] == $p[0]['Sha1header']); +var_dump(count($a[0]) > 20); + +echo "Installtid\n"; +$a = rpmdbsearch($p[0]['Installtid'], RPMTAG_INSTALLTID); +var_dump(count($a) >= 1); + +echo "Version\n"; +$a = rpmdbsearch($p[0]['Version'], RPMTAG_VERSION); +var_dump(count($a) > 1); + +?> +Done +--EXPECTF-- +Name / glob +bool(true) +Name / regex +bool(true) +Installed file +bool(true) +Pkgid +bool(true) +Hdrid +bool(true) +bool(true) +Hdrid (full) +bool(true) +bool(true) +bool(true) +Installtid +bool(true) +Version +bool(true) +Done diff --git a/tests/009-rpmdbinfo2.phpt b/tests/009-rpmdbinfo2.phpt new file mode 100644 index 0000000..23f95c5 --- /dev/null +++ b/tests/009-rpmdbinfo2.phpt @@ -0,0 +1,22 @@ +--TEST-- +Check for rpmdbinfo function on NEVR +--SKIPIF-- +<?php +if (!extension_loaded("rpminfo")) print "skip"; +if (!rpmdbinfo('kernel')) print "skip kernel not installed"; +?> +--FILE-- +<?php +$k = rpmdbinfo('kernel'); +var_dump(count($k) > 0); // multiple kernels +$n = $k[0]['Name'] . '-' . $k[0]['Version'] . '-' . $k[0]['Release']; + +$k = rpmdbinfo($n); // single kernel with NEVR +var_dump(count($k) ==1); + +?> +Done +--EXPECTF-- +bool(true) +bool(true) +Done diff --git a/tests/011-rpmvercmp_error8.phpt b/tests/011-rpmvercmp_error8.phpt new file mode 100644 index 0000000..2fe6aa1 --- /dev/null +++ b/tests/011-rpmvercmp_error8.phpt @@ -0,0 +1,37 @@ +--TEST-- +Check for rpmvercmp function +--SKIPIF-- +<?php +if (!extension_loaded("rpminfo")) print "skip"; +if (PHP_VERSION_ID < 80000) print "skip only for PHP 8"; +?> +--FILE-- +<?php +try { + var_dump(rpmvercmp()); +} catch (ArgumentCountError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(rpmvercmp("a")); +} catch (ArgumentCountError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(rpmvercmp("a", "b", "c")); +} catch (ValueError $e) { + echo $e->getMessage(), "\n"; +} +try { + var_dump(rpmvercmp("a", "b", "c", "d")); +} catch (ArgumentCountError $e) { + echo $e->getMessage(), "\n"; +} +?> +Done +--EXPECTF-- +rpmvercmp() expects at least 2 %s, 0 given +rpmvercmp() expects at least 2 %s, 1 given +rpmvercmp(): Argument #3 ($operator) must be a valid comparison operator +rpmvercmp() expects at most 3 %s, 4 given +Done diff --git a/tests/012-rpmaddtag.phpt b/tests/012-rpmaddtag.phpt new file mode 100644 index 0000000..bf371a4 --- /dev/null +++ b/tests/012-rpmaddtag.phpt @@ -0,0 +1,16 @@ +--TEST-- +Check for rpmaddtag parameter check +--SKIPIF-- +<?php if (!extension_loaded("rpminfo")) print "skip"; ?> +--FILE-- +<?php +var_dump(rpmaddtag(RPMTAG_INSTALLTIME)); +try { + var_dump(rpmaddtag(-1)); +} catch (ValueError $e) { + echo $e->getMessage(); +} +?> +--EXPECTF-- +bool(true) +%A Unkown rpmtag%A diff --git a/tests/013-rpmdbsearch-error.phpt b/tests/013-rpmdbsearch-error.phpt new file mode 100644 index 0000000..4a61227 --- /dev/null +++ b/tests/013-rpmdbsearch-error.phpt @@ -0,0 +1,16 @@ +--TEST-- +Check for rpmdbinfo function +--SKIPIF-- +<?php if (!extension_loaded("rpminfo")) print "skip"; ?> +--FILE-- +<?php +var_dump(rpmdbsearch('notexists', RPMTAG_NAME)); +try { +var_dump(rpmdbsearch('notexists', RPMTAG_NAME, 99)); +} catch (ValueError $e) { + echo $e->getMessage(); +} +?> +--EXPECTF-- +NULL +%A Unkown rpmmire%A diff --git a/tests/014-stream.phpt b/tests/014-stream.phpt new file mode 100644 index 0000000..69b881e --- /dev/null +++ b/tests/014-stream.phpt @@ -0,0 +1,97 @@ +--TEST-- +Check for stream +--SKIPIF-- +<?php +if (!extension_loaded("rpminfo")) print "skip"; +if (version_compare(RPMVERSION, '4.13', 'lt')) print("skip librpm is older than 4.13"); +?> +--FILE-- +<?php +$d = "rpm://" . __DIR__ . "/bidon.rpm#/usr/share/doc/bidon"; +$n = "rpm://" . __DIR__ . "/bidon.rpm#/usr/share/doc/bidon/README"; +$x = "rpm://" . __DIR__ . "/bidon.rpm#/usr/share/doc/bidon/MISSING"; +$foo = "rpm://" . __DIR__ . "/bidon.rpm#/etc/foo.conf"; +$bar = "rpm://" . __DIR__ . "/bidon.rpm#/etc/bar.conf"; +$toto = "rpm://" . __DIR__ . "/bidon.rpm#/etc/toto.conf"; + +echo "+ wrapper\n"; +var_dump(in_array('rpm', stream_get_wrappers())); + +echo "+ stat\n"; +$s = stat($d); // S_ISDIR +var_dump($s['size'], $s['mode'] , ($s['mode'] & 0170000) == 0040000 ? "OK" : "KO"); +var_dump(file_exists($d), is_dir($d), is_file($d), is_link($n)); +$s = stat($n); // S_ISREG +var_dump($s['size'], $s['mode'] , ($s['mode'] & 0170000) == 0100000 ? "OK" : "KO"); +var_dump(file_exists($n), is_dir($n), is_file($n), is_link($n)); +$s = stat($toto); // S_ISLNK +var_dump($s['size'], $s['mode'] , ($s['mode'] & 0170000) == 0120000 ? "OK" : "KO"); +var_dump(file_exists($toto), is_dir($toto), is_file($toto), is_link($toto)); + +echo "+ file\n"; +var_dump($f = fopen($n, "r")); +$s = fstat($f); +var_dump($s['size'], $s['mode']); +var_dump(trim(fread($f, 10))); +var_dump(feof($f)); +var_dump(trim(fread($f, 100))); +var_dump(feof($f)); +fclose($f); + +echo "+ stream\n"; +var_dump(trim(file_get_contents($n))); // Existing file +var_dump(trim(file_get_contents($foo))); // Hardlink with content +var_dump(trim(file_get_contents($bar))); // hardlink without content +var_dump(file_get_contents($x)); // Missing file + +echo "+ symlink\n"; +var_dump(rpmgetsymlink(__DIR__ . "/bidon.rpm", "missing")); +var_dump(rpmgetsymlink(__DIR__ . "/bidon.rpm", "/etc/foo.conf")); // not a symlink +var_dump(rpmgetsymlink(__DIR__ . "/bidon.rpm", "/etc/toto.conf")); // symlink +?> +Done +--EXPECTF-- ++ wrapper +bool(true) ++ stat +int(0) +int(16877) +string(2) "OK" +bool(true) +bool(true) +bool(false) +bool(false) +int(30) +int(33188) +string(2) "OK" +bool(true) +bool(false) +bool(true) +bool(false) +int(8) +int(41471) +string(2) "OK" +bool(true) +bool(false) +bool(false) +bool(true) ++ file +resource(%d) of type (stream) +int(30) +int(33188) +string(10) "Thu Oct 19" +bool(false) +string(18) "12:01:02 CEST 2023" +bool(true) ++ stream +string(29) "Thu Oct 19 12:01:02 CEST 2023" +string(7) "content" +string(7) "content" + +Warning: file_get_contents(%s/bidon.rpm#/usr/share/doc/bidon/MISSING): Failed to open stream: operation failed in %s on line %d +bool(false) ++ symlink +NULL +string(0) "" +string(8) "foo.conf" +Done diff --git a/tests/bidon.rpm b/tests/bidon.rpm Binary files differindex 6cbfa04..d8efb06 100644 --- a/tests/bidon.rpm +++ b/tests/bidon.rpm diff --git a/tests/bidon.spec b/tests/bidon.spec new file mode 100644 index 0000000..b3ad790 --- /dev/null +++ b/tests/bidon.spec @@ -0,0 +1,42 @@ +%{!?ver: %global ver 1} + +Name: bidon +Version: %{ver} +Release: 3 +Summary: Bidon +License: Public Domain +URL: https://rpms.remirepo.net/ + +Obsoletes: fooobs < 2 + + +%description +A dummy package + +%prep +date >README +echo "content" >conf + +%build +: nothing to build + +%install +install -Dpm644 conf %{buildroot}%{_sysconfdir}/foo.conf +cd %{buildroot}%{_sysconfdir} +ln foo.conf bar.conf +ln -s foo.conf toto.conf + +%files +%doc README +%config(noreplace) %{_sysconfdir}/*.conf + + +%changelog +* Thu Oct 19 2023 Remi Collet <remi@fedoraproject.org> - 1-3 +- add symlinks + +* Fri Oct 13 2023 Remi Collet <remi@fedoraproject.org> - 1-2 +- add some hardlinks + +* Wed Dec 24 2014 Remi Collet <remi@fedoraproject.org> - 1-1 +- create |