65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package mock
|
|
|
|
import "io"
|
|
import "time"
|
|
import "bytes"
|
|
import "git.tebibyte.media/sashakoshka/hopp"
|
|
|
|
var _ hopp.Trans = new(Trans)
|
|
|
|
// Trans is a mock transaction implementation.
|
|
type Trans struct {
|
|
// These arrays must be the same length. You can load this up
|
|
// with messages to read, or deposit messages and retrieve them
|
|
// here later.
|
|
Methods []uint16
|
|
Messages [][]byte
|
|
}
|
|
|
|
func (this *Trans) Close() error { return nil }
|
|
|
|
func (this *Trans) ID() int64 { return 56 }
|
|
|
|
func (this *Trans) Send(method uint16, data []byte) error {
|
|
this.Methods = append(this.Methods, method)
|
|
this.Messages = append(this.Messages, data)
|
|
return nil
|
|
}
|
|
|
|
func (this *Trans) SendWriter(method uint16) (io.WriteCloser, error) {
|
|
return &transWriter {
|
|
Buffer: new(bytes.Buffer),
|
|
method: method,
|
|
parent: this,
|
|
}, nil
|
|
}
|
|
|
|
func (this *Trans) Receive() (method uint16, data []byte, err error) {
|
|
if len(this.Methods) == 0 {
|
|
return 0, nil, io.EOF
|
|
}
|
|
method = this.Methods[0]
|
|
data = this.Messages[0]
|
|
this.Methods = this.Methods[1:]
|
|
this.Messages = this.Messages[1:]
|
|
return method, data, nil
|
|
}
|
|
|
|
func (this *Trans) ReceiveReader() (method uint16, reader io.Reader, err error) {
|
|
method, data, err := this.Receive()
|
|
if err != nil { return 0, nil, err }
|
|
return method, bytes.NewBuffer(data), nil
|
|
}
|
|
|
|
func (this *Trans) SetDeadline(time.Time) error { return nil }
|
|
|
|
type transWriter struct {
|
|
*bytes.Buffer
|
|
method uint16
|
|
parent *Trans
|
|
}
|
|
|
|
func (this *transWriter) Close() error {
|
|
return this.parent.Send(this.method, this.Bytes())
|
|
}
|