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。
This commit is contained in:
44
tests/server/checker/runner/icmp/expect.test.ts
Normal file
44
tests/server/checker/runner/icmp/expect.test.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user