Add tests:
- ``*mem.File` implementation of `io.ReaderAt` must return non-nil error when reading less than length of give slice.
- `MemMapFs` must pass `fstest.TestFS` tests for non-empty files.

Fixes the bug.
This commit is contained in:
Bruno Reis 2022-05-10 13:19:00 -07:00
parent 100c9a6d7b
commit 24ef172f2b
3 changed files with 26 additions and 2 deletions

View File

@ -29,7 +29,15 @@ func TestIOFS(t *testing.T) {
t.Fatal("OpenFile (O_CREATE) failed:", err) t.Fatal("OpenFile (O_CREATE) failed:", err)
} }
f.Close() _, err = f.WriteString("a")
if err != nil {
t.Fatal("WriteString failed:", err)
}
err = f.Close()
if err != nil {
t.Fatal("Close failed:", err)
}
if err := fstest.TestFS(NewIOFS(mmfs), "dir1/dir2/test.txt"); err != nil { if err := fstest.TestFS(NewIOFS(mmfs), "dir1/dir2/test.txt"); err != nil {
t.Error(err) t.Error(err)

View File

@ -210,6 +210,11 @@ func (f *File) ReadAt(b []byte, off int64) (n int, err error) {
atomic.StoreInt64(&f.at, off) atomic.StoreInt64(&f.at, off)
n, err = f.Read(b) n, err = f.Read(b)
atomic.StoreInt64(&f.at, prev) atomic.StoreInt64(&f.at, prev)
if int64(n) == int64(len(f.fileData.data))-off {
if n < len(b) {
err = io.EOF
}
}
return return
} }

View File

@ -232,7 +232,7 @@ func TestFileReadAtSeekOffset(t *testing.T) {
t.Fatal("expected 0") t.Fatal("expected 0")
} }
b := make([]byte, 4) b := make([]byte, 4, 5)
n, err := f.ReadAt(b, 0) n, err := f.ReadAt(b, 0)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
@ -244,6 +244,17 @@ func TestFileReadAtSeekOffset(t *testing.T) {
t.Fail() t.Fail()
} }
n, err = f.ReadAt(b[:cap(b)], 0)
if err != io.EOF {
t.Fatal(err)
}
if n != 4 {
t.Fail()
}
if string(b) != "TEST" {
t.Fail()
}
offsetAfterReadAt, err := f.Seek(0, io.SeekCurrent) offsetAfterReadAt, err := f.Seek(0, io.SeekCurrent)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)