1
0
Files
DiAL/tests/server/checker/runner/icmp/expect.test.ts
lanyuanxiaoyao 550c427814 feat: 新增 ICMP/Ping checker,支持跨平台主机存活检测与延迟监控
实现 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。
2026-05-18 10:45:17 +08:00

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);
});
});