markTestSkipped('Cannot run on Windows'); } else if (!in_array(substr(PHP_SAPI, 0, 3), array('cli', 'cgi'))) { $this->markTestSkipped('Can only run on CLI or CGI enviroment'); } else if (!function_exists('shmop_open')) { $this->markTestSkipped('shmop_* functions are required'); } else if (!function_exists('pcntl_fork')) { $this->markTestSkipped('pcntl_* functions are required'); } else if (!function_exists('posix_kill')) { $this->markTestSkipped('posix_* functions are required'); } } public function testStop() { $startTime = microtime(true); $process = new sleepingProcess(); $process->start(); $process->stop(); $diffTime = round(microtime(true) - $startTime); $this->assertEquals(0, $diffTime); } public function testAutomaticEnding() { $startTime = microtime(true); $process = new simpleProcess(); $process->start(); do { usleep(10); $diffTime = round(microtime(true) - $startTime); } while ($process->isRunning() && $diffTime < 2); $process->stop(); $this->assertEquals(1, $diffTime); } public function testParallel() { $startTime = microtime(true); $process1 = new sleepingProcess(); $process2 = new sleepingProcess(); $process1->start(); $process2->start(); do { usleep(10); $diffTime = round(microtime(true) - $startTime); } while (($process1->isRunning() || $process2->isRunning()) && $diffTime < 3); $process1->stop(); $process2->stop(); $this->assertEquals(2, $diffTime); } public function testVariables() { $startTime = microtime(true); $process = new variableProcess(); $process->start(); $process->setVariable('request', true); do { usleep(10); $diffTime = round(microtime(true) - $startTime); $response = $process->getVariable('response'); } while ($response === null && $diffTime < 3); $process->stop(); $this->assertTrue($response); } public function testAlive() { $startTime = microtime(true); $process = new aliveProcess(); $process->start(); sleep(2); $this->assertEquals(1, $process->getLastAlive()); $process->stop(); } } class simpleProcess extends ZendX_Console_Process_Unix { protected function _run() { } } class sleepingProcess extends ZendX_Console_Process_Unix { protected function _run() { sleep(1); } } class variableProcess extends ZendX_Console_Process_Unix { protected function _run() { $var = null; do { $var = $this->getVariable('request'); } while ($var === NULL); $this->setVariable('response', true); } } class aliveProcess extends ZendX_Console_Process_Unix { protected function _run() { $this->_setAlive(); } } // Call ZendX_Console_Process_UnixTest::main() if this source file is executed directly. if (PHPUnit_MAIN_METHOD == "ZendX_Console_Process_UnixTest::main") { ZendX_Console_Process_UnixTest::main(); }