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
// This file implements API tests across platforms and will never have a build
17
var connTests = []struct {
21
{"tcp", func() string { return "127.0.0.1:0" }},
22
{"unix", testUnixAddr},
23
{"unixpacket", testUnixAddr},
26
// someTimeout is used just to test that net.Conn implementations
27
// don't explode when their SetFooDeadline methods are called.
28
// It isn't actually used for testing timeouts.
29
const someTimeout = 10 * time.Second
31
func TestConnAndListener(t *testing.T) {
32
for _, tt := range connTests {
34
case "unix", "unixpacket":
36
case "plan9", "windows":
39
if tt.net == "unixpacket" && runtime.GOOS != "linux" {
45
ln, err := Listen(tt.net, addr)
47
t.Fatalf("Listen failed: %v", err)
49
defer func(ln Listener, net, addr string) {
52
case "unix", "unixpacket":
58
done := make(chan int)
59
go transponder(t, ln, done)
61
c, err := Dial(tt.net, ln.Addr().String())
63
t.Fatalf("Dial failed: %v", err)
68
c.SetDeadline(time.Now().Add(someTimeout))
69
c.SetReadDeadline(time.Now().Add(someTimeout))
70
c.SetWriteDeadline(time.Now().Add(someTimeout))
72
if _, err := c.Write([]byte("CONN TEST")); err != nil {
73
t.Fatalf("Conn.Write failed: %v", err)
75
rb := make([]byte, 128)
76
if _, err := c.Read(rb); err != nil {
77
t.Fatalf("Conn.Read failed: %v", err)
84
func transponder(t *testing.T, ln Listener, done chan<- int) {
85
defer func() { done <- 1 }()
87
switch ln := ln.(type) {
89
ln.SetDeadline(time.Now().Add(someTimeout))
91
ln.SetDeadline(time.Now().Add(someTimeout))
95
t.Errorf("Listener.Accept failed: %v", err)
101
c.SetDeadline(time.Now().Add(someTimeout))
102
c.SetReadDeadline(time.Now().Add(someTimeout))
103
c.SetWriteDeadline(time.Now().Add(someTimeout))
105
b := make([]byte, 128)
108
t.Errorf("Conn.Read failed: %v", err)
111
if _, err := c.Write(b[:n]); err != nil {
112
t.Errorf("Conn.Write failed: %v", err)