Files
aipackage/tests/deployment/test_recover_python_profile_on_boot.py

49 lines
2.3 KiB
Python

import importlib.util
import tempfile
import unittest
from pathlib import Path
MODULE_PATH = Path(__file__).parents[2] / "autoinstall/offline/recover-python-profile-on-boot.py"
SPEC = importlib.util.spec_from_file_location("recover_python_profile_on_boot", MODULE_PATH)
MODULE = importlib.util.module_from_spec(SPEC)
assert SPEC.loader
SPEC.loader.exec_module(MODULE)
class RecoverPythonProfileOnBootTests(unittest.TestCase):
def test_absent_and_terminal_states_are_noop(self):
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)
self.assertEqual(MODULE.recover(root / "missing", root / "cp", root / "target")["action"],
"none")
def test_installing_state_rolls_back(self):
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)
target = root / "venv"
target.mkdir()
(target / "marker").write_text("old")
checkpoint = root / "checkpoint"
manifest = MODULE.installer.checkpoint_api.create(target, checkpoint, "op-1")
journal = root / "journal.json"
identity = dict(operation_id="op-1", profile="cpu-only", manifest_sha256="a" * 64)
current = MODULE.journal_api.update(journal, expected_generation=0,
state="profile_selected", checkpoint_id=None, **identity)
current = MODULE.journal_api.update(journal, expected_generation=current["generation"],
state="checkpoint_ready",
checkpoint_id=manifest["inventory_sha256"], **identity)
MODULE.journal_api.update(journal, expected_generation=current["generation"],
state="installing", checkpoint_id=manifest["inventory_sha256"],
**identity)
(target / "marker").write_text("activated")
result = MODULE.recover(journal, checkpoint, target)
self.assertEqual(result["state"], "rolled_back")
self.assertEqual((target / "marker").read_text(), "old")
self.assertEqual(MODULE.recover(journal, checkpoint, target)["reason"],
"terminal_rolled_back")
if __name__ == "__main__":
unittest.main()