package main import ( "strings" "testing" ) func TestBootFailureKeepsVerdictAndServerOutput(t *testing.T) { out := "[boot-test] deploying boottest-valheim (cm2network/steamcmd)\n" + "[boot-test] container started; waiting for ready pattern /Game server connected/\n" + "[boot-test] FAILED: container exited before it was ready\n" + "---- last 2 log lines ----\n" + "Unknown argument --save-dir\n" + "Usage: valheim_server.x86_64 ...\n" got := bootFailure(out) if !strings.Contains(got, "failed: FAILED: container exited before it was ready") { t.Errorf("verdict missing: %s", got) } if !strings.Contains(got, "Unknown argument --save-dir") || strings.Contains(got, "deploying boottest") { t.Errorf("want only the server's last lines, got: %s", got) } if v := bootVerdict("[boot-test] PASSED: READY: Game server connected"); v != "PASSED: READY: Game server connected" { t.Errorf("verdict = %q", v) } } func TestOutsideDirsSkipsSteamNoise(t *testing.T) { r := &bootReport{ContainerChanges: []string{ "A /home/steam/.config/unity3d/IronGate/Valheim/worlds_local/w.db", "A /home/steam/Steam/logs/connection_log.txt", "C /home/steam/.steam/registry.vdf", }} got := outsideDirs(r) if len(got) != 1 || got[0] != "/home/steam/.config/unity3d/IronGate/Valheim/worlds_local" { t.Errorf("got %v", got) } if outsideDirs(nil) != nil { t.Error("nil report should have no dirs") } } func TestVariantNotes(t *testing.T) { v := variant{Title: "Crossplay", Description: "PC + Xbox", StartupHint: "./valheim_server.x86_64 -crossplay", Ports: []string{"2456/udp"}} got := variantNotes(v, "needs Xbox") for _, want := range []string{"variant: Crossplay (PC + Xbox)", "documented startup: ./valheim_server.x86_64 -crossplay", "2456/udp", "the admin asked for: needs Xbox"} { if !strings.Contains(got, want) { t.Errorf("missing %q in %q", want, got) } } }