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
|
package memorypipe
import (
"bytes"
"context"
"testing"
)
// Test memorypipe.
func TestMemoryPipe(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
aEnd, bEnd := NewPipePair(ctx)
// Create four byte buffer and write it to pipe.
sendMsg := []byte{1, 2, 3, 4}
n, err := aEnd.Write(sendMsg)
if err != nil {
t.Errorf("Unexpected write error: %v", err)
}
if n != len(sendMsg) {
t.Errorf("Unexpected write length: %d, expected: %d", n, len(sendMsg))
}
// Create two byte buffer and try to read from pipe. We should get half of the sent message.
recvMsg := make([]byte, 2)
n, err = bEnd.Read(recvMsg)
if err != nil {
t.Errorf("Unexpected read error: %v", err)
}
if n != len(recvMsg) {
t.Errorf("Unexpected read length: %d, expected: %d", n, len(recvMsg))
}
if !bytes.Equal(recvMsg, sendMsg[:2]) {
t.Errorf("Unexpected read contents: %v, expected: %v", recvMsg, sendMsg[:2])
}
// Now read again into the two byte buffer, we should get the remainder of the send message.
n, err = bEnd.Read(recvMsg)
if err != nil {
t.Errorf("Unexpected read error: %v", err)
}
if n != len(recvMsg) {
t.Errorf("Unexpected read length: %d, expected: %d", n, len(recvMsg))
}
if !bytes.Equal(recvMsg, sendMsg[2:]) {
t.Errorf("Unexpected read contents: %v, expected: %v", recvMsg, sendMsg[2:])
}
// Send a new message.
sendMsg = []byte{1, 2, 3, 4, 5}
n, err = aEnd.Write(sendMsg)
if err != nil {
t.Errorf("Unexpected write error: %v", err)
}
if n != len(sendMsg) {
t.Errorf("Unexpected write length: %d, expected: %d", n, len(sendMsg))
}
// Read entire message this time.
recvMsg = make([]byte, len(sendMsg))
n, err = bEnd.Read(recvMsg)
if err != nil {
t.Errorf("Unexpected read error: %v", err)
}
if n != len(recvMsg) {
t.Errorf("Unexpected read length: %d, expected: %d", n, len(recvMsg))
}
if !bytes.Equal(recvMsg, sendMsg) {
t.Errorf("Unexpected read contents: %v, expected: %v", recvMsg, sendMsg)
}
}
|