//go:build ship package runtimeassets import ( "bytes" "os" "path/filepath" "testing" ) func TestShipBundleSeedsOnlyMissingMutableFiles(t *testing.T) { for _, name := range []string{"resources/TechniqueRules.json", "res.json", "challenge_data.json", "scripts/hide_ui.lua"} { data, err := ReadFile(name) if err != nil || len(data) == 0 { t.Fatalf("embedded runtime file %s: bytes=%d err=%v", name, len(data), err) } } directory := t.TempDir() customConfig := []byte(`{"operator":"keep"}`) if err := os.WriteFile(filepath.Join(directory, "server.json"), customConfig, 0o600); err != nil { t.Fatal(err) } if err := seedMissingFiles(directory); err != nil { t.Fatal(err) } for _, name := range seedFiles { actual, err := os.ReadFile(filepath.Join(directory, name)) if err != nil { t.Fatalf("seeded file %s: %v", name, err) } if name == "server.json" { if !bytes.Equal(actual, customConfig) { t.Fatal("existing operator config was replaced") } continue } expected, err := ReadFile(name) if err != nil { t.Fatalf("embedded seed %s: %v", name, err) } if !bytes.Equal(actual, expected) { t.Fatalf("seeded file %s differs from embedded version", name) } } }