feature/integracion-panel-restore-targets
This commit is contained in:
138
tests/test_route_forward.py
Normal file
138
tests/test_route_forward.py
Normal file
@@ -0,0 +1,138 @@
|
||||
"""
|
||||
Pruebas de enrutamiento automático (restore_local | forward) en RestoreWorker.
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from app.engine.restore_worker import RestoreDeferred, RestoreWorker
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def base_config(tmp_path):
|
||||
return {
|
||||
"paths": {
|
||||
"input_folder": str(tmp_path / "in"),
|
||||
"processed_folder": str(tmp_path / "processed"),
|
||||
"failed_folder": str(tmp_path / "failed"),
|
||||
"extract_folder": str(tmp_path / "extract"),
|
||||
"data_sql_folder": str(tmp_path / "data"),
|
||||
"seven_zip_exe": "C:\\Program Files\\7-Zip\\7z.exe",
|
||||
},
|
||||
"sql": {"server": "localhost", "use_windows_auth": True},
|
||||
"timeouts": {"extract_minutes": 30, "restore_minutes": 60},
|
||||
"panel": {
|
||||
"api_url": "http://panel:3000",
|
||||
"api_token": "tok",
|
||||
"instance_key": "Alfa",
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def test_collect_zip_paths_simple(tmp_path, base_config):
|
||||
z = tmp_path / "in" / "NODO.ZIP"
|
||||
z.parent.mkdir(parents=True)
|
||||
z.write_bytes(b"z")
|
||||
worker = RestoreWorker("job-1", base_config)
|
||||
paths = worker._collect_zip_paths(str(z))
|
||||
assert paths == [str(z)]
|
||||
|
||||
|
||||
def test_collect_zip_paths_multipart(tmp_path, base_config):
|
||||
folder = tmp_path / "in"
|
||||
folder.mkdir(parents=True)
|
||||
p1 = folder / "NODO.ZIP.001"
|
||||
p2 = folder / "NODO.ZIP.002"
|
||||
p1.write_bytes(b"1")
|
||||
p2.write_bytes(b"2")
|
||||
worker = RestoreWorker("job-1", base_config)
|
||||
paths = worker._collect_zip_paths(str(p1))
|
||||
assert len(paths) == 2
|
||||
assert all(Path(p).exists() for p in paths)
|
||||
|
||||
|
||||
def test_resolve_route_envia_instance_key(monkeypatch, base_config):
|
||||
worker = RestoreWorker("job-1", base_config)
|
||||
captured = {}
|
||||
|
||||
def fake_resolve(api_url, api_token, filename, instance_key=None):
|
||||
captured["instance_key"] = instance_key
|
||||
return {
|
||||
"action": "restore_local",
|
||||
"db_name": "DB1",
|
||||
"node_key": "NODO",
|
||||
"target": {
|
||||
"id": 1,
|
||||
"name": "Alfa",
|
||||
"server": "localhost",
|
||||
"username": "sa",
|
||||
"password": "x",
|
||||
"data_folder": "C:\\Data",
|
||||
},
|
||||
}
|
||||
|
||||
monkeypatch.setattr(
|
||||
"app.engine.restore_worker.panel_client.resolve_route", fake_resolve
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.engine.restore_worker.JobRepository.update_node_and_db", lambda *a, **k: None
|
||||
)
|
||||
|
||||
class FakeJob:
|
||||
source_name = "NODO.ZIP"
|
||||
source_path = "C:\\in\\NODO.ZIP"
|
||||
|
||||
route = worker._resolve_route(FakeJob())
|
||||
assert route["action"] == "restore_local"
|
||||
assert captured["instance_key"] == "Alfa"
|
||||
|
||||
|
||||
def test_resolve_route_sin_instance_key_diferido(base_config):
|
||||
base_config["panel"]["instance_key"] = ""
|
||||
worker = RestoreWorker("job-1", base_config)
|
||||
|
||||
class FakeJob:
|
||||
source_name = "NODO.ZIP"
|
||||
source_path = "C:\\in\\NODO.ZIP"
|
||||
|
||||
with pytest.raises(RestoreDeferred, match="instance_key"):
|
||||
worker._resolve_route(FakeJob())
|
||||
|
||||
|
||||
def test_legacy_mode_no_cambia_comportamiento(monkeypatch, base_config):
|
||||
base_config["panel"]["mode"] = "orchestrator"
|
||||
worker = RestoreWorker("job-1", base_config)
|
||||
assert worker._legacy_panel_mode() == "orchestrator"
|
||||
|
||||
captured = {}
|
||||
|
||||
def fake_resolve(api_url, api_token, filename, instance_key=None):
|
||||
captured["instance_key"] = instance_key
|
||||
return {
|
||||
"action": "forward",
|
||||
"db_name": "DB1",
|
||||
"node_key": "NODO",
|
||||
"target": {
|
||||
"id": 2,
|
||||
"name": "Omega",
|
||||
"ssh_host": "h",
|
||||
"ssh_username": "u",
|
||||
"ssh_password": "p",
|
||||
"input_folder": "D:\\In",
|
||||
},
|
||||
}
|
||||
|
||||
monkeypatch.setattr(
|
||||
"app.engine.restore_worker.panel_client.resolve_route", fake_resolve
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"app.engine.restore_worker.JobRepository.update_node_and_db", lambda *a, **k: None
|
||||
)
|
||||
|
||||
class FakeJob:
|
||||
source_name = "NODO.ZIP"
|
||||
source_path = "C:\\in\\NODO.ZIP"
|
||||
|
||||
route = worker._resolve_route(FakeJob())
|
||||
assert route["action"] == "forward"
|
||||
assert captured["instance_key"] == "Alfa"
|
||||
Reference in New Issue
Block a user