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