aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/net/conn_test.go
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2012-11-21 07:03:38 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2012-11-21 07:03:38 +0000
commitfabcaa8df3d6eb852b87821ef090d31d222870b7 (patch)
tree72455aea0286937aa08cc141e5efc800e4626577 /libgo/go/net/conn_test.go
parenta51fb17f48428e7cfc96a72a9f9f87901363bb6b (diff)
downloadgcc-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.go103
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
+ }
+}