63 lines
2.0 KiB
PHP
63 lines
2.0 KiB
PHP
<?php
|
|
|
|
app_require('classes/edge_gateway_manager.php');
|
|
|
|
use classes\edge_gateway_manager;
|
|
|
|
it('derives effective gateway status from heartbeat freshness', function (
|
|
string $reportedStatus,
|
|
?string $lastHeartbeatAt,
|
|
string $currentTime,
|
|
string $expectedStatus
|
|
): void {
|
|
$effectiveStatus = edge_gateway_manager::resolveGatewayStatus(
|
|
$reportedStatus,
|
|
$lastHeartbeatAt,
|
|
strtotime($currentTime)
|
|
);
|
|
|
|
expect($effectiveStatus)->toBe($expectedStatus);
|
|
})->with([
|
|
'recent heartbeat stays online' => [
|
|
edge_gateway_manager::STATUS_ONLINE,
|
|
'2026-04-08 10:00:00',
|
|
'2026-04-08 10:00:59',
|
|
edge_gateway_manager::STATUS_ONLINE,
|
|
],
|
|
'late heartbeat degrades after one minute' => [
|
|
edge_gateway_manager::STATUS_ONLINE,
|
|
'2026-04-08 10:00:00',
|
|
'2026-04-08 10:01:00',
|
|
edge_gateway_manager::STATUS_DEGRADED,
|
|
],
|
|
'stale heartbeat goes offline after five minutes' => [
|
|
edge_gateway_manager::STATUS_ONLINE,
|
|
'2026-04-08 10:00:00',
|
|
'2026-04-08 10:05:00',
|
|
edge_gateway_manager::STATUS_OFFLINE,
|
|
],
|
|
'explicit offline reports stay offline even when heartbeat is fresh' => [
|
|
edge_gateway_manager::STATUS_OFFLINE,
|
|
'2026-04-08 10:04:55',
|
|
'2026-04-08 10:05:00',
|
|
edge_gateway_manager::STATUS_OFFLINE,
|
|
],
|
|
'missing heartbeat is treated as offline' => [
|
|
edge_gateway_manager::STATUS_ONLINE,
|
|
null,
|
|
'2026-04-08 10:05:00',
|
|
edge_gateway_manager::STATUS_OFFLINE,
|
|
],
|
|
]);
|
|
|
|
it('marks ready discovery as stale when the gateway heartbeat has expired', function (): void {
|
|
$gateway = edge_gateway_manager::deriveGatewayRuntimeState([
|
|
'status' => edge_gateway_manager::STATUS_ONLINE,
|
|
'last_heartbeat_at' => '2026-04-08 10:00:00',
|
|
'discovery_status' => 'READY',
|
|
], strtotime('2026-04-08 21:00:00'));
|
|
|
|
expect($gateway['status'])->toBe(edge_gateway_manager::STATUS_OFFLINE);
|
|
expect($gateway['discovery_status'])->toBe('STALE');
|
|
});
|