summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/002-rpmvercmp.phpt95
-rw-r--r--tests/003-rpminfo.phpt2
-rw-r--r--tests/005-rpminfo-full.phpt6
-rw-r--r--tests/006-rpminfo-errors.phpt8
-rw-r--r--tests/007-rpmdbinfo.phpt30
-rw-r--r--tests/008-rpmdbsearch.phpt67
-rw-r--r--tests/009-rpmdbinfo2.phpt22
-rw-r--r--tests/011-rpmvercmp_error8.phpt37
-rw-r--r--tests/012-rpmaddtag.phpt16
-rw-r--r--tests/013-rpmdbsearch-error.phpt16
-rw-r--r--tests/014-stream.phpt97
-rw-r--r--tests/bidon.rpmbin6972 -> 7599 bytes
-rw-r--r--tests/bidon.spec42
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
index 6cbfa04..d8efb06 100644
--- a/tests/bidon.rpm
+++ b/tests/bidon.rpm
Binary files differ
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