test(ui): cover degraded overview health semantics
CI / Type Check & Lint (push) Successful in 6s
CI / Build Test (Current Platform) (push) Successful in 6s
CI / Build All Platforms (push) Successful in 38s

This commit is contained in:
2026-04-21 13:36:53 +00:00
parent 405fff91af
commit 4af9d3de69
+55
View File
@@ -0,0 +1,55 @@
import { assertEquals } from 'jsr:@std/assert@^1.0.0';
import { ClusterManager } from '../ts/cluster/cluster-manager.ts';
import { UiServer } from '../ts/ui/server.ts';
Deno.test('UiServer overview mirrors degraded API health semantics', async () => {
const port = 20300 + Math.floor(Math.random() * 1000);
const cluster = new ClusterManager();
cluster.configure({
enabled: false,
nodeName: 'ui-test-node',
role: 'standalone',
bindHost: '127.0.0.1',
gossipPort: 7946,
heartbeatIntervalMs: 5000,
seedNodes: [],
});
const server = new UiServer(
{ enabled: true, port, host: '127.0.0.1', assetSource: 'disk' },
{
async getAllStatus() {
return new Map([
['vllm-1', { running: false, health: 'unhealthy' }],
]);
},
async getAllAvailableModels() {
return new Map();
},
} as never,
cluster,
);
(server as unknown as {
gpuDetector: { detectGpus: () => Promise<unknown[]> };
}).gpuDetector = {
async detectGpus() {
return [{ id: 'nvidia-0' }];
},
};
await server.start();
try {
const response = await fetch(`http://127.0.0.1:${port}/_ui/overview`);
const body = await response.json();
assertEquals(response.status, 200);
assertEquals(body.health.status, 'degraded');
assertEquals(body.health.reasons.includes('unhealthy_container'), true);
assertEquals(body.health.reasons.includes('no_models_available'), true);
assertEquals(body.node.name, 'ui-test-node');
} finally {
await server.stop();
}
});