Jake Hillion
a731c71ed6
All checks were successful
continuous-integration/drone/push Build is passing
68 lines
1.2 KiB
Go
68 lines
1.2 KiB
Go
package mocks
|
|
|
|
import "time"
|
|
|
|
type MockPerfectBiConn struct {
|
|
directionA chan byte
|
|
directionB chan byte
|
|
}
|
|
|
|
func NewMockPerfectBiConn(bufSize int) MockPerfectBiConn {
|
|
return MockPerfectBiConn{
|
|
directionA: make(chan byte, bufSize),
|
|
directionB: make(chan byte, bufSize),
|
|
}
|
|
}
|
|
|
|
func (bc MockPerfectBiConn) SideA() MockPerfectConn {
|
|
return MockPerfectConn{inbound: bc.directionA, outbound: bc.directionB}
|
|
}
|
|
|
|
func (bc MockPerfectBiConn) SideB() MockPerfectConn {
|
|
return MockPerfectConn{inbound: bc.directionB, outbound: bc.directionA}
|
|
}
|
|
|
|
type MockPerfectConn struct {
|
|
inbound chan byte
|
|
outbound chan byte
|
|
}
|
|
|
|
func (c MockPerfectConn) SetWriteDeadline(time.Time) error {
|
|
return nil
|
|
}
|
|
|
|
func (c MockPerfectConn) Read(p []byte) (n int, err error) {
|
|
for i := range p {
|
|
if i == 0 {
|
|
p[i] = <-c.inbound
|
|
} else {
|
|
select {
|
|
case b := <-c.inbound:
|
|
p[i] = b
|
|
default:
|
|
return i, nil
|
|
}
|
|
}
|
|
}
|
|
return len(p), nil
|
|
}
|
|
|
|
func (c MockPerfectConn) Write(p []byte) (n int, err error) {
|
|
for _, b := range p {
|
|
c.outbound <- b
|
|
}
|
|
return len(p), nil
|
|
}
|
|
|
|
func (c MockPerfectConn) NonBlockingRead(p []byte) (n int, err error) {
|
|
for i := range p {
|
|
select {
|
|
case b := <-c.inbound:
|
|
p[i] = b
|
|
default:
|
|
return i, nil
|
|
}
|
|
}
|
|
return len(p), nil
|
|
}
|