68 lines
2.5 KiB
PHP
68 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace Tests\Feature\Installation;
|
|
|
|
use App\Console\Commands\VerifySystemDatabase;
|
|
use App\Utilities\SystemDatabaseConfiguration;
|
|
use Mockery;
|
|
use RuntimeException;
|
|
use Tests\TestCase;
|
|
|
|
class VerifySystemDatabaseTest extends TestCase
|
|
{
|
|
public function test_verify_command_reports_configuration_not_loaded(): void
|
|
{
|
|
$configuration = Mockery::mock(SystemDatabaseConfiguration::class);
|
|
$configuration->shouldReceive('current')->once()->andReturn([
|
|
'mode' => 'bootstrap',
|
|
]);
|
|
$this->app->instance(SystemDatabaseConfiguration::class, $configuration);
|
|
|
|
$this->artisan('system-database:verify')
|
|
->assertExitCode(VerifySystemDatabase::EXIT_CONFIG_NOT_LOADED);
|
|
}
|
|
|
|
public function test_verify_command_reports_database_connection_failure(): void
|
|
{
|
|
$this->enableSharedMode();
|
|
|
|
$configuration = Mockery::mock(SystemDatabaseConfiguration::class);
|
|
$configuration->shouldReceive('current')->once()->andReturn([
|
|
'mode' => 'shared',
|
|
'connection' => 'missing-connection',
|
|
]);
|
|
$this->app->instance(SystemDatabaseConfiguration::class, $configuration);
|
|
|
|
$this->artisan('system-database:verify')
|
|
->assertExitCode(VerifySystemDatabase::EXIT_DATABASE_CONNECTION_FAILED);
|
|
}
|
|
|
|
public function test_verify_command_reports_system_table_failure(): void
|
|
{
|
|
$this->enableSharedMode();
|
|
|
|
$connection = (string) config('database.default');
|
|
$settings = [
|
|
'mode' => 'shared',
|
|
'connection' => $connection,
|
|
];
|
|
$configuration = Mockery::mock(SystemDatabaseConfiguration::class);
|
|
$configuration->shouldReceive('current')->once()->andReturn($settings);
|
|
$configuration->shouldReceive('probe')->once()->with($settings)->andThrow(new RuntimeException('hidden'));
|
|
$this->app->instance(SystemDatabaseConfiguration::class, $configuration);
|
|
|
|
$this->artisan('system-database:verify')
|
|
->assertExitCode(VerifySystemDatabase::EXIT_SYSTEM_TABLE_VALIDATION_FAILED);
|
|
}
|
|
|
|
private function enableSharedMode(): void
|
|
{
|
|
config([
|
|
'upstreams.stored_configuration.enabled' => true,
|
|
// 生产刷新节点可能通过私有隧道覆盖上游端点;这不影响系统数据库
|
|
// 本身是否已切换并加载,验证命令不能把两件事绑定在一起。
|
|
'upstreams.local_configuration.enabled' => true,
|
|
]);
|
|
}
|
|
}
|