]> Cypherpunks repositories - gostls13.git/commitdiff
net: eliminate arbitrary timeout in TestVariousDeadlines
authorBryan C. Mills <bcmills@google.com>
Tue, 14 Dec 2021 22:07:24 +0000 (17:07 -0500)
committerBryan Mills <bcmills@google.com>
Wed, 15 Dec 2021 13:31:58 +0000 (13:31 +0000)
When we set a timeout, we don't actually have a guarantee one how long
the OS will take to notice it. Moreover, if the test deadlocks
completely (for example, due to a deadline never taking effect), it
would be more useful to get a full goroutine dump instead of the current
"client stuck in Dial+Copy" failure message.

For #37883
For #41863

Change-Id: I9f712ef1c620f97a5ab69baac45deb71134b99bc
Reviewed-on: https://go-review.googlesource.com/c/go/+/371994
Trust: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/net/timeout_test.go

index 032770dd8348f516fb71bc13dee1a5ec9c242ca7..3c6aa27cc1f3353b55eb19c62a53fa98b4f3ad06 100644 (file)
@@ -947,35 +947,23 @@ func testVariousDeadlines(t *testing.T) {
                        name := fmt.Sprintf("%v %d/%d", timeout, run, numRuns)
                        t.Log(name)
 
-                       tooSlow := time.NewTimer(5 * time.Second)
-                       defer tooSlow.Stop()
-
                        c, err := Dial(ls.Listener.Addr().Network(), ls.Listener.Addr().String())
                        if err != nil {
                                t.Fatal(err)
                        }
 
-                       ch := make(chan result, 1)
-                       go func() {
-                               t0 := time.Now()
-                               if err := c.SetDeadline(t0.Add(timeout)); err != nil {
-                                       t.Error(err)
-                               }
-                               n, err := io.Copy(io.Discard, c)
-                               dt := time.Since(t0)
-                               c.Close()
-                               ch <- result{n, err, dt}
-                       }()
+                       t0 := time.Now()
+                       if err := c.SetDeadline(t0.Add(timeout)); err != nil {
+                               t.Error(err)
+                       }
+                       n, err := io.Copy(io.Discard, c)
+                       dt := time.Since(t0)
+                       c.Close()
 
-                       select {
-                       case res := <-ch:
-                               if nerr, ok := res.err.(Error); ok && nerr.Timeout() {
-                                       t.Logf("%v: good timeout after %v; %d bytes", name, res.d, res.n)
-                               } else {
-                                       t.Fatalf("%v: Copy = %d, %v; want timeout", name, res.n, res.err)
-                               }
-                       case <-tooSlow.C:
-                               t.Fatalf("%v: client stuck in Dial+Copy", name)
+                       if nerr, ok := err.(Error); ok && nerr.Timeout() {
+                               t.Logf("%v: good timeout after %v; %d bytes", name, dt, n)
+                       } else {
+                               t.Fatalf("%v: Copy = %d, %v; want timeout", name, n, err)
                        }
                }
        }