use folk_runtime_embed::php::{PhpInstance, RequestContext};
#[test]
fn opcache_enabled_in_embed() {
let mut php = PhpInstance::boot_custom_sapi().expect("boot failed");
let mut ctx = RequestContext::new("GET", "/");
php.set_request_context(&mut ctx);
php.request_startup().expect("startup failed");
let result = php
.eval("echo extension_loaded('Zend OPcache') ? 'yes' : 'no';")
.expect("eval failed");
assert_eq!(result.output, "yes", "OPcache should be loaded");
let result = php
.eval("echo ini_get('opcache.enable') ? 'on' : 'off';")
.expect("eval failed");
assert_eq!(result.output, "on", "opcache.enable should be on");
let result = php
.eval("echo ini_get('opcache.enable_cli') ? 'on' : 'off';")
.expect("eval failed");
assert_eq!(result.output, "on", "opcache.enable_cli should be on");
php.request_shutdown();
}
#[test]
fn opcache_validate_timestamps_off() {
let mut php = PhpInstance::boot_custom_sapi().expect("boot failed");
let mut ctx = RequestContext::new("GET", "/");
php.set_request_context(&mut ctx);
php.request_startup().expect("startup failed");
let result = php
.eval("echo ini_get('opcache.validate_timestamps');")
.expect("eval failed");
assert_eq!(result.output, "0", "validate_timestamps should be 0");
php.request_shutdown();
}
#[test]
fn opcache_status_available() {
let mut php = PhpInstance::boot_custom_sapi().expect("boot failed");
let mut ctx = RequestContext::new("GET", "/");
php.set_request_context(&mut ctx);
php.request_startup().expect("startup failed");
let result = php
.eval(
"if (function_exists('opcache_get_status')) { \
$s = opcache_get_status(false); \
echo $s !== false ? 'available' : 'disabled'; \
} else { echo 'no_ext'; }",
)
.expect("eval failed");
assert_ne!(result.output, "no_ext", "opcache_get_status should exist");
php.request_shutdown();
}
#[test]
fn opcache_caches_eval_files() {
let mut php = PhpInstance::boot_custom_sapi().expect("boot failed");
let mut ctx = RequestContext::new("GET", "/");
php.set_request_context(&mut ctx);
php.request_startup().expect("startup failed");
let result = php
.eval(
"$tmp = tempnam(sys_get_temp_dir(), 'folk_test_'); \
file_put_contents($tmp, '<?php function folk_opcache_test() { return 42; }'); \
require_once $tmp; \
echo folk_opcache_test();",
)
.expect("eval failed");
assert_eq!(result.output, "42");
php.request_shutdown();
let mut ctx2 = RequestContext::new("GET", "/");
php.set_request_context(&mut ctx2);
php.request_startup().expect("startup failed");
let result = php
.eval(
"if (function_exists('opcache_get_status')) { \
$s = opcache_get_status(true); \
echo count($s['scripts'] ?? []); \
} else { echo '0'; }",
)
.expect("eval failed");
let cached: i32 = result.output.parse().unwrap_or(0);
assert!(cached >= 0, "cached scripts count should be non-negative");
php.request_shutdown();
}