package runner import ( "testing" "codeberg.org/SquidSE/ClusterCanvas/service/internal/settings" ) func TestResolveItemLibraryAndLocal(t *testing.T) { library := []settings.Action{ { ID: settings.BuiltinActionUptimeID, Name: "Uptime", Kind: settings.ActionKindShell, Body: "uptime", Env: []settings.ActionEnvVar{}, }, { ID: settings.BuiltinActionDiskUsageID, Name: "Disk usage", Kind: settings.ActionKindShell, Body: "df -h {{env.MOUNT}}", Env: []settings.ActionEnvVar{ {Name: "MOUNT", Value: "/"}, {Name: "EXTRA", Value: "lib"}, }, }, } resolved, err := ResolveItem(settings.NodeActionItem{ ID: "i1", Source: settings.ActionItemSourceLibrary, LibraryActionID: settings.BuiltinActionUptimeID, }, library) if err != nil { t.Fatalf("ResolveItem library: %v", err) } if resolved.Name != "Uptime" || resolved.Body != "uptime" { t.Fatalf("resolved = %#v", resolved) } merged, err := ResolveItem(settings.NodeActionItem{ ID: "i-disk", Source: settings.ActionItemSourceLibrary, LibraryActionID: settings.BuiltinActionDiskUsageID, Env: []settings.ActionEnvVar{ {Name: "MOUNT", Value: "/data"}, {Name: "ITEM_ONLY", Value: "yes"}, }, }, library) if err != nil { t.Fatalf("ResolveItem merge: %v", err) } envByName := map[string]string{} for _, envVar := range merged.Env { envByName[envVar.Name] = envVar.Value } if envByName["MOUNT"] != "/data" { t.Fatalf("MOUNT override = %#v", merged.Env) } if envByName["EXTRA"] != "lib" { t.Fatalf("library EXTRA lost: %#v", merged.Env) } if envByName["ITEM_ONLY"] != "yes" { t.Fatalf("item env missing: %#v", merged.Env) } local, err := ResolveItem(settings.NodeActionItem{ ID: "i2", Source: settings.ActionItemSourceLocal, Name: "Echo", Kind: settings.ActionKindShell, Body: "echo hi", Env: []settings.ActionEnvVar{}, }, library) if err != nil { t.Fatalf("ResolveItem local: %v", err) } if local.Name != "Echo" { t.Fatalf("local = %#v", local) } if _, err := ResolveItem(settings.NodeActionItem{ Source: settings.ActionItemSourceLibrary, LibraryActionID: "missing", }, library); err == nil { t.Fatal("expected missing library action error") } }