package security import ( "errors" "os/exec" "strings" "testing" ) func TestFormatCommandFailureResult(t *testing.T) { got := FormatCommandFailureResult(1, "sudo: password required") want := "命令执行失败: exit status 1\n输出: sudo: password required" if got != want { t.Fatalf("got %q want %q", got, want) } if FormatCommandFailureResult(2, "") != "命令执行失败: exit status 2" { t.Fatal("empty output format") } if FormatCommandFailureResult(1, "命令执行失败: exit status 1") != "命令执行失败: exit status 1" { t.Fatal("should not double-wrap") } } func TestIsCommandFailureResult(t *testing.T) { if !IsCommandFailureResult("sudo: err\n命令执行失败: exit status 1") { t.Fatal("expected true") } if IsCommandFailureResult("sudo: err only") { t.Fatal("expected false") } } func TestFormatCommandFailureFromErr(t *testing.T) { cmd := exec.Command("sh", "-c", "exit 42") err := cmd.Run() got := FormatCommandFailureFromErr(err, "oops") if got != "命令执行失败: exit status 42\n输出: oops" { t.Fatalf("got %q", got) } timeoutErr := errors.New("shell inactivity timeout (300s)") got2 := FormatCommandFailureFromErr(timeoutErr, "already timed out") if !strings.Contains(got2, "shell inactivity timeout") || !strings.Contains(got2, "already timed out") { t.Fatalf("got %q", got2) } } func TestIsLegacyShellExitNoise(t *testing.T) { if !IsLegacyShellExitNoise("command exited with non-zero code 1\n") { t.Fatal("expected legacy noise") } if IsLegacyShellExitNoise("sudo: failed") { t.Fatal("unexpected noise") } }