You are here

public function ReplicaKillSwitchTest::testSystemInitIgnoresSecondaries in Drupal 9

Same name and namespace in other branches
  1. 8 core/tests/Drupal/KernelTests/Core/Database/ReplicaKillSwitchTest.php \Drupal\KernelTests\Core\Database\ReplicaKillSwitchTest::testSystemInitIgnoresSecondaries()

Tests database.replica_kill_switch service.

File

core/tests/Drupal/KernelTests/Core/Database/ReplicaKillSwitchTest.php, line 23

Class

ReplicaKillSwitchTest
Tests that ReplicaKillSwitch functions correctly.

Namespace

Drupal\KernelTests\Core\Database

Code

public function testSystemInitIgnoresSecondaries() {

  // Clone the master credentials to a replica connection.
  // Note this will result in two independent connection objects that happen
  // to point to the same place.
  $connection_info = Database::getConnectionInfo('default');
  Database::addConnectionInfo('default', 'replica', $connection_info['default']);

  /** @var \Drupal\Core\Database\ReplicaKillSwitch $service */
  $service = \Drupal::service('database.replica_kill_switch');
  $service
    ->trigger();
  $class_loader = (require $this->root . '/autoload.php');
  $kernel = new DrupalKernel('testing', $class_loader, FALSE);
  $event = new RequestEvent($kernel, Request::create('http://example.com'), HttpKernelInterface::MASTER_REQUEST);
  $service
    ->checkReplicaServer($event);
  $db1 = Database::getConnection('default', 'default');
  $db2 = Database::getConnection('replica', 'default');
  $this
    ->assertSame($db1, $db2, 'System Init ignores secondaries when requested.');

  // Makes sure that session value set right.
  $session = \Drupal::service('session');
  $this
    ->assertTrue($session
    ->has('ignore_replica_server'));
  $expected = \Drupal::time()
    ->getRequestTime() + Settings::get('maximum_replication_lag', 300);
  $this
    ->assertEquals($expected, $session
    ->get('ignore_replica_server'));
}