summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Semenik <maxsem.wiki@gmail.com>2021-03-18 14:53:14 +0300
committerNikita Popov <nikita.ppv@gmail.com>2021-03-22 09:53:38 +0100
commit6c9a05667b72c6420eb21269ffaffbd93178923c (patch)
tree36579c85463a21ccf92e22cd166267d5c5eb44ac
parenta3e1082e0abac7ce6a664064bc1855061f365159 (diff)
downloadphp-git-6c9a05667b72c6420eb21269ffaffbd93178923c.tar.gz
run-tests: use the EXTENSIONS section for skipping
Currently, most skip checks are just for making sure an extension is available. Even with recent addition of skip caching, this makes tests needlessly slow: * Checks for the same extension in its tests can have small differences impacting cacheability. * Even identical skip checks in two tests can still be executed twice if they're run by different workers. To remedy this, I'm repurposing the existing --EXTENSIONS-- section of .phpt files to specify wjich extensions are required for current test to run. Current behavior: 1) If the extension is already visible to PHP, all is good 2) If it isn't, assume it's present as a shared module and attempt to add it via a command line parameter 3) If that works, all is good 4) If it doesn't, PHP fails with a cryptic error message trying to execute the test itself After this commit: 1) and 2) are kept unchanged 3) Check if shared extension file from 2) is actually present 4) Skip the test if it isn't Other benefits include clear skip reasons (vs. sometimes none in many current skip checks) and moving test information from code to metadata, opening more opportunities for search and analysis. Since --EXTENSIONS-- is barely ever used, this change poses no risk of hidden failures. As a demonstration of the new approach, this commit migrates one extension to it. If merged, I will migrate other extensions in subsequent PRs. Closes GH-6787.
-rw-r--r--ext/sodium/tests/bug78114.phpt6
-rw-r--r--ext/sodium/tests/bug78516.phpt3
-rw-r--r--ext/sodium/tests/crypto_aead.phpt3
-rw-r--r--ext/sodium/tests/crypto_auth.phpt4
-rw-r--r--ext/sodium/tests/crypto_box.phpt4
-rw-r--r--ext/sodium/tests/crypto_generichash.phpt4
-rw-r--r--ext/sodium/tests/crypto_hex.phpt4
-rw-r--r--ext/sodium/tests/crypto_kdf.phpt4
-rw-r--r--ext/sodium/tests/crypto_kx.phpt4
-rw-r--r--ext/sodium/tests/crypto_scalarmult.phpt4
-rw-r--r--ext/sodium/tests/crypto_secretbox.phpt4
-rw-r--r--ext/sodium/tests/crypto_secretstream.phpt3
-rw-r--r--ext/sodium/tests/crypto_shorthash.phpt4
-rw-r--r--ext/sodium/tests/crypto_sign.phpt4
-rw-r--r--ext/sodium/tests/crypto_stream.phpt4
-rw-r--r--ext/sodium/tests/exception_trace_without_args.phpt4
-rw-r--r--ext/sodium/tests/inc_add.phpt4
-rw-r--r--ext/sodium/tests/installed.phpt4
-rw-r--r--ext/sodium/tests/pwhash_argon2i.phpt4
-rw-r--r--ext/sodium/tests/pwhash_scrypt.phpt4
-rw-r--r--ext/sodium/tests/sodium_error_001.phpt4
-rw-r--r--ext/sodium/tests/utils.phpt4
-rw-r--r--ext/sodium/tests/version.phpt4
-rwxr-xr-xrun-tests.php15
-rw-r--r--tests/run-test/bug75042-2.phpt10
-rw-r--r--tests/run-test/bug75042-3.phpt13
-rw-r--r--tests/run-test/extensions-shared.phpt (renamed from tests/run-test/bug75042.phpt)7
-rw-r--r--tests/run-test/extensions-static.phpt9
28 files changed, 74 insertions, 71 deletions
diff --git a/ext/sodium/tests/bug78114.phpt b/ext/sodium/tests/bug78114.phpt
index 6d7df4348f..b988c09ec2 100644
--- a/ext/sodium/tests/bug78114.phpt
+++ b/ext/sodium/tests/bug78114.phpt
@@ -1,9 +1,7 @@
--TEST--
Bug #78114 (segfault when calling sodium_* functions from eval)
---SKIPIF--
-<?php
-if (!extension_loaded('sodium')) die('skip sodium extension not available');
-?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
try {
diff --git a/ext/sodium/tests/bug78516.phpt b/ext/sodium/tests/bug78516.phpt
index 0347d33273..90852a6967 100644
--- a/ext/sodium/tests/bug78516.phpt
+++ b/ext/sodium/tests/bug78516.phpt
@@ -1,8 +1,9 @@
--TEST--
Bug #78516 (password_hash(): Memory cost is not in allowed range)
+--EXTENSIONS--
+sodium
--SKIPIF--
<?php
-if (!extension_loaded('sodium')) die('skip sodium extension not available');
if (!defined('PASSWORD_ARGON2ID')) die('skip PASSWORD_ARGON2ID not available');
?>
--FILE--
diff --git a/ext/sodium/tests/crypto_aead.phpt b/ext/sodium/tests/crypto_aead.phpt
index a54a1c7dc6..0da84194bb 100644
--- a/ext/sodium/tests/crypto_aead.phpt
+++ b/ext/sodium/tests/crypto_aead.phpt
@@ -1,8 +1,9 @@
--TEST--
Check for libsodium AEAD
+--EXTENSIONS--
+sodium
--SKIPIF--
<?php
-if (!extension_loaded("sodium")) print "skip extension not loaded";
if (!defined('SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES')) print "skip libsodium without AESGCM";
?>
--FILE--
diff --git a/ext/sodium/tests/crypto_auth.phpt b/ext/sodium/tests/crypto_auth.phpt
index 58d8350078..8f262414be 100644
--- a/ext/sodium/tests/crypto_auth.phpt
+++ b/ext/sodium/tests/crypto_auth.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium auth
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$msg = random_bytes(1000);
diff --git a/ext/sodium/tests/crypto_box.phpt b/ext/sodium/tests/crypto_box.phpt
index 3a55717d53..f77ec1601c 100644
--- a/ext/sodium/tests/crypto_box.phpt
+++ b/ext/sodium/tests/crypto_box.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium box
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$keypair = sodium_crypto_box_keypair();
diff --git a/ext/sodium/tests/crypto_generichash.phpt b/ext/sodium/tests/crypto_generichash.phpt
index 5a7b0c4285..58f519af5c 100644
--- a/ext/sodium/tests/crypto_generichash.phpt
+++ b/ext/sodium/tests/crypto_generichash.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium generichash
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$q = sodium_crypto_generichash('msg');
diff --git a/ext/sodium/tests/crypto_hex.phpt b/ext/sodium/tests/crypto_hex.phpt
index 0f872ee867..3f989a1f11 100644
--- a/ext/sodium/tests/crypto_hex.phpt
+++ b/ext/sodium/tests/crypto_hex.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium bin2hex
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$bin = random_bytes(random_int(1, 1000));
diff --git a/ext/sodium/tests/crypto_kdf.phpt b/ext/sodium/tests/crypto_kdf.phpt
index c9f0949ed0..970a87988d 100644
--- a/ext/sodium/tests/crypto_kdf.phpt
+++ b/ext/sodium/tests/crypto_kdf.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium KDF
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$key = sodium_crypto_kdf_keygen();
diff --git a/ext/sodium/tests/crypto_kx.phpt b/ext/sodium/tests/crypto_kx.phpt
index a1dd00a0a7..5a278f685b 100644
--- a/ext/sodium/tests/crypto_kx.phpt
+++ b/ext/sodium/tests/crypto_kx.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium-based key exchange
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$client_seed = sodium_hex2bin('0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef');
diff --git a/ext/sodium/tests/crypto_scalarmult.phpt b/ext/sodium/tests/crypto_scalarmult.phpt
index 2636963e32..8dda46c99e 100644
--- a/ext/sodium/tests/crypto_scalarmult.phpt
+++ b/ext/sodium/tests/crypto_scalarmult.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium scalarmult
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$n = sodium_hex2bin("5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb");
diff --git a/ext/sodium/tests/crypto_secretbox.phpt b/ext/sodium/tests/crypto_secretbox.phpt
index b9d4d1ccfe..075b0c60e3 100644
--- a/ext/sodium/tests/crypto_secretbox.phpt
+++ b/ext/sodium/tests/crypto_secretbox.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium secretbox
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
diff --git a/ext/sodium/tests/crypto_secretstream.phpt b/ext/sodium/tests/crypto_secretstream.phpt
index 24896e15b2..1267ecd8af 100644
--- a/ext/sodium/tests/crypto_secretstream.phpt
+++ b/ext/sodium/tests/crypto_secretstream.phpt
@@ -1,8 +1,9 @@
--TEST--
Check for libsodium secretstream
+--EXTENSIONS--
+sodium
--SKIPIF--
<?php
-if (!extension_loaded("sodium")) print "skip extension not loaded";
if (!defined('SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_ABYTES')) print "skip libsodium without secretbytes";
?>
--FILE--
diff --git a/ext/sodium/tests/crypto_shorthash.phpt b/ext/sodium/tests/crypto_shorthash.phpt
index 68bffc823b..c5cc2334a6 100644
--- a/ext/sodium/tests/crypto_shorthash.phpt
+++ b/ext/sodium/tests/crypto_shorthash.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium shorthash
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$m1 = 'message';
diff --git a/ext/sodium/tests/crypto_sign.phpt b/ext/sodium/tests/crypto_sign.phpt
index 14e0c49e91..e1a2343a20 100644
--- a/ext/sodium/tests/crypto_sign.phpt
+++ b/ext/sodium/tests/crypto_sign.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium ed25519 signatures
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$keypair = sodium_crypto_sign_keypair();
diff --git a/ext/sodium/tests/crypto_stream.phpt b/ext/sodium/tests/crypto_stream.phpt
index 27e163c071..46f174e15b 100644
--- a/ext/sodium/tests/crypto_stream.phpt
+++ b/ext/sodium/tests/crypto_stream.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium stream
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$nonce = random_bytes(SODIUM_CRYPTO_STREAM_NONCEBYTES);
diff --git a/ext/sodium/tests/exception_trace_without_args.phpt b/ext/sodium/tests/exception_trace_without_args.phpt
index 4885f93093..aa39d5610f 100644
--- a/ext/sodium/tests/exception_trace_without_args.phpt
+++ b/ext/sodium/tests/exception_trace_without_args.phpt
@@ -1,7 +1,7 @@
--TEST--
SodiumException backtraces do not contain function arguments
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
diff --git a/ext/sodium/tests/inc_add.phpt b/ext/sodium/tests/inc_add.phpt
index 23410d140c..7652cf851e 100644
--- a/ext/sodium/tests/inc_add.phpt
+++ b/ext/sodium/tests/inc_add.phpt
@@ -1,7 +1,7 @@
--TEST--
increment and add edge cases
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
diff --git a/ext/sodium/tests/installed.phpt b/ext/sodium/tests/installed.phpt
index f004efa714..e2c3b73037 100644
--- a/ext/sodium/tests/installed.phpt
+++ b/ext/sodium/tests/installed.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for sodium presence
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
echo "sodium extension is available";
diff --git a/ext/sodium/tests/pwhash_argon2i.phpt b/ext/sodium/tests/pwhash_argon2i.phpt
index aee90bd6fa..90f7730419 100644
--- a/ext/sodium/tests/pwhash_argon2i.phpt
+++ b/ext/sodium/tests/pwhash_argon2i.phpt
@@ -1,7 +1,9 @@
--TEST--
Check for libsodium argon2i
+--EXTENSIONS--
+sodium
--SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip";
+<?php
if (!defined('SODIUM_CRYPTO_PWHASH_SALTBYTES')) print "skip libsodium without argon2i"; ?>
--FILE--
<?php
diff --git a/ext/sodium/tests/pwhash_scrypt.phpt b/ext/sodium/tests/pwhash_scrypt.phpt
index 8e02f7ba0e..59b5647a91 100644
--- a/ext/sodium/tests/pwhash_scrypt.phpt
+++ b/ext/sodium/tests/pwhash_scrypt.phpt
@@ -1,7 +1,9 @@
--TEST--
Check for libsodium scrypt
+--EXTENSIONS--
+sodium
--SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip";
+<?php
if (!defined('SODIUM_CRYPTO_PWHASH_SCRYPTSALSA208SHA256_SALTBYTES')) print "skip libsodium without scrypt"; ?>
--FILE--
<?php
diff --git a/ext/sodium/tests/sodium_error_001.phpt b/ext/sodium/tests/sodium_error_001.phpt
index a78d071a10..b290ebd8a5 100644
--- a/ext/sodium/tests/sodium_error_001.phpt
+++ b/ext/sodium/tests/sodium_error_001.phpt
@@ -1,7 +1,7 @@
--TEST--
TypeErrors will not contain param values in backtrace
---SKIPIF--
-<?php if (!extension_loaded("sodium")) die("skip ext/sodium required"); ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
declare(strict_types=1);
diff --git a/ext/sodium/tests/utils.phpt b/ext/sodium/tests/utils.phpt
index 944a25ca22..66969a60bd 100644
--- a/ext/sodium/tests/utils.phpt
+++ b/ext/sodium/tests/utils.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium utils
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
$a = 'test';
diff --git a/ext/sodium/tests/version.phpt b/ext/sodium/tests/version.phpt
index e9495d7a44..2c8b3a108e 100644
--- a/ext/sodium/tests/version.phpt
+++ b/ext/sodium/tests/version.phpt
@@ -1,7 +1,7 @@
--TEST--
Check for libsodium version
---SKIPIF--
-<?php if (!extension_loaded("sodium")) print "skip"; ?>
+--EXTENSIONS--
+sodium
--FILE--
<?php
echo strlen(SODIUM_LIBRARY_VERSION) >= 5;
diff --git a/run-tests.php b/run-tests.php
index 825718407c..ad1311bb8d 100755
--- a/run-tests.php
+++ b/run-tests.php
@@ -2057,15 +2057,26 @@ TEST $file
$extensions = preg_split("/[\n\r]+/", trim($test->getSection('EXTENSIONS')));
[$ext_dir, $loaded] = $skipCache->getExtensions("$php $pass_options $extra_options $ext_params $no_file_cache");
$ext_prefix = IS_WINDOWS ? "php_" : "";
+ $missing = [];
foreach ($extensions as $req_ext) {
if (!in_array($req_ext, $loaded)) {
if ($req_ext == 'opcache') {
- $ini_settings['zend_extension'][] = $ext_dir . DIRECTORY_SEPARATOR . $ext_prefix . $req_ext . '.' . PHP_SHLIB_SUFFIX;
+ $ext_file = $ext_dir . DIRECTORY_SEPARATOR . $ext_prefix . $req_ext . '.' . PHP_SHLIB_SUFFIX;
+ $ini_settings['zend_extension'][] = $ext_file;
} else {
- $ini_settings['extension'][] = $ext_dir . DIRECTORY_SEPARATOR . $ext_prefix . $req_ext . '.' . PHP_SHLIB_SUFFIX;
+ $ext_file = $ext_dir . DIRECTORY_SEPARATOR . $ext_prefix . $req_ext . '.' . PHP_SHLIB_SUFFIX;
+ $ini_settings['extension'][] = $ext_file;
+ }
+ if (!is_readable($ext_file)) {
+ $missing[] = $req_ext;
}
}
}
+ if ($missing) {
+ $message = 'Required extension' . (count($missing) > 1 ? 's' : '')
+ . ' missing: ' . implode(', ', $missing);
+ return skip_test($tested, $tested_file, $shortname, $message);
+ }
}
// additional ini overwrites
diff --git a/tests/run-test/bug75042-2.phpt b/tests/run-test/bug75042-2.phpt
deleted file mode 100644
index 2c5718a9a0..0000000000
--- a/tests/run-test/bug75042-2.phpt
+++ /dev/null
@@ -1,10 +0,0 @@
---TEST--
-phpt EXTENSIONS directive with static module
---EXTENSIONS--
-SPL
---FILE--
-<?php
-var_dump(extension_loaded('spl'));
-?>
---EXPECT--
-bool(true)
diff --git a/tests/run-test/bug75042-3.phpt b/tests/run-test/bug75042-3.phpt
deleted file mode 100644
index 5a30143be9..0000000000
--- a/tests/run-test/bug75042-3.phpt
+++ /dev/null
@@ -1,13 +0,0 @@
---TEST--
-phpt EXTENSIONS directive with nonexistent shared module
---INI--
-error_log=
-display_startup_errors=1
-display_errors=1
---EXTENSIONS--
-nonexistentsharedmodule
---FILE--
-<?php
-?>
---EXPECTF--
-Warning: PHP Startup: Unable to load dynamic library '%snonexistentsharedmodule.%s' %A
diff --git a/tests/run-test/bug75042.phpt b/tests/run-test/extensions-shared.phpt
index a7979d6b5e..e8d9b52aa9 100644
--- a/tests/run-test/bug75042.phpt
+++ b/tests/run-test/extensions-shared.phpt
@@ -1,5 +1,7 @@
--TEST--
-phpt EXTENSIONS directive with shared module
+phpt EXTENSIONS directive - shared module
+--EXTENSIONS--
+openssl
--SKIPIF--
<?php
$php = getenv('TEST_PHP_EXECUTABLE');
@@ -8,8 +10,7 @@ if (false !== stripos(`$php -n -m`, 'openssl')) {
}
$ext_module = ini_get('extension_dir') . DIRECTORY_SEPARATOR . (substr(PHP_OS, 0, 3) === "WIN" ? "php_openssl." : "openssl.") . PHP_SHLIB_SUFFIX;
if( !file_exists($ext_module) ) die('skip openssl shared extension not found');
---EXTENSIONS--
-openssl
+
--FILE--
<?php
var_dump(extension_loaded('openssl'));
diff --git a/tests/run-test/extensions-static.phpt b/tests/run-test/extensions-static.phpt
new file mode 100644
index 0000000000..19e883e0ba
--- /dev/null
+++ b/tests/run-test/extensions-static.phpt
@@ -0,0 +1,9 @@
+--TEST--
+phpt EXTENSIONS directive - static extension is present
+--EXTENSIONS--
+standard
+--FILE--
+<?php
+var_dump(extension_loaded('standard'));
+--EXPECT--
+bool(true)