public function ConnectionUnitTest::testConnectionSerialization

Tests the serialization and unserialization of a database connection.

File

drupal/core/modules/system/lib/Drupal/system/Tests/Database/ConnectionUnitTest.php, line 232
Contains Drupal\system\Tests\Database\ConnectionUnitTest.

Class

ConnectionUnitTest
Tests management of database connections.

Namespace

Drupal\system\Tests\Database

Code

public function testConnectionSerialization() {
  $db = Database::getConnection('default', 'default');
  try {
    $serialized = serialize($db);
    $this
      ->pass('The database connection can be serialized.');
    $unserialized = unserialize($serialized);
    $this
      ->assertTrue(get_class($unserialized) === get_class($db));
  } catch (\Exception $e) {
    $this
      ->fail('The database connection cannot be serialized.');
  }

  // Ensure that all properties on the unserialized object are the same.
  $db_reflection = new \ReflectionObject($db);
  $unserialized_reflection = new \ReflectionObject($unserialized);
  foreach ($db_reflection
    ->getProperties() as $value) {

    // Skip the pdo connection object.
    if ($value
      ->getName() == 'connection') {
      continue;
    }
    $value
      ->setAccessible(TRUE);
    $unserialized_property = $unserialized_reflection
      ->getProperty($value
      ->getName());
    $unserialized_property
      ->setAccessible(TRUE);
    $this
      ->assertEqual($unserialized_property
      ->getValue($unserialized), $value
      ->getValue($db));
  }
}