package compose import ( "os" "strings" "testing" ) func TestWindowsTerminationUsesBoundedExactPIDTreeKillWithoutAShell(t *testing.T) { source, err := os.ReadFile("process_windows.go") if err != nil { t.Fatal(err) } text := string(source) for _, required := range []string{ "context.WithTimeout", "windows.GetSystemDirectory", "filepath.Clean", "filepath.IsAbs", `filepath.Join(systemDirectory, "taskkill.exe")`, "systemTaskkillPath", `exec.CommandContext(ctx, taskkillPath, "/PID", strconv.Itoa(pid), "/T", "/F")`, "io.Discard", "ErrProcessReap", } { if !strings.Contains(text, required) { t.Errorf("process_windows.go is missing %q", required) } } for _, forbidden := range []string{ "cmd.exe", "powershell", `exec.Command("taskkill.exe"`, `exec.CommandContext(ctx, "taskkill.exe"`, `exec.LookPath("taskkill.exe")`, } { if strings.Contains(strings.ToLower(text), strings.ToLower(forbidden)) { t.Errorf("process_windows.go contains unsafe command form %q", forbidden) } } }