summaryrefslogtreecommitdiff
path: root/ext/openssl/tests/ServerClientTestCase.inc
diff options
context:
space:
mode:
Diffstat (limited to 'ext/openssl/tests/ServerClientTestCase.inc')
-rw-r--r--ext/openssl/tests/ServerClientTestCase.inc80
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");
}
}