package main import ( "os" "os/exec" "path/filepath" "testing" ) func TestOpenSSLSubjectNameEscapesSlashAndBackslash(t *testing.T) { got, err := openssl_subject_name(`Example/User\Name`) if err != nil { t.Fatal(err) } want := `/CN=Example\/User\\Name` if got != want { t.Fatalf("subject = %q; want %q", got, want) } } func TestOpenSSLSubjectNameRejectsLineBreak(t *testing.T) { if _, err := openssl_subject_name("Example\nUser"); err == nil { t.Fatal("certificate subject accepted a line break") } } func TestValidateCertificatePairAcceptsMatchingPEM(t *testing.T) { openssl, err := exec.LookPath("openssl") if err != nil { t.Skip("openssl is not installed") } directory := t.TempDir() keyPath := filepath.Join(directory, "key.pem") certificatePath := filepath.Join(directory, "certificate.pem") combinedPath := filepath.Join(directory, "combined.pem") command := exec.Command(openssl, "req", "-x509", "-newkey", "rsa:2048", "-keyout", keyPath, "-out", certificatePath, "-days", "1", "-nodes", "-subj", "/CN=Test") if output, err := command.CombinedOutput(); err != nil { t.Fatalf("generate test certificate: %v: %s", err, output) } key, err := os.ReadFile(keyPath) if err != nil { t.Fatal(err) } certificate, err := os.ReadFile(certificatePath) if err != nil { t.Fatal(err) } combined := append(append(append([]byte(nil), key...), '\n'), certificate...) if err := os.WriteFile(combinedPath, combined, 0600); err != nil { t.Fatal(err) } if err := validate_certificate_pair(openssl, combinedPath); err != nil { t.Fatal(err) } }