The Go Programming Language

Source file src/pkg/net/timeout_test.go

     1	// Copyright 2009 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	package net
     6	
     7	import (
     8		"os"
     9		"testing"
    10		"time"
    11	)
    12	
    13	func testTimeout(t *testing.T, network, addr string, readFrom bool) {
    14		fd, err := Dial(network, addr)
    15		if err != nil {
    16			t.Errorf("dial %s %s failed: %v", network, addr, err)
    17			return
    18		}
    19		defer fd.Close()
    20		t0 := time.Nanoseconds()
    21		fd.SetReadTimeout(1e8) // 100ms
    22		var b [100]byte
    23		var n int
    24		var err1 os.Error
    25		if readFrom {
    26			n, _, err1 = fd.(PacketConn).ReadFrom(b[0:])
    27		} else {
    28			n, err1 = fd.Read(b[0:])
    29		}
    30		t1 := time.Nanoseconds()
    31		what := "Read"
    32		if readFrom {
    33			what = "ReadFrom"
    34		}
    35		if n != 0 || err1 == nil || !err1.(Error).Timeout() {
    36			t.Errorf("fd.%s on %s %s did not return 0, timeout: %v, %v", what, network, addr, n, err1)
    37		}
    38		if t1-t0 < 0.5e8 || t1-t0 > 1.5e8 {
    39			t.Errorf("fd.%s on %s %s took %f seconds, expected 0.1", what, network, addr, float64(t1-t0)/1e9)
    40		}
    41	}
    42	
    43	func TestTimeoutUDP(t *testing.T) {
    44		testTimeout(t, "udp", "127.0.0.1:53", false)
    45		testTimeout(t, "udp", "127.0.0.1:53", true)
    46	}
    47	
    48	func TestTimeoutTCP(t *testing.T) {
    49		// set up a listener that won't talk back
    50		listening := make(chan string)
    51		done := make(chan int)
    52		go runServe(t, "tcp", "127.0.0.1:0", listening, done)
    53		addr := <-listening
    54	
    55		testTimeout(t, "tcp", addr, false)
    56		<-done
    57	}

release.r60.3. Except as noted, this content is licensed under a Creative Commons Attribution 3.0 License.