Skip to content

Add support for replaying warnings in opcache #5600

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 18 additions & 14 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,22 +12,26 @@ trigger:
- UPGRADING.INTERNALS

jobs:
- template: azure/job.yml
- template: azure/file_cache_job.yml
parameters:
configurationName: DEBUG_NTS
configurationParameters: '--enable-debug --disable-zts'
- template: azure/job.yml
parameters:
configurationName: RELEASE_ZTS
configurationParameters: '--disable-debug --enable-zts'
- template: azure/i386/job.yml
parameters:
configurationName: I386_DEBUG_ZTS
configurationParameters: '--enable-debug --enable-zts'
- template: azure/macos/job.yml
parameters:
configurationName: MACOS_DEBUG_NTS
configurationName: DEBUG_NTS_FILE_CACHE
configurationParameters: '--enable-debug --disable-zts'
# - template: azure/job.yml
# parameters:
# configurationName: DEBUG_NTS
# configurationParameters: '--enable-debug --disable-zts'
# - template: azure/job.yml
# parameters:
# configurationName: RELEASE_ZTS
# configurationParameters: '--disable-debug --enable-zts'
# - template: azure/i386/job.yml
# parameters:
# configurationName: I386_DEBUG_ZTS
# configurationParameters: '--enable-debug --enable-zts'
# - template: azure/macos/job.yml
# parameters:
# configurationName: MACOS_DEBUG_NTS
# configurationParameters: '--enable-debug --disable-zts'
- ${{ if eq(variables['Build.Reason'], 'Schedule') }}:
- template: azure/job.yml
parameters:
Expand Down
60 changes: 60 additions & 0 deletions azure/file_cache_job.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
parameters:
configurationName: ''
configurationParameters: ''
runTestsParameters: ''
timeoutInMinutes: 60

jobs:
- job: ${{ parameters.configurationName }}
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
pool:
vmImage: 'ubuntu-18.04'
steps:
- template: apt.yml
- template: configure.yml
parameters:
configurationParameters: ${{ parameters.configurationParameters }}
- script: make -j$(/usr/bin/nproc) >/dev/null
displayName: 'Make Build'
- template: install.yml
- script: |
set -e
sudo service mysql start
mysql -uroot -proot -e "CREATE DATABASE IF NOT EXISTS test"
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
sudo -u postgres psql -c "CREATE DATABASE test;"
displayName: 'Setup'
- template: test.yml
parameters:
configurationName: ${{ parameters.configurationName }}
runTestsName: 'File Cache (prime)'
runTestsParameters: >-
${{ parameters.runTestsParameters }}
-d zend_extension=opcache.so
--file-cache-prime
- template: test.yml
parameters:
configurationName: ${{ parameters.configurationName }}
runTestsName: 'File Cache (use)'
runTestsParameters: >-
${{ parameters.runTestsParameters }}
-d zend_extension=opcache.so
--file-cache-use
- template: test.yml
parameters:
configurationName: ${{ parameters.configurationName }}
runTestsName: 'File Cache Only (prime)'
runTestsParameters: >-
${{ parameters.runTestsParameters }}
-d zend_extension=opcache.so
--file-cache-prime
-d opcache.file_cache_only=1
- template: test.yml
parameters:
configurationName: ${{ parameters.configurationName }}
runTestsName: 'File Cache Only (use)'
runTestsParameters: >-
${{ parameters.runTestsParameters }}
-d zend_extension=opcache.so
--file-cache-use
-d opcache.file_cache_only=1
1 change: 1 addition & 0 deletions ext/ffi/tests/300.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ opcache.enable=1
opcache.enable_cli=1
opcache.optimization_level=-1
opcache.preload={PWD}/preload.inc
opcache.file_cache_only=0
--FILE--
<?php
$ffi = FFI::scope("TEST_300");
Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/create_new_and_modify.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Phar: create and modify phar
--INI--
phar.readonly=0
phar.require_hash=1
opcache.validate_timestamps=1
--FILE--
<?php

Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/delete_in_phar.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Phar: delete a file within a .phar
--INI--
phar.readonly=0
phar.require_hash=0
opcache.validate_timestamps=1
--FILE--
<?php
$fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar.php';
Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/delete_in_phar_confirm.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Phar: delete a file within a .phar (confirm disk file is changed)
--INI--
phar.readonly=0
phar.require_hash=0
opcache.validate_timestamps=1
--FILE--
<?php
$fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar.php';
Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/front.phar.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
Phar front controller with mounted external file
--INI--
default_charset=UTF-8
opcache.validate_timestamps=1
--SKIPIF--
<?php if (!extension_loaded("phar")) die("skip"); ?>
--ENV--
Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/tar/create_new_and_modify.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Phar: create and modify tar-based phar
<?php if (!extension_loaded("phar")) die("skip"); ?>
--INI--
phar.readonly=0
opcache.validate_timestamps=1
--FILE--
<?php

Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/tar/delete_in_phar.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Phar: delete a file within a tar-based .phar
--INI--
phar.readonly=0
phar.require_hash=0
opcache.validate_timestamps=1
--FILE--
<?php

Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/tar/delete_in_phar_confirm.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Phar: delete a file within a tar-based .phar (confirm disk file is changed)
--INI--
phar.readonly=0
phar.require_hash=0
opcache.validate_timestamps=1
--FILE--
<?php

Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/tar/tar_004.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ if (!extension_loaded("phar")) die("skip");
--INI--
phar.readonly=0
phar.require_hash=0
opcache.validate_timestamps=1
--FILE--
<?php
include __DIR__ . '/files/tarmaker.php.inc';
Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/zip/create_new_and_modify.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Phar: create and modify zip-based phar
<?php if (!extension_loaded("phar")) die("skip"); ?>
--INI--
phar.readonly=0
opcache.validate_timestamps=1
--FILE--
<?php

Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/zip/delete_in_phar.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Phar: delete a file within a zip-based .phar
--INI--
phar.readonly=0
phar.require_hash=0
opcache.validate_timestamps=1
--FILE--
<?php

Expand Down
1 change: 1 addition & 0 deletions ext/phar/tests/zip/delete_in_phar_confirm.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Phar: delete a file within a zip-based .phar (confirm disk file is changed)
--INI--
phar.readonly=0
phar.require_hash=0
opcache.validate_timestamps=1
--FILE--
<?php

Expand Down
43 changes: 38 additions & 5 deletions run-tests.php
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ function main()
$repeat, $result_tests_file, $slow_min_ms, $start_time, $switch,
$temp_source, $temp_target, $temp_urlbase, $test_cnt, $test_dirs,
$test_files, $test_idx, $test_list, $test_results, $testfile,
$user_tests, $valgrind, $sum_results, $shuffle;
$user_tests, $valgrind, $sum_results, $shuffle, $file_cache;
// Parallel testing
global $workers, $workerID;

Expand Down Expand Up @@ -396,6 +396,7 @@ function main()
$no_clean = false;
$slow_min_ms = INF;
$preload = false;
$file_cache = null;
$shuffle = false;
$workers = null;

Expand Down Expand Up @@ -529,6 +530,12 @@ function main()
case '--preload':
$preload = true;
break;
case '--file-cache-prime':
$file_cache = 'prime';
break;
case '--file-cache-use':
$file_cache = 'use';
break;
case '--no-clean':
$no_clean = true;
break;
Expand Down Expand Up @@ -708,6 +715,11 @@ function main()
fclose($result_tests_file);
}

if (0 == count($test_results)) {
echo "No tests were run.\n";
return;
}

compute_summary();
if ($html_output) {
fwrite($html_file, "<hr/>\n" . get_summary(false, true));
Expand Down Expand Up @@ -1272,10 +1284,18 @@ function system_with_timeout($commandline, $env = null, $stdin = null, $captureS

function run_all_tests($test_files, $env, $redir_tested = null)
{
global $test_results, $failed_tests_file, $result_tests_file, $php, $test_idx;
global $test_results, $failed_tests_file, $result_tests_file, $php, $test_idx, $file_cache;
// Parallel testing
global $PHP_FAILED_TESTS, $workers, $workerID, $workerSock;

if ($file_cache !== null) {
/* Automatically skip opcache tests in --file-cache mode,
* because opcache generally doesn't expect those to run under file cache */
$test_files = array_filter($test_files, function($test) {
return !is_string($test) || false === strpos($test, 'ext/opcache');
});
}

/* Ignore -jN if there is only one file to analyze. */
if ($workers !== null && count($test_files) > 1 && !$workerID) {
run_all_tests_parallel($test_files, $env, $redir_tested);
Expand Down Expand Up @@ -1763,7 +1783,7 @@ function run_test($php, $file, $env)
global $SHOW_ONLY_GROUPS;
global $no_file_cache;
global $slow_min_ms;
global $preload;
global $preload, $file_cache;
// Parallel testing
global $workerID;
$temp_filenames = null;
Expand Down Expand Up @@ -2087,9 +2107,9 @@ function run_test($php, $file, $env)
$ext_params = array();
settings2array($ini_overwrites, $ext_params);
$ext_params = settings2params($ext_params);
$ext_dir = `$php $pass_options $extra_options $ext_params -d display_errors=0 -r "echo ini_get('extension_dir');"`;
$ext_dir = `$php $pass_options $extra_options $ext_params $no_file_cache -d display_errors=0 -r "echo ini_get('extension_dir');"`;
$extensions = preg_split("/[\n\r]+/", trim($section_text['EXTENSIONS']));
$loaded = explode(",", `$php $pass_options $extra_options $ext_params -d display_errors=0 -r "echo implode(',', get_loaded_extensions());"`);
$loaded = explode(",", `$php $pass_options $extra_options $ext_params $no_file_cache -d display_errors=0 -r "echo implode(',', get_loaded_extensions());"`);
$ext_prefix = IS_WINDOWS ? "php_" : "";
foreach ($extensions as $req_ext) {
if (!in_array($req_ext, $loaded)) {
Expand All @@ -2108,6 +2128,19 @@ function run_test($php, $file, $env)

$orig_ini_settings = settings2params($ini_settings);

if ($file_cache !== null) {
$ini_settings['opcache.file_cache'] = '/tmp';
// Make sure warnings still show up on the second run.
$ini_settings['opcache.record_warnings'] = '1';
// File cache is currently incompatible with JIT.
$ini_settings['opcache.jit'] = '0';
if ($file_cache === 'use') {
// Disable timestamp validation in order to fetch from file cache,
// even though all the files are re-created.
$ini_settings['opcache.validate_timestamps'] = '0';
}
}

// Any special ini settings
// these may overwrite the test defaults...
if (array_key_exists('INI', $section_text)) {
Expand Down
2 changes: 1 addition & 1 deletion sapi/phpdbg/tests/info_001.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ prompt> ------------------------------------------------
Function Breakpoints:
#0 foo
prompt> [User-defined constants (0)]
prompt> [Included files: 0]
prompt> [Included files: %d]%A
prompt> [No error found!]
prompt> [Literal Constants in foo() (2)]
|-------- C0 -------> [var_dump]
Expand Down