coolify/tests/Unit/RestartCountTrackerTest.php

95 lines
2.7 KiB
PHP

<?php
use App\Services\RestartCountTracker;
it('starts a new generation when an active container restart count drops', function () {
$result = (new RestartCountTracker)->evaluate(
previousRestartCount: 11,
observedRestartCount: 0,
maxRestartCount: 2,
newGenerationConfirmed: true,
);
expect($result)->toMatchArray([
'restart_count' => 0,
'restart_count_changed' => true,
'restart_limit_reached' => false,
'new_generation' => true,
]);
});
it('evaluates the restart limit immediately in a new generation', function () {
$result = (new RestartCountTracker)->evaluate(
previousRestartCount: 11,
observedRestartCount: 3,
maxRestartCount: 2,
newGenerationConfirmed: true,
);
expect($result)->toMatchArray([
'restart_count' => 3,
'restart_count_changed' => true,
'restart_limit_reached' => true,
'new_generation' => true,
]);
});
it('does not reset the generation without explicit confirmation', function () {
$result = (new RestartCountTracker)->evaluate(
previousRestartCount: 11,
observedRestartCount: 0,
maxRestartCount: 2,
);
expect($result)->toMatchArray([
'restart_count' => 11,
'restart_count_changed' => false,
'restart_limit_reached' => false,
'new_generation' => false,
]);
});
it('preserves the previous count when an active payload omits the container with the previous maximum', function () {
$result = (new RestartCountTracker)->evaluate(
previousRestartCount: 11,
observedRestartCount: 3,
maxRestartCount: 20,
);
expect($result)->toMatchArray([
'restart_count' => 11,
'restart_count_changed' => false,
'restart_limit_reached' => false,
'new_generation' => false,
]);
});
it('detects a normal threshold crossing', function () {
$result = (new RestartCountTracker)->evaluate(
previousRestartCount: 1,
observedRestartCount: 2,
maxRestartCount: 2,
);
expect($result)->toMatchArray([
'restart_count' => 2,
'restart_count_changed' => true,
'restart_limit_reached' => true,
'new_generation' => false,
]);
});
it('detects a limit that is enabled below the current observed restart count', function () {
$result = (new RestartCountTracker)->evaluate(
previousRestartCount: 17,
observedRestartCount: 17,
maxRestartCount: 10,
);
expect($result)->toMatchArray([
'restart_count' => 17,
'restart_count_changed' => false,
'restart_limit_reached' => true,
'new_generation' => false,
]);
});