diff --git a/tests/test_plan_cli.py b/tests/test_plan_cli.py new file mode 100644 index 0000000..5b8fbfb --- /dev/null +++ b/tests/test_plan_cli.py @@ -0,0 +1,75 @@ +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