mirror of
https://github.com/coollabsio/coolify.git
synced 2026-06-13 19:09:50 +00:00
36526928df
Move Sentinel push handling into a controller and dispatch server update jobs only when container state changes or the force interval elapses. Add opt-in PostgreSQL read/write replica configuration and tune periodic proxy network and storage checks to reduce unnecessary work. Add feature coverage for replica config, Sentinel push deduplication, deployment log scrolling, and server update job optimizations.
75 lines
2.2 KiB
PHP
75 lines
2.2 KiB
PHP
<?php
|
|
|
|
/*
|
|
* Verifies the opt-in read/write replica split in config/database.php.
|
|
* The config file is re-required under different putenv() states so the
|
|
* env() calls re-evaluate, then the resulting pgsql array shape is asserted.
|
|
*/
|
|
|
|
function loadDbConfig(): array
|
|
{
|
|
return require base_path('config/database.php');
|
|
}
|
|
|
|
afterEach(function () {
|
|
foreach ([
|
|
'DB_READ_HOST', 'DB_READ_PORT', 'DB_READ_USERNAME', 'DB_READ_PASSWORD',
|
|
'DB_WRITE_HOST', 'DB_WRITE_PORT', 'DB_WRITE_USERNAME', 'DB_WRITE_PASSWORD',
|
|
'DB_STICKY',
|
|
] as $key) {
|
|
putenv($key);
|
|
}
|
|
});
|
|
|
|
it('has no replica keys when DB_READ_HOST is unset', function () {
|
|
$pgsql = loadDbConfig()['connections']['pgsql'];
|
|
|
|
expect($pgsql)
|
|
->not->toHaveKey('read')
|
|
->not->toHaveKey('write')
|
|
->not->toHaveKey('sticky')
|
|
->and($pgsql['driver'])->toBe('pgsql');
|
|
});
|
|
|
|
it('enables the read/write split when DB_READ_HOST is set', function () {
|
|
putenv('DB_READ_HOST=replica1, replica2');
|
|
|
|
$pgsql = loadDbConfig()['connections']['pgsql'];
|
|
|
|
expect($pgsql)
|
|
->toHaveKey('read')
|
|
->toHaveKey('write')
|
|
->and($pgsql['read']['host'])->toBe(['replica1', 'replica2'])
|
|
->and($pgsql['sticky'])->toBeTrue();
|
|
});
|
|
|
|
it('falls back to DB_* values for unset replica options', function () {
|
|
putenv('DB_READ_HOST=replica1');
|
|
|
|
$pgsql = loadDbConfig()['connections']['pgsql'];
|
|
|
|
expect($pgsql['read']['port'])->toBe(env('DB_PORT', '5432'))
|
|
->and($pgsql['read']['username'])->toBe(env('DB_USERNAME', 'coolify'))
|
|
->and($pgsql['write']['host'])->toBe([env('DB_HOST', 'coolify-db')]);
|
|
});
|
|
|
|
it('respects discrete replica overrides', function () {
|
|
putenv('DB_READ_HOST=replica1');
|
|
putenv('DB_READ_PORT=6432');
|
|
putenv('DB_READ_USERNAME=reader');
|
|
|
|
$pgsql = loadDbConfig()['connections']['pgsql'];
|
|
|
|
expect($pgsql['read']['port'])->toBe('6432')
|
|
->and($pgsql['read']['username'])->toBe('reader');
|
|
});
|
|
|
|
it('disables sticky reads when DB_STICKY is false', function () {
|
|
putenv('DB_READ_HOST=replica1');
|
|
putenv('DB_STICKY=false');
|
|
|
|
$pgsql = loadDbConfig()['connections']['pgsql'];
|
|
|
|
expect($pgsql['sticky'])->toBeFalse();
|
|
});
|