Ctrl K
ComunidadGuías…

scripts/test-sandbox-environment-seed.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env python3
"""Verify identical seeds and independent fixture writes without creating a VM."""
import importlib.util
import hashlib
import json
from pathlib import Path
import tempfile
import threading
import unittest
import urllib.request

ROOT = Path(__file__).resolve().parents[1]
SPEC = importlib.util.spec_from_file_location("seed_fixture", ROOT / "scripts/fixtures/sandbox-environment-seed.py")
FIXTURE = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(FIXTURE)


class EnvironmentSeed(unittest.TestCase):
    def test_manifest_matches_script_and_canonical_seed(self):
        manifest=json.loads((ROOT/'scripts/fixtures/sandbox-environment-seed.json').read_text())
        self.assertEqual(manifest['scriptSha256'],hashlib.sha256((ROOT/'scripts/fixtures/sandbox-environment-seed.py').read_bytes()).hexdigest())
        with tempfile.TemporaryDirectory() as directory:
            path=Path(directory)/'seed.sqlite';FIXTURE.initialize(path)
            seed=FIXTURE.database_request(path,{'operation':'read'})
            self.assertEqual(manifest['seedSha256'],hashlib.sha256(json.dumps(seed,sort_keys=True,separators=(',',':')).encode()).hexdigest())

    def test_same_seed_different_databases_have_independent_writes(self):
        with tempfile.TemporaryDirectory() as directory:
            left, right = [Path(directory) / name for name in ("left.sqlite", "right.sqlite")]
            for path in (left, right):
                FIXTURE.initialize(path)
            initial = FIXTURE.database_request(left, {"operation": "read"})
            self.assertEqual(initial, FIXTURE.database_request(right, {"operation": "read"}))
            FIXTURE.database_request(left, {"operation": "write", "key": "deployment", "value": "left"})
            FIXTURE.database_request(right, {"operation": "write", "key": "deployment", "value": "right"})
            self.assertEqual(FIXTURE.database_request(left, {"operation": "read"})["values"], {"deployment": "left"})
            self.assertEqual(FIXTURE.database_request(right, {"operation": "read"})["values"], {"deployment": "right"})

    def test_tcp_database_and_http_backend_retain_actual_write(self):
        with tempfile.TemporaryDirectory() as directory:
            database = FIXTURE.DatabaseServer(("127.0.0.1", 0), Path(directory) / "state.sqlite")
            backend = FIXTURE.BackendServer(("127.0.0.1", 0), "127.0.0.1", database.server_address[1])
            for server in (database, backend):
                threading.Thread(target=server.serve_forever, daemon=True).start()
            try:
                base = f"http://127.0.0.1:{backend.server_port}"
                with urllib.request.urlopen(base + "/seed", timeout=3) as response:
                    self.assertEqual(json.load(response)["values"], {})
                request = urllib.request.Request(base + "/write", data=b'{"key":"proof","value":"retained"}', headers={"Content-Type": "application/json"}, method="POST")
                with urllib.request.urlopen(request, timeout=3) as response:
                    self.assertEqual(json.load(response)["values"], {"proof": "retained"})
                self.assertEqual(FIXTURE.remote_database("127.0.0.1", database.server_address[1], {"operation": "read"})["values"], {"proof": "retained"})
            finally:
                for server in (backend, database):
                    server.shutdown()
                    server.server_close()


if __name__ == "__main__":
    unittest.main()