metis/tests/test_plan_cli.py

76 lines
2.0 KiB
Python

import json
import subprocess
from pathlib import Path
import pytest
ROOT = Path(__file__).resolve().parents[1]
def write_inv(tmpdir, image_path, checksum):
inv = {
"classes": [
{
"name": "test-class",
"arch": "arm64",
"os": "testos",
"image": f"file://{image_path}",
"checksum": checksum,
"default_labels": {"role": "worker"},
}
],
"nodes": [
{
"name": "node-a",
"class": "test-class",
"hostname": "node-a",
"ip": "10.0.0.10",
"k3s_role": "agent",
}
],
}
inv_path = Path(tmpdir) / "inv.yaml"
inv_path.write_text(json.dumps(inv))
return inv_path
def test_plan_output_contains_actions(tmp_path):
dummy = tmp_path / "dummy.img"
dummy.write_bytes(b"dummy")
import hashlib
checksum = "sha256:" + hashlib.sha256(dummy.read_bytes()).hexdigest()
inv_path = write_inv(tmp_path, dummy, checksum)
cache_dir = tmp_path / "cache"
cmd = ["go", "run", "./cmd/metis", "plan", "--inventory", str(inv_path), "--node", "node-a", "--device", "/dev/sdz", "--cache", str(cache_dir)]
out = subprocess.check_output(cmd, cwd=ROOT)
plan = json.loads(out)
assert plan["node"] == "node-a"
assert any(a["type"] == "fetch" for a in plan["actions"])
def test_burn_dry_run(tmp_path):
dummy = tmp_path / "dummy.img"
dummy.write_bytes(b"dummy")
import hashlib
checksum = "sha256:" + hashlib.sha256(dummy.read_bytes()).hexdigest()
inv_path = write_inv(tmp_path, dummy, checksum)
cache_dir = tmp_path / "cache"
cmd = [
"go",
"run",
"./cmd/metis",
"burn",
"--inventory",
str(inv_path),
"--node",
"node-a",
"--device",
"/dev/sdz",
"--cache",
str(cache_dir),
]
out = subprocess.check_output(cmd, cwd=ROOT, text=True)
assert "Dry run" in out or "Plan for" in out