okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

Aly Raffauffeat(nix): package client and server separatelybed4fdc

main
2.2 KiB65 linesraw
1"""Check a packaged binary outside its checkout, without development tools on PATH.
2
3Usage: python3 test/manual/nix_package_smoke.py /absolute/path/to/bin/albedo
4"""
5
6import json
7import pathlib
8import subprocess
9import sys
10import tempfile
11import urllib.request
12
13binary = sys.argv[1]
14with tempfile.TemporaryDirectory(prefix="albedo-nix-smoke-") as directory:
15    base = pathlib.Path(directory)
16    home = base / "home"
17    home.mkdir()
18    (home / "extensions.json").write_text(json.dumps({"models": {"refreshHours": 0}}))
19    env = {
20        "HOME": str(base),
21        "ALBEDO_HOME": str(home),
22        "ALBEDO_NO_BROWSER": "1",
23        "PATH": "/usr/bin:/bin",
24        "TERM": "dumb",
25    }
26    try:
27        result = subprocess.run(
28            [binary, "sessions", "--json"],
29            cwd=base,
30            env=env,
31            capture_output=True,
32            text=True,
33            timeout=45,
34        )
35        if result.returncode:
36            print(result.stdout, result.stderr)
37            log = home / "daemon.log"
38            if log.exists():
39                print(log.read_text()[-10000:])
40            raise SystemExit(result.returncode)
41        assert json.loads(result.stdout) == [], result.stdout
42        record = json.loads((home / "daemon.json").read_text())
43        req = urllib.request.Request(
44            f"http://127.0.0.1:{record['port']}/server",
45            headers={"Authorization": "Bearer " + record["token"]},
46        )
47        with urllib.request.urlopen(req, timeout=5) as response:
48            identity = json.load(response)
49        assert identity["protocol"] == record["version"], identity
50        assert identity["instance_id"], identity
51        assert identity["build"] == record["build"], identity
52        if record.get("instance_id"):
53            assert identity["instance_id"] == record["instance_id"], identity
54        assert identity["state"] == "ready", identity
55        print(json.dumps({"binary": binary, "sessions": [], "server": identity}))
56    finally:
57        stop = subprocess.run(
58            [binary, "daemon", "--stop"],
59            cwd=base,
60            env=env,
61            capture_output=True,
62            text=True,
63            timeout=10,
64        )
65        assert stop.returncode == 0, "shutdown error: " + stop.stderr