aboutsummaryrefslogtreecommitdiff
path: root/src/context
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2016-10-04 23:58:42 -0400
committerRuss Cox <rsc@golang.org>2016-10-05 15:53:04 +0000
commitf69991c17d9dea88e927643e4b7fdc43ad789ac3 (patch)
treefb2ff97d336f4c32067de45e169f568f72bddf82 /src/context
parentfb4f4f4e96058165c0e7be32aa9ce493515c22a3 (diff)
downloadgo-f69991c17d9dea88e927643e4b7fdc43ad789ac3.tar.gz
go-f69991c17d9dea88e927643e4b7fdc43ad789ac3.zip
context: make DeadlineExceeded implement net.Error
It already implemented the Timeout method, but implementing the full net.Error is more convenient. Fixes #14238 (again). Change-Id: Ia87f897f0f35bcb49865e2355964049227951ca6 Reviewed-on: https://go-review.googlesource.com/30370 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/context')
-rw-r--r--src/context/context.go6
-rw-r--r--src/context/net_test.go21
2 files changed, 24 insertions, 3 deletions
diff --git a/src/context/context.go b/src/context/context.go
index 41a5cefef9..54ad49a721 100644
--- a/src/context/context.go
+++ b/src/context/context.go
@@ -159,9 +159,9 @@ var DeadlineExceeded error = deadlineExceededError{}
type deadlineExceededError struct{}
-func (deadlineExceededError) Error() string { return "context deadline exceeded" }
-
-func (deadlineExceededError) Timeout() bool { return true }
+func (deadlineExceededError) Error() string { return "context deadline exceeded" }
+func (deadlineExceededError) Timeout() bool { return true }
+func (deadlineExceededError) Temporary() bool { return true }
// An emptyCtx is never canceled, has no values, and has no deadline. It is not
// struct{}, since vars of this type must have distinct addresses.
diff --git a/src/context/net_test.go b/src/context/net_test.go
new file mode 100644
index 0000000000..a007689d36
--- /dev/null
+++ b/src/context/net_test.go
@@ -0,0 +1,21 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package context_test
+
+import (
+ "context"
+ "net"
+ "testing"
+)
+
+func TestDeadlineExceededIsNetError(t *testing.T) {
+ err, ok := context.DeadlineExceeded.(net.Error)
+ if !ok {
+ t.Fatal("DeadlineExceeded does not implement net.Error")
+ }
+ if !err.Timeout() || !err.Temporary() {
+ t.Fatalf("Timeout() = %v, Temporary() = %v, want true, true", err.Timeout(), err.Temporary())
+ }
+}