Merge pull request #34 from alchemy-fr/timeouts

Enhance timeouts
This commit is contained in:
Romain Neutron 2013-04-21 09:00:59 -07:00
commit 443939ba9a
3 changed files with 96 additions and 3 deletions

View file

@ -82,6 +82,34 @@ Basic Usage
->extractImage(12, 'second-screenshot.jpg') ->extractImage(12, 'second-screenshot.jpg')
->close(); ->close();
Process Timeout
---------------
PHP-FFMpeg runs ffmpeg commands to processs your medias. A default timeout of
60 seconds is set, but you can override this by passing a second argument load :
.. code-block:: php
<?php
$ffmpeg = FFMpeg::load($logger, 500);
// 500
echo $ffmpeg->getTimeOut();
You can also set and get the timeout with the appropriate getter and setter :
.. code-block:: php
<?php
$ffmpeg->setTimeout(200);
// 200
echo $ffmpeg->getTimeOut();
.. note::
To disable timeout, set its value to 0.
Recipes Recipes
------- -------

View file

@ -12,6 +12,7 @@
namespace FFMpeg; namespace FFMpeg;
use FFMpeg\Exception\BinaryNotFoundException; use FFMpeg\Exception\BinaryNotFoundException;
use FFMpeg\Exception\InvalidArgumentException;
use Monolog\Logger; use Monolog\Logger;
use Symfony\Component\Process\ExecutableFinder; use Symfony\Component\Process\ExecutableFinder;
@ -40,7 +41,7 @@ abstract class Binary implements AdapterInterface
* *
* @param type $binary The path file to the binary * @param type $binary The path file to the binary
* @param Logger $logger A logger * @param Logger $logger A logger
* @param Integer $timeout The timout for the underlying process * @param Integer $timeout The timout for the underlying process, 0 means no timeout
*/ */
public function __construct($binary, Logger $logger, $timeout = 60) public function __construct($binary, Logger $logger, $timeout = 60)
{ {
@ -50,7 +51,35 @@ abstract class Binary implements AdapterInterface
$this->binary = $binary; $this->binary = $binary;
$this->logger = $logger; $this->logger = $logger;
$this->setTimeout($timeout);
}
/**
* Returns the current timeout for underlying processes.
*
* @return integer|float
*/
public function getTimeout()
{
return $this->timeout;
}
/**
* Sets the timeout for the underlying processes, use 0 to disable timeout.
*
* @param integer|float $timeout
*
* @return Binary
*/
public function setTimeout($timeout)
{
if (0 > $timeout) {
throw new InvalidArgumentException('Timeout must be a positive value');
}
$this->timeout = $timeout; $this->timeout = $timeout;
return $this;
} }
/** /**
@ -65,11 +94,13 @@ abstract class Binary implements AdapterInterface
* {@inheritdoc} * {@inheritdoc}
* *
* @param Logger $logger A logger * @param Logger $logger A logger
* @param Integer $timeout The timout for the underlying process, 0 means no timeout
*
* @return Binary The binary * @return Binary The binary
* *
* @throws Exception\BinaryNotFoundException * @throws Exception\BinaryNotFoundException
*/ */
public static function load(Logger $logger) public static function load(Logger $logger, $timeout = 60)
{ {
$finder = new ExecutableFinder(); $finder = new ExecutableFinder();
$binary = null; $binary = null;
@ -84,7 +115,7 @@ abstract class Binary implements AdapterInterface
throw new BinaryNotFoundException('Binary not found'); throw new BinaryNotFoundException('Binary not found');
} }
return new static($binary, $logger); return new static($binary, $logger, $timeout);
} }
/** /**

View file

@ -29,6 +29,40 @@ class BinaryTest extends \PHPUnit_Framework_TestCase
$binary = new BinaryTester('pretty_binary', $this->logger); $binary = new BinaryTester('pretty_binary', $this->logger);
} }
public function testTimeout()
{
$tester = BinaryTester::load($this->logger, 200);
$this->assertEquals(200, $tester->getTimeout());
}
public function testDefaultTimeout()
{
$tester = BinaryTester::load($this->logger);
$this->assertEquals(60, $tester->getTimeout());
}
public function testNoTimeout()
{
$tester = BinaryTester::load($this->logger, 0);
$this->assertEquals(0, $tester->getTimeout());
}
public function testSetTimeout()
{
$tester = BinaryTester::load($this->logger);
$tester->setTimeout(200);
$this->assertEquals(200, $tester->getTimeout());
}
/**
* @expectedException \FFMpeg\Exception\InvalidArgumentException
*/
public function testSetInvalidTimeout()
{
$tester = BinaryTester::load($this->logger);
$tester->setTimeout(-1);
}
/** /**
* @covers FFMpeg\Binary::load * @covers FFMpeg\Binary::load
*/ */