fix(reboot): surface windows99 vmx repair package
All checks were successful
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 / build-and-deploy (push) Successful in 5m15s
CD Pipeline / post-deploy-checks (push) Successful in 1m51s
All checks were successful
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 / build-and-deploy (push) Successful in 5m15s
CD Pipeline / post-deploy-checks (push) Successful in 1m51s
This commit is contained in:
@@ -620,6 +620,13 @@ def test_awoooi_priority_work_order_readback_routes_closed_backup_to_host_boot_a
|
||||
"host99_uptime_known": False,
|
||||
}
|
||||
)
|
||||
payload["windows99_vmware_autostart"].update(
|
||||
{
|
||||
"required_vm_aliases": ["111", "188", "120", "121", "112"],
|
||||
"missing_vmx_aliases": ["111"],
|
||||
"powered_off_aliases": ["111", "112", "120", "121", "188"],
|
||||
}
|
||||
)
|
||||
payload["rollups"].update(
|
||||
{
|
||||
"active_blocker_count": len(active_blockers),
|
||||
@@ -677,6 +684,17 @@ def test_awoooi_priority_work_order_readback_routes_closed_backup_to_host_boot_a
|
||||
"windows99_vmware_guest_power_not_ready",
|
||||
"windows99_vmware_vmx_missing",
|
||||
]
|
||||
assert state["windows99_vmx_source_repair_package_ready"] is True
|
||||
assert state["windows99_vmx_source_repair_missing_aliases"] == ["111"]
|
||||
assert state["windows99_vmx_source_repair_powered_off_count"] == 5
|
||||
assert (
|
||||
state["windows99_vmx_source_repair_controlled_restore_required_count"]
|
||||
== 1
|
||||
)
|
||||
assert (
|
||||
state["windows99_vmx_source_repair_apply_allowed_by_this_package"]
|
||||
is False
|
||||
)
|
||||
assert payload["summary"]["controlled_service_data_backup_blocker_count"] == 0
|
||||
assert payload["summary"]["active_p0_primary_blocker"] == (
|
||||
"reboot_event_required_host_unreachable"
|
||||
@@ -702,6 +720,22 @@ def test_awoooi_priority_work_order_readback_routes_closed_backup_to_host_boot_a
|
||||
"blocked_reboot_slo_scorecard_host_boot_and_windows99_verify_"
|
||||
"collection_not_ready"
|
||||
)
|
||||
assert payload["summary"]["windows99_vmx_source_repair_package_ready"] is True
|
||||
assert payload["summary"]["windows99_vmx_source_repair_missing_aliases"] == [
|
||||
"111"
|
||||
]
|
||||
assert (
|
||||
payload["summary"][
|
||||
"windows99_vmx_source_repair_controlled_restore_required_count"
|
||||
]
|
||||
== 1
|
||||
)
|
||||
assert (
|
||||
payload["rollups"][
|
||||
"windows99_vmx_source_repair_apply_allowed_by_this_package"
|
||||
]
|
||||
is False
|
||||
)
|
||||
assert "service/data/backup readback is green" in payload[
|
||||
"next_execution_order"
|
||||
][0]
|
||||
@@ -716,6 +750,19 @@ def test_awoooi_priority_work_order_readback_routes_closed_backup_to_host_boot_a
|
||||
assert in_progress["evidence"]["next_safe_action"] == (
|
||||
"rerun_reboot_event_detector_and_host_probe_verify_only_no_reboot"
|
||||
)
|
||||
assert (
|
||||
in_progress["evidence"]["windows99_vmx_source_repair_package_status"]
|
||||
== "check_mode_package_ready_windows99_vmx_source_repair_required"
|
||||
)
|
||||
assert in_progress["evidence"]["windows99_vmx_source_repair_missing_aliases"] == [
|
||||
"111"
|
||||
]
|
||||
assert (
|
||||
in_progress["evidence"][
|
||||
"windows99_vmx_source_repair_apply_allowed_by_this_package"
|
||||
]
|
||||
is False
|
||||
)
|
||||
assert "Windows99 verify collection" in in_progress["professional_fix"][
|
||||
"action"
|
||||
]
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
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_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-03T10:45:28+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_repair_package_builder_is_check_mode_only() -> None:
|
||||
payload = build_windows99_vmx_source_repair_package(
|
||||
_scorecard(),
|
||||
generated_at="2026-07-03T10:46:00+08:00",
|
||||
)
|
||||
|
||||
assert payload["schema_version"] == (
|
||||
"windows99_vmx_source_repair_check_mode_package_v1"
|
||||
)
|
||||
assert payload["status"] == (
|
||||
"check_mode_package_ready_windows99_vmx_source_repair_required"
|
||||
)
|
||||
assert payload["package_ready"] is True
|
||||
assert payload["missing_vmx_aliases"] == ["111"]
|
||||
assert payload["powered_off_count"] == 5
|
||||
assert payload["controlled_restore_required_count"] == 1
|
||||
assert payload["safe_next_step"] == (
|
||||
"restore_windows99_missing_vmx_source_for_aliases_then_rerun_no_secret_"
|
||||
"collector_and_scorecard_no_vm_power_change"
|
||||
)
|
||||
assert payload["controlled_apply_mode"] == (
|
||||
"check_mode_package_only_no_windows_or_vm_write"
|
||||
)
|
||||
assert payload["apply_allowed_by_this_package"] is False
|
||||
assert payload["operation_boundaries"]["secret_value_read"] is False
|
||||
assert payload["operation_boundaries"]["remote_write_performed"] is False
|
||||
assert payload["operation_boundaries"]["vm_power_change_performed"] is False
|
||||
assert "read_windows_password_or_secret" in payload["forbidden_actions"]
|
||||
assert "vm_power_change" in payload["forbidden_actions"]
|
||||
|
||||
|
||||
def test_windows99_vmx_source_repair_package_endpoint_returns_readback(
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
) -> None:
|
||||
monkeypatch.setattr(
|
||||
agents,
|
||||
"load_latest_windows99_vmx_source_repair_package",
|
||||
lambda: build_windows99_vmx_source_repair_package(
|
||||
_scorecard(),
|
||||
generated_at="2026-07-03T10:46:00+08:00",
|
||||
),
|
||||
)
|
||||
app = FastAPI()
|
||||
app.include_router(router, prefix="/api/v1")
|
||||
client = TestClient(app)
|
||||
|
||||
response = client.get("/api/v1/agents/windows99-vmx-source-repair-package")
|
||||
|
||||
assert response.status_code == 200
|
||||
payload = response.json()
|
||||
assert payload["schema_version"] == (
|
||||
"windows99_vmx_source_repair_check_mode_package_v1"
|
||||
)
|
||||
assert payload["target_host_alias"] == "99"
|
||||
assert payload["controlled_apply_mode"] == (
|
||||
"check_mode_package_only_no_windows_or_vm_write"
|
||||
)
|
||||
assert payload["apply_allowed_by_this_package"] is False
|
||||
assert payload["operation_boundaries"]["host_reboot_performed"] is False
|
||||
Reference in New Issue
Block a user