1--TEST--
2preload_user=root is allowed 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');
12if (posix_getpwnam('root') === false) die('skip Root user does not exist');
13?>
14--FILE--
15<?php
16
17require_once dirname(__DIR__, 3) . '/sapi/fpm/tests/tester.inc';
18
19$cfg = <<<EOT
20[global]
21error_log = {{FILE:LOG}}
22[unconfined]
23listen = {{ADDR}}
24pm = dynamic
25pm.max_children = 5
26pm.start_servers = 2
27pm.min_spare_servers = 1
28pm.max_spare_servers = 3
29EOT;
30
31$code = <<<EOT
32<?php
33var_dump(function_exists("f1"));
34var_dump(function_exists("f2"));
35?>
36OK
37EOT;
38
39$args = [];
40if (file_exists(ini_get('extension_dir').'/opcache.so')) {
41    $args[] = '-dzend_extension='.ini_get('extension_dir').'/opcache.so';
42}
43if (file_exists(ini_get('extension_dir').'/posix.so')) {
44    $args[] = '-dextension='.ini_get('extension_dir').'/posix.so';
45}
46$args = [
47    ...$args,
48    '-dopcache.enable=1',
49    '-dopcache.optimization_level=-1',
50    '-dopcache.preload='.__DIR__.'/preload.inc',
51    '-dopcache.preload_user=root',
52    '-dopcache.log_verbosity_level=2',
53    '-R',
54];
55
56$tester = new FPM\Tester($cfg, $code);
57$tester->start($args);
58$tester->expectLogStartNotices();
59$tester
60    ->request()
61    ->expectBody([
62        'bool(true)',
63        'bool(false)',
64        'OK',
65    ]);
66$tester->terminate();
67$tester->close();
68
69?>
70Done
71--EXPECT--
72Done
73--CLEAN--
74<?php
75require_once dirname(__DIR__, 3) . '/sapi/fpm/tests/tester.inc';
76FPM\Tester::clean();
77?>
78