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
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:
@@ -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"
|
||||
]
|
||||
|
||||
110
apps/api/tests/test_windows99_vmx_source_locator_readback_api.py
Normal file
110
apps/api/tests/test_windows99_vmx_source_locator_readback_api.py
Normal 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
|
||||
Reference in New Issue
Block a user