2026-03-31 14:52:50 -03:00
|
|
|
package plan
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"os"
|
2026-04-11 00:17:10 -03:00
|
|
|
"path/filepath"
|
2026-03-31 14:52:50 -03:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"metis/pkg/inventory"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func TestBuildIncludesInjectWhenEnvSet(t *testing.T) {
|
|
|
|
|
defer os.Unsetenv("METIS_BOOT_PATH")
|
|
|
|
|
os.Setenv("METIS_BOOT_PATH", "/mnt/boot")
|
|
|
|
|
inv := &inventory.Inventory{
|
|
|
|
|
Classes: []inventory.NodeClass{{
|
|
|
|
|
Name: "c1",
|
|
|
|
|
Image: "file:///tmp/dummy",
|
|
|
|
|
}},
|
|
|
|
|
Nodes: []inventory.NodeSpec{{
|
|
|
|
|
Name: "n1",
|
|
|
|
|
Class: "c1",
|
|
|
|
|
Hostname: "n1",
|
|
|
|
|
IP: "10.0.0.1",
|
|
|
|
|
K3sRole: "agent",
|
|
|
|
|
}},
|
|
|
|
|
}
|
|
|
|
|
p, err := Build(inv, "n1", "/dev/sdz", "/tmp/cache")
|
|
|
|
|
if err != nil {
|
|
|
|
|
t.Fatalf("build: %v", err)
|
|
|
|
|
}
|
|
|
|
|
found := false
|
|
|
|
|
for _, a := range p.Actions {
|
|
|
|
|
if a.Type == "inject" {
|
|
|
|
|
found = true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if !found {
|
|
|
|
|
t.Fatalf("expected inject action when METIS_BOOT_PATH set")
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-04-11 00:17:10 -03:00
|
|
|
|
|
|
|
|
func TestBuildAndExecuteErrorBranches(t *testing.T) {
|
|
|
|
|
inv := &inventory.Inventory{}
|
|
|
|
|
if _, err := Build(inv, "missing", "/dev/sdz", "/tmp/cache"); err == nil {
|
|
|
|
|
t.Fatal("expected Build to fail for missing node")
|
|
|
|
|
}
|
|
|
|
|
if got := checksumFromInventory(inv, "missing"); got != "" {
|
|
|
|
|
t.Fatalf("checksumFromInventory missing node = %q", got)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dir := t.TempDir()
|
|
|
|
|
raw := filepath.Join(dir, "base.img")
|
|
|
|
|
if err := os.WriteFile(raw, []byte("image"), 0o644); err != nil {
|
|
|
|
|
t.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
sum := imageChecksum(t, raw)
|
|
|
|
|
inv = &inventory.Inventory{
|
|
|
|
|
Classes: []inventory.NodeClass{{
|
|
|
|
|
Name: "c1",
|
|
|
|
|
Arch: "arm64",
|
|
|
|
|
OS: "linux",
|
|
|
|
|
Image: "file://" + raw,
|
|
|
|
|
Checksum: sum,
|
|
|
|
|
}},
|
|
|
|
|
Nodes: []inventory.NodeSpec{{
|
|
|
|
|
Name: "n1",
|
|
|
|
|
Class: "c1",
|
|
|
|
|
Hostname: "n1",
|
|
|
|
|
IP: "10.0.0.1",
|
|
|
|
|
K3sRole: "agent",
|
|
|
|
|
}},
|
|
|
|
|
}
|
|
|
|
|
if _, err := Execute(inv, "n1", "/dev/sdX", filepath.Join(dir, "cache"), true); err == nil {
|
|
|
|
|
t.Fatal("expected placeholder device rejection")
|
|
|
|
|
}
|
|
|
|
|
}
|