98 lines
3.6 KiB
Python
98 lines
3.6 KiB
Python
import json
|
|
import unittest
|
|
import urllib.error
|
|
|
|
from scripts.run_remote_ops_smoke import ENDPOINTS, run_remote_ops_smoke
|
|
|
|
|
|
class FakeResponse:
|
|
def __init__(self, status, payload):
|
|
self.status = status
|
|
self.payload = payload
|
|
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, exc_type, exc, traceback):
|
|
return False
|
|
|
|
def read(self):
|
|
return json.dumps(self.payload).encode("utf-8")
|
|
|
|
def close(self):
|
|
return None
|
|
|
|
|
|
class RemoteOpsSmokeTests(unittest.TestCase):
|
|
def test_passes_all_required_remote_ops_endpoints(self) -> None:
|
|
seen = []
|
|
|
|
def opener(request, timeout_seconds):
|
|
seen.append((request.get_method(), request.full_url))
|
|
if request.full_url.endswith("/trading/unattended-harness?instrument_id=1"):
|
|
return FakeResponse(200, {"status": "passed", "blockers": [], "checks": []})
|
|
return FakeResponse(200, {"status": "ok"})
|
|
|
|
payload = run_remote_ops_smoke(base_url="http://remote.test", opener=opener, sleeper=lambda _: None)
|
|
|
|
self.assertEqual(payload["status"], "passed")
|
|
self.assertEqual(len(payload["passed_checks"]), len(ENDPOINTS))
|
|
self.assertIn(("POST", "http://remote.test/trading/visual-watch/cleanup-captures"), seen)
|
|
self.assertFalse(payload["external_channels_used"])
|
|
self.assertFalse(payload["real_trade_required"])
|
|
|
|
def test_http_404_blocks_stale_remote(self) -> None:
|
|
def opener(request, timeout_seconds):
|
|
raise urllib.error.HTTPError(
|
|
request.full_url,
|
|
404,
|
|
"not found",
|
|
hdrs=None,
|
|
fp=FakeResponse(404, {"error": "not_found"}),
|
|
)
|
|
|
|
payload = run_remote_ops_smoke(base_url="http://remote.test", opener=opener, sleeper=lambda _: None)
|
|
|
|
self.assertEqual(payload["status"], "blocked")
|
|
self.assertEqual(payload["blockers"][0], "health")
|
|
self.assertEqual(payload["endpoints"][0]["reason"], "unexpected_http_status")
|
|
|
|
def test_unreachable_endpoint_is_environment_blocker(self) -> None:
|
|
def opener(request, timeout_seconds):
|
|
raise TimeoutError("timed out")
|
|
|
|
payload = run_remote_ops_smoke(base_url="http://remote.test", attempts=1, opener=opener, sleeper=lambda _: None)
|
|
|
|
self.assertEqual(payload["status"], "blocked")
|
|
self.assertEqual(payload["endpoints"][0]["blocker_type"], "environment")
|
|
self.assertEqual(payload["endpoints"][0]["reason"], "endpoint_unreachable")
|
|
|
|
def test_harness_environment_blocker_is_preserved(self) -> None:
|
|
def opener(request, timeout_seconds):
|
|
if request.full_url.endswith("/trading/unattended-harness?instrument_id=1"):
|
|
return FakeResponse(
|
|
200,
|
|
{
|
|
"status": "blocked",
|
|
"blockers": ["runtime_environment"],
|
|
"checks": [
|
|
{
|
|
"name": "runtime_environment",
|
|
"status": "blocked",
|
|
"blocker_type": "environment",
|
|
}
|
|
],
|
|
},
|
|
)
|
|
return FakeResponse(200, {"status": "ok"})
|
|
|
|
payload = run_remote_ops_smoke(base_url="http://remote.test", opener=opener, sleeper=lambda _: None)
|
|
|
|
self.assertEqual(payload["status"], "blocked")
|
|
self.assertEqual(payload["blockers"], ["unattended_harness"])
|
|
self.assertEqual(payload["endpoints"][-1]["blocker_type"], "environment")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|