Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(4343)

Side by Side Diff: src/pkg/net/conn_test.go

Issue 7004044: code review 7004044: net: make unix connection tests more robust (Closed)
Patch Set: diff -r d7a66e98c7a6 https://code.google.com/p/go Created 11 years, 3 months ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/pkg/net/packetconn_test.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Go Authors. All rights reserved. 1 // Copyright 2012 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style 2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file. 3 // license that can be found in the LICENSE file.
4 4
5 package net_test 5 package net_test
6 6
7 import ( 7 import (
8 "net" 8 "net"
9 "os" 9 "os"
10 "runtime" 10 "runtime"
11 "testing" 11 "testing"
12 "time" 12 "time"
13 ) 13 )
14 14
15 var connTests = []struct { 15 var connTests = []struct {
16 net string 16 net string
17 addr string 17 addr string
18 }{ 18 }{
19 {"tcp", "127.0.0.1:0"}, 19 {"tcp", "127.0.0.1:0"},
20 » {"unix", "/tmp/gotest.net"}, 20 » {"unix", "/tmp/gotest.net1"},
21 » {"unixpacket", "/tmp/gotest.net"}, 21 » {"unixpacket", "/tmp/gotest.net2"},
22 } 22 }
23 23
24 func TestConnAndListener(t *testing.T) { 24 func TestConnAndListener(t *testing.T) {
25 for _, tt := range connTests { 25 for _, tt := range connTests {
26 switch tt.net { 26 switch tt.net {
27 case "unix", "unixpacket": 27 case "unix", "unixpacket":
28 switch runtime.GOOS { 28 switch runtime.GOOS {
29 case "plan9", "windows": 29 case "plan9", "windows":
30 continue 30 continue
31 } 31 }
32 if tt.net == "unixpacket" && runtime.GOOS != "linux" { 32 if tt.net == "unixpacket" && runtime.GOOS != "linux" {
33 continue 33 continue
34 } 34 }
35 os.Remove(tt.addr) 35 os.Remove(tt.addr)
36 } 36 }
37 37
38 ln, err := net.Listen(tt.net, tt.addr) 38 ln, err := net.Listen(tt.net, tt.addr)
39 if err != nil { 39 if err != nil {
40 t.Errorf("net.Listen failed: %v", err) 40 t.Errorf("net.Listen failed: %v", err)
41 return 41 return
42 } 42 }
43 ln.Addr() 43 ln.Addr()
44 » » defer ln.Close() 44 » » defer func(ln net.Listener, net, addr string) {
45 » » » ln.Close()
46 » » » switch net {
47 » » » case "unix", "unixpacket":
48 » » » » os.Remove(addr)
49 » » » }
50 » » }(ln, tt.net, tt.addr)
45 51
46 done := make(chan int) 52 done := make(chan int)
47 go transponder(t, ln, done) 53 go transponder(t, ln, done)
48 54
49 c, err := net.Dial(tt.net, ln.Addr().String()) 55 c, err := net.Dial(tt.net, ln.Addr().String())
50 if err != nil { 56 if err != nil {
51 t.Errorf("net.Dial failed: %v", err) 57 t.Errorf("net.Dial failed: %v", err)
52 return 58 return
53 } 59 }
54 c.LocalAddr() 60 c.LocalAddr()
55 c.RemoteAddr() 61 c.RemoteAddr()
56 c.SetDeadline(time.Now().Add(100 * time.Millisecond)) 62 c.SetDeadline(time.Now().Add(100 * time.Millisecond))
57 c.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) 63 c.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
58 c.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) 64 c.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
59 defer c.Close() 65 defer c.Close()
60 66
61 if _, err := c.Write([]byte("CONN TEST")); err != nil { 67 if _, err := c.Write([]byte("CONN TEST")); err != nil {
62 t.Errorf("net.Conn.Write failed: %v", err) 68 t.Errorf("net.Conn.Write failed: %v", err)
63 return 69 return
64 } 70 }
65 rb := make([]byte, 128) 71 rb := make([]byte, 128)
66 if _, err := c.Read(rb); err != nil { 72 if _, err := c.Read(rb); err != nil {
67 t.Errorf("net.Conn.Read failed: %v", err) 73 t.Errorf("net.Conn.Read failed: %v", err)
68 } 74 }
69 75
70 <-done 76 <-done
71 switch tt.net {
72 case "unix", "unixpacket":
73 os.Remove(tt.addr)
74 }
75 } 77 }
76 } 78 }
77 79
78 func transponder(t *testing.T, ln net.Listener, done chan<- int) { 80 func transponder(t *testing.T, ln net.Listener, done chan<- int) {
79 defer func() { done <- 1 }() 81 defer func() { done <- 1 }()
80 82
81 c, err := ln.Accept() 83 c, err := ln.Accept()
82 if err != nil { 84 if err != nil {
83 t.Errorf("net.Listener.Accept failed: %v", err) 85 t.Errorf("net.Listener.Accept failed: %v", err)
84 return 86 return
85 } 87 }
86 c.LocalAddr() 88 c.LocalAddr()
87 c.RemoteAddr() 89 c.RemoteAddr()
88 c.SetDeadline(time.Now().Add(100 * time.Millisecond)) 90 c.SetDeadline(time.Now().Add(100 * time.Millisecond))
89 c.SetReadDeadline(time.Now().Add(100 * time.Millisecond)) 91 c.SetReadDeadline(time.Now().Add(100 * time.Millisecond))
90 c.SetWriteDeadline(time.Now().Add(100 * time.Millisecond)) 92 c.SetWriteDeadline(time.Now().Add(100 * time.Millisecond))
91 defer c.Close() 93 defer c.Close()
92 94
93 b := make([]byte, 128) 95 b := make([]byte, 128)
94 n, err := c.Read(b) 96 n, err := c.Read(b)
95 if err != nil { 97 if err != nil {
96 t.Errorf("net.Conn.Read failed: %v", err) 98 t.Errorf("net.Conn.Read failed: %v", err)
97 return 99 return
98 } 100 }
99 if _, err := c.Write(b[:n]); err != nil { 101 if _, err := c.Write(b[:n]); err != nil {
100 t.Errorf("net.Conn.Write failed: %v", err) 102 t.Errorf("net.Conn.Write failed: %v", err)
101 return 103 return
102 } 104 }
103 } 105 }
OLDNEW
« no previous file with comments | « no previous file | src/pkg/net/packetconn_test.go » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b