207 lines
6.1 KiB
PHP
207 lines
6.1 KiB
PHP
<?php
|
|
/**
|
|
* This file is part of cocur/background-process.
|
|
*
|
|
* (c) 2013-2014 Florian Eckerstorfer
|
|
*/
|
|
|
|
namespace Cocur\BackgroundProcess;
|
|
|
|
/**
|
|
* BackgroundProcessTest
|
|
*
|
|
* @category test
|
|
* @package cocur/background-process
|
|
* @author Florian Eckerstorfer <florian@eckerstorfer.co>
|
|
* @copyright 2013-2104 Florian Eckerstorfer
|
|
* @license http://opensource.org/licenses/MIT The MIT License
|
|
* @group functional
|
|
*/
|
|
class BackgroundProcessTest extends \PHPUnit_Framework_TestCase
|
|
{
|
|
/**
|
|
* @test
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::run()
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::isRunning()
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::getOS()
|
|
*/
|
|
public function runShouldRunCommand()
|
|
{
|
|
if (preg_match('/^WIN/', PHP_OS)) {
|
|
$command = sprintf('tests\\fixtures\\cmd.bat', __DIR__);
|
|
} else {
|
|
$command = sprintf('./tests/fixtures/cmd.sh', __DIR__);
|
|
}
|
|
|
|
$checkFile = __DIR__.DIRECTORY_SEPARATOR.'fixtures'.DIRECTORY_SEPARATOR.'runShouldRunCommand.log';
|
|
|
|
$process = new BackgroundProcess($command);
|
|
$process->run();
|
|
|
|
sleep(1);
|
|
|
|
$this->assertStringStartsWith('ok', file_get_contents($checkFile));
|
|
|
|
unlink($checkFile);
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::isRunning()
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::getOS()
|
|
*/
|
|
public function isRunningShouldReturnIfProcessIsRunning()
|
|
{
|
|
if (preg_match('/^WIN/', PHP_OS)) {
|
|
$this->markTestSkipped('Cocur\BackgroundProcess\BackgroundProcess::isRunning() is not supported on '.
|
|
'Windows.');
|
|
|
|
return;
|
|
}
|
|
|
|
$process = new BackgroundProcess('sleep 3');
|
|
|
|
$this->assertFalse($process->isRunning());
|
|
$process->run();
|
|
$this->assertTrue($process->isRunning());
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::isRunning()
|
|
* @expectedException \RuntimeException
|
|
*/
|
|
public function isRunningShouldThrowExceptionIfWindows()
|
|
{
|
|
if (!preg_match('/^WIN/', PHP_OS)) {
|
|
$this->markTestSkipped('Cocur\BackgroundProcess\BackgroundProcess::isRunning() is supported on *nix '.
|
|
'systems and does not need to throw an exception.');
|
|
|
|
return;
|
|
}
|
|
|
|
$process = new BackgroundProcess('sleep 1');
|
|
$process->isRunning();
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::run()
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::getOS()
|
|
*/
|
|
public function runShouldWriteOutputToFile()
|
|
{
|
|
if (preg_match('/^WIN/', PHP_OS)) {
|
|
$this->markTestSkipped('Cocur\BackgroundProcess\BackgroundProcess::run() does not support writing output '.
|
|
'into a file on Windows.');
|
|
|
|
return;
|
|
}
|
|
|
|
$outputFile = __DIR__.'/fixtures/runShouldWriteOutputToFile.log';
|
|
|
|
$process = new BackgroundProcess('ls');
|
|
$process->run($outputFile);
|
|
|
|
sleep(1);
|
|
$this->assertNotNull(file_get_contents($outputFile));
|
|
unlink($outputFile);
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::getPid()
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::getOS()
|
|
*/
|
|
public function getPidShouldReturnPidOfProcess()
|
|
{
|
|
if (preg_match('/^WIN/', PHP_OS)) {
|
|
$this->markTestSkipped('Cocur\BackgroundProcess\BackgroundProcess::getPid() is not supported on Windows.');
|
|
|
|
return;
|
|
}
|
|
|
|
$process = new BackgroundProcess('sleep 3');
|
|
$process->run();
|
|
|
|
$this->assertNotNull($process->getPid());
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::getPid()
|
|
* @expectedException \RuntimeException
|
|
*/
|
|
public function getPidShouldThrowExceptionIfWindows()
|
|
{
|
|
if (!preg_match('/^WIN/', PHP_OS)) {
|
|
$this->markTestSkipped('Cocur\BackgroundProcess\BackgroundProcess::getPid() is supported on *nix systems '.
|
|
'and does not need to throw an exception.');
|
|
|
|
return;
|
|
}
|
|
|
|
$process = new BackgroundProcess('sleep 1');
|
|
$process->getPid();
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::stop()
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::getOS()
|
|
*/
|
|
public function stopShouldStopRunningProcess()
|
|
{
|
|
if (preg_match('/^WIN/', PHP_OS)) {
|
|
$this->markTestSkipped('Cocur\BackgroundProcess\BackgroundProcess::stop() is not supported on Windows.');
|
|
|
|
return;
|
|
}
|
|
|
|
$process = new BackgroundProcess('sleep 5');
|
|
$process->run();
|
|
|
|
$this->assertTrue($process->stop());
|
|
$this->assertFalse($process->isRunning());
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::stop()
|
|
* @expectedException \RuntimeException
|
|
*/
|
|
public function stopShouldThrowExceptionIfWindows()
|
|
{
|
|
if (!preg_match('/^WIN/', PHP_OS)) {
|
|
$this->markTestSkipped('Cocur\BackgroundProcess\BackgroundProcess::stop() is supported on *nix systems '.
|
|
'and does not need to throw an exception.');
|
|
|
|
return;
|
|
}
|
|
|
|
$process = new BackgroundProcess('sleep 1');
|
|
$process->stop();
|
|
}
|
|
|
|
/**
|
|
* @test
|
|
* @covers Cocur\BackgroundProcess\BackgroundProcess::createFromPID()
|
|
*/
|
|
public function createFromPIDShouldCreateObjectFromPID()
|
|
{
|
|
if (preg_match('/^WIN/', PHP_OS)) {
|
|
$this->markTestSkipped('Cocur\BackgroundProcess\BackgroundProcess::createFromPID() is not supported on Windows.');
|
|
|
|
return;
|
|
}
|
|
$process = new BackgroundProcess('sleep 1');
|
|
$process->run();
|
|
$pid = $process->getPid();
|
|
|
|
$newProcess = BackgroundProcess::createFromPID($pid);
|
|
|
|
$this->assertEquals($pid, $newProcess->getPid());
|
|
$this->assertTrue($newProcess->stop());
|
|
}
|
|
}
|