From 397f405f6384bacff1b19d891de9603561d9486a Mon Sep 17 00:00:00 2001 From: Stephen J Day Date: Thu, 29 Jun 2017 17:07:15 -0700 Subject: [PATCH] errdefs: add tests error conversions Signed-off-by: Stephen J Day --- errdefs/grpc_test.go | 65 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 errdefs/grpc_test.go diff --git a/errdefs/grpc_test.go b/errdefs/grpc_test.go new file mode 100644 index 000000000..ae047537c --- /dev/null +++ b/errdefs/grpc_test.go @@ -0,0 +1,65 @@ +package errdefs + +import ( + "testing" + + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + + "github.com/pkg/errors" +) + +func TestGRPCRoundTrip(t *testing.T) { + errShouldLeaveAlone := errors.New("unknown to package") + + for _, testcase := range []struct { + input error + cause error + str string + }{ + { + input: ErrAlreadyExists, + cause: ErrAlreadyExists, + }, + { + input: ErrNotFound, + cause: ErrNotFound, + }, + { + input: errors.Wrapf(ErrFailedPrecondition, "test test test"), + cause: ErrFailedPrecondition, + str: "test test test: failed precondition", + }, + { + input: grpc.Errorf(codes.Unavailable, "should be not available"), + cause: ErrUnavailable, + str: "should be not available: unavailable", + }, + { + input: errShouldLeaveAlone, + cause: ErrUnknown, + str: errShouldLeaveAlone.Error() + ": " + ErrUnknown.Error(), + }, + } { + t.Run(testcase.input.Error(), func(t *testing.T) { + t.Logf("input: %v", testcase.input) + gerr := ToGRPC(testcase.input) + t.Logf("grpc: %v", gerr) + ferr := FromGRPC(gerr) + t.Logf("recovered: %v", ferr) + + if errors.Cause(ferr) != testcase.cause { + t.Fatalf("unexpected cause: %v != %v", errors.Cause(ferr), testcase.cause) + } + + expected := testcase.str + if expected == "" { + expected = testcase.cause.Error() + } + if ferr.Error() != expected { + t.Fatalf("unexpected string: %q != %q", ferr.Error(), expected) + } + }) + } + +}