* @copyright (c) 2010 Chris Boulton * @license http://www.opensource.org/licenses/mit-license.php */ define('CWD', dirname(__FILE__)); define('RESQUE_LIB', CWD . '/../../../lib/'); define('TEST_MISC', realpath(CWD . '/../../misc/')); define('REDIS_CONF', TEST_MISC . '/redis.conf'); // Change to the directory this file lives in. This is important, due to // how we'll be running redis. require_once CWD . '/TestCase.php'; // Include Resque require_once RESQUE_LIB . 'Resque.php'; require_once RESQUE_LIB . 'Resque/Worker.php'; // Attempt to start our own redis instance for tesitng. exec('which redis-server', $output, $returnVar); if($returnVar != 0) { echo "Cannot find redis-server in path. Please make sure redis is installed.\n"; exit(1); } exec('cd ' . TEST_MISC . '; redis-server ' . REDIS_CONF, $output, $returnVar); usleep(500000); if($returnVar != 0) { echo "Cannot start redis-server.\n"; exit(1); } // Get redis port from conf $config = file_get_contents(REDIS_CONF); if(!preg_match('#^\s*port\s+([0-9]+)#m', $config, $matches)) { echo "Could not determine redis port from redis.conf"; exit(1); } Resque::setBackend('localhost:' . $matches[1]); // Shutdown function killRedis($pid) { if (getmypid() !== $pid) { return; // don't kill from a forked worker } $config = file_get_contents(REDIS_CONF); if(!preg_match('#^\s*pidfile\s+([^\s]+)#m', $config, $matches)) { return; } $pidFile = TEST_MISC . '/' . $matches[1]; $pid = trim(file_get_contents($pidFile)); posix_kill($pid, 9); if(is_file($pidFile)) { unlink($pidFile); } // Remove the redis database if(!preg_match('#^\s*dir\s+([^\s]+)#m', $config, $matches)) { return; } $dir = $matches[1]; if(!preg_match('#^\s*dbfilename\s+([^\s]+)#m', $config, $matches)) { return; } $filename = TEST_MISC . '/' . $dir . '/' . $matches[1]; if(is_file($filename)) { unlink($filename); } } register_shutdown_function('killRedis', getmypid()); if(function_exists('pcntl_signal')) { // Override INT and TERM signals, so they do a clean shutdown and also // clean up redis-server as well. function sigint() { exit; } pcntl_signal(SIGINT, 'sigint'); pcntl_signal(SIGTERM, 'sigint'); } class Test_Job { public function perform() { } } class Failing_Job_Exception extends Exception { } class Failing_Job { public function perform() { throw new Failing_Job_Exception('Message!'); } } class Test_Job_Without_Perform_Method { } class Test_Job_With_SetUp { public static $called = false; public $args = false; public function setUp() { self::$called = true; } public function perform() { } } class Test_Job_With_TearDown { public static $called = false; public $args = false; public function perform() { } public function tearDown() { self::$called = true; } }