Files
kopia/internal/jsonstream/stream_test.go

72 lines
1.4 KiB
Go

package jsonstream
import (
"bufio"
"bytes"
"io"
"log"
"strings"
"testing"
)
type TestObj struct {
Name string `json:"name,omitempty"`
}
var testHeader1 = "01234567"
var testHeader2 = "0123456x"
func TestStream(t *testing.T) {
var buf bytes.Buffer
data := []TestObj{
TestObj{Name: "foo"},
TestObj{Name: "bar"},
TestObj{Name: "baz"},
}
w := NewWriter(&buf, testHeader1)
for _, d := range data {
if err := w.Write(&d); err != nil {
t.Errorf("write error: %v", err)
}
}
w.Finalize()
log.Printf("wrote: %v", string(buf.Bytes()))
r, err := NewReader(bufio.NewReader(&buf), testHeader1)
if err != nil {
t.Errorf("err: %v", err)
return
}
for _, d := range data {
v := &TestObj{}
if err := r.Read(v); err != nil {
t.Errorf("read error: %v", err)
}
if v.Name != d.Name {
t.Errorf("invalid value: '%v', expected '%v'", v.Name, d.Name)
}
}
v := &TestObj{}
err = r.Read(v)
if err != io.EOF {
t.Errorf("expected EOF, got %v", err)
}
}
func TestInvalidHeader(t *testing.T) {
var buf bytes.Buffer
w := NewWriter(&buf, testHeader1)
if err := w.Write(&TestObj{Name: "foo"}); err != nil {
t.Errorf("write error: %v", err)
}
_, err := NewReader(bufio.NewReader(&buf), testHeader2)
if err == nil {
t.Errorf("expected error, got none")
} else if !strings.Contains(err.Error(), "invalid stream format") {
t.Errorf("got incorrect error: %v", err)
}
}