fix(reboot): surface windows99 console artifact blockers
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m13s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled

This commit is contained in:
Your Name
2026-07-03 09:25:20 +08:00
parent 43620a977f
commit e28ebd5b3e
10 changed files with 374 additions and 9 deletions

View File

@@ -598,6 +598,56 @@ def test_windows99_management_channel_unavailable_is_visible(tmp_path: Path) ->
assert payload["readback"]["windows99_remote_execution_channel_ready"] is False
def test_windows99_console_artifact_blocker_is_visible(tmp_path: Path) -> None:
management = {
**WINDOWS99_MANAGEMENT_BLOCKED,
"console_artifact_status": "blocked_clipboard_unreliable",
"console_artifact_reliable": False,
"console_artifact_blockers": ["windows99_console_clipboard_unreliable"],
"console_artifact_safe_next_step": (
"use_authorized_no_secret_management_channel_or_manual_console_stdout_capture"
),
"blockers": [
*WINDOWS99_MANAGEMENT_BLOCKED["blockers"],
"windows99_console_clipboard_unreliable",
],
}
payload = run_scorecard(
tmp_path,
GREEN_SUMMARY,
windows99="",
windows99_management=json.dumps(management),
)
assert "windows99_console_clipboard_unreliable" in payload["active_blockers"]
collection = payload["windows99_verify_collection"]
assert collection["console_artifact_status"] == "blocked_clipboard_unreliable"
assert collection["console_artifact_reliable"] is False
assert collection["console_artifact_blockers"] == [
"windows99_console_clipboard_unreliable"
]
assert "windows99_console_clipboard_unreliable" in collection[
"collection_blockers"
]
assert payload["rollups"]["windows99_console_artifact_status"] == (
"blocked_clipboard_unreliable"
)
assert payload["rollups"]["windows99_console_artifact_reliable"] is False
assert payload["readback"]["windows99_console_artifact_blockers"] == [
"windows99_console_clipboard_unreliable"
]
action_by_blocker = {
item["blocker"]: item
for item in payload["active_blocker_action_matrix"]["items"]
}
assert action_by_blocker["windows99_console_clipboard_unreliable"][
"next_safe_action"
] == (
"stop_unreliable_rdp_clipboard_path_and_use_authorized_no_secret_"
"management_channel_or_validated_console_stdout_artifact"
)
def test_windows99_no_secret_collector_publickey_blocker_is_visible(
tmp_path: Path,
) -> None:

View File

@@ -51,6 +51,8 @@ def test_management_probe_surfaces_no_secret_console_channels(monkeypatch):
ssh_timeout=1,
ports=None,
skip_ssh=False,
console_artifact_status="not_attempted",
console_artifact_blockers=None,
generated_at="2026-07-02T16:00:00+08:00",
output=None,
)
@@ -65,6 +67,9 @@ def test_management_probe_surfaces_no_secret_console_channels(monkeypatch):
"rdp_console",
"hyperv_vmconnect",
]
assert payload["console_artifact_status"] == "not_attempted"
assert payload["console_artifact_reliable"] is False
assert payload["console_artifact_blockers"] == []
assert payload["remote_execution_channel_ready"] is False
assert payload["can_collect_vmware_verify_without_secret"] is False
assert "windows99_remote_execution_channel_unavailable" in payload["blockers"]
@@ -105,6 +110,8 @@ def test_management_probe_surfaces_multiple_ssh_candidates(monkeypatch):
ssh_timeout=1,
ports=None,
skip_ssh=False,
console_artifact_status="not_attempted",
console_artifact_blockers=None,
generated_at="2026-07-02T16:00:00+08:00",
output=None,
)
@@ -129,3 +136,51 @@ def test_management_probe_surfaces_multiple_ssh_candidates(monkeypatch):
"status": "ready",
},
]
def test_management_probe_surfaces_console_artifact_clipboard_blocker(monkeypatch):
module = _load_module()
def fake_tcp_status(_host: str, port: int, _timeout: float) -> str:
return "open" if port in {22, 2179, 3389} else "timeout"
monkeypatch.setattr(module, "tcp_status", fake_tcp_status)
monkeypatch.setattr(
module,
"ping_status",
lambda _host: {"checked": True, "ok": True, "status": "ok"},
)
monkeypatch.setattr(
module,
"ssh_batch_status",
lambda *_args, **_kwargs: {
"checked": True,
"ready": False,
"status": "permission_denied",
},
)
payload = module.build_payload(
argparse.Namespace(
host="192.168.0.99",
ssh_users=["administrator"],
tcp_timeout=0.01,
ssh_timeout=1,
ports=None,
skip_ssh=False,
console_artifact_status="blocked_clipboard_unreliable",
console_artifact_blockers=None,
generated_at="2026-07-03T09:20:00+08:00",
output=None,
)
)
assert payload["console_artifact_status"] == "blocked_clipboard_unreliable"
assert payload["console_artifact_reliable"] is False
assert payload["console_artifact_blockers"] == [
"windows99_console_clipboard_unreliable"
]
assert "windows99_console_clipboard_unreliable" in payload["blockers"]
assert payload["console_artifact_safe_next_step"] == (
"use_authorized_no_secret_management_channel_or_manual_console_stdout_capture"
)