...
1 package pool_test
2
3 import (
4 "context"
5 "fmt"
6 "net"
7 "sync"
8 "syscall"
9 "testing"
10 "time"
11
12 . "github.com/bsm/ginkgo/v2"
13 . "github.com/bsm/gomega"
14 )
15
16 func TestGinkgoSuite(t *testing.T) {
17 RegisterFailHandler(Fail)
18 RunSpecs(t, "pool")
19 }
20
21 func perform(n int, cbs ...func(int)) {
22 var wg sync.WaitGroup
23 for _, cb := range cbs {
24 for i := 0; i < n; i++ {
25 wg.Add(1)
26 go func(cb func(int), i int) {
27 defer GinkgoRecover()
28 defer wg.Done()
29
30 cb(i)
31 }(cb, i)
32 }
33 }
34 wg.Wait()
35 }
36
37 func dummyDialer(context.Context) (net.Conn, error) {
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()
123 }
124
View as plain text