function TestDatabase::getTestLock

Same name in other branches
  1. 9 core/lib/Drupal/Core/Test/TestDatabase.php \Drupal\Core\Test\TestDatabase::getTestLock()
  2. 8.9.x core/lib/Drupal/Core/Test/TestDatabase.php \Drupal\Core\Test\TestDatabase::getTestLock()
  3. 10 core/lib/Drupal/Core/Test/TestDatabase.php \Drupal\Core\Test\TestDatabase::getTestLock()

Generates a unique lock ID for the test method.

Parameters

bool $create_lock: (optional) Whether or not to create a lock file. Defaults to FALSE.

Return value

int The unique lock ID for the test method.

1 call to TestDatabase::getTestLock()
TestDatabase::__construct in core/lib/Drupal/Core/Test/TestDatabase.php
TestDatabase constructor.
1 method overrides TestDatabase::getTestLock()
TestTestDatabase::getTestLock in core/tests/Drupal/Tests/Core/Test/TestDatabaseTest.php
Generates a unique lock ID for the test method.

File

core/lib/Drupal/Core/Test/TestDatabase.php, line 89

Class

TestDatabase
Provides helper methods for interacting with the fixture database.

Namespace

Drupal\Core\Test

Code

protected function getTestLock(bool $create_lock = FALSE) : int {
    // There is a risk that the generated random number is a duplicate. This
    // would cause different tests to try to use the same database prefix.
    // Therefore, if running with a concurrency of greater than 1, we need to
    // create a lock.
    if (getenv('RUN_TESTS_CONCURRENCY') > 1) {
        $create_lock = TRUE;
    }
    do {
        $lock_id = mt_rand(10000000, 99999999);
        if ($create_lock && @symlink(__FILE__, $this->getLockFile($lock_id)) === FALSE) {
            // If we can't create a symlink, the lock ID is in use. Generate another
            // one. Symlinks are used because they are atomic and reliable.
            $lock_id = NULL;
        }
    } while ($lock_id === NULL);
    return $lock_id;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.