From 708bdc80cb8abcbb8b8a430b2b14646141b0b956 Mon Sep 17 00:00:00 2001 From: George Robinson Date: Wed, 17 Nov 2021 10:07:24 +0000 Subject: [PATCH] Alerting: Support Unwrap for QueryError in expr package (#41743) --- pkg/expr/nodes.go | 4 ++++ pkg/expr/nodes_test.go | 28 +++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/pkg/expr/nodes.go b/pkg/expr/nodes.go index 6506b1b6691..22502b4a6cf 100644 --- a/pkg/expr/nodes.go +++ b/pkg/expr/nodes.go @@ -28,6 +28,10 @@ func (e QueryError) Error() string { return fmt.Sprintf("failed to execute query %s: %s", e.RefID, e.Err) } +func (e QueryError) Unwrap() error { + return e.Err +} + // baseNode includes common properties used across DPNodes. type baseNode struct { id int64 diff --git a/pkg/expr/nodes_test.go b/pkg/expr/nodes_test.go index a30130f1d6d..9661a663302 100644 --- a/pkg/expr/nodes_test.go +++ b/pkg/expr/nodes_test.go @@ -7,10 +7,36 @@ import ( "github.com/stretchr/testify/assert" ) -func TestQueryError(t *testing.T) { +type expectedError struct{} + +func (e expectedError) Error() string { + return "expected" +} + +func TestQueryError_Error(t *testing.T) { e := QueryError{ RefID: "A", Err: errors.New("this is an error message"), } assert.EqualError(t, e, "failed to execute query A: this is an error message") } + +func TestQueryError_Unwrap(t *testing.T) { + t.Run("errors.Is", func(t *testing.T) { + expectedIsErr := errors.New("expected") + e := QueryError{ + RefID: "A", + Err: expectedIsErr, + } + assert.True(t, errors.Is(e, expectedIsErr)) + }) + + t.Run("errors.As", func(t *testing.T) { + e := QueryError{ + RefID: "A", + Err: expectedError{}, + } + var expectedAsError expectedError + assert.True(t, errors.As(e, &expectedAsError)) + }) +}