1
1
package reuseport
2
2
3
3
import (
4
- "fmt"
5
- "io/ioutil"
6
4
"net"
7
5
"testing"
8
- "time"
9
6
)
10
7
11
8
func TestTCP4 (t * testing.T ) {
12
9
t .Parallel ()
13
10
14
- testNewListener (t , "tcp4" , "localhost:10081" , 20 , 1000 )
11
+ testNewListener (t , "tcp4" , "localhost:10081" )
15
12
}
16
13
17
14
func TestTCP6 (t * testing.T ) {
18
15
t .Parallel ()
19
16
20
17
// Run this test only if tcp6 interface exists.
21
18
if hasLocalIPv6 (t ) {
22
- testNewListener (t , "tcp6" , "[::1]:10082" , 20 , 1000 )
19
+ testNewListener (t , "tcp6" , "[::1]:10082" )
23
20
}
24
21
}
25
22
@@ -36,87 +33,17 @@ func hasLocalIPv6(t *testing.T) bool {
36
33
return false
37
34
}
38
35
39
- func testNewListener (t * testing.T , network , addr string , serversCount , requestsCount int ) {
40
- var lns []net.Listener
41
- doneCh := make (chan struct {}, serversCount )
42
-
43
- for i := 0 ; i < serversCount ; i ++ {
44
- ln , err := Listen (network , addr )
45
- if err != nil {
46
- t .Fatalf ("cannot create listener %d: %s" , i , err )
47
- }
48
- go func () {
49
- serveEcho (t , ln )
50
- doneCh <- struct {}{}
51
- }()
52
- lns = append (lns , ln )
53
- }
54
-
55
- for i := 0 ; i < requestsCount ; i ++ {
56
- c , err := net .Dial (network , addr )
57
- if err != nil {
58
- t .Fatalf ("%d. unexpected error when dialing: %s" , i , err )
59
- }
60
- req := fmt .Sprintf ("request number %d" , i )
61
- if _ , err = c .Write ([]byte (req )); err != nil {
62
- t .Fatalf ("%d. unexpected error when writing request: %s" , i , err )
63
- }
64
- if err = c .(* net.TCPConn ).CloseWrite (); err != nil {
65
- t .Fatalf ("%d. unexpected error when closing write end of the connection: %s" , i , err )
66
- }
67
-
68
- var resp []byte
69
- ch := make (chan struct {})
70
- go func () {
71
- if resp , err = ioutil .ReadAll (c ); err != nil {
72
- t .Errorf ("%d. unexpected error when reading response: %s" , i , err )
73
- }
74
- close (ch )
75
- }()
76
- select {
77
- case <- ch :
78
- case <- time .After (250 * time .Millisecond ):
79
- t .Fatalf ("%d. timeout when waiting for response" , i )
80
- }
81
-
82
- if string (resp ) != req {
83
- t .Fatalf ("%d. unexpected response %q. Expecting %q" , i , resp , req )
84
- }
85
- if err = c .Close (); err != nil {
86
- t .Fatalf ("%d. unexpected error when closing connection: %s" , i , err )
87
- }
88
- }
89
-
90
- for _ , ln := range lns {
91
- if err := ln .Close (); err != nil {
92
- t .Fatalf ("unexpected error when closing listener: %s" , err )
93
- }
36
+ func testNewListener (t * testing.T , network , addr string ) {
37
+ ln1 , err := Listen (network , addr )
38
+ if err != nil {
39
+ t .Fatalf ("cannot create listener %v" , err )
94
40
}
95
41
96
- for i := 0 ; i < serversCount ; i ++ {
97
- select {
98
- case <- doneCh :
99
- case <- time .After (200 * time .Millisecond ):
100
- t .Fatalf ("timeout when waiting for servers to be closed" )
101
- }
42
+ ln2 , err := Listen (network , addr )
43
+ if err != nil {
44
+ t .Fatalf ("cannot create listener %v" , err )
102
45
}
103
- }
104
46
105
- func serveEcho (t * testing.T , ln net.Listener ) {
106
- for {
107
- c , err := ln .Accept ()
108
- if err != nil {
109
- break
110
- }
111
- req , err := ioutil .ReadAll (c )
112
- if err != nil {
113
- t .Fatalf ("unexpected error when reading request: %s" , err )
114
- }
115
- if _ , err = c .Write (req ); err != nil {
116
- t .Fatalf ("unexpected error when writing response: %s" , err )
117
- }
118
- if err = c .Close (); err != nil {
119
- t .Fatalf ("unexpected error when closing connection: %s" , err )
120
- }
121
- }
47
+ _ = ln1 .Close ()
48
+ _ = ln2 .Close ()
122
49
}
0 commit comments