fix(reboot): add windows99 vmx source locator
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 2m11s
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 12:18:21 +08:00
parent 5e25565e1b
commit 6f65764feb
11 changed files with 1395 additions and 2 deletions

View File

@@ -737,6 +737,21 @@ def test_awoooi_priority_work_order_readback_routes_closed_backup_to_host_boot_a
assert state[
"windows99_vmx_source_repair_playbook_trust_writeback_ref"
].startswith("playbook://awoooi/windows99-vmx-source-repair/")
assert state["windows99_vmx_source_locator_status"] == (
"check_mode_locator_ready_windows99_vmx_source_required"
)
assert state["windows99_vmx_source_locator_required"] is True
assert state["windows99_vmx_source_locator_check_mode_ready"] is True
assert state["windows99_vmx_source_locator_target_aliases"] == ["111"]
assert state["windows99_vmx_source_locator_next_executable_step"] == (
"run_no_secret_windows99_vmx_source_locator_collect"
)
assert state["windows99_vmx_source_locator_expected_vmx_path_count"] == 1
assert state["windows99_vmx_source_locator_candidate_source_count_known"] is False
assert state["windows99_vmx_source_locator_collector_readback_present"] is False
assert state["windows99_vmx_source_locator_file_content_read"] is False
assert state["windows99_vmx_source_locator_remote_write_performed"] is False
assert state["windows99_vmx_source_locator_vm_power_change_performed"] is False
assert payload["summary"]["controlled_service_data_backup_blocker_count"] == 0
assert payload["summary"]["active_p0_primary_blocker"] == (
"reboot_event_required_host_unreachable"
@@ -814,6 +829,21 @@ def test_awoooi_priority_work_order_readback_routes_closed_backup_to_host_boot_a
assert payload["rollups"]["windows99_vmx_source_repair_target_vm_aliases"] == [
"111"
]
assert payload["summary"]["windows99_vmx_source_locator_status"] == (
"check_mode_locator_ready_windows99_vmx_source_required"
)
assert payload["summary"]["windows99_vmx_source_locator_check_mode_ready"] is True
assert payload["summary"]["windows99_vmx_source_locator_target_aliases"] == [
"111"
]
assert (
payload["rollups"]["windows99_vmx_source_locator_remote_write_performed"]
is False
)
assert (
payload["rollups"]["windows99_vmx_source_locator_file_content_read"]
is False
)
assert "service/data/backup readback is green" in payload[
"next_execution_order"
][0]
@@ -863,6 +893,21 @@ def test_awoooi_priority_work_order_readback_routes_closed_backup_to_host_boot_a
assert in_progress["evidence"][
"windows99_vmx_source_repair_playbook_trust_writeback_ref"
].startswith("playbook://awoooi/windows99-vmx-source-repair/")
assert in_progress["evidence"]["windows99_vmx_source_locator_status"] == (
"check_mode_locator_ready_windows99_vmx_source_required"
)
assert (
in_progress["evidence"]["windows99_vmx_source_locator_check_mode_ready"]
is True
)
assert (
in_progress["evidence"]["windows99_vmx_source_locator_target_aliases"]
== ["111"]
)
assert (
in_progress["evidence"]["windows99_vmx_source_locator_remote_write_performed"]
is False
)
assert "Windows99 verify collection" in in_progress["professional_fix"][
"action"
]

View File

@@ -0,0 +1,110 @@
from __future__ import annotations
import pytest
from fastapi import FastAPI
from fastapi.testclient import TestClient
from src.api.v1 import agents
from src.api.v1.agents import router
from src.services.windows99_vmx_source_locator_readback import (
build_windows99_vmx_source_locator_readback,
)
from src.services.windows99_vmx_source_repair_package import (
build_windows99_vmx_source_repair_package,
)
def _scorecard() -> dict:
return {
"status": "blocked_reboot_auto_recovery_slo_not_ready",
"generated_at": "2026-07-03T11:20:00+08:00",
"windows99_vmware_autostart": {
"required_vm_aliases": ["111", "188", "120", "121", "112"],
"missing_vmx_aliases": ["111"],
"powered_off_aliases": ["111", "112", "120", "121", "188"],
},
"readback": {
"windows99_no_secret_collector_status": (
"collected_windows99_vmware_verify_stdout"
)
},
}
def test_windows99_vmx_source_locator_builder_is_no_secret_check_mode() -> None:
repair_package = build_windows99_vmx_source_repair_package(
_scorecard(),
generated_at="2026-07-03T11:21:00+08:00",
)
payload = build_windows99_vmx_source_locator_readback(
_scorecard(),
repair_package=repair_package,
generated_at="2026-07-03T11:22:00+08:00",
)
assert payload["schema_version"] == "windows99_vmx_source_locator_readback_v1"
assert payload["status"] == (
"check_mode_locator_ready_windows99_vmx_source_required"
)
assert payload["target_host_alias"] == "99"
assert payload["target_vm_aliases"] == ["111"]
assert payload["source_locator_required"] is True
assert payload["locator_check_mode_ready"] is True
assert payload["next_executable_step"] == (
"run_no_secret_windows99_vmx_source_locator_collect"
)
assert payload["expected_vmx_path_count"] == 1
assert payload["candidate_source_count_known"] is False
assert payload["collector_readback_present"] is False
assert payload["collector_script_path"] == (
"scripts/reboot-recovery/locate-windows99-vmx-source.sh"
)
assert payload["locator_script_path"] == (
"scripts/reboot-recovery/windows99-vmx-source-locator.ps1"
)
assert payload["check_mode"]["allowed"] is True
assert payload["check_mode"]["vmx_file_content_read"] is False
assert payload["raw_path_output"] is False
assert payload["path_fingerprint_only"] is True
assert payload["file_content_read"] is False
assert payload["secret_value_read"] is False
assert payload["password_prompt_allowed"] is False
assert payload["remote_write_performed"] is False
assert payload["host_reboot_performed"] is False
assert payload["vm_power_change_performed"] is False
assert payload["apply_allowed_by_this_readback"] is False
assert payload["destructive_restore_allowed"] is False
def test_windows99_vmx_source_locator_endpoint_returns_public_safe_readback(
monkeypatch: pytest.MonkeyPatch,
) -> None:
monkeypatch.setattr(
agents,
"load_latest_windows99_vmx_source_locator_readback",
lambda: build_windows99_vmx_source_locator_readback(
_scorecard(),
generated_at="2026-07-03T11:22:00+08:00",
),
)
app = FastAPI()
app.include_router(router, prefix="/api/v1")
client = TestClient(app)
response = client.get("/api/v1/agents/windows99-vmx-source-locator-readback")
assert response.status_code == 200
payload = response.json()
assert payload["schema_version"] == "windows99_vmx_source_locator_readback_v1"
assert payload["status"] == (
"check_mode_locator_ready_windows99_vmx_source_required"
)
assert payload["target_vm_aliases"] == ["111"]
assert payload["locator_check_mode_ready"] is True
assert payload["public_lan_topology_redacted"] is True
assert payload["raw_path_output"] is False
assert payload["file_content_read"] is False
assert payload["remote_write_performed"] is False
assert payload["vm_power_change_performed"] is False
assert "192.168.0." not in response.text