mirror of
https://github.com/silverstripe/silverstripe-testsession
synced 2024-10-22 12:06:00 +00:00
Compare commits
2 Commits
35f4268383
...
dc76ac2877
Author | SHA1 | Date | |
---|---|---|---|
|
dc76ac2877 | ||
|
d7c4b0c420 |
@ -12,7 +12,7 @@ TestSessionEnvironment::singleton()->loadFromFile();
|
||||
*/
|
||||
if (class_exists('Resque_Event') && class_exists('SSResqueRun')) {
|
||||
Resque_Event::listen('beforeFork', function ($data) {
|
||||
$databaseConfig = DB::getConfig();
|
||||
$databaseConfig = DB::getConfig(DB::CONN_PRIMARY);
|
||||
|
||||
// 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
|
||||
|
@ -272,7 +272,7 @@ class TestSessionEnvironment
|
||||
$this->extend('onBeforeApplyState', $state);
|
||||
|
||||
// back up source
|
||||
$databaseConfig = DB::getConfig();
|
||||
$databaseConfig = DB::getConfig(DB::CONN_PRIMARY);
|
||||
$this->oldDatabaseName = $databaseConfig['database'];
|
||||
|
||||
// Load existing state from $this->state into $state, if there is any
|
||||
@ -523,9 +523,9 @@ class TestSessionEnvironment
|
||||
public function resetDatabaseName()
|
||||
{
|
||||
if ($this->oldDatabaseName) {
|
||||
$databaseConfig = DB::getConfig();
|
||||
$databaseConfig = DB::getConfig(DB::CONN_PRIMARY);
|
||||
$databaseConfig['database'] = $this->oldDatabaseName;
|
||||
DB::setConfig($databaseConfig);
|
||||
DB::setConfig($databaseConfig, DB::CONN_PRIMARY);
|
||||
|
||||
$conn = DB::get_conn();
|
||||
|
||||
@ -568,7 +568,7 @@ class TestSessionEnvironment
|
||||
$state = $this->getState();
|
||||
}
|
||||
|
||||
$databaseConfig = DB::getConfig();
|
||||
$databaseConfig = DB::getConfig(DB::CONN_PRIMARY);
|
||||
|
||||
if (isset($state->database) && $state->database) {
|
||||
if (!DB::get_conn()) {
|
||||
@ -579,14 +579,14 @@ class TestSessionEnvironment
|
||||
}
|
||||
|
||||
// Connect to database
|
||||
DB::connect($databaseConfig);
|
||||
$this->connectToDB($databaseConfig);
|
||||
} else {
|
||||
// We've already connected to the database, do a fast check to see what database we're currently using
|
||||
$db = DB::get_conn()->getSelectedDatabase();
|
||||
if (isset($state->database) && $db != $state->database) {
|
||||
$this->oldDatabaseName = $databaseConfig['database'];
|
||||
$databaseConfig['database'] = $state->database;
|
||||
DB::connect($databaseConfig);
|
||||
$this->connectToDB($databaseConfig);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -622,4 +622,17 @@ class TestSessionEnvironment
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private function connectToDB(array $databaseConfig): void
|
||||
{
|
||||
if (method_exists(DB::class, 'hasConfig')) {
|
||||
// CMS 5.4+ - ensure we connect the primary connection and not a replica
|
||||
// which can happen if we use the default value of DB::CONN_DYNAMIC
|
||||
// and there is a replica database configured
|
||||
DB::connect($databaseConfig, DB::CONN_PRIMARY);
|
||||
} else {
|
||||
// CMS 5.3 and below do not support replica connections, use 'default' connection
|
||||
DB::connect($databaseConfig);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user