mirror of
https://github.com/soheilhy/cmux.git
synced 2024-11-09 19:21:52 +08:00
48443df968
This is in violation of the io.Writer interface specification.
114 lines
2.4 KiB
Go
114 lines
2.4 KiB
Go
package cmux
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"testing"
|
|
)
|
|
|
|
func TestWriteNoModify(t *testing.T) {
|
|
var b buffer
|
|
|
|
const origWriteByte = 0
|
|
const postWriteByte = 1
|
|
|
|
writeBytes := []byte{origWriteByte}
|
|
if _, err := b.Write(writeBytes); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
writeBytes[0] = postWriteByte
|
|
readBytes := make([]byte, 1)
|
|
if _, err := b.Read(readBytes); err != io.EOF {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if readBytes[0] != origWriteByte {
|
|
t.Fatalf("expected to read %x, but read %x; buffer retained passed-in slice", origWriteByte, postWriteByte)
|
|
}
|
|
}
|
|
|
|
const writeString = "deadbeef"
|
|
|
|
func TestBuffer(t *testing.T) {
|
|
writeBytes := []byte(writeString)
|
|
|
|
const numWrites = 10
|
|
|
|
var b buffer
|
|
for i := 0; i < numWrites; i++ {
|
|
n, err := b.Write(writeBytes)
|
|
if err != nil && err != io.EOF {
|
|
t.Fatal(err)
|
|
}
|
|
if n != len(writeBytes) {
|
|
t.Fatalf("cannot write all the bytes: want=%d got=%d", len(writeBytes), n)
|
|
}
|
|
}
|
|
|
|
for j := 0; j < 2; j++ {
|
|
readBytes := make([]byte, len(writeBytes))
|
|
for i := 0; i < numWrites; i++ {
|
|
n, err := b.Read(readBytes)
|
|
if i == numWrites-1 {
|
|
// The last read should report EOF.
|
|
if err != io.EOF {
|
|
t.Fatal(err)
|
|
}
|
|
} else if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if n != len(readBytes) {
|
|
t.Fatalf("cannot read all the bytes: want=%d got=%d", len(readBytes), n)
|
|
}
|
|
if !bytes.Equal(writeBytes, readBytes) {
|
|
t.Errorf("different bytes read: want=%d got=%d", writeBytes, readBytes)
|
|
}
|
|
}
|
|
n, err := b.Read(readBytes)
|
|
if err != io.EOF {
|
|
t.Errorf("expected EOF")
|
|
}
|
|
if n != 0 {
|
|
t.Errorf("expected buffer to be empty, but got %d bytes", n)
|
|
}
|
|
|
|
b.resetRead()
|
|
}
|
|
}
|
|
|
|
func TestBufferOffset(t *testing.T) {
|
|
writeBytes := []byte(writeString)
|
|
|
|
var b buffer
|
|
n, err := b.Write(writeBytes)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if n != len(writeBytes) {
|
|
t.Fatalf("cannot write all the bytes: want=%d got=%d", len(writeBytes), n)
|
|
}
|
|
|
|
const readSize = 2
|
|
|
|
numReads := len(writeBytes) / readSize
|
|
|
|
for i := 0; i < numReads; i++ {
|
|
readBytes := make([]byte, readSize)
|
|
n, err := b.Read(readBytes)
|
|
if i == numReads-1 {
|
|
// The last read should report EOF.
|
|
if err != io.EOF {
|
|
t.Fatal(err)
|
|
}
|
|
} else if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if n != readSize {
|
|
t.Fatalf("cannot read the bytes: want=%d got=%d", readSize, n)
|
|
}
|
|
if got := writeBytes[i*readSize : i*readSize+readSize]; !bytes.Equal(got, readBytes) {
|
|
t.Fatalf("different bytes read: want=%s got=%s", readBytes, got)
|
|
}
|
|
}
|
|
}
|