1--TEST--
2preload_user is required when euid is 0 under non-cli SAPIs
3--INI--
4--EXTENSIONS--
5opcache
6posix
7--SKIPIF--
8<?php
9require dirname(__DIR__, 3) . '/sapi/fpm/tests/skipif.inc';
10if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows');
11if (posix_geteuid() !== 0) die('skip Test needs root user');
12?>
13--FILE--
14<?php
15
16require_once dirname(__DIR__, 3) . '/sapi/fpm/tests/tester.inc';
17
18$cfg = <<<EOT
19[global]
20error_log = {{FILE:LOG}}
21[unconfined]
22listen = {{ADDR}}
23pm = dynamic
24pm.max_children = 5
25pm.start_servers = 2
26pm.min_spare_servers = 1
27pm.max_spare_servers = 3
28EOT;
29
30$code = <<<EOT
31<?php
32var_dump(function_exists("f1"));
33var_dump(function_exists("f2"));
34?>
35OK
36EOT;
37
38$args = [];
39if (file_exists(ini_get('extension_dir').'/opcache.so')) {
40    $args[] = '-dzend_extension='.ini_get('extension_dir').'/opcache.so';
41}
42if (file_exists(ini_get('extension_dir').'/posix.so')) {
43    $args[] = '-dextension='.ini_get('extension_dir').'/posix.so';
44}
45$args = [
46    ...$args,
47    '-dopcache.enable=1',
48    '-dopcache.optimization_level=-1',
49    '-dopcache.preload='.__DIR__.'/preload.inc',
50    '-dopcache.log_verbosity_level=2',
51];
52
53$tester = new FPM\Tester($cfg, $code);
54$tester->start($args);
55var_dump($tester->getLogLines(1));
56$tester->terminate();
57$tester->close();
58
59?>
60Done
61--EXPECTF--
62array(1) {
63  [0]=>
64  string(%d) "%sFatal Error "opcache.preload" requires "opcache.preload_user" when running under uid 0
65"
66}
67Done
68--CLEAN--
69<?php
70require_once dirname(__DIR__, 3) . '/sapi/fpm/tests/tester.inc';
71FPM\Tester::clean();
72?>
73