Merge pull request #229 from chrisboulton/exceptions

Surface Redis exceptions instead of silently returning false
This commit is contained in:
Chris Boulton 2016-10-14 16:36:10 -07:00 committed by GitHub
commit 6b560798c4
5 changed files with 61 additions and 27 deletions

View File

@ -111,11 +111,11 @@ class Resque_Redis
*/
public function __construct($server, $database = null)
{
try {
if (is_array($server)) {
$this->driver = new Credis_Cluster($server);
}
else {
list($host, $port, $dsnDatabase, $user, $password, $options) = self::parseDsn($server);
// $user is not used, only $password
@ -141,6 +141,10 @@ class Resque_Redis
$this->driver->select($database);
}
}
catch(CredisException $e) {
throw new Resque_RedisException('Error communicating with Redis: ' . $e->getMessage(), 0, $e);
}
}
/**
* Parse a DSN string, which can have one of the following formats:
@ -241,7 +245,7 @@ class Resque_Redis
return $this->driver->__call($name, $args);
}
catch (CredisException $e) {
return false;
throw new Resque_RedisException('Error communicating with Redis: ' . $e->getMessage(), 0, $e);
}
}

View File

@ -0,0 +1,12 @@
<?php
/**
* Redis related exceptions
*
* @package Resque
* @author Chris Boulton <chris@bigcommerce.com>
* @license http://www.opensource.org/licenses/mit-license.php
*/
class Resque_RedisException extends Resque_Exception
{
}
?>

View File

@ -26,6 +26,15 @@ class Resque_Tests_JobTest extends Resque_Tests_TestCase
$this->assertTrue((bool)Resque::enqueue('jobs', 'Test_Job'));
}
/**
* @expectedException Resque_RedisException
*/
public function testRedisErrorThrowsExceptionOnJobCreation()
{
Resque::setBackend('redis://255.255.255.255:1234');
Resque::enqueue('jobs', 'This is a test');
}
public function testQeueuedJobCanBeReserved()
{
Resque::enqueue('jobs', 'Test_Job');

View File

@ -1,13 +1,21 @@
<?php
/**
* Resque_Redis DSN tests.
* Resque_Event tests.
*
* @package Resque/Tests
* @author Iskandar Najmuddin <github@iskandar.co.uk>
* @author Chris Boulton <chris@bigcommerce.com>
* @license http://www.opensource.org/licenses/mit-license.php
*/
class Resque_Tests_DsnTest extends Resque_Tests_TestCase
class Resque_Tests_RedisTest extends Resque_Tests_TestCase
{
/**
* @expectedException Resque_RedisException
*/
public function testRedisExceptionsAreSurfaced()
{
$redis = new Resque_Redis('redis://255.255.255.255:1234');
$redis->ping();
}
/**
* These DNS strings are considered valid.
@ -178,5 +186,4 @@ class Resque_Tests_DsnTest extends Resque_Tests_TestCase
// The next line should throw an InvalidArgumentException
$result = Resque_Redis::parseDsn($dsn);
}
}

View File

@ -22,6 +22,8 @@ class Resque_Tests_TestCase extends PHPUnit_Framework_TestCase
preg_match('#^\s*port\s+([0-9]+)#m', $config, $matches);
$this->redis = new Credis_Client('localhost', $matches[1]);
Resque::setBackend('redis://localhost:' . $matches[1]);
// Flush redis
$this->redis->flushAll();
}