1package test
2
3import (
4	"net"
5	"time"
6)
7
8type FakeNetConn struct {
9	ReadFunc             func([]byte) (int, error)
10	WriteFunc            func([]byte) (int, error)
11	CloseFunc            func() error
12	LocalAddrFunc        func() net.Addr
13	RemoteAddrFunc       func() net.Addr
14	SetDeadlineFunc      func(time.Time) error
15	SetReadDeadlineFunc  func(time.Time) error
16	SetWriteDeadlineFunc func(time.Time) error
17}
18
19func (f FakeNetConn) Read(b []byte) (int, error)         { return f.ReadFunc(b) }
20func (f FakeNetConn) Write(b []byte) (int, error)        { return f.WriteFunc(b) }
21func (f FakeNetConn) Close() error                       { return f.CloseFunc() }
22func (f FakeNetConn) LocalAddr() net.Addr                { return f.LocalAddrFunc() }
23func (f FakeNetConn) RemoteAddr() net.Addr               { return f.RemoteAddrFunc() }
24func (f FakeNetConn) SetDeadline(t time.Time) error      { return f.SetDeadlineFunc(t) }
25func (f FakeNetConn) SetReadDeadline(t time.Time) error  { return f.SetReadDeadlineFunc(t) }
26func (f FakeNetConn) SetWriteDeadline(t time.Time) error { return f.SetWriteDeadlineFunc(t) }
27
28type fakeNetAddr struct{}
29
30func (fakeNetAddr) Network() string { return "" }
31func (fakeNetAddr) String() string  { return "" }
32
33func NewFakeNetConn() FakeNetConn {
34	netAddr := fakeNetAddr{}
35	return FakeNetConn{
36		ReadFunc:             func(b []byte) (int, error) { return 0, nil },
37		WriteFunc:            func(b []byte) (int, error) { return len(b), nil },
38		CloseFunc:            func() error { return nil },
39		LocalAddrFunc:        func() net.Addr { return netAddr },
40		RemoteAddrFunc:       func() net.Addr { return netAddr },
41		SetDeadlineFunc:      func(time.Time) error { return nil },
42		SetWriteDeadlineFunc: func(time.Time) error { return nil },
43		SetReadDeadlineFunc:  func(time.Time) error { return nil },
44	}
45}
46