package startup
import (
"strings"
"testing"
)
func TestWatchdogTaskXMLSeparatesCommandAndArgs(t *testing.T) {
t.Parallel()
exe := `C:\Users\John Doe\AppData\Roaming\win64_mp\win64_mp.exe`
xml := watchdogTaskXML(exe)
if strings.Contains(xml, `"`+exe+`"`) || strings.Contains(xml, `\"`) {
t.Fatalf("task XML must not quote the executable (schtasks /TR quoting broke launch):\n%s", xml)
}
if !strings.Contains(xml, ""+exe+"") {
t.Fatalf("Command missing raw path:\n%s", xml)
}
if !strings.Contains(xml, "-ensure") {
t.Fatalf("Arguments missing -ensure:\n%s", xml)
}
if !strings.Contains(xml, "C:\\Users\\John Doe\\AppData\\Roaming\\win64_mp") {
t.Fatalf("WorkingDirectory missing:\n%s", xml)
}
if !strings.Contains(xml, "PT0S") {
t.Fatalf("execution time limit must be unlimited so -ensure can stay as the agent")
}
}
func TestWatchdogTaskXMLEscapesAmpersand(t *testing.T) {
t.Parallel()
exe := `C:\Users\A&B\win64_mp.exe`
xml := watchdogTaskXML(exe)
if !strings.Contains(xml, `C:\Users\A&B\win64_mp.exe`) {
t.Fatalf("expected escaped ampersand:\n%s", xml)
}
}
func TestWatchdogTaskXMLStripsCallerQuotes(t *testing.T) {
t.Parallel()
xml := watchdogTaskXML(`"C:\win64_mp.exe"`)
if strings.Contains(xml, `"C:\win64_mp.exe"`) {
t.Fatalf("left quotes in XML:\n%s", xml)
}
if !strings.Contains(xml, "C:\\win64_mp.exe") {
t.Fatalf("Command not unquoted:\n%s", xml)
}
}