refactor: 引入 Checker 统一接口与 Runner 抽象机制
定义 Checker 接口(resolve/execute/serialize)和 CheckerRegistry 注册中心,消除 engine/config-loader/store 中硬编码类型分支。 按 checker 类型分子包(runner/http/、runner/command/),提取 共享 expect 到 runner/shared/。超时控制通过引擎注入 AbortSignal。 CheckFailure.phase 从联合类型改为 string。配置校验下沉到各 Checker.resolve() 内部。 新增 checker-runner-abstraction spec,更新 DEVELOPMENT.md。
This commit is contained in:
39
tests/server/checker/runner/registry.test.ts
Normal file
39
tests/server/checker/runner/registry.test.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { CheckerRegistry } from "../../../../src/server/checker/runner/registry";
|
||||
import type { Checker } from "../../../../src/server/checker/runner/types";
|
||||
|
||||
function createChecker(type: string): Checker {
|
||||
return {
|
||||
type,
|
||||
resolve: () => ({}) as any,
|
||||
execute: () => Promise.resolve({} as any),
|
||||
serialize: () => ({ target: "", config: "" }),
|
||||
};
|
||||
}
|
||||
|
||||
describe("CheckerRegistry", () => {
|
||||
test("注册并获取 Checker", () => {
|
||||
const registry = new CheckerRegistry();
|
||||
const checker = createChecker("http");
|
||||
registry.register(checker);
|
||||
expect(registry.get("http")).toBe(checker);
|
||||
});
|
||||
|
||||
test("获取未注册的 type 抛出错误", () => {
|
||||
const registry = new CheckerRegistry();
|
||||
expect(() => registry.get("unknown")).toThrow("不支持的 probe type");
|
||||
});
|
||||
|
||||
test("重复注册同一 type 抛出错误", () => {
|
||||
const registry = new CheckerRegistry();
|
||||
registry.register(createChecker("http"));
|
||||
expect(() => registry.register(createChecker("http"))).toThrow("已注册");
|
||||
});
|
||||
|
||||
test("查询支持的 type 列表", () => {
|
||||
const registry = new CheckerRegistry();
|
||||
registry.register(createChecker("http"));
|
||||
registry.register(createChecker("command"));
|
||||
expect(registry.supportedTypes).toEqual(["http", "command"]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user