From: Dmitriy Vyukov Date: Mon, 26 Nov 2012 18:28:39 +0000 (+0400) Subject: net: add deadline prolongation test X-Git-Tag: go1.1rc2~1792 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f4ed50c26054492e4a2e726d89feffb2dd535ef8;p=gostls13.git net: add deadline prolongation test Currently the test exposes data races on deadline vars. R=golang-dev, dave, bradfitz, rsc CC=golang-dev https://golang.org/cl/6845091 --- diff --git a/src/pkg/net/timeout_test.go b/src/pkg/net/timeout_test.go index c72758dc06..9bda4ac9b6 100644 --- a/src/pkg/net/timeout_test.go +++ b/src/pkg/net/timeout_test.go @@ -576,3 +576,51 @@ func TestWriteDeadlineBufferAvailable(t *testing.T) { t.Errorf("Write error = %v; want timeout", res.err) } } + +// TestProlongTimeout tests concurrent deadline modification. +// Known to cause data races in the past. +func TestProlongTimeout(t *testing.T) { + switch runtime.GOOS { + case "plan9": + t.Logf("skipping test on %q", runtime.GOOS) + return + } + + ln := newLocalListener(t) + defer ln.Close() + go func() { + s, err := ln.Accept() + if err != nil { + t.Fatalf("ln.Accept: %v", err) + } + defer s.Close() + s.SetDeadline(time.Now().Add(time.Hour)) + go func() { + var buf [4096]byte + for { + _, err := s.Write(buf[:]) + if err != nil { + break + } + s.SetDeadline(time.Now().Add(time.Hour)) + } + }() + buf := make([]byte, 1) + for { + _, err := s.Read(buf) + if err != nil { + break + } + s.SetDeadline(time.Now().Add(time.Hour)) + } + }() + c, err := Dial("tcp", ln.Addr().String()) + if err != nil { + t.Fatalf("DialTCP: %v", err) + } + defer c.Close() + for i := 0; i < 1024; i++ { + var buf [1]byte + c.Write(buf[:]) + } +}