package main import ( "path/filepath" "testing" ) // A relaunch of OpsLog itself must not suppress the new process's window. // // SysProcAttr is where that damage was done: hideConsole sets HideWindow, which // on Windows becomes SW_HIDE in the STARTUPINFO, and Windows applies it to the // first top-level window the new process shows. The updated OpsLog started, // took the single-instance mutex and connected the rig — invisibly. Two // operators on 0.27.23 reported it as "it goes to reload and just fails to // load": a process in the task manager, no window, and killing it then starting // it by hand working every time. // // The window flags themselves are asserted in relaunch_windows_test.go, where // SysProcAttr has the fields to look at. func TestRelaunchCmdPassesItsArgumentsAndFolder(t *testing.T) { cmd := relaunchCmd(filepath.Join("C:", "OpsLog", "OpsLog.exe"), "--post-update", "--wait-pid", "1234") if len(cmd.Args) != 4 || cmd.Args[1] != "--post-update" || cmd.Args[3] != "1234" { t.Errorf("args = %v, want the exe plus the three passed through", cmd.Args) } // The working directory matters: the new instance keeps its data folder // beside the executable, and inheriting the old process's cwd would look for // it somewhere else entirely. if cmd.Dir != filepath.Join("C:", "OpsLog") { t.Errorf("Dir = %q, want the executable's folder", cmd.Dir) } }