@@ -2,9 +2,12 @@ package pool_test
2
2
3
3
import (
4
4
"context"
5
+ "fmt"
5
6
"net"
6
7
"sync"
8
+ "syscall"
7
9
"testing"
10
+ "time"
8
11
9
12
. "github.com/onsi/ginkgo"
10
13
. "github.com/onsi/gomega"
@@ -32,5 +35,89 @@ func perform(n int, cbs ...func(int)) {
32
35
}
33
36
34
37
func dummyDialer (context.Context ) (net.Conn , error ) {
35
- return & net.TCPConn {}, nil
38
+ return newDummyConn (), nil
39
+ }
40
+
41
+ func newDummyConn () net.Conn {
42
+ return & dummyConn {
43
+ rawConn : new (dummyRawConn ),
44
+ }
45
+ }
46
+
47
+ var (
48
+ _ net.Conn = (* dummyConn )(nil )
49
+ _ syscall.Conn = (* dummyConn )(nil )
50
+ )
51
+
52
+ type dummyConn struct {
53
+ rawConn * dummyRawConn
54
+ }
55
+
56
+ func (d * dummyConn ) SyscallConn () (syscall.RawConn , error ) {
57
+ return d .rawConn , nil
58
+ }
59
+
60
+ var errDummy = fmt .Errorf ("dummyConn err" )
61
+
62
+ func (d * dummyConn ) Read (b []byte ) (n int , err error ) {
63
+ return 0 , errDummy
64
+ }
65
+
66
+ func (d * dummyConn ) Write (b []byte ) (n int , err error ) {
67
+ return 0 , errDummy
68
+ }
69
+
70
+ func (d * dummyConn ) Close () error {
71
+ d .rawConn .Close ()
72
+ return nil
73
+ }
74
+
75
+ func (d * dummyConn ) LocalAddr () net.Addr {
76
+ return & net.TCPAddr {}
77
+ }
78
+
79
+ func (d * dummyConn ) RemoteAddr () net.Addr {
80
+ return & net.TCPAddr {}
81
+ }
82
+
83
+ func (d * dummyConn ) SetDeadline (t time.Time ) error {
84
+ return nil
85
+ }
86
+
87
+ func (d * dummyConn ) SetReadDeadline (t time.Time ) error {
88
+ return nil
89
+ }
90
+
91
+ func (d * dummyConn ) SetWriteDeadline (t time.Time ) error {
92
+ return nil
93
+ }
94
+
95
+ var _ syscall.RawConn = (* dummyRawConn )(nil )
96
+
97
+ type dummyRawConn struct {
98
+ mu sync.Mutex
99
+ closed bool
100
+ }
101
+
102
+ func (d * dummyRawConn ) Control (f func (fd uintptr )) error {
103
+ return nil
104
+ }
105
+
106
+ func (d * dummyRawConn ) Read (f func (fd uintptr ) (done bool )) error {
107
+ d .mu .Lock ()
108
+ defer d .mu .Unlock ()
109
+ if d .closed {
110
+ return fmt .Errorf ("dummyRawConn closed" )
111
+ }
112
+ return nil
113
+ }
114
+
115
+ func (d * dummyRawConn ) Write (f func (fd uintptr ) (done bool )) error {
116
+ return nil
117
+ }
118
+
119
+ func (d * dummyRawConn ) Close () {
120
+ d .mu .Lock ()
121
+ d .closed = true
122
+ d .mu .Unlock ()
36
123
}
0 commit comments