From 39902b8009f15e14767b59a095bf6d18991c3306 Mon Sep 17 00:00:00 2001 From: webchick <drupal@webchick.net> Date: Wed, 2 Sep 2015 09:58:29 -0700 Subject: [PATCH] Issue #2555109 by neclimdul, phenaproxima: MigrateTests incorrectly setup mock connection --- .../migrate/src/Tests/MigrateTestBase.php | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/core/modules/migrate/src/Tests/MigrateTestBase.php b/core/modules/migrate/src/Tests/MigrateTestBase.php index b0abea8c07cc..4138ede94432 100644 --- a/core/modules/migrate/src/Tests/MigrateTestBase.php +++ b/core/modules/migrate/src/Tests/MigrateTestBase.php @@ -59,7 +59,28 @@ abstract class MigrateTestBase extends KernelTestBase implements MigrateMessageI */ protected function setUp() { parent::setUp(); + $this->createMigrationConnection(); + } + + /** + * Changes the database connection to the prefixed one. + * + * @todo Remove when we don't use global. https://www.drupal.org/node/2552791 + */ + private function createMigrationConnection() { + // If the backup already exists, something went terribly wrong. + // This case is possible, because database connection info is a static + // global state construct on the Database class, which at least persists + // for all test methods executed in one PHP process. + if (Database::getConnectionInfo('simpletest_original_migrate')) { + throw new \RuntimeException("Bad Database connection state: 'simpletest_original_migrate' connection key already exists. Broken test?"); + } + // Clone the current connection and replace the current prefix. + $connection_info = Database::getConnectionInfo('migrate'); + if ($connection_info) { + Database::renameConnection('migrate', 'simpletest_original_migrate'); + } $connection_info = Database::getConnectionInfo('default'); foreach ($connection_info as $target => $value) { $prefix = is_array($value['prefix']) ? $value['prefix']['default'] : $value['prefix']; @@ -78,13 +99,26 @@ protected function setUp() { * {@inheritdoc} */ protected function tearDown() { - Database::removeConnection('migrate'); + $this->cleanupMigrateConnection(); parent::tearDown(); $this->databaseDumpFiles = []; $this->collectMessages = FALSE; unset($this->migration, $this->migrateMessages); } + /** + * Cleans up the test migrate connection. + * + * @todo Remove when we don't use global. https://www.drupal.org/node/2552791 + */ + private function cleanupMigrateConnection() { + Database::removeConnection('migrate'); + $original_connection_info = Database::getConnectionInfo('simpletest_original_migrate'); + if ($original_connection_info) { + Database::renameConnection('simpletest_original_migrate', 'migrate'); + } + } + /** * Load Drupal 6 database dumps to be used. * -- GitLab