56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package certerr
|
|
|
|
import (
|
|
"errors"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestTypedErrorWrappingAndFormatting(t *testing.T) {
|
|
cause := errors.New("bad data")
|
|
err := DecodeError(ErrorSourceCertificate, cause)
|
|
|
|
// Ensure we can retrieve the typed error
|
|
var e *Error
|
|
if !errors.As(err, &e) {
|
|
t.Fatalf("expected errors.As to retrieve *certerr.Error, got %T", err)
|
|
}
|
|
if e.Kind != KindDecode {
|
|
t.Fatalf("unexpected kind: %v", e.Kind)
|
|
}
|
|
if e.Source != ErrorSourceCertificate {
|
|
t.Fatalf("unexpected source: %v", e.Source)
|
|
}
|
|
|
|
// Check message format (no trailing punctuation enforced by content)
|
|
msg := e.Error()
|
|
if !strings.Contains(msg, "failed to decode certificate") || !strings.Contains(msg, "bad data") {
|
|
t.Fatalf("unexpected error message: %q", msg)
|
|
}
|
|
}
|
|
|
|
func TestErrorsIsOnWrappedSentinel(t *testing.T) {
|
|
err := DecodeError(ErrorSourcePrivateKey, ErrEncryptedPrivateKey)
|
|
if !errors.Is(err, ErrEncryptedPrivateKey) {
|
|
t.Fatalf("expected errors.Is to match ErrEncryptedPrivateKey")
|
|
}
|
|
}
|
|
|
|
func TestInvalidPEMTypeMessageSingle(t *testing.T) {
|
|
err := ErrInvalidPEMType("FOO", "CERTIFICATE")
|
|
want := "invalid PEM type: have FOO, expected CERTIFICATE"
|
|
if err.Error() != want {
|
|
t.Fatalf("unexpected error message: got %q, want %q", err.Error(), want)
|
|
}
|
|
}
|
|
|
|
func TestInvalidPEMTypeMessageMultiple(t *testing.T) {
|
|
err := ErrInvalidPEMType("FOO", "CERTIFICATE", "NEW CERTIFICATE REQUEST")
|
|
if !strings.Contains(
|
|
err.Error(),
|
|
"invalid PEM type: have FOO, expected one of CERTIFICATE, NEW CERTIFICATE REQUEST",
|
|
) {
|
|
t.Fatalf("unexpected error message: %q", err.Error())
|
|
}
|
|
}
|