feat: stabilize multi-region runtime sync and worker orchestration
This commit is contained in:
@@ -38,6 +38,97 @@ class _EmptyConnection:
|
||||
|
||||
|
||||
class OpsReleaseServiceExecutionModeTests(unittest.TestCase):
|
||||
@patch("app.services.ops_release_service.get_db")
|
||||
@patch("app.services.ops_agent_service.ensure_ops_agent_schema")
|
||||
@patch("app.services.ops_agent_service.get_managed_node_onboarding")
|
||||
@patch("app.services.ops_agent_service.list_managed_nodes_with_agent_state")
|
||||
@patch("app.services.ops_job_service.list_managed_nodes")
|
||||
@patch("app.services.cluster_runtime_service.get_cluster_snapshot")
|
||||
def test_build_rollout_target_operational_readiness_reuses_managed_node_snapshot_for_onboarding(
|
||||
self,
|
||||
mock_get_cluster_snapshot,
|
||||
mock_list_managed_nodes,
|
||||
mock_list_managed_nodes_with_agent_state,
|
||||
mock_get_managed_node_onboarding,
|
||||
mock_ensure_ops_agent_schema,
|
||||
mock_get_db,
|
||||
) -> None:
|
||||
captured_nodes_payloads = []
|
||||
|
||||
def _fake_onboarding(node_code, **kwargs):
|
||||
captured_nodes_payloads.append(kwargs.get("nodes_payload"))
|
||||
return {
|
||||
"onboarding_stage": {"code": "ready", "label": "已接管"},
|
||||
"summary": f"{node_code} ready",
|
||||
"recovery_decision": {
|
||||
"action": "noop",
|
||||
"label": "当前无需额外恢复动作",
|
||||
"summary": "当前节点暂无需要执行的接管恢复动作。",
|
||||
"command_hint": "",
|
||||
"window": "none",
|
||||
},
|
||||
}
|
||||
|
||||
mock_ensure_ops_agent_schema.return_value = None
|
||||
mock_get_db.return_value = _EmptyConnection()
|
||||
mock_get_cluster_snapshot.return_value = {
|
||||
"nodes": [
|
||||
{
|
||||
"node_code": "mainland-worker-01",
|
||||
"region": "mainland",
|
||||
"role": "worker",
|
||||
"status": "online",
|
||||
"current_load": 0,
|
||||
"is_effective_worker": True,
|
||||
},
|
||||
{
|
||||
"node_code": "mainland-worker-02",
|
||||
"region": "mainland",
|
||||
"role": "worker",
|
||||
"status": "online",
|
||||
"current_load": 0,
|
||||
"is_effective_worker": True,
|
||||
},
|
||||
]
|
||||
}
|
||||
mock_list_managed_nodes.return_value = [
|
||||
{
|
||||
"node_code": "mainland-worker-01",
|
||||
"region": "mainland",
|
||||
"role": "worker",
|
||||
"is_enabled": True,
|
||||
"ssh_host": "121.204.244.248",
|
||||
"ssh_user": "root",
|
||||
"metadata": {},
|
||||
"last_seen_at": "",
|
||||
},
|
||||
{
|
||||
"node_code": "mainland-worker-02",
|
||||
"region": "mainland",
|
||||
"role": "worker",
|
||||
"is_enabled": True,
|
||||
"ssh_host": "121.204.244.249",
|
||||
"ssh_user": "root",
|
||||
"metadata": {},
|
||||
"last_seen_at": "",
|
||||
},
|
||||
]
|
||||
mock_list_managed_nodes_with_agent_state.return_value = {"nodes": [{"node_code": "mainland-worker-01"}, {"node_code": "mainland-worker-02"}]}
|
||||
mock_get_managed_node_onboarding.side_effect = _fake_onboarding
|
||||
|
||||
readiness = build_rollout_target_operational_readiness(
|
||||
[
|
||||
{"node_code": "mainland-worker-01", "region": "mainland", "role": "worker"},
|
||||
{"node_code": "mainland-worker-02", "region": "mainland", "role": "worker"},
|
||||
],
|
||||
execution_mode="remote-agent",
|
||||
)
|
||||
|
||||
self.assertEqual(2, len(readiness["rows"]))
|
||||
mock_list_managed_nodes_with_agent_state.assert_called_once()
|
||||
self.assertEqual(2, len(captured_nodes_payloads))
|
||||
self.assertTrue(all(payload == {"nodes": [{"node_code": "mainland-worker-01"}, {"node_code": "mainland-worker-02"}]} for payload in captured_nodes_payloads))
|
||||
|
||||
@patch("app.services.ops_release_service.get_db")
|
||||
@patch("app.services.ops_agent_service.ensure_ops_agent_schema")
|
||||
@patch("app.services.ops_agent_service.get_managed_node_onboarding")
|
||||
|
||||
Reference in New Issue
Block a user