feat: initialize XAS test console with native execution
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
from dataclasses import dataclass, field
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
@dataclass
|
||||
class Settings:
|
||||
root: Path
|
||||
sources: list
|
||||
allowed_hosts: list = field(default_factory=lambda: ["10.88.118.188:14442", "10.88.118.188:14440"])
|
||||
allowed_networks: list = field(default_factory=lambda: ["10.88.0.0/17", "10.20.0.0/21"])
|
||||
test_mode: bool = False
|
||||
max_upload: int = 1024 * 1024
|
||||
max_log: int = 16 * 1024 * 1024
|
||||
max_artifact: int = 32 * 1024 * 1024
|
||||
max_run_files: int = 64
|
||||
test_definitions: list = field(default_factory=list)
|
||||
example_script_ids: list = field(default_factory=list)
|
||||
native_catalog: dict = field(default_factory=lambda: {"profiles": [], "targets": []})
|
||||
|
||||
@property
|
||||
def native_socket(self):
|
||||
return self.root / "native-ipc" / "control.sock"
|
||||
|
||||
@property
|
||||
def library(self):
|
||||
return self.root / "library"
|
||||
|
||||
@property
|
||||
def runs(self):
|
||||
return self.root / "runs"
|
||||
|
||||
@property
|
||||
def db(self):
|
||||
return self.root / "console-data" / "console.sqlite3"
|
||||
|
||||
def prepare(self):
|
||||
self.validate_paths()
|
||||
for directory in (self.root, self.library, self.runs, self.db.parent):
|
||||
directory.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
def validate_paths(self):
|
||||
for directory in (self.root, self.library, self.runs, self.db.parent):
|
||||
if not directory.is_absolute():
|
||||
raise ValueError("Runtime must be an absolute path")
|
||||
for part in (directory, *directory.parents):
|
||||
if part.is_symlink():
|
||||
raise ValueError("Runtime paths must not contain symlinks")
|
||||
for path in (self.db, Path(str(self.db) + "-wal"), Path(str(self.db) + "-shm")):
|
||||
if path.is_symlink():
|
||||
raise ValueError("Database symlinks are not supported")
|
||||
|
||||
@classmethod
|
||||
def from_env(cls):
|
||||
project = Path(__file__).resolve().parents[1]
|
||||
catalog = json.loads((project / "catalog/external-sources.json").read_text(encoding="utf-8"))
|
||||
tests = json.loads((project / "catalog/test-definitions.json").read_text(encoding="utf-8"))
|
||||
native_file = project / "catalog/native-profiles.json"
|
||||
native = json.loads(native_file.read_text(encoding="utf-8")) if native_file.exists() else {"profiles": [], "targets": []}
|
||||
return cls(Path(os.environ.get("XAS_CONSOLE_ROOT", str(project / "runtime"))), catalog["sources"],
|
||||
test_definitions=tests["tests"], example_script_ids=tests.get("example_script_ids", []), native_catalog=native)
|
||||
Reference in New Issue
Block a user