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:
1 parent
ba5df980bf
commit
c39715659e
7 files changed
+850
-51
No files matched your search
@@ -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()
|
||||
|
||||
Reference in new issue
Block a user