90 lines
2.2 KiB
Go
90 lines
2.2 KiB
Go
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")
|
|
}
|
|
}
|