From 17b5a9ad9b082460cf78cf9448099757cf78e6e4 Mon Sep 17 00:00:00 2001 From: Dominik Beerbohm Date: Mon, 1 Jun 2026 12:52:42 +0200 Subject: [PATCH] ENH Add support for paratest The [paratest](https://github.com/paratestphp/paratest) library allows it to run multiple tests in parallel. To ensure that the tests don't inference with each other, a TEST_TOKEN is provided which must be added to the database-name and temp folder. --- src/Core/TempFolder.php | 5 +++++ src/ORM/Connect/TempDatabase.php | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Core/TempFolder.php b/src/Core/TempFolder.php index 1c3167860df..564977e1338 100644 --- a/src/Core/TempFolder.php +++ b/src/Core/TempFolder.php @@ -23,6 +23,11 @@ public static function getTempFolder($base) // Append php version to username folder to avoid issues when upgrading php $folderName .= '-' . preg_replace('/[^\w\-\.+]+/', '-', PHP_VERSION); + // Append paratest token to the folder name + if (($token = getenv('TEST_TOKEN')) !== false) { + $folderName .= '-' . $token; + } + // The actual temp folder is a subfolder of getTempParentFolder() $subfolder = Path::join($parent, $folderName); diff --git a/src/ORM/Connect/TempDatabase.php b/src/ORM/Connect/TempDatabase.php index 66dae3e91c8..68fe9e9c24e 100644 --- a/src/ORM/Connect/TempDatabase.php +++ b/src/ORM/Connect/TempDatabase.php @@ -56,11 +56,13 @@ public function __construct($name = DB::CONN_PRIMARY) */ protected function isDBTemp($name) { - $prefix = Environment::getEnv('SS_DATABASE_PREFIX') ?: 'ss_'; + $prefix = preg_quote(Environment::getEnv('SS_DATABASE_PREFIX') ?: 'ss_', '/') . '([0-9]+_)?'; + $result = preg_match( - sprintf('/^%stmpdb_[0-9]+_[0-9]+$/i', preg_quote($prefix ?? '', '/')), + sprintf('/^%stmpdb_[0-9]+_[0-9]+$/i', $prefix), $name ?? '' ); + return $result === 1; } @@ -198,6 +200,11 @@ public function build() // Create a temporary database, and force the connection to use UTC for time $dbConn = $this->getConn(); $prefix = Environment::getEnv('SS_DATABASE_PREFIX') ?: 'ss_'; + + if (($token = getenv('TEST_TOKEN')) !== false) { + $prefix .= $token . '_'; + } + do { $dbname = strtolower(sprintf('%stmpdb_%s_%s', $prefix, time(), rand(1000000, 9999999))); } while ($dbConn->databaseExists($dbname));