from __future__ import annotations
import importlib.util
import pathlib
import sys
import unittest
ROOT = pathlib.Path(__file__).resolve().parents[2]
MODULE_PATH = ROOT / "scripts" / "check_runtime_public_api.py"
def _load_module():
spec = importlib.util.spec_from_file_location(
"check_runtime_public_api", MODULE_PATH
)
module = importlib.util.module_from_spec(spec)
sys.modules["check_runtime_public_api"] = module
spec.loader.exec_module(module)
return module
check = _load_module()
class CheckRuntimePublicApiTest(unittest.TestCase):
def test_accepts_normal_public_runtime_api(self) -> None:
self.assertTrue(check.verify_smoke_succeeds(0, ""))
self.assertFalse(check.verify_smoke_succeeds(1, "error: ..."))
def test_rejects_ticker_probe_import(self) -> None:
for marker in check.REJECTION_MARKERS:
with self.subTest(marker=marker):
self.assertTrue(
check.is_rejection(
1, f"error: {marker} `active_epoch_ticker_count`"
)
)
self.assertFalse(check.is_rejection(0, ""))
self.assertFalse(check.is_rejection(1, "some unrelated error"))
def test_fails_if_probe_import_compiles(self) -> None:
self.assertEqual(check.classify_probe_result(0, ""), "leaked")
self.assertEqual(
check.classify_probe_result(1, "unresolved import"), "rejected"
)
if __name__ == "__main__":
unittest.main()