JianFeeeee
480fe8e225
M0 完成:空白测试服(vanilla 1.21.1 / 0 mods)
## 为什么不用现役服(用户定向)
> 我觉得可以起一个空白新服用来测试功能,而不是用现在的服。
理由不只是"干净",而是**可预期**:
现役 `/home/minecraft` 是 world 15G + 64 mods + neoforge ——
任何协议层改动都可能污染它,且**测不出边界**(模组太多、状态太杂)。
我们要验的是**协议与行为**:已知方块集、已知出生点、可重置的世界。
## 形态
store/vanilla-1.21.1/server/ 内容根 jar + 配置 + world
runtime/test-server/ 运行期 server.log / server.pid
- **vanilla 1.21.1**,0 mods(协议最干净,先验协议再逐个加 mod 验差异)
- **超平坦 + 固定种子** `mcfold-test-2026`(地形可预测)
- creative / peaceful / 无怪物 / 无结构 / spawn-protection=0
- **端口 25566**(避开现役 25565)
- server.jar 下载后**校验 sha1**(`59353fb...`,实测一致)
## mcfold/server.py:起停 + 探活
`python3 -m mcfold.server {start,stop,status,reset}`
★ **status 是协议级探活**(Server List Ping,state=1),不是"端口开着就算活":
必须回出 version / protocol / motd 才算真起来。
实测:`1.21.1 protocol 767 players 0/4 motd=mcfold test server`
## tests/test_server.py(4 项,默认套件)
✓ 配置生成一致 —— ★ 守护一个真实踩过的坑:
properties 里写**行内注释**(`k=v # 注释`)会被解析成值的一部分。
我第一版 `level-type=minecraft\:flat \# 超平坦` 就是这样坏掉的
(服务端把它当成值,且 spawn-protection 也回到默认)。
⇒ 生成器**不写行内注释**,这条判据守它。
✓ 三层隔离(内容根 vs 运行期;日志不落内容根)
✓ 端口避让(25566 ≠ 现役 25565)
✓ **协议级探活**(起服时验 protocol == 767;没起服则跳过,不误报)
## 变异验证(工程纪律 #2:判据必须能失败)
把 `PROTOCOL = 767` 改成 `999` ⇒ `test_status_proves_protocol` **变红**
("协议号不符:767 != 999"),还原后恢复绿。
⇒ 这条判据不是恒绿。
## 测试
./run_tests.sh → **70 项**(原 66 + 本套件 4),0 失败
2026-09-26 11:12:40 +08:00
..
2026-09-26 10:18:26 +08:00
2026-09-25 14:12:06 +08:00
2026-09-25 19:21:45 +08:00
2026-09-25 14:25:34 +08:00
2026-09-25 14:36:21 +08:00
2026-09-25 14:36:21 +08:00
2026-09-26 10:18:26 +08:00
2026-09-25 14:36:21 +08:00
2026-09-25 14:10:40 +08:00
2026-09-25 18:35:28 +08:00
2026-09-26 00:24:29 +08:00
2026-09-26 11:12:40 +08:00
2026-09-25 14:06:55 +08:00
2026-09-25 14:33:26 +08:00