mirror of
https://github.com/QuilibriumNetwork/ceremonyclient.git
synced 2026-03-07 01:07:44 +08:00
92 lines
2.1 KiB
Go
92 lines
2.1 KiB
Go
package pool
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
)
|
|
|
|
func checkSize(t *testing.T, w *Writer) {
|
|
if w.Size()-w.Buffered() != w.Available() {
|
|
t.Fatalf("size (%d), buffered (%d), available (%d) mismatch", w.Size(), w.Buffered(), w.Available())
|
|
}
|
|
}
|
|
|
|
func TestWriter(t *testing.T) {
|
|
var b bytes.Buffer
|
|
w := Writer{W: &b}
|
|
n, err := w.Write([]byte("foobar"))
|
|
checkSize(t, &w)
|
|
|
|
if err != nil || n != 6 {
|
|
t.Fatalf("write failed: %d, %s", n, err)
|
|
}
|
|
if b.Len() != 0 {
|
|
t.Fatal("expected the buffer to be empty")
|
|
}
|
|
if w.Buffered() != 6 {
|
|
t.Fatalf("expected 6 bytes to be buffered, got %d", w.Buffered())
|
|
}
|
|
checkSize(t, &w)
|
|
if err := w.Flush(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
checkSize(t, &w)
|
|
if err := w.Flush(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
checkSize(t, &w)
|
|
if b.String() != "foobar" {
|
|
t.Fatal("expected to have written foobar")
|
|
}
|
|
b.Reset()
|
|
|
|
buf := make([]byte, WriterBufferSize)
|
|
n, err = w.Write(buf)
|
|
if n != WriterBufferSize || err != nil {
|
|
t.Fatalf("write failed: %d, %s", n, err)
|
|
}
|
|
checkSize(t, &w)
|
|
if b.Len() != WriterBufferSize {
|
|
t.Fatal("large write should have gone through directly")
|
|
}
|
|
if err := w.Flush(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
checkSize(t, &w)
|
|
|
|
b.Reset()
|
|
if err := w.WriteByte(1); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if w.Buffered() != 1 {
|
|
t.Fatalf("expected 1 byte to be buffered, got %d", w.Buffered())
|
|
}
|
|
if n, err := w.WriteRune('1'); err != nil || n != 1 {
|
|
t.Fatal(err)
|
|
}
|
|
if w.Buffered() != 2 {
|
|
t.Fatalf("expected 2 bytes to be buffered, got %d", w.Buffered())
|
|
}
|
|
checkSize(t, &w)
|
|
if n, err := w.WriteString("foobar"); err != nil || n != 6 {
|
|
t.Fatal(err)
|
|
}
|
|
if w.Buffered() != 8 {
|
|
t.Fatalf("expected 8 bytes to be buffered, got %d", w.Buffered())
|
|
}
|
|
checkSize(t, &w)
|
|
if b.Len() != 0 {
|
|
t.Fatal("write should have been buffered")
|
|
}
|
|
n, err = w.Write(buf)
|
|
if n != WriterBufferSize || err != nil {
|
|
t.Fatalf("write failed: %d, %s", n, err)
|
|
}
|
|
if b.Len() != WriterBufferSize || b.Bytes()[0] != 1 || b.String()[1:8] != "1foobar" {
|
|
t.Fatalf("failed to flush properly: len:%d, prefix:%#v", b.Len(), b.Bytes()[:10])
|
|
}
|
|
if err := w.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|