Files
DoGaMa-serv/internal/instance/container_config_test.go
T

63 lines
2.8 KiB
Go

package instance
import "testing"
func TestLabelsAndVariables(t *testing.T) {
labels, err := ParseLabels("\n glance.name={{instance.name}}\nquery=a=b=c\n")
if err != nil || labels["query"] != "a=b=c" {
t.Fatalf("ParseLabels = %#v, %v", labels, err)
}
if _, err := ParseLabels("missing"); err == nil {
t.Fatal("line without separator accepted")
}
if _, err := ParseLabels("=empty"); err == nil {
t.Fatal("empty key accepted")
}
if _, err := ParseLabels("dogama.managed=false"); err == nil {
t.Fatal("reserved key accepted")
}
if _, err := ParseLabels("io.dogama.managed=false"); err == nil {
t.Fatal("technical key accepted")
}
if _, err := ParseLabels("x={{unknown}}"); err == nil {
t.Fatal("unknown variable accepted")
}
resolved, err := ResolveLabels(map[string]string{"x": "{{game.name}}/{{game.id}}/{{game.icon_url}}/{{instance.name}}/{{instance.id}}/{{instance.slug}}/{{server.name}}"}, LabelContext{GameName: "Palworld", GameID: "palworld", GameIconURL: "/public/game-icons/palworld", InstanceName: "Summer", InstanceID: "id", InstanceSlug: "summer", ServerName: "Server"})
if err != nil || resolved["x"] != "Palworld/palworld//public/game-icons/palworld/Summer/id/summer/Server" {
t.Fatalf("ResolveLabels = %#v, %v", resolved, err)
}
merged := MergeLabels(map[string]string{"io.dogama.managed": "true"}, map[string]string{"x": "global"}, map[string]string{"x": "local", "io.dogama.managed": "false"})
if merged["x"] != "local" || merged["io.dogama.managed"] != "true" {
t.Fatalf("MergeLabels = %#v", merged)
}
}
func TestSlugify(t *testing.T) {
cases := map[string]string{"Mon Serveur": "mon-serveur", "Été 2026": "ete-2026", "PvE / PvP": "pve-pvp", "Serveur !!! Test": "serveur-test", "---Été///PvE###1---": "ete-pve-1"}
for input, expected := range cases {
if actual := Slugify(input); actual != expected {
t.Errorf("Slugify(%q)=%q, want %q", input, actual, expected)
}
}
}
func TestDockerUserAndImageTag(t *testing.T) {
uid, gid := uint32(1000), uint32(1001)
if value, err := DockerUserValue(DockerUser{Mode: DockerUserDoGaMa}, 42, 43); err != nil || value != "42:43" {
t.Fatalf("dogama user = %q, %v", value, err)
}
if value, err := DockerUserValue(DockerUser{Mode: DockerUserCustom, UID: &uid, GID: &gid}, 0, 0); err != nil || value != "1000:1001" {
t.Fatalf("custom user = %q, %v", value, err)
}
if value, err := DockerUserValue(DockerUser{Mode: DockerUserImage}, 0, 0); err != nil || value != "" {
t.Fatalf("image user = %q, %v", value, err)
}
if _, err := ValidateImageTag(ImageTag{Mode: ImageTagPinned, Tag: "bad/tag"}, "stable"); err == nil {
t.Fatal("invalid tag accepted")
}
tracked, err := ValidateImageTag(ImageTag{Mode: ImageTagTracked}, "stable")
if err != nil || tracked.Tag != "stable" {
t.Fatalf("tracked tag = %#v, %v", tracked, err)
}
}