]> Cypherpunks repositories - gostls13.git/commitdiff
context: make DeadlineExceeded implement net.Error
authorRuss Cox <rsc@golang.org>
Wed, 5 Oct 2016 03:58:42 +0000 (23:58 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 5 Oct 2016 15:53:04 +0000 (15:53 +0000)
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>
src/context/context.go
src/context/net_test.go [new file with mode: 0644]

index 41a5cefef9365fe4c8cdf762a6d87730bb76e74a..54ad49a721095406e0cc07c05eb0b405aa168504 100644 (file)
@@ -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 (file)
index 0000000..a007689
--- /dev/null
@@ -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())
+       }
+}