# 混沌 / 弱网测试辅助(Q 线) 用 toxiproxy 官方镜像做延迟和断开;Linux 丢包用容器内 netem。所有 Docker 资源名带 `q` 前缀,用完删除。 ## 启动 toxiproxy 在仓库根目录(或本目录)执行: ```powershell docker compose -p q-chaos -f test/chaos/compose.yml up -d ``` API 默认映射到本机随机/固定端口见 compose 注释。查看实际端口: ```powershell docker compose -p q-chaos -f test/chaos/compose.yml port toxiproxy 8474 ``` 清理: ```powershell docker compose -p q-chaos -f test/chaos/compose.yml down -v ``` ## 对运行中的服务注入故障 不要写死 `7443`。上游地址取自当前实例的实际监听端口(例如测试 harness 写入的 `listen.addr`,或你启动时打印的地址)。 1. 本机起好 NixMsg(或任意 TCP 服务),记下 `HOST:PORT`。 2. 在 Windows 上,容器访问本机服务用 `host.docker.internal:PORT`。 3. 用本包客户端或 curl 建代理(listen 用 `0.0.0.0:0` 让 toxiproxy 分配端口): ```go c := chaos.NewClient("http://127.0.0.1:") p, err := c.CreateProxy("q-nixmsg", "0.0.0.0:0", "host.docker.internal:"+strconv.Itoa(port)) // 客户端改连 p.Listen(把 0.0.0.0 换成 127.0.0.1) _, _ = c.AddLatency("q-nixmsg", "lag", 200, 50, "") _, _ = c.AddResetPeer("q-nixmsg", "rst", 0, "") ``` 等价 curl: ```bash curl -s -X POST http://127.0.0.1:/proxies \ -H 'Content-Type: application/json' \ -d '{"name":"q-nixmsg","listen":"0.0.0.0:0","upstream":"host.docker.internal:","enabled":true}' ``` 延迟:`POST .../proxies/q-nixmsg/toxics`,`type=latency`,`attributes.latency` / `jitter`(毫秒)。 断开:`type=reset_peer`,`attributes.timeout`(毫秒,0 表示尽快 RST)。 ## 单元测试 ```powershell go test ./test/chaos/ -count=1 ``` ## netem 丢包 见 [netem/README.md](./netem/README.md)。脚本必须在 Linux 容器内执行(本机是 Windows)。