diff options
Diffstat (limited to 'ext/openssl/tests/ServerClientTestCase.inc')
| -rw-r--r-- | ext/openssl/tests/ServerClientTestCase.inc | 80 |
1 files changed, 52 insertions, 28 deletions
diff --git a/ext/openssl/tests/ServerClientTestCase.inc b/ext/openssl/tests/ServerClientTestCase.inc index f0e40fa535..4bad3c2995 100644 --- a/ext/openssl/tests/ServerClientTestCase.inc +++ b/ext/openssl/tests/ServerClientTestCase.inc @@ -2,14 +2,16 @@ const WORKER_ARGV_VALUE = 'RUN_WORKER'; -function phpt_notify() +const WORKER_DEFAULT_NAME = 'server'; + +function phpt_notify($worker = WORKER_DEFAULT_NAME) { - ServerClientTestCase::getInstance()->notify(); + ServerClientTestCase::getInstance()->notify($worker); } -function phpt_wait() +function phpt_wait($worker = WORKER_DEFAULT_NAME) { - ServerClientTestCase::getInstance()->wait(); + ServerClientTestCase::getInstance()->wait($worker); } /** @@ -20,11 +22,11 @@ class ServerClientTestCase { private $isWorker = false; - private $workerHandle; + private $workerHandle = []; - private $workerStdIn; + private $workerStdIn = []; - private $workerStdOut; + private $workerStdOut = []; private static $instance; @@ -46,26 +48,41 @@ class ServerClientTestCase $this->isWorker = $isWorker; } - private function spawnWorkerProcess($code) + private function spawnWorkerProcess($worker, $code) { if (defined("PHP_WINDOWS_VERSION_MAJOR")) { - $ini = php_ini_loaded_file(); - $cmd = sprintf('%s %s "%s" %s', PHP_BINARY, $ini ? "-n -c $ini" : "", __FILE__, WORKER_ARGV_VALUE); + $ini = php_ini_loaded_file(); + $cmd = sprintf( + '%s %s "%s" %s', + PHP_BINARY, $ini ? "-n -c $ini" : "", + __FILE__, + WORKER_ARGV_VALUE + ); } else { - $cmd = sprintf('%s "%s" %s', PHP_BINARY, __FILE__, WORKER_ARGV_VALUE); + $cmd = sprintf( + '%s "%s" %s %s', + PHP_BINARY, + __FILE__, + WORKER_ARGV_VALUE, + $worker + ); } - $this->workerHandle = proc_open($cmd, [['pipe', 'r'], ['pipe', 'w'], STDERR], $pipes); - $this->workerStdIn = $pipes[0]; - $this->workerStdOut = $pipes[1]; - - fwrite($this->workerStdIn, $code . "\n---\n"); + $this->workerHandle[$worker] = proc_open( + $cmd, + [['pipe', 'r'], ['pipe', 'w'], STDERR], + $pipes + ); + $this->workerStdIn[$worker] = $pipes[0]; + $this->workerStdOut[$worker] = $pipes[1]; + + fwrite($this->workerStdIn[$worker], $code . "\n---\n"); } - private function cleanupWorkerProcess() + private function cleanupWorkerProcess($worker) { - fclose($this->workerStdIn); - fclose($this->workerStdOut); - proc_close($this->workerHandle); + fclose($this->workerStdIn[$worker]); + fclose($this->workerStdOut[$worker]); + proc_close($this->workerHandle[$worker]); } private function stripPhpTagsFromCode($code) @@ -90,21 +107,28 @@ class ServerClientTestCase eval($code); } - public function run($proc1Code, $proc2Code) + public function run($masterCode, $workerCode) { - $this->spawnWorkerProcess($this->stripPhpTagsFromCode($proc2Code)); - eval($this->stripPhpTagsFromCode($proc1Code)); - $this->cleanupWorkerProcess(); + if (!is_array($workerCode)) { + $workerCode = [WORKER_DEFAULT_NAME => $workerCode]; + } + foreach ($workerCode as $worker => $code) { + $this->spawnWorkerProcess($worker, $this->stripPhpTagsFromCode($code)); + } + eval($this->stripPhpTagsFromCode($masterCode)); + foreach ($workerCode as $worker => $code) { + $this->cleanupWorkerProcess($worker); + } } - public function wait() + public function wait($worker) { - fgets($this->isWorker ? STDIN : $this->workerStdOut); + fgets($this->isWorker ? STDIN : $this->workerStdOut[$worker]); } - public function notify() + public function notify($worker) { - fwrite($this->isWorker ? STDOUT : $this->workerStdIn, "\n"); + fwrite($this->isWorker ? STDOUT : $this->workerStdIn[$worker], "\n"); } } |
