refactor(api): inject server dependencies in tests

This commit is contained in:
2026-04-21 13:30:52 +00:00
parent 9608540792
commit d6b4c0def1
2 changed files with 31 additions and 27 deletions
+15 -18
View File
@@ -47,15 +47,14 @@ Deno.test('ApiServer serves health metrics and authenticated model listings', as
}; };
}, },
} as never, } as never,
); {
gpuDetector: {
(server as unknown as {
gpuDetector: { detectGpus: () => Promise<unknown[]> };
}).gpuDetector = {
async detectGpus() { async detectGpus() {
return [{ id: 'nvidia-0' }]; return [{ id: 'nvidia-0' }];
}, },
}; } as never,
},
);
await server.start(); await server.start();
@@ -142,15 +141,14 @@ Deno.test('ApiServer metrics expose 5xx counts for failing endpoints', async ()
}; };
}, },
} as never, } as never,
); {
gpuDetector: {
(server as unknown as {
gpuDetector: { detectGpus: () => Promise<unknown[]> };
}).gpuDetector = {
async detectGpus() { async detectGpus() {
return []; return [];
}, },
}; } as never,
},
);
await server.start(); await server.start();
@@ -209,15 +207,14 @@ Deno.test('ApiServer enforces api rate limits while exempting health and metrics
}; };
}, },
} as never, } as never,
); {
gpuDetector: {
(server as unknown as {
gpuDetector: { detectGpus: () => Promise<unknown[]> };
}).gpuDetector = {
async detectGpus() { async detectGpus() {
return []; return [];
}, },
}; } as never,
},
);
await server.start(); await server.start();
+10 -3
View File
@@ -17,6 +17,12 @@ import { ModelLoader } from '../models/loader.ts';
import { GpuDetector } from '../hardware/gpu-detector.ts'; import { GpuDetector } from '../hardware/gpu-detector.ts';
import { ClusterHandler } from './handlers/cluster.ts'; import { ClusterHandler } from './handlers/cluster.ts';
interface IApiServerOptions {
gpuDetector?: GpuDetector;
router?: ApiRouter;
clusterHandler?: ClusterHandler;
}
/** /**
* API Server for ModelGrid * API Server for ModelGrid
*/ */
@@ -42,15 +48,16 @@ export class ApiServer {
modelRegistry: ModelRegistry, modelRegistry: ModelRegistry,
modelLoader: ModelLoader, modelLoader: ModelLoader,
clusterCoordinator: ClusterCoordinator, clusterCoordinator: ClusterCoordinator,
options: IApiServerOptions = {},
) { ) {
this.config = config; this.config = config;
this.containerManager = containerManager; this.containerManager = containerManager;
this.modelRegistry = modelRegistry; this.modelRegistry = modelRegistry;
this.gpuDetector = new GpuDetector(); this.gpuDetector = options.gpuDetector || new GpuDetector();
this.modelLoader = modelLoader; this.modelLoader = modelLoader;
this.clusterCoordinator = clusterCoordinator; this.clusterCoordinator = clusterCoordinator;
this.clusterHandler = new ClusterHandler(clusterCoordinator); this.clusterHandler = options.clusterHandler || new ClusterHandler(clusterCoordinator);
this.router = new ApiRouter( this.router = options.router || new ApiRouter(
containerManager, containerManager,
modelRegistry, modelRegistry,
this.modelLoader, this.modelLoader,