From f69991c17d9dea88e927643e4b7fdc43ad789ac3 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 4 Oct 2016 23:58:42 -0400 Subject: [PATCH] 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 Reviewed-by: Ian Lance Taylor Reviewed-by: Brad Fitzpatrick --- src/context/context.go | 6 +++--- src/context/net_test.go | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 src/context/net_test.go 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()) + } +} -- 2.48.1