summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Pott2016-07-25 10:37:39 (GMT)
committerAlex Pott2016-07-25 10:37:39 (GMT)
commit32fa9448c41f0c88e92d35cbb6265d7b7013b1b4 (patch)
treeaadf4f531d5dc8f2b106e4ce4e021d059e592d14
parentfd33967358fd43c945ff0c4bf075c6e528f04cd0 (diff)
Issue #2223073 by stefan.r, superspring, daffie, Dave Reid, Jalandhar: Calling DatabaseSchema::getPrefixInfo() on a non-default connection returns the wrong database - write tests
-rw-r--r--core/tests/Drupal/KernelTests/Core/Database/PrefixInfoTest.php66
1 files changed, 66 insertions, 0 deletions
diff --git a/core/tests/Drupal/KernelTests/Core/Database/PrefixInfoTest.php b/core/tests/Drupal/KernelTests/Core/Database/PrefixInfoTest.php
new file mode 100644
index 0000000..131fb7a
--- /dev/null
+++ b/core/tests/Drupal/KernelTests/Core/Database/PrefixInfoTest.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace Drupal\KernelTests\Core\Database;
+
+use Drupal\Core\Database\Database;
+
+/**
+ * Tests that the prefix info for a database schema is correct.
+ *
+ * @group Database
+ */
+class PrefixInfoTest extends DatabaseTestBase {
+
+ /**
+ * Tests that DatabaseSchema::getPrefixInfo() returns the right database.
+ *
+ * We are testing if the return array of the method
+ * \Drupal\Core\Database\Driver\mysql\Schema::getPrefixInfo(). This return
+ * array is a keyed array with info about amongst other things the database.
+ * The other two by Drupal core supported databases do not have this variable
+ * set in the return array.
+ */
+ function testGetPrefixInfo() {
+ $connection_info = Database::getConnectionInfo('default');
+ if ($connection_info['default']['driver'] == 'mysql') {
+ // Copy the default connection info to the 'extra' key.
+ Database::addConnectionInfo('extra', 'default', $connection_info['default']);
+
+ $db1_connection = Database::getConnection('default', 'default');
+ $db1_schema = $db1_connection->schema();
+ $db2_connection = Database::getConnection('default', 'extra');
+
+ // Get the prefix info for the first databse.
+ $method = new \ReflectionMethod($db1_schema, 'getPrefixInfo');
+ $method->setAccessible(TRUE);
+ $db1_info = $method->invoke($db1_schema);
+
+ // We change the database after opening the connection, so as to prevent
+ // connecting to a non-existent database.
+ $reflection = new \ReflectionObject($db2_connection);
+ $property = $reflection->getProperty('connectionOptions');
+ $property->setAccessible(TRUE);
+ $connection_info['default']['database'] = 'foobar';
+ $property->setValue($db2_connection, $connection_info['default']);
+
+ // For testing purposes, we also change the database info.
+ $reflection_class = new \ReflectionClass('Drupal\Core\Database\Database');
+ $property = $reflection_class->getProperty('databaseInfo');
+ $property->setAccessible(TRUE);
+ $info = $property->getValue();
+ $info['extra']['default']['database'] = 'foobar';
+ $property->setValue(NULL, $info);
+
+ $extra_info = Database::getConnectionInfo('extra');
+ $this->assertSame($extra_info['default']['database'], 'foobar');
+ $db2_schema = $db2_connection->schema();
+ $db2_info = $method->invoke($db2_schema);
+
+ $this->assertNotSame($db2_info['database'], $db1_info['database'], 'Each target connection has a different database.');
+ $this->assertSame($db2_info['database'], 'foobar', 'The new profile has a different database.');
+
+ Database::removeConnection('extra');
+ }
+ }
+
+}