annotate libgo/go/net/packetconn_test.go @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 // Copyright 2012 The Go Authors. All rights reserved.
kono
parents:
diff changeset
2 // Use of this source code is governed by a BSD-style
kono
parents:
diff changeset
3 // license that can be found in the LICENSE file.
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 // This file implements API tests across platforms and will never have a build
kono
parents:
diff changeset
6 // tag.
kono
parents:
diff changeset
7
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
8 // +build !js
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
9
111
kono
parents:
diff changeset
10 package net
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 import (
kono
parents:
diff changeset
13 "os"
kono
parents:
diff changeset
14 "testing"
kono
parents:
diff changeset
15 "time"
kono
parents:
diff changeset
16 )
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 // The full stack test cases for IPConn have been moved to the
kono
parents:
diff changeset
19 // following:
kono
parents:
diff changeset
20 // golang.org/x/net/ipv4
kono
parents:
diff changeset
21 // golang.org/x/net/ipv6
kono
parents:
diff changeset
22 // golang.org/x/net/icmp
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 func packetConnTestData(t *testing.T, network string) ([]byte, func()) {
kono
parents:
diff changeset
25 if !testableNetwork(network) {
kono
parents:
diff changeset
26 return nil, func() { t.Logf("skipping %s test", network) }
kono
parents:
diff changeset
27 }
kono
parents:
diff changeset
28 return []byte("PACKETCONN TEST"), nil
kono
parents:
diff changeset
29 }
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 var packetConnTests = []struct {
kono
parents:
diff changeset
32 net string
kono
parents:
diff changeset
33 addr1 string
kono
parents:
diff changeset
34 addr2 string
kono
parents:
diff changeset
35 }{
kono
parents:
diff changeset
36 {"udp", "127.0.0.1:0", "127.0.0.1:0"},
kono
parents:
diff changeset
37 {"unixgram", testUnixAddr(), testUnixAddr()},
kono
parents:
diff changeset
38 }
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 func TestPacketConn(t *testing.T) {
kono
parents:
diff changeset
41 closer := func(c PacketConn, net, addr1, addr2 string) {
kono
parents:
diff changeset
42 c.Close()
kono
parents:
diff changeset
43 switch net {
kono
parents:
diff changeset
44 case "unixgram":
kono
parents:
diff changeset
45 os.Remove(addr1)
kono
parents:
diff changeset
46 os.Remove(addr2)
kono
parents:
diff changeset
47 }
kono
parents:
diff changeset
48 }
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 for _, tt := range packetConnTests {
kono
parents:
diff changeset
51 wb, skipOrFatalFn := packetConnTestData(t, tt.net)
kono
parents:
diff changeset
52 if skipOrFatalFn != nil {
kono
parents:
diff changeset
53 skipOrFatalFn()
kono
parents:
diff changeset
54 continue
kono
parents:
diff changeset
55 }
kono
parents:
diff changeset
56
kono
parents:
diff changeset
57 c1, err := ListenPacket(tt.net, tt.addr1)
kono
parents:
diff changeset
58 if err != nil {
kono
parents:
diff changeset
59 t.Fatal(err)
kono
parents:
diff changeset
60 }
kono
parents:
diff changeset
61 defer closer(c1, tt.net, tt.addr1, tt.addr2)
kono
parents:
diff changeset
62 c1.LocalAddr()
kono
parents:
diff changeset
63 c1.SetDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
64 c1.SetReadDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
65 c1.SetWriteDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 c2, err := ListenPacket(tt.net, tt.addr2)
kono
parents:
diff changeset
68 if err != nil {
kono
parents:
diff changeset
69 t.Fatal(err)
kono
parents:
diff changeset
70 }
kono
parents:
diff changeset
71 defer closer(c2, tt.net, tt.addr1, tt.addr2)
kono
parents:
diff changeset
72 c2.LocalAddr()
kono
parents:
diff changeset
73 c2.SetDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
74 c2.SetReadDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
75 c2.SetWriteDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
76 rb2 := make([]byte, 128)
kono
parents:
diff changeset
77
kono
parents:
diff changeset
78 if _, err := c1.WriteTo(wb, c2.LocalAddr()); err != nil {
kono
parents:
diff changeset
79 t.Fatal(err)
kono
parents:
diff changeset
80 }
kono
parents:
diff changeset
81 if _, _, err := c2.ReadFrom(rb2); err != nil {
kono
parents:
diff changeset
82 t.Fatal(err)
kono
parents:
diff changeset
83 }
kono
parents:
diff changeset
84 if _, err := c2.WriteTo(wb, c1.LocalAddr()); err != nil {
kono
parents:
diff changeset
85 t.Fatal(err)
kono
parents:
diff changeset
86 }
kono
parents:
diff changeset
87 rb1 := make([]byte, 128)
kono
parents:
diff changeset
88 if _, _, err := c1.ReadFrom(rb1); err != nil {
kono
parents:
diff changeset
89 t.Fatal(err)
kono
parents:
diff changeset
90 }
kono
parents:
diff changeset
91 }
kono
parents:
diff changeset
92 }
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 func TestConnAndPacketConn(t *testing.T) {
kono
parents:
diff changeset
95 closer := func(c PacketConn, net, addr1, addr2 string) {
kono
parents:
diff changeset
96 c.Close()
kono
parents:
diff changeset
97 switch net {
kono
parents:
diff changeset
98 case "unixgram":
kono
parents:
diff changeset
99 os.Remove(addr1)
kono
parents:
diff changeset
100 os.Remove(addr2)
kono
parents:
diff changeset
101 }
kono
parents:
diff changeset
102 }
kono
parents:
diff changeset
103
kono
parents:
diff changeset
104 for _, tt := range packetConnTests {
kono
parents:
diff changeset
105 var wb []byte
kono
parents:
diff changeset
106 wb, skipOrFatalFn := packetConnTestData(t, tt.net)
kono
parents:
diff changeset
107 if skipOrFatalFn != nil {
kono
parents:
diff changeset
108 skipOrFatalFn()
kono
parents:
diff changeset
109 continue
kono
parents:
diff changeset
110 }
kono
parents:
diff changeset
111
kono
parents:
diff changeset
112 c1, err := ListenPacket(tt.net, tt.addr1)
kono
parents:
diff changeset
113 if err != nil {
kono
parents:
diff changeset
114 t.Fatal(err)
kono
parents:
diff changeset
115 }
kono
parents:
diff changeset
116 defer closer(c1, tt.net, tt.addr1, tt.addr2)
kono
parents:
diff changeset
117 c1.LocalAddr()
kono
parents:
diff changeset
118 c1.SetDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
119 c1.SetReadDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
120 c1.SetWriteDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
121
kono
parents:
diff changeset
122 c2, err := Dial(tt.net, c1.LocalAddr().String())
kono
parents:
diff changeset
123 if err != nil {
kono
parents:
diff changeset
124 t.Fatal(err)
kono
parents:
diff changeset
125 }
kono
parents:
diff changeset
126 defer c2.Close()
kono
parents:
diff changeset
127 c2.LocalAddr()
kono
parents:
diff changeset
128 c2.RemoteAddr()
kono
parents:
diff changeset
129 c2.SetDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
130 c2.SetReadDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
131 c2.SetWriteDeadline(time.Now().Add(500 * time.Millisecond))
kono
parents:
diff changeset
132
kono
parents:
diff changeset
133 if _, err := c2.Write(wb); err != nil {
kono
parents:
diff changeset
134 t.Fatal(err)
kono
parents:
diff changeset
135 }
kono
parents:
diff changeset
136 rb1 := make([]byte, 128)
kono
parents:
diff changeset
137 if _, _, err := c1.ReadFrom(rb1); err != nil {
kono
parents:
diff changeset
138 t.Fatal(err)
kono
parents:
diff changeset
139 }
kono
parents:
diff changeset
140 var dst Addr
kono
parents:
diff changeset
141 switch tt.net {
kono
parents:
diff changeset
142 case "unixgram":
kono
parents:
diff changeset
143 continue
kono
parents:
diff changeset
144 default:
kono
parents:
diff changeset
145 dst = c2.LocalAddr()
kono
parents:
diff changeset
146 }
kono
parents:
diff changeset
147 if _, err := c1.WriteTo(wb, dst); err != nil {
kono
parents:
diff changeset
148 t.Fatal(err)
kono
parents:
diff changeset
149 }
kono
parents:
diff changeset
150 rb2 := make([]byte, 128)
kono
parents:
diff changeset
151 if _, err := c2.Read(rb2); err != nil {
kono
parents:
diff changeset
152 t.Fatal(err)
kono
parents:
diff changeset
153 }
kono
parents:
diff changeset
154 }
kono
parents:
diff changeset
155 }