实现 type: ping checker,通过 Bun.spawn 调用系统 ping 命令,自行实现跨平台 输出解析器(Linux/macOS/Windows 含中文 locale),支持 alive、丢包率、延迟、 耗时等 expect 断言,复用现有 checker 架构零外部依赖。 包含完整的类型定义、TypeBox schema、语义校验、命令构建、解析、断言、执行、 注册、配置加载测试,以及 probe-config.schema.json 更新和文档更新。 审查修复:提取 buildPingCommand 为独立纯函数并补充跨平台单测,补充 maxDurationMs/maxAvgLatencyMs 类型非法和空字符串 host 边界测试用例。 变更已归档,delta specs 已同步至 main specs。
45 lines
1.4 KiB
TypeScript
45 lines
1.4 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
|
|
import {
|
|
checkAlive,
|
|
checkAvgLatency,
|
|
checkMaxLatency,
|
|
checkPacketLoss,
|
|
} from "../../../../../src/server/checker/runner/icmp/expect";
|
|
|
|
describe("ping expect", () => {
|
|
test("alive 通过和失败", () => {
|
|
expect(checkAlive(true, true).matched).toBe(true);
|
|
const result = checkAlive(false, true);
|
|
expect(result.matched).toBe(false);
|
|
expect(result.failure?.phase).toBe("alive");
|
|
});
|
|
|
|
test("packetLoss 通过和失败", () => {
|
|
expect(checkPacketLoss(0, 10).matched).toBe(true);
|
|
const result = checkPacketLoss(33, 10);
|
|
expect(result.matched).toBe(false);
|
|
expect(result.failure?.phase).toBe("packetLoss");
|
|
});
|
|
|
|
test("avgLatency 通过和失败", () => {
|
|
expect(checkAvgLatency(12, 200).matched).toBe(true);
|
|
const result = checkAvgLatency(156, 100);
|
|
expect(result.matched).toBe(false);
|
|
expect(result.failure?.phase).toBe("avgLatency");
|
|
});
|
|
|
|
test("maxLatency 通过和失败", () => {
|
|
expect(checkMaxLatency(340, 500).matched).toBe(true);
|
|
const result = checkMaxLatency(340, 200);
|
|
expect(result.matched).toBe(false);
|
|
expect(result.failure?.phase).toBe("maxLatency");
|
|
});
|
|
|
|
test("未配置阈值默认通过", () => {
|
|
expect(checkPacketLoss(100, undefined).matched).toBe(true);
|
|
expect(checkAvgLatency(null, undefined).matched).toBe(true);
|
|
expect(checkMaxLatency(null, undefined).matched).toBe(true);
|
|
});
|
|
});
|