73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
package pgdump
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
func TestErrPgDumpFailed_Error(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
exitCode int
|
|
want string
|
|
}{
|
|
{name: "zero", exitCode: 0, want: "pg_dump failed with exit code 0"},
|
|
{name: "one", exitCode: 1, want: "pg_dump failed with exit code 1"},
|
|
{name: "large", exitCode: 137, want: "pg_dump failed with exit code 137"},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
err := ErrPgDumpFailed(tc.exitCode)
|
|
if err == nil {
|
|
t.Fatalf("ErrPgDumpFailed(%d) returned nil, want error", tc.exitCode)
|
|
}
|
|
if got := err.Error(); got != tc.want {
|
|
t.Fatalf("Error() = %q, want %q", got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestErrPgDumpFailed_Is(t *testing.T) {
|
|
base := ErrPgDumpFailed(1)
|
|
|
|
cases := []struct {
|
|
name string
|
|
target error
|
|
want bool
|
|
}{
|
|
{
|
|
name: "same exit code",
|
|
target: ErrPgDumpFailed(1),
|
|
want: true,
|
|
},
|
|
{
|
|
name: "different exit code",
|
|
target: ErrPgDumpFailed(2),
|
|
want: false,
|
|
},
|
|
{
|
|
name: "unrelated error type",
|
|
target: errors.New("something else"),
|
|
want: false,
|
|
},
|
|
{
|
|
// Is does not unwrap target: a fmt.Errorf-wrapped pgDumpFailedError
|
|
// fails the exact type check, so errors.Is reports false here.
|
|
name: "wrapped same-type error",
|
|
target: fmt.Errorf("wrapped: %w", ErrPgDumpFailed(1)),
|
|
want: false,
|
|
},
|
|
}
|
|
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
if got := errors.Is(base, tc.target); got != tc.want {
|
|
t.Fatalf("errors.Is(%v, %v) = %v, want %v", base, tc.target, got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|