fix(chv): P2-20/P2-19/P2-17/P2-18 残留收尾 + NO_PROXY 合并

- P2-20:_guest_env_delivered 加专用锁,读写只走
  _delivered_secrets/_mark/_clear 三个入口,并发 hammer 测试钉死
- P2-19:_record_net_entries 失败发 net_registry_write_failed
  独立审计并返回 False;_boot_vm 见 False 即拒起(wake 随后清半醒 VM)
- P2-17:net.json 删失败发 vm_net_registry_delete_failed 审计;
  _write_dirty_marker 失败发 dirty_marker_write_failed 审计并返回
  False,stop 不抛的契约不变
- P2-18:新增 cloud/chv/atomic_file.py(mkstemp 随机名 + 文件
  fsync + rename + 目录 fsync),net.json/known_hosts/
  snapshots.json/pool registry/脏标记/spill 全部走它,固定 .tmp 清零
- H1 附带:NO_PROXY 实测确有覆盖 bug(env 重复赋值以后者为准,
  调用方 NO_PROXY 被 egress 的 localhost 值静默覆盖),改为合并
  单条发出;egress 已设时调用方代理变量(含小写)一律不发
- 测试:新增 cloud/tests/test_chv_residual.py(23 项),旧 closeup
  两处钉死旧语义的测试按新语义更新
This commit is contained in:
host committed 2026-11-06 18:41:50 +00:00
1 parent ba5df980bf
commit c39715659e
7 files changed
+850 -51

No files matched your search

+16 -4
View File
@@ -1047,12 +1047,18 @@ class DefensiveBranchTest(CloseupCase):
marker = dirty_marker_path(self.state_dir, "chv-abc123")
self.assertTrue(os.path.exists(marker))
def test_write_dirty_marker_failure_swallowed(self):
def test_write_dirty_marker_failure_audited_not_raised(self):
# feat-chv-closeup(P2-17):脏标记写失败仍不抛(stop
# 契约不变),但不再全静默——返回 False + 独立审计
# dirty_marker_write_failed。
blocker = os.path.join(self.dir, "blocker2")
with open(blocker, "w") as fh:
fh.write("x")
ex = self.make_exec(state_dir=blocker)
ex._write_dirty_marker("chv-abc123", True) # 不抛
ok = ex._write_dirty_marker("chv-abc123", True) # 不抛
self.assertFalse(ok)
self.assertIn("dirty_marker_write_failed",
self._audit_events())
def test_stop_socket_remove_failure_swallowed(self):
ex = self.make_exec()
@@ -1290,7 +1296,10 @@ class ExecutorLastLinesTest(CloseupCase):
ex.wait_guest_ready(self._task())
self.assertEqual(ctx.exception.kind, "guest_not_ready")
def test_record_net_entries_write_failure_only_warns(self):
def test_record_net_entries_write_failure_audited_and_reported(self):
# feat-chv-closeup(P2-19):登记失败不再“只 warning”——
# 返回 False + 独立审计 net_registry_write_failed,调用方
# _boot_vm 据此拒起(见 test_chv_residual)。
ex = self.make_exec()
blocker = os.path.join(self.state_dir, "chv-x")
os.makedirs(self.state_dir, exist_ok=True)
@@ -1298,9 +1307,12 @@ class ExecutorLastLinesTest(CloseupCase):
fh.write("x")
with self.assertLogs("cloud.cloud_hypervisor",
level="WARNING") as logs:
ex._record_net_entries("chv-x", [{"tap": "tap0"}])
ok = ex._record_net_entries("chv-x", [{"tap": "tap0"}])
self.assertFalse(ok)
self.assertTrue(any("net_registry_write_failed" in line
for line in logs.output))
self.assertIn("net_registry_write_failed",
self._audit_events())
def test_socket_permissions_stat_failure_after_exists(self):
ex = self.make_exec()