Files
barnard/cmd/barnard-ui/certificates_test.go

56 lines
1.5 KiB
Go

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)
}
}