func TestReadFromWithValidInput(t *testing.T) { t.Parallel() var pb prefixedio.Buffer // Reuse the same buffer between runs buf := &bytes.Buffer{} var maxLenBuf bytes.Buffer for i := 0; i < prefixedio.MaxLen; i++ { maxLenBuf.WriteString("Q") } ins := []string{ "foo", // 1 < length < 8 "foobarba", // length == 8 "foobarbaz", // length > 8 maxLenBuf.String(), // length == maxLen "f", // length == 1, test last to verify reusing buffer works when content shrinks } for _, in := range ins { binary.Write(buf, binary.BigEndian, uint64(len(in))) buf.WriteString(in) n, err := pb.ReadFrom(buf) if err != nil { t.Fatal("Error on read: ", err) } if n != int64(len(in)) { t.Fatalf("Number of read bytes doesn't match input. Expected: %v. Actual: %v\n", len(in), n) } if byteStr := string(pb.Bytes()); byteStr != in { t.Fatalf("Read bytes doesn't match input. Expected: %q. Actual: %q\n", in, byteStr) } } }
func TestReadFromWithInvalidInput(t *testing.T) { t.Parallel() length := prefixedio.MaxLen + 1 buf := bytes.NewBuffer(make([]byte, 0, length+8)) if err := binary.Write(buf, binary.BigEndian, uint64(length)); err != nil { t.Fatal("Error on write: ", err) } for i := 0; i < length; i++ { buf.WriteString("a") } var pb prefixedio.Buffer if _, err := pb.ReadFrom(buf); err == nil { t.Fatal("No error raised when message too long") } }