123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package bytebufferpool
- import (
- "bytes"
- "fmt"
- "io"
- "testing"
- "time"
- )
- func TestByteBufferReadFrom(t *testing.T) {
- prefix := "foobar"
- expectedS := "asadfsdafsadfasdfisdsdfa"
- prefixLen := int64(len(prefix))
- expectedN := int64(len(expectedS))
- var bb ByteBuffer
- bb.WriteString(prefix)
- rf := (io.ReaderFrom)(&bb)
- for i := 0; i < 20; i++ {
- r := bytes.NewBufferString(expectedS)
- n, err := rf.ReadFrom(r)
- if n != expectedN {
- t.Fatalf("unexpected n=%d. Expecting %d. iteration %d", n, expectedN, i)
- }
- if err != nil {
- t.Fatalf("unexpected error: %s", err)
- }
- bbLen := int64(bb.Len())
- expectedLen := prefixLen + int64(i+1)*expectedN
- if bbLen != expectedLen {
- t.Fatalf("unexpected byteBuffer length: %d. Expecting %d", bbLen, expectedLen)
- }
- for j := 0; j < i; j++ {
- start := prefixLen + int64(j)*expectedN
- b := bb.B[start : start+expectedN]
- if string(b) != expectedS {
- t.Fatalf("unexpected byteBuffer contents: %q. Expecting %q", b, expectedS)
- }
- }
- }
- }
- func TestByteBufferWriteTo(t *testing.T) {
- expectedS := "foobarbaz"
- var bb ByteBuffer
- bb.WriteString(expectedS[:3])
- bb.WriteString(expectedS[3:])
- wt := (io.WriterTo)(&bb)
- var w bytes.Buffer
- for i := 0; i < 10; i++ {
- n, err := wt.WriteTo(&w)
- if n != int64(len(expectedS)) {
- t.Fatalf("unexpected n returned from WriteTo: %d. Expecting %d", n, len(expectedS))
- }
- if err != nil {
- t.Fatalf("unexpected error: %s", err)
- }
- s := string(w.Bytes())
- if s != expectedS {
- t.Fatalf("unexpected string written %q. Expecting %q", s, expectedS)
- }
- w.Reset()
- }
- }
- func TestByteBufferGetPutSerial(t *testing.T) {
- testByteBufferGetPut(t)
- }
- func TestByteBufferGetPutConcurrent(t *testing.T) {
- concurrency := 10
- ch := make(chan struct{}, concurrency)
- for i := 0; i < concurrency; i++ {
- go func() {
- testByteBufferGetPut(t)
- ch <- struct{}{}
- }()
- }
- for i := 0; i < concurrency; i++ {
- select {
- case <-ch:
- case <-time.After(time.Second):
- t.Fatalf("timeout!")
- }
- }
- }
- func testByteBufferGetPut(t *testing.T) {
- for i := 0; i < 10; i++ {
- expectedS := fmt.Sprintf("num %d", i)
- b := Get()
- b.B = append(b.B, "num "...)
- b.B = append(b.B, fmt.Sprintf("%d", i)...)
- if string(b.B) != expectedS {
- t.Fatalf("unexpected result: %q. Expecting %q", b.B, expectedS)
- }
- Put(b)
- }
- }
- func testByteBufferGetString(t *testing.T) {
- for i := 0; i < 10; i++ {
- expectedS := fmt.Sprintf("num %d", i)
- b := Get()
- b.SetString(expectedS)
- if b.String() != expectedS {
- t.Fatalf("unexpected result: %q. Expecting %q", b.B, expectedS)
- }
- Put(b)
- }
- }
- func TestByteBufferGetStringSerial(t *testing.T) {
- testByteBufferGetString(t)
- }
- func TestByteBufferGetStringConcurrent(t *testing.T) {
- concurrency := 10
- ch := make(chan struct{}, concurrency)
- for i := 0; i < concurrency; i++ {
- go func() {
- testByteBufferGetString(t)
- ch <- struct{}{}
- }()
- }
- for i := 0; i < concurrency; i++ {
- select {
- case <-ch:
- case <-time.After(time.Second):
- t.Fatalf("timeout!")
- }
- }
- }
|