You are here

protected function KernelTestBaseDatabaseDriverModuleTest::getDatabaseConnectionInfo in Drupal 9

Returns the Database connection info to be used for this test.

This method only exists for tests of the Database component itself, because they require multiple database connections. Each SQLite :memory: connection creates a new/separate database in memory. A shared-memory SQLite file URI triggers PHP open_basedir/allow_url_fopen/allow_url_include restrictions. Due to that, Database tests are running against a SQLite database that is located in an actual file in the system's temporary directory.

Other tests should not override this method.

@internal

Return value

array A Database connection info array.

Overrides KernelTestBase::getDatabaseConnectionInfo

File

core/tests/Drupal/KernelTests/KernelTestBaseDatabaseDriverModuleTest.php, line 19

Class

KernelTestBaseDatabaseDriverModuleTest
@coversDefaultClass \Drupal\KernelTests\KernelTestBase

Namespace

Drupal\KernelTests

Code

protected function getDatabaseConnectionInfo() {

  // If the test is run with argument SIMPLETEST_DB then use it.
  $db_url = getenv('SIMPLETEST_DB');
  if (empty($db_url)) {
    throw new \Exception('There is no database connection so no tests can be run. You must provide a SIMPLETEST_DB environment variable to run PHPUnit based functional tests outside of run-tests.sh. See https://www.drupal.org/node/2116263#skipped-tests for more information.');
  }
  else {
    $database = Database::convertDbUrlToConnectionInfo($db_url, $this->root);
    if (in_array($database['driver'], [
      'mysql',
      'pgsql',
    ])) {

      // Change the used database driver to the one provided by the module
      // "driver_test".
      $driver = 'Drivertest' . ucfirst($database['driver']);
      $database['driver'] = $driver;
      $database['namespace'] = 'Drupal\\driver_test\\Driver\\Database\\' . $driver;
      $database['autoload'] = "core/modules/system/tests/modules/driver_test/src/Driver/Database/{$driver}/";
    }
    Database::addConnectionInfo('default', 'default', $database);
  }

  // Clone the current connection and replace the current prefix.
  $connection_info = Database::getConnectionInfo('default');
  if (!empty($connection_info)) {
    Database::renameConnection('default', 'simpletest_original_default');
    foreach ($connection_info as $target => $value) {

      // Replace the full table prefix definition to ensure that no table
      // prefixes of the test runner leak into the test.
      $connection_info[$target]['prefix'] = [
        'default' => $this->databasePrefix,
      ];
    }
  }
  return $connection_info;
}