Files
api/services/nginx/app/tests/Support/run_ci_suite.php
T

111 lines
3.6 KiB
PHP

<?php
declare(strict_types=1);
$suite = strtolower((string)($argv[1] ?? ''));
$commonEnv = [
'USE_ENV' => 'true',
'CONFIG_DB_TARGET' => 'debug',
'CONFIG_DB_HOST' => 'mysql-debug',
'CONFIG_DB_USER' => 'root',
'CONFIG_DB_PASSWORD' => 'debug_root_password',
'CONFIG_DB_DATABASE' => 'nnks_db_debug',
'CONFIG_DB_PORT' => '3306',
'CONFIG_DB_DEBUG_HOST' => 'mysql-debug',
'CONFIG_DB_DEBUG_USER' => 'root',
'CONFIG_DB_DEBUG_PASSWORD' => 'debug_root_password',
'CONFIG_DB_DEBUG_DATABASE' => 'nnks_db_debug',
'CONFIG_DB_DEBUG_PORT' => '3306',
'REDIS_CONFIG_HOST' => 'redis',
'REDIS_CONFIG_PORT' => '6379',
'REDIS_CONFIG_DATABASE' => '0',
'REDIS_CONFIG_DEBUG_HOST' => 'redis',
'REDIS_CONFIG_DEBUG_PORT' => '6379',
'REDIS_CONFIG_DEBUG_DATABASE' => '0',
'EDGE_BROKER_SHARED_SECRET' => 'truckwash-edge-ci',
'EDGE_GATEWAY_VIEW_CACHE_TTL' => '0',
'TRUCKWASH_TEST_BLOCK_REAL_SHELLY' => '1',
];
foreach ($commonEnv as $key => $value) {
putenv($key . '=' . $value);
$_ENV[$key] = $value;
$_SERVER[$key] = $value;
}
$commands = [
'unit' => [
'vendor/bin/pest --testsuite=Unit --colors=always',
],
'integration' => [
'RUN_INTEGRATION_TESTS=1 vendor/bin/pest --testsuite=Integration --colors=always',
],
'api' => [
'RUN_API_TESTS=1 API_TEST_BOOTSTRAP_SCHEMA=1 API_TEST_ALLOW_LIVE_DB=1 API_TEST_REQUEST_TIMEOUT=180 vendor/bin/pest --testsuite=Api --colors=always',
],
'legacy' => [
'RUN_LEGACY_TESTS=1 RUN_INTEGRATION_TESTS=1 RUN_API_TESTS=1 API_TEST_BOOTSTRAP_SCHEMA=1 API_TEST_ALLOW_LIVE_DB=1 API_TEST_REQUEST_TIMEOUT=180 vendor/bin/pest --testsuite=Legacy --colors=always',
],
];
function reset_ci_state(): void
{
$database = getenv('CONFIG_DB_DATABASE') ?: 'nnks_db_debug';
if (!preg_match('/^[A-Za-z0-9_]+$/', $database)) {
fwrite(STDERR, 'Refusing to reset unsafe database name: ' . $database . PHP_EOL);
exit(2);
}
$db = new mysqli(
getenv('CONFIG_DB_HOST') ?: 'mysql-debug',
getenv('CONFIG_DB_USER') ?: 'root',
getenv('CONFIG_DB_PASSWORD') ?: 'debug_root_password',
'',
(int)(getenv('CONFIG_DB_PORT') ?: 3306)
);
if ($db->connect_errno) {
fwrite(STDERR, 'Unable to reset CI database: ' . $db->connect_error . PHP_EOL);
exit(1);
}
$db->query("DROP DATABASE IF EXISTS `{$database}`");
$db->query("CREATE DATABASE `{$database}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
$db->close();
$redisHost = escapeshellarg(getenv('REDIS_CONFIG_HOST') ?: 'redis');
$redisPort = (int)(getenv('REDIS_CONFIG_PORT') ?: 6379);
$redisDb = (int)(getenv('REDIS_CONFIG_DATABASE') ?: 0);
passthru("redis-cli -h {$redisHost} -p {$redisPort} -n {$redisDb} FLUSHDB >/dev/null", $redisExitCode);
if ($redisExitCode !== 0) {
fwrite(STDERR, 'Unable to reset CI Redis database.' . PHP_EOL);
exit($redisExitCode);
}
}
if ($suite === 'all') {
foreach (['unit', 'integration', 'api', 'legacy'] as $selectedSuite) {
reset_ci_state();
foreach ($commands[$selectedSuite] as $command) {
passthru($command, $exitCode);
if ($exitCode !== 0) {
exit($exitCode);
}
}
}
exit(0);
} elseif (isset($commands[$suite])) {
$selectedCommands = $commands[$suite];
} else {
fwrite(STDERR, "Usage: php tests/Support/run_ci_suite.php <unit|integration|api|legacy|all>" . PHP_EOL);
exit(2);
}
foreach ($selectedCommands as $command) {
passthru($command, $exitCode);
if ($exitCode !== 0) {
exit($exitCode);
}
}