test(config): cover config init and show output
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
import { assertEquals } from 'jsr:@std/assert@^1.0.0';
|
||||
import { ConfigHandler } from '../ts/cli/config-handler.ts';
|
||||
import { PATHS } from '../ts/constants.ts';
|
||||
import { logger } from '../ts/logger.ts';
|
||||
|
||||
Deno.test('ConfigHandler init writes the current default config shape', async () => {
|
||||
const tempDir = await Deno.makeTempDir();
|
||||
const originalConfigDir = PATHS.CONFIG_DIR;
|
||||
const originalConfigFile = PATHS.CONFIG_FILE;
|
||||
(PATHS as { CONFIG_DIR: string }).CONFIG_DIR = tempDir;
|
||||
(PATHS as { CONFIG_FILE: string }).CONFIG_FILE = `${tempDir}/config.json`;
|
||||
|
||||
try {
|
||||
const handler = new ConfigHandler();
|
||||
await handler.init();
|
||||
|
||||
const config = JSON.parse(await Deno.readTextFile(`${tempDir}/config.json`));
|
||||
assertEquals(config.ui.enabled, true);
|
||||
assertEquals(config.ui.assetSource, 'bundle');
|
||||
assertEquals(config.cluster.role, 'standalone');
|
||||
assertEquals(config.models.registryUrl, 'https://list.modelgrid.com/catalog/models.json');
|
||||
assertEquals(config.models.autoDeploy, true);
|
||||
assertEquals(config.models.defaultEngine, 'vllm');
|
||||
} finally {
|
||||
(PATHS as { CONFIG_DIR: string }).CONFIG_DIR = originalConfigDir;
|
||||
(PATHS as { CONFIG_FILE: string }).CONFIG_FILE = originalConfigFile;
|
||||
await Deno.remove(tempDir, { recursive: true });
|
||||
}
|
||||
});
|
||||
|
||||
Deno.test('ConfigHandler show renders canonical model and ui settings', async () => {
|
||||
const tempDir = await Deno.makeTempDir();
|
||||
const originalConfigFile = PATHS.CONFIG_FILE;
|
||||
const boxes: Array<{ title: string; lines: string[] }> = [];
|
||||
const originalLog = logger.log;
|
||||
const originalLogBox = logger.logBox;
|
||||
|
||||
(PATHS as { CONFIG_FILE: string }).CONFIG_FILE = `${tempDir}/config.json`;
|
||||
|
||||
logger.log = (_message: string) => {};
|
||||
logger.logBox = (
|
||||
title: string,
|
||||
lines: string[],
|
||||
) => {
|
||||
boxes.push({ title, lines });
|
||||
};
|
||||
|
||||
try {
|
||||
await Deno.writeTextFile(
|
||||
`${tempDir}/config.json`,
|
||||
JSON.stringify({
|
||||
version: '1.0.0',
|
||||
api: {
|
||||
port: 8080,
|
||||
host: '0.0.0.0',
|
||||
apiKeys: ['sk-test'],
|
||||
rateLimit: 60,
|
||||
cors: true,
|
||||
corsOrigins: ['*'],
|
||||
},
|
||||
ui: {
|
||||
enabled: true,
|
||||
port: 8081,
|
||||
host: '0.0.0.0',
|
||||
assetSource: 'bundle',
|
||||
},
|
||||
docker: {
|
||||
networkName: 'modelgrid',
|
||||
runtime: 'docker',
|
||||
},
|
||||
gpus: {
|
||||
autoDetect: true,
|
||||
assignments: {},
|
||||
},
|
||||
containers: [],
|
||||
models: {
|
||||
registryUrl: 'https://example.com/catalog.json',
|
||||
autoDeploy: false,
|
||||
defaultEngine: 'vllm',
|
||||
autoLoad: ['meta-llama/Llama-3.1-8B-Instruct'],
|
||||
},
|
||||
cluster: {
|
||||
enabled: false,
|
||||
nodeName: 'modelgrid-local',
|
||||
role: 'standalone',
|
||||
bindHost: '0.0.0.0',
|
||||
gossipPort: 7946,
|
||||
heartbeatIntervalMs: 5000,
|
||||
seedNodes: [],
|
||||
},
|
||||
checkInterval: 30000,
|
||||
}),
|
||||
);
|
||||
|
||||
const handler = new ConfigHandler();
|
||||
await handler.show();
|
||||
|
||||
const modelsBox = boxes.find((box) => box.title === 'Models');
|
||||
assertEquals(modelsBox?.lines.some((line) => line.includes('Auto Deploy:')), true);
|
||||
assertEquals(modelsBox?.lines.some((line) => line.includes('Default Engine: vllm')), true);
|
||||
assertEquals(modelsBox?.lines.some((line) => line.includes('https://example.com/catalog.json')), true);
|
||||
|
||||
const apiBox = boxes.find((box) => box.title === 'API Server');
|
||||
assertEquals(apiBox?.lines.some((line) => line.includes('Rate Limit: 60 req/min')), true);
|
||||
} finally {
|
||||
logger.log = originalLog;
|
||||
logger.logBox = originalLogBox;
|
||||
(PATHS as { CONFIG_FILE: string }).CONFIG_FILE = originalConfigFile;
|
||||
await Deno.remove(tempDir, { recursive: true });
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user