fix(api): align workbench reboot slo test
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Failing after 30s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Failing after 30s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped
This commit is contained in:
@@ -6,6 +6,36 @@ from fastapi.testclient import TestClient
|
||||
from src.api.v1.agents import router
|
||||
from src.services.delivery_closure_workbench import load_delivery_closure_workbench
|
||||
|
||||
REBOOT_SAFE_NEXT_STEP = (
|
||||
"deploy_boot_triggered_slo_timer_and_collect_all_host_boot_probe_then_rerun_"
|
||||
"scorecard_until_status_slo_ready"
|
||||
)
|
||||
REBOOT_ACTIVE_BLOCKERS = [
|
||||
"all_required_hosts_not_in_10_minute_reboot_window",
|
||||
"backup_core_green_not_1",
|
||||
"host_188_service_green_not_1",
|
||||
"host_boot_observation_older_than_target_window",
|
||||
"host_unreachable_after_reboot",
|
||||
"host_uptime_unknown",
|
||||
"local_disk_free_below_minimum",
|
||||
"post_start_blocked_not_zero",
|
||||
"product_data_green_not_1",
|
||||
"reboot_event_required_host_unreachable",
|
||||
"service_green_not_1",
|
||||
"wazuh_dashboard_degraded",
|
||||
]
|
||||
DRILL_ACTIVE_BLOCKERS = [
|
||||
"service_green_not_ready",
|
||||
"product_data_green_not_ready",
|
||||
"backup_core_green_not_ready",
|
||||
"host_188_service_green_not_ready",
|
||||
"all_required_hosts_reachable_not_ready",
|
||||
"latest_verify_only_metric_present_not_ready",
|
||||
"stockplatform_freshness_ok_not_ready",
|
||||
"stockplatform_ingestion_ok_not_ready",
|
||||
"blocked_only_by_fresh_reboot_window_not_ready",
|
||||
]
|
||||
|
||||
|
||||
def test_delivery_closure_workbench_endpoint_returns_product_summary():
|
||||
app = FastAPI()
|
||||
@@ -189,32 +219,32 @@ def test_delivery_closure_workbench_exposes_p0_006_reboot_slo_lane():
|
||||
|
||||
assert lane["source_id"] == "reboot_auto_recovery_slo_scorecard"
|
||||
assert lane["status"] == "blocked_reboot_auto_recovery_slo_not_ready"
|
||||
assert lane["blocker_count"] == 1
|
||||
assert lane["completion_percent"] == 82
|
||||
assert lane["blocker_count"] == 12
|
||||
assert lane["completion_percent"] == 18
|
||||
assert lane["metric"]["kind"] == "reboot_auto_recovery_slo"
|
||||
assert lane["metric"]["workplan_id"] == "P0-006"
|
||||
assert lane["metric"]["target_minutes"] == 10
|
||||
assert lane["metric"]["can_claim_all_services_recovered_within_target"] is False
|
||||
assert lane["metric"]["observed_host_count"] == 4
|
||||
assert lane["metric"]["observed_host_count"] == 7
|
||||
assert lane["metric"]["missing_host_count"] == 0
|
||||
assert lane["metric"]["unreachable_host_count"] == 0
|
||||
assert lane["metric"]["stale_host_count"] == 4
|
||||
assert lane["metric"]["service_green"] is True
|
||||
assert lane["metric"]["product_data_green"] is True
|
||||
assert lane["metric"]["backup_core_green"] is True
|
||||
assert lane["metric"]["stockplatform_freshness_status"] == "ok"
|
||||
assert lane["metric"]["stockplatform_ingestion_status"] == "ok"
|
||||
assert lane["metric"]["stockplatform_freshness_blocker_count"] == 0
|
||||
assert lane["metric"]["stockplatform_ingestion_blocker_count"] == 0
|
||||
assert lane["metric"]["stockplatform_final_retry_window_passed"] is True
|
||||
assert lane["metric"]["unreachable_host_count"] == 1
|
||||
assert lane["metric"]["stale_host_count"] == 5
|
||||
assert lane["metric"]["service_green"] is False
|
||||
assert lane["metric"]["product_data_green"] is False
|
||||
assert lane["metric"]["backup_core_green"] is False
|
||||
assert lane["metric"]["stockplatform_freshness_status"] == "not_configured"
|
||||
assert lane["metric"]["stockplatform_ingestion_status"] == "not_configured"
|
||||
assert lane["metric"]["stockplatform_freshness_blocker_count"] == 1
|
||||
assert lane["metric"]["stockplatform_ingestion_blocker_count"] == 1
|
||||
assert lane["metric"]["stockplatform_final_retry_window_passed"] is False
|
||||
assert lane["metric"]["stockplatform_controlled_recovery_gate_required"] is False
|
||||
assert lane["metric"]["drill_preflight_status"] == (
|
||||
"ready_for_break_glass_reboot_drill_authorization"
|
||||
"blocked_reboot_drill_preflight_not_ready"
|
||||
)
|
||||
assert lane["metric"]["drill_preflight_ready"] is True
|
||||
assert lane["metric"]["drill_preflight_ready_count"] == 1
|
||||
assert lane["metric"]["drill_preflight_blocker_count"] == 0
|
||||
assert lane["metric"]["drill_preflight_active_blockers"] == []
|
||||
assert lane["metric"]["drill_preflight_ready"] is False
|
||||
assert lane["metric"]["drill_preflight_ready_count"] == 0
|
||||
assert lane["metric"]["drill_preflight_blocker_count"] == 9
|
||||
assert lane["metric"]["drill_preflight_active_blockers"] == DRILL_ACTIVE_BLOCKERS
|
||||
assert (
|
||||
lane["metric"]["drill_preflight_break_glass_authorization_required"]
|
||||
is True
|
||||
@@ -228,11 +258,11 @@ def test_delivery_closure_workbench_exposes_p0_006_reboot_slo_lane():
|
||||
is False
|
||||
)
|
||||
assert lane["metric"]["drill_preflight_runtime_write_allowed"] is False
|
||||
assert lane["metric"]["drill_preflight_target_required_host_count"] == 4
|
||||
assert lane["metric"]["drill_preflight_target_observed_host_count"] == 4
|
||||
assert lane["metric"]["drill_preflight_target_required_host_count"] == 7
|
||||
assert lane["metric"]["drill_preflight_target_observed_host_count"] == 7
|
||||
assert lane["metric"]["drill_preflight_target_missing_host_count"] == 0
|
||||
assert lane["metric"]["drill_preflight_target_unreachable_host_count"] == 0
|
||||
assert lane["metric"]["drill_preflight_target_stale_host_count"] == 4
|
||||
assert lane["metric"]["drill_preflight_target_unreachable_host_count"] == 1
|
||||
assert lane["metric"]["drill_preflight_target_stale_host_count"] == 5
|
||||
assert lane["metric"]["drill_preflight_verify_only_available"] is True
|
||||
assert lane["metric"]["drill_preflight_post_apply_verifier_endpoint"] == (
|
||||
"/api/v1/agents/reboot-auto-recovery-slo-scorecard"
|
||||
@@ -246,24 +276,14 @@ def test_delivery_closure_workbench_exposes_p0_006_reboot_slo_lane():
|
||||
assert lane["metric"]["service_restart_performed"] is False
|
||||
assert lane["metric"]["database_write_or_restore_performed"] is False
|
||||
assert lane["metric"]["secret_value_collection_allowed"] is False
|
||||
assert lane["metric"]["active_blockers"] == [
|
||||
"host_boot_observation_older_than_target_window"
|
||||
]
|
||||
assert lane["next_action"] == (
|
||||
"timer_and_service_data_readback_green_wait_for_next_all_host_reboot_event_"
|
||||
"or_approved_reboot_drill_to_prove_10_minute_slo"
|
||||
)
|
||||
assert lane["metric"]["active_blockers"] == REBOOT_ACTIVE_BLOCKERS
|
||||
assert lane["next_action"] == REBOOT_SAFE_NEXT_STEP
|
||||
|
||||
|
||||
def _assert_delivery_workbench_shape(data: dict):
|
||||
assert data["schema_version"] == "delivery_closure_workbench_v1"
|
||||
assert data["safe_next_step"] == (
|
||||
"timer_and_service_data_readback_green_wait_for_next_all_host_reboot_event_"
|
||||
"or_approved_reboot_drill_to_prove_10_minute_slo"
|
||||
)
|
||||
assert data["active_blockers"] == [
|
||||
"host_boot_observation_older_than_target_window"
|
||||
]
|
||||
assert data["safe_next_step"] == REBOOT_SAFE_NEXT_STEP
|
||||
assert data["active_blockers"] == REBOOT_ACTIVE_BLOCKERS
|
||||
assert data["readback"]["workbench_status"] == "blocked_delivery_actions_required"
|
||||
assert data["readback"]["current_p0_workplan_id"] == "P0-006"
|
||||
assert data["readback"]["current_p0_source_id"] == (
|
||||
@@ -274,11 +294,11 @@ def _assert_delivery_workbench_shape(data: dict):
|
||||
)
|
||||
assert data["readback"]["current_p0_safe_next_step"] == data["safe_next_step"]
|
||||
assert data["readback"]["current_p0_active_blockers"] == data["active_blockers"]
|
||||
assert data["readback"]["current_p0_readiness_percent"] == 82
|
||||
assert data["readback"]["current_p0_readiness_percent"] == 18
|
||||
assert data["readback"]["current_p0_drill_preflight_status"] == (
|
||||
"ready_for_break_glass_reboot_drill_authorization"
|
||||
"blocked_reboot_drill_preflight_not_ready"
|
||||
)
|
||||
assert data["readback"]["current_p0_drill_preflight_ready"] is True
|
||||
assert data["readback"]["current_p0_drill_preflight_ready"] is False
|
||||
assert (
|
||||
data["readback"]["current_p0_drill_preflight_break_glass_required"]
|
||||
is True
|
||||
@@ -299,17 +319,23 @@ def _assert_delivery_workbench_shape(data: dict):
|
||||
assert data["rollups"]["high_risk_blocker_count"] == data["summary"][
|
||||
"high_risk_blocker_count"
|
||||
]
|
||||
assert data["rollups"]["current_p0_blocker_count"] == 1
|
||||
assert data["rollups"]["current_p0_readiness_percent"] == 82
|
||||
assert data["rollups"]["current_p0_blocked_by_fresh_reboot_window_only"] is True
|
||||
assert data["rollups"]["current_p0_service_green"] is True
|
||||
assert data["rollups"]["current_p0_product_data_green"] is True
|
||||
assert data["rollups"]["current_p0_backup_core_green"] is True
|
||||
assert data["rollups"]["current_p0_stockplatform_freshness_status"] == "ok"
|
||||
assert data["rollups"]["current_p0_stockplatform_ingestion_status"] == "ok"
|
||||
assert data["rollups"]["current_p0_drill_preflight_ready"] is True
|
||||
assert data["rollups"]["current_p0_drill_preflight_ready_count"] == 1
|
||||
assert data["rollups"]["current_p0_drill_preflight_blocker_count"] == 0
|
||||
assert data["rollups"]["current_p0_blocker_count"] == 12
|
||||
assert data["rollups"]["current_p0_readiness_percent"] == 18
|
||||
assert data["rollups"]["current_p0_blocked_by_fresh_reboot_window_only"] is False
|
||||
assert data["rollups"]["current_p0_service_green"] is False
|
||||
assert data["rollups"]["current_p0_product_data_green"] is False
|
||||
assert data["rollups"]["current_p0_backup_core_green"] is False
|
||||
assert (
|
||||
data["rollups"]["current_p0_stockplatform_freshness_status"]
|
||||
== "not_configured"
|
||||
)
|
||||
assert (
|
||||
data["rollups"]["current_p0_stockplatform_ingestion_status"]
|
||||
== "not_configured"
|
||||
)
|
||||
assert data["rollups"]["current_p0_drill_preflight_ready"] is False
|
||||
assert data["rollups"]["current_p0_drill_preflight_ready_count"] == 0
|
||||
assert data["rollups"]["current_p0_drill_preflight_blocker_count"] == 9
|
||||
assert data["rollups"]["current_p0_drill_preflight_break_glass_required"] is True
|
||||
assert (
|
||||
data["rollups"][
|
||||
@@ -366,26 +392,26 @@ def _assert_delivery_workbench_shape(data: dict):
|
||||
"blocked_reboot_auto_recovery_slo_not_ready"
|
||||
)
|
||||
assert data["summary"]["reboot_auto_recovery_workplan_id"] == "P0-006"
|
||||
assert data["summary"]["reboot_auto_recovery_readiness_percent"] == 82
|
||||
assert data["summary"]["reboot_auto_recovery_active_blocker_count"] == 1
|
||||
assert data["summary"]["reboot_auto_recovery_readiness_percent"] == 18
|
||||
assert data["summary"]["reboot_auto_recovery_active_blocker_count"] == 12
|
||||
assert data["summary"]["reboot_auto_recovery_can_claim_slo"] is False
|
||||
assert data["summary"]["reboot_auto_recovery_service_green"] is True
|
||||
assert data["summary"]["reboot_auto_recovery_product_data_green"] is True
|
||||
assert data["summary"]["reboot_auto_recovery_observed_host_count"] == 4
|
||||
assert data["summary"]["reboot_auto_recovery_stale_host_count"] == 4
|
||||
assert data["summary"]["reboot_auto_recovery_service_green"] is False
|
||||
assert data["summary"]["reboot_auto_recovery_product_data_green"] is False
|
||||
assert data["summary"]["reboot_auto_recovery_observed_host_count"] == 7
|
||||
assert data["summary"]["reboot_auto_recovery_stale_host_count"] == 5
|
||||
assert (
|
||||
data["summary"]["reboot_auto_recovery_stockplatform_freshness_status"]
|
||||
== "ok"
|
||||
== "not_configured"
|
||||
)
|
||||
assert (
|
||||
data["summary"]["reboot_auto_recovery_stockplatform_ingestion_status"]
|
||||
== "ok"
|
||||
== "not_configured"
|
||||
)
|
||||
assert (
|
||||
data["summary"][
|
||||
"reboot_auto_recovery_stockplatform_final_retry_window_passed"
|
||||
]
|
||||
is True
|
||||
is False
|
||||
)
|
||||
assert (
|
||||
data["summary"][
|
||||
@@ -393,16 +419,13 @@ def _assert_delivery_workbench_shape(data: dict):
|
||||
]
|
||||
is False
|
||||
)
|
||||
assert data["summary"]["reboot_auto_recovery_safe_next_step"] == (
|
||||
"timer_and_service_data_readback_green_wait_for_next_all_host_reboot_event_"
|
||||
"or_approved_reboot_drill_to_prove_10_minute_slo"
|
||||
)
|
||||
assert data["summary"]["reboot_auto_recovery_safe_next_step"] == REBOOT_SAFE_NEXT_STEP
|
||||
assert data["summary"]["reboot_auto_recovery_drill_preflight_status"] == (
|
||||
"ready_for_break_glass_reboot_drill_authorization"
|
||||
"blocked_reboot_drill_preflight_not_ready"
|
||||
)
|
||||
assert data["summary"]["reboot_auto_recovery_drill_preflight_ready"] is True
|
||||
assert data["summary"]["reboot_auto_recovery_drill_preflight_ready_count"] == 1
|
||||
assert data["summary"]["reboot_auto_recovery_drill_preflight_blocker_count"] == 0
|
||||
assert data["summary"]["reboot_auto_recovery_drill_preflight_ready"] is False
|
||||
assert data["summary"]["reboot_auto_recovery_drill_preflight_ready_count"] == 0
|
||||
assert data["summary"]["reboot_auto_recovery_drill_preflight_blocker_count"] == 9
|
||||
assert (
|
||||
data["summary"][
|
||||
"reboot_auto_recovery_drill_preflight_break_glass_required"
|
||||
|
||||
Reference in New Issue
Block a user