aboutsummaryrefslogtreecommitdiffstats
path: root/internal
diff options
context:
space:
mode:
authorGianni Gambetti <99784476+ggambetti@users.noreply.github.com>2024-05-24 15:02:15 -0400
committerGianni Gambetti <99784476+ggambetti@users.noreply.github.com>2024-05-27 11:16:34 -0400
commit4070322588104631421ebb03d80dc293d7d5a54f (patch)
tree0289af95f3f97c1a807663b5e2de97bfc04a9066 /internal
parentc7feada87363f96c224214ba309efd5cf5a886fc (diff)
downloadgo-git-4070322588104631421ebb03d80dc293d7d5a54f.tar.gz
plumbing: transport/http, Wrap http errors to return reason. Fixes #1097
Diffstat (limited to 'internal')
-rw-r--r--internal/test/checkers.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/internal/test/checkers.go b/internal/test/checkers.go
new file mode 100644
index 0000000..257d93d
--- /dev/null
+++ b/internal/test/checkers.go
@@ -0,0 +1,43 @@
+package test
+
+import (
+ "errors"
+ "fmt"
+
+ check "gopkg.in/check.v1"
+)
+
+// This check.Checker implementation exists because there's no implementation
+// in the library that compares errors using `errors.Is`. If / when the check
+// library fixes https://github.com/go-check/check/issues/139, this code can
+// likely be removed and replaced with the library implementation.
+//
+// Added in Go 1.13 [https://go.dev/blog/go1.13-errors] `errors.Is` is the
+// best mechanism to use to compare errors that might be wrapped in other
+// errors.
+type errorIsChecker struct {
+ *check.CheckerInfo
+}
+
+var ErrorIs check.Checker = errorIsChecker{
+ &check.CheckerInfo{
+ Name: "ErrorIs",
+ Params: []string{"obtained", "expected"},
+ },
+}
+
+func (e errorIsChecker) Check(params []interface{}, names []string) (bool, string) {
+ obtained, ok := params[0].(error)
+ if !ok {
+ return false, "obtained is not an error"
+ }
+ expected, ok := params[1].(error)
+ if !ok {
+ return false, "expected is not an error"
+ }
+
+ if !errors.Is(obtained, expected) {
+ return false, fmt.Sprintf("obtained: %+v expected: %+v", obtained, expected)
+ }
+ return true, ""
+}