Merge c837473a0f7eb902ec7a876e8e2ec8eaf369107c into c86c93ca2951338115159dcdd20711603044e1f1

This commit is contained in:
Iván Valdés Castillo 2024-09-26 09:27:49 +08:00 committed by GitHub
commit 662dfd5d20
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 3 deletions

View File

@ -241,6 +241,7 @@ var (
type EtcdError struct { type EtcdError struct {
code codes.Code code codes.Code
desc string desc string
wrappedError error
} }
// Code returns grpc/codes.Code. // Code returns grpc/codes.Code.
@ -253,6 +254,10 @@ func (e EtcdError) Error() string {
return e.desc return e.desc
} }
func (e EtcdError) Unwrap() error {
return e.wrappedError
}
func Error(err error) error { func Error(err error) error {
if err == nil { if err == nil {
return nil return nil
@ -268,7 +273,7 @@ func Error(err error) error {
} else { } else {
desc = verr.Error() desc = verr.Error()
} }
return EtcdError{code: ev.Code(), desc: desc} return EtcdError{code: ev.Code(), desc: desc, wrappedError: err}
} }
func ErrorDesc(err error) string { func ErrorDesc(err error) string {

View File

@ -15,6 +15,7 @@
package rpctypes package rpctypes
import ( import (
"errors"
"testing" "testing"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
@ -40,3 +41,20 @@ func TestConvert(t *testing.T) {
t.Fatalf("expected them to be equal, got %v / %v", ev2.Code(), e3.(EtcdError).Code()) t.Fatalf("expected them to be equal, got %v / %v", ev2.Code(), e3.(EtcdError).Code())
} }
} }
func TestComparingWrappedError(t *testing.T) {
errTest := errors.New("test error")
e1 := Error(ErrGRPCEmptyKey)
e2 := Error(status.Error(codes.InvalidArgument, "etcdserver: key is not provided"))
e3 := Error(errTest)
if !errors.Is(e1, ErrGRPCEmptyKey) {
t.Fatalf("expected %v to be an ErrGRPCEmptyKey wrapped error", e1)
}
if !errors.Is(e2, ErrGRPCEmptyKey) {
t.Fatalf("expected %v to be an ErrGRPCEmptyKey wrapped error", e1)
}
if !errors.Is(e3, errTest) {
t.Fatalf("expected %v to be an errTest wrapped error", e3)
}
}