mirror of
https://github.com/tiennm99/coolify.git
synced 2026-08-25 20:27:18 +00:00
Split V5 dashboard behavior into domain controllers and policies, add agent token rotation/revocation, status reconciliation jobs, ingress firewall syncing, and canvas connection APIs. Add migrations for V5 status tracking, server capabilities, resource connection aliases, and revoked agent tokens.
73 lines
2.3 KiB
PHP
73 lines
2.3 KiB
PHP
<?php
|
|
|
|
use App\Models\V5\Server as V5Server;
|
|
use Illuminate\Support\Facades\Config;
|
|
use Illuminate\Testing\TestResponse;
|
|
use Tests\Support\V5TestSchema;
|
|
|
|
beforeEach(function () {
|
|
Config::set('broadcasting.default', 'log');
|
|
Config::set('cache.default', 'array');
|
|
|
|
V5TestSchema::dropAllTables();
|
|
V5TestSchema::createAllTables();
|
|
|
|
V5Server::query()->create([
|
|
'team_id' => 1,
|
|
'created_by_user_id' => 1,
|
|
'name' => 'edge-01',
|
|
'host' => '203.0.113.10',
|
|
'ssh_user' => 'root',
|
|
'ssh_port' => 22,
|
|
'status' => 'installed',
|
|
'wireguard_management_ip' => '100.64.0.5',
|
|
]);
|
|
});
|
|
|
|
afterEach(function () {
|
|
V5TestSchema::dropAllTables();
|
|
});
|
|
|
|
function postFluxContainerStatus(string $bearer): TestResponse
|
|
{
|
|
return test()->postJson('/api/v1/internal/flux/resource-status', [
|
|
'resource_type' => 'container',
|
|
'host_id' => '100.64.0.5',
|
|
'container_id' => 'external-container-id',
|
|
'container_name' => 'external-container',
|
|
'status' => 'running',
|
|
], [
|
|
'Authorization' => 'Bearer '.$bearer,
|
|
]);
|
|
}
|
|
|
|
it('accepts an inbound token listed in the rotatable token array', function () {
|
|
Config::set('flux.laravel_api_token', null);
|
|
Config::set('flux.laravel_api_tokens', ['old-token', 'new-token']);
|
|
|
|
postFluxContainerStatus('new-token')->assertSuccessful();
|
|
postFluxContainerStatus('old-token')->assertSuccessful();
|
|
});
|
|
|
|
it('still accepts the single fallback token alongside the array', function () {
|
|
Config::set('flux.laravel_api_token', 'single-token');
|
|
Config::set('flux.laravel_api_tokens', ['array-token']);
|
|
|
|
postFluxContainerStatus('single-token')->assertSuccessful();
|
|
postFluxContainerStatus('array-token')->assertSuccessful();
|
|
});
|
|
|
|
it('rejects a token that is in neither the array nor the fallback', function () {
|
|
Config::set('flux.laravel_api_token', 'single-token');
|
|
Config::set('flux.laravel_api_tokens', ['array-token']);
|
|
|
|
postFluxContainerStatus('unknown-token')->assertUnauthorized();
|
|
});
|
|
|
|
it('rejects an empty bearer token even when no tokens are configured', function () {
|
|
Config::set('flux.laravel_api_token', null);
|
|
Config::set('flux.laravel_api_tokens', []);
|
|
|
|
postFluxContainerStatus('')->assertUnauthorized();
|
|
});
|