mirror of
https://github.com/mjl-/mox.git
synced 2024-12-27 08:53:48 +03:00
77 lines
2.2 KiB
Go
77 lines
2.2 KiB
Go
package store
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func TestMsgreader(t *testing.T) {
|
|
_, err := io.Copy(io.Discard, &MsgReader{prefix: []byte("hello"), path: "bogus.txt", size: int64(len("hello"))})
|
|
if err == nil || !os.IsNotExist(err) {
|
|
t.Fatalf("expected error for non-existing file, got %s", err)
|
|
}
|
|
|
|
if buf, err := io.ReadAll(&MsgReader{prefix: []byte("hello"), path: "/dev/null", size: int64(len("hello"))}); err != nil {
|
|
t.Fatalf("readall: %s", err)
|
|
} else if string(buf) != "hello" {
|
|
t.Fatalf("got %q, expected %q", buf, "hello")
|
|
}
|
|
|
|
if err := os.WriteFile("msgreader_test.txt", []byte(" world"), 0660); err != nil {
|
|
t.Fatalf("writing msgreader_test.txt: %s", err)
|
|
}
|
|
defer os.Remove("msgreader_test.txt")
|
|
mr := &MsgReader{prefix: []byte("hello"), path: "msgreader_test.txt", size: int64(len("hello world"))}
|
|
if buf, err := io.ReadAll(mr); err != nil {
|
|
t.Fatalf("readall: %s", err)
|
|
} else if string(buf) != "hello world" {
|
|
t.Fatalf("got %q, expected %q", buf, "hello world")
|
|
}
|
|
|
|
mr.Reset()
|
|
buf := make([]byte, 32)
|
|
if n, err := mr.ReadAt(buf, 1); err != nil && err != io.EOF {
|
|
t.Fatalf("readat: n %d, s %q, err %s", n, buf[:n], err)
|
|
} else if n != len("ello world") || string(buf[:n]) != "ello world" {
|
|
t.Fatalf("readat: got %d bytes (%q), expected %d (%q)", n, buf, int64(len("ello world")), "ello world")
|
|
}
|
|
|
|
// Read with 1 byte at a time to exercise the offset/buffer-length calculations.
|
|
buf = make([]byte, 1)
|
|
var result []byte
|
|
mr = &MsgReader{prefix: []byte("hello"), path: "msgreader_test.txt", size: int64(len("hello world"))}
|
|
for {
|
|
n, err := mr.Read(buf)
|
|
if n > 0 {
|
|
result = append(result, buf...)
|
|
}
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
if err != nil {
|
|
t.Fatalf("read: %s", err)
|
|
}
|
|
}
|
|
if string(result) != "hello world" {
|
|
t.Fatalf("got %q, want %q", result, "hello world")
|
|
}
|
|
|
|
if err := mr.Close(); err != nil {
|
|
t.Fatalf("close: %v", err)
|
|
}
|
|
|
|
f, err := os.Open("msgreader_test.txt")
|
|
if err != nil {
|
|
t.Fatalf("open: %v", err)
|
|
}
|
|
mr = FileMsgReader([]byte("hello"), f)
|
|
|
|
if mr.Size() != int64(len("hello world")) {
|
|
t.Fatalf("size, got %d, expect %d", mr.Size(), len("hello world"))
|
|
}
|
|
|
|
if err := mr.Close(); err != nil {
|
|
t.Fatalf("close: %v", err)
|
|
}
|
|
}
|