Add Resque_Event::listen() call to register the testsession state switcher

with the silverstripe-resque module.
This commit is contained in:
Matt 2014-02-12 13:47:40 +13:00
parent 9b72ee0554
commit bdc3d6a835
1 changed files with 24 additions and 1 deletions

View File

@ -1,4 +1,27 @@
<?php
// Determine whether there is a testsession currently running, and if so - setup the persistent details for it.
Injector::inst()->get('TestSessionEnvironment')->loadFromFile();
Injector::inst()->get('TestSessionEnvironment')->loadFromFile();
/**
* This closure will run every time a Resque_Event is forked (just before it is forked, so it applies to the parent
* and child process).
*/
if(class_exists('Resque_Event') && class_exists('SSResqueRun')) {
Resque_Event::listen('beforeFork', function($data) {
global $databaseConfig;
// Reconnect to the database - this may connect to the old DB first, but is required because these processes
// are long-lived, and MySQL connections often get closed in between worker runs. We need to connect before
// calling {@link TestSessionEnvironment::loadFromFile()}.
DB::connect($databaseConfig);
$testEnv = Injector::inst()->get('TestSessionEnvironment');
if($testEnv->isRunningTests()) {
$testEnv->loadFromFile();
} else {
$testEnv->endTestSession();
}
});
}