2013-02-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
[official-gcc.git] / libgo / go / net / conn_test.go
blobf733a81a3b2c301f84be8008d36096b444884401
1 // Copyright 2012 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.
5 package net_test
7 import (
8 "net"
9 "os"
10 "runtime"
11 "testing"
12 "time"
15 var connTests = []struct {
16 net string
17 addr string
19 {"tcp", "127.0.0.1:0"},
20 {"unix", "/tmp/gotest.net1"},
21 {"unixpacket", "/tmp/gotest.net2"},
24 func TestConnAndListener(t *testing.T) {
25 for _, tt := range connTests {
26 switch tt.net {
27 case "unix", "unixpacket":
28 switch runtime.GOOS {
29 case "plan9", "windows":
30 continue
32 if tt.net == "unixpacket" && runtime.GOOS != "linux" {
33 continue
35 os.Remove(tt.addr)
38 ln, err := net.Listen(tt.net, tt.addr)
39 if err != nil {
40 t.Errorf("net.Listen failed: %v", err)
41 return
43 ln.Addr()
44 defer func(ln net.Listener, net, addr string) {
45 ln.Close()
46 switch net {
47 case "unix", "unixpacket":
48 os.Remove(addr)
50 }(ln, tt.net, tt.addr)
52 done := make(chan int)
53 go transponder(t, ln, done)
55 c, err := net.Dial(tt.net, ln.Addr().String())
56 if err != nil {
57 t.Errorf("net.Dial failed: %v", err)
58 return
60 c.LocalAddr()
61 c.RemoteAddr()
62 c.SetDeadline(time.Now().Add(100 * time.Millisecond))
63 c.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
64 c.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
65 defer c.Close()
67 if _, err := c.Write([]byte("CONN TEST")); err != nil {
68 t.Errorf("net.Conn.Write failed: %v", err)
69 return
71 rb := make([]byte, 128)
72 if _, err := c.Read(rb); err != nil {
73 t.Errorf("net.Conn.Read failed: %v", err)
76 <-done
80 func transponder(t *testing.T, ln net.Listener, done chan<- int) {
81 defer func() { done <- 1 }()
83 c, err := ln.Accept()
84 if err != nil {
85 t.Errorf("net.Listener.Accept failed: %v", err)
86 return
88 c.LocalAddr()
89 c.RemoteAddr()
90 c.SetDeadline(time.Now().Add(100 * time.Millisecond))
91 c.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
92 c.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
93 defer c.Close()
95 b := make([]byte, 128)
96 n, err := c.Read(b)
97 if err != nil {
98 t.Errorf("net.Conn.Read failed: %v", err)
99 return
101 if _, err := c.Write(b[:n]); err != nil {
102 t.Errorf("net.Conn.Write failed: %v", err)
103 return