35 lines
1.1 KiB
Go
35 lines
1.1 KiB
Go
package compose
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestWindowsTerminationOwnsTheProcessTreeWithAKillOnCloseJobObjectWithoutAShell(t *testing.T) {
|
|
source, err := os.ReadFile("process_windows.go")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
text := string(source)
|
|
for _, required := range []string{
|
|
"windows.CreateJobObject", "windows.JOBOBJECT_EXTENDED_LIMIT_INFORMATION",
|
|
"windows.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE", "windows.SetInformationJobObject",
|
|
"windows.AssignProcessToJobObject", "windows.TerminateJobObject", "windows.OpenProcess",
|
|
"windows.CreateToolhelp32Snapshot", "windows.ResumeThread", "windows.CloseHandle",
|
|
"createSuspendedProcess",
|
|
} {
|
|
if !strings.Contains(text, required) {
|
|
t.Errorf("process_windows.go is missing %q", required)
|
|
}
|
|
}
|
|
for _, forbidden := range []string{
|
|
"taskkill", "cmd.exe", "powershell", "exec.Command(", "exec.CommandContext(",
|
|
"exec.LookPath(", "windows.GetSystemDirectory",
|
|
} {
|
|
if strings.Contains(strings.ToLower(text), strings.ToLower(forbidden)) {
|
|
t.Errorf("process_windows.go contains unsafe or unowned process-tree mechanism %q", forbidden)
|
|
}
|
|
}
|
|
}
|