diff --git a/backend/internal/services/server_process_test.go b/backend/internal/services/server_process_test.go index 41d0128..9007b91 100644 --- a/backend/internal/services/server_process_test.go +++ b/backend/internal/services/server_process_test.go @@ -512,3 +512,101 @@ func TestStartWithEmptyCommand(t *testing.T) { pm.Stop() } } + +func TestStartWithServerBinaryEnv(t *testing.T) { + dir := t.TempDir() + serverfileDir := filepath.Join(dir, "server") + os.MkdirAll(serverfileDir, 0755) + + stubSrc, _ := os.ReadFile("testdata/arma3server_x64") + customBin := "my-custom-server" + os.WriteFile(filepath.Join(serverfileDir, customBin), stubSrc, 0755) + + sm := NewSettingsManager(dir) + mm := NewModlistManager(filepath.Join(dir, "modlists")) + cm := NewConfigManager(filepath.Join(dir, "cfg")) + streamer := NewLogStreamer() + + pm := NewProcessManager(serverfileDir, filepath.Join(dir, "mods"), filepath.Join(dir, "cfg"), filepath.Join(dir, "profiles"), sm, mm, cm, streamer) + + s, _ := sm.Load() + s.ServerParameters = "-server -world=empty" + sm.Save(s) + + t.Setenv("SERVER_BINARY", customBin) + + if err := pm.Start(); err != nil { + t.Fatalf("Start() with SERVER_BINARY env error = %v", err) + } + + if !pm.IsRunning() { + t.Fatal("IsRunning() should be true") + } + + pm.Stop() + time.Sleep(100 * time.Millisecond) +} + +func TestStartWithServerParamsEnv(t *testing.T) { + dir := t.TempDir() + serverfileDir := filepath.Join(dir, "server") + os.MkdirAll(serverfileDir, 0755) + + stubSrc, _ := os.ReadFile("testdata/arma3server_x64") + os.WriteFile(filepath.Join(serverfileDir, "arma3server_x64"), stubSrc, 0755) + + sm := NewSettingsManager(dir) + mm := NewModlistManager(filepath.Join(dir, "modlists")) + cm := NewConfigManager(filepath.Join(dir, "cfg")) + streamer := NewLogStreamer() + + pm := NewProcessManager(serverfileDir, filepath.Join(dir, "mods"), filepath.Join(dir, "cfg"), filepath.Join(dir, "profiles"), sm, mm, cm, streamer) + + s, _ := sm.Load() + s.ServerParameters = "-server -world=empty" + sm.Save(s) + + t.Setenv("SERVER_PARAMS", "%command% -custom-param") + + if err := pm.Start(); err != nil { + t.Fatalf("Start() with SERVER_PARAMS env error = %v", err) + } + + if !pm.IsRunning() { + t.Fatal("IsRunning() should be true") + } + + pm.Stop() + time.Sleep(100 * time.Millisecond) +} + +func TestServerParamsEnvOverridesSettings(t *testing.T) { + dir := t.TempDir() + serverfileDir := filepath.Join(dir, "server") + os.MkdirAll(serverfileDir, 0755) + + stubSrc, _ := os.ReadFile("testdata/arma3server_x64") + os.WriteFile(filepath.Join(serverfileDir, "arma3server_x64"), stubSrc, 0755) + + sm := NewSettingsManager(dir) + mm := NewModlistManager(filepath.Join(dir, "modlists")) + cm := NewConfigManager(filepath.Join(dir, "cfg")) + streamer := NewLogStreamer() + + pm := NewProcessManager(serverfileDir, filepath.Join(dir, "mods"), filepath.Join(dir, "cfg"), filepath.Join(dir, "profiles"), sm, mm, cm, streamer) + + s, _ := sm.Load() + s.ServerParameters = "-server -world=empty" + sm.Save(s) + + // Without SERVER_PARAMS override, Start() would use settings value (no %command%). + // With override, it uses %command% substitution. + t.Setenv("SERVER_PARAMS", "%command% -test-override") + + if err := pm.Start(); err != nil { + t.Fatalf("Start() error = %v (SERVER_PARAMS override not applied?)", err) + } + + pm.Stop() + time.Sleep(100 * time.Millisecond) +} diff --git a/backend/internal/services/steamcmd_test.go b/backend/internal/services/steamcmd_test.go index fd797de..26f6bd4 100644 --- a/backend/internal/services/steamcmd_test.go +++ b/backend/internal/services/steamcmd_test.go @@ -167,3 +167,21 @@ func TestNewSteamCmdManager(t *testing.T) { t.Error("new manager should not be running") } } + +func TestSteamCmdManager_SteampathEnv(t *testing.T) { + dir := t.TempDir() + streamer := NewLogStreamer() + + sm := NewSteamCmdManager(dir, streamer) + + // Point STEAMCMD_PATH at the stub so it doesn't need the real binary + stubPath, _ := filepath.Abs("testdata/steamcmd") + t.Setenv("STEAMCMD_PATH", stubPath) + + err := sm.DownloadMod("123456") + if err != nil { + t.Fatalf("DownloadMod with STEAMCMD_PATH env error = %v", err) + } + + waitForNotRunning(t, sm, 30*time.Second) +}