forked from go-stomp/stomp
/
fake_conn.go
113 lines (92 loc) · 2.13 KB
/
fake_conn.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package testutil
import (
"errors"
. "gopkg.in/check.v1"
"io"
"net"
"time"
)
type FakeAddr struct {
Value string
}
func (addr *FakeAddr) Network() string {
return "fake"
}
func (addr *FakeAddr) String() string {
return addr.Value
}
// FakeConn is a fake connection used for testing. It implements
// the net.Conn interface and is useful for simulating I/O between
// STOMP clients and a STOMP server.
type FakeConn struct {
C *C
writer io.WriteCloser
reader io.ReadCloser
localAddr net.Addr
remoteAddr net.Addr
}
var (
ErrClosing = errors.New("use of closed network connection")
)
// NewFakeConn returns a pair of fake connections suitable for
// testing.
func NewFakeConn(c *C) (client *FakeConn, server *FakeConn) {
clientReader, serverWriter := io.Pipe()
serverReader, clientWriter := io.Pipe()
clientAddr := &FakeAddr{Value: "the-client:123"}
serverAddr := &FakeAddr{Value: "the-server:456"}
clientConn := &FakeConn{
C: c,
reader: clientReader,
writer: clientWriter,
localAddr: clientAddr,
remoteAddr: serverAddr,
}
serverConn := &FakeConn{
C: c,
reader: serverReader,
writer: serverWriter,
localAddr: serverAddr,
remoteAddr: clientAddr,
}
return clientConn, serverConn
}
func (fc *FakeConn) Read(p []byte) (n int, err error) {
n, err = fc.reader.Read(p)
return
}
func (fc *FakeConn) Write(p []byte) (n int, err error) {
return fc.writer.Write(p)
}
func (fc *FakeConn) Close() error {
err1 := fc.reader.Close()
err2 := fc.writer.Close()
if err1 != nil {
return err1
}
if err2 != nil {
return err2
}
return nil
}
func (fc *FakeConn) LocalAddr() net.Addr {
return fc.localAddr
}
func (fc *FakeConn) RemoteAddr() net.Addr {
return fc.remoteAddr
}
func (fc *FakeConn) SetLocalAddr(addr net.Addr) {
fc.localAddr = addr
}
func (fc *FakeConn) SetRemoteAddr(addr net.Addr) {
fc.remoteAddr = addr
}
func (fc *FakeConn) SetDeadline(t time.Time) error {
panic("not implemented")
}
func (fc *FakeConn) SetReadDeadline(t time.Time) error {
panic("not implemented")
}
func (fc *FakeConn) SetWriteDeadline(t time.Time) error {
panic("not implemented")
}