@@ -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,87 @@ 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 &net.TCPConn{}, nil
39
+ return newDummyConn (), nil
40
+ }
41
+
42
+ func newDummyConn () net.Conn {
43
+ return & dummyConn {
44
+ rawConn : & dummyRawConn {},
45
+ }
46
+ }
47
+
48
+ var _ net.Conn = (* dummyConn )(nil )
49
+ var _ syscall.Conn = (* dummyConn )(nil )
50
+
51
+ type dummyConn struct {
52
+ rawConn * dummyRawConn
53
+ }
54
+
55
+ func (d * dummyConn ) SyscallConn () (syscall.RawConn , error ) {
56
+ return d .rawConn , nil
57
+ }
58
+
59
+ var errDummy = fmt .Errorf ("dummyConn err" )
60
+
61
+ func (d * dummyConn ) Read (b []byte ) (n int , err error ) {
62
+ return 0 , errDummy
63
+ }
64
+
65
+ func (d * dummyConn ) Write (b []byte ) (n int , err error ) {
66
+ return 0 , errDummy
67
+ }
68
+
69
+ func (d * dummyConn ) Close () error {
70
+ d .rawConn .Close ()
71
+ return nil
72
+ }
73
+
74
+ func (d * dummyConn ) LocalAddr () net.Addr {
75
+ return & net.TCPAddr {}
76
+ }
77
+
78
+ func (d * dummyConn ) RemoteAddr () net.Addr {
79
+ return & net.TCPAddr {}
80
+ }
81
+
82
+ func (d * dummyConn ) SetDeadline (t time.Time ) error {
83
+ return nil
84
+ }
85
+
86
+ func (d * dummyConn ) SetReadDeadline (t time.Time ) error {
87
+ return nil
88
+ }
89
+
90
+ func (d * dummyConn ) SetWriteDeadline (t time.Time ) error {
91
+ return nil
92
+ }
93
+
94
+ var _ syscall.RawConn = (* dummyRawConn )(nil )
95
+
96
+ type dummyRawConn struct {
97
+ closed bool
98
+ mux sync.Mutex
99
+ }
100
+
101
+ func (d * dummyRawConn ) Control (f func (fd uintptr )) error {
102
+ return nil
103
+ }
104
+
105
+ func (d * dummyRawConn ) Read (f func (fd uintptr ) (done bool )) error {
106
+ d .mux .Lock ()
107
+ defer d .mux .Unlock ()
108
+ if d .closed {
109
+ return fmt .Errorf ("dummyRawConn closed" )
110
+ }
111
+ return nil
112
+ }
113
+
114
+ func (d * dummyRawConn ) Write (f func (fd uintptr ) (done bool )) error {
115
+ return nil
116
+ }
117
+ func (d * dummyRawConn ) Close () {
118
+ d .mux .Lock ()
119
+ d .closed = true
120
+ d .mux .Unlock ()
36
121
}
0 commit comments