diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-11-21 07:03:38 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-11-21 07:03:38 +0000 |
commit | fabcaa8df3d6eb852b87821ef090d31d222870b7 (patch) | |
tree | 72455aea0286937aa08cc141e5efc800e4626577 /libgo/go/net/conn_test.go | |
parent | a51fb17f48428e7cfc96a72a9f9f87901363bb6b (diff) | |
download | gcc-fabcaa8df3d6eb852b87821ef090d31d222870b7.zip gcc-fabcaa8df3d6eb852b87821ef090d31d222870b7.tar.gz gcc-fabcaa8df3d6eb852b87821ef090d31d222870b7.tar.bz2 |
libgo: Update to current version of master library.
From-SVN: r193688
Diffstat (limited to 'libgo/go/net/conn_test.go')
-rw-r--r-- | libgo/go/net/conn_test.go | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/libgo/go/net/conn_test.go b/libgo/go/net/conn_test.go new file mode 100644 index 0000000..037ce80 --- /dev/null +++ b/libgo/go/net/conn_test.go @@ -0,0 +1,103 @@ +// Copyright 2012 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 net_test + +import ( + "net" + "os" + "runtime" + "testing" + "time" +) + +var connTests = []struct { + net string + addr string +}{ + {"tcp", "127.0.0.1:0"}, + {"unix", "/tmp/gotest.net"}, + {"unixpacket", "/tmp/gotest.net"}, +} + +func TestConnAndListener(t *testing.T) { + for _, tt := range connTests { + switch tt.net { + case "unix", "unixpacket": + switch runtime.GOOS { + case "plan9", "windows": + continue + } + if tt.net == "unixpacket" && runtime.GOOS != "linux" { + continue + } + os.Remove(tt.addr) + } + + ln, err := net.Listen(tt.net, tt.addr) + if err != nil { + t.Errorf("net.Listen failed: %v", err) + return + } + ln.Addr() + defer ln.Close() + + done := make(chan int) + go transponder(t, ln, done) + + c, err := net.Dial(tt.net, ln.Addr().String()) + if err != nil { + t.Errorf("net.Dial failed: %v", err) + return + } + c.LocalAddr() + c.RemoteAddr() + c.SetDeadline(time.Now().Add(100 * time.Millisecond)) + c.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) + c.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) + defer c.Close() + + if _, err := c.Write([]byte("CONN TEST")); err != nil { + t.Errorf("net.Conn.Write failed: %v", err) + return + } + rb := make([]byte, 128) + if _, err := c.Read(rb); err != nil { + t.Errorf("net.Conn.Read failed: %v", err) + } + + <-done + switch tt.net { + case "unix", "unixpacket": + os.Remove(tt.addr) + } + } +} + +func transponder(t *testing.T, ln net.Listener, done chan<- int) { + defer func() { done <- 1 }() + + c, err := ln.Accept() + if err != nil { + t.Errorf("net.Listener.Accept failed: %v", err) + return + } + c.LocalAddr() + c.RemoteAddr() + c.SetDeadline(time.Now().Add(100 * time.Millisecond)) + c.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) + c.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) + defer c.Close() + + b := make([]byte, 128) + n, err := c.Read(b) + if err != nil { + t.Errorf("net.Conn.Read failed: %v", err) + return + } + if _, err := c.Write(b[:n]); err != nil { + t.Errorf("net.Conn.Write failed: %v", err) + return + } +} |