blob: ef93632d559abfd834fdd2c0f147ccb4f42a204c [file] [log] [blame]
package reader
import (
"io"
"testing"
"github.com/bazelbuild/remote-apis-sdks/go/pkg/testutil"
"github.com/google/go-cmp/cmp"
)
func TestFileReaderSeeks(t *testing.T) {
t.Parallel()
tests := []struct {
name string
IOBuffSize int
dataBuffSize int
blob string
seekOffset int64
wantResetErr error
}{
{
name: "Smaller data buffer",
IOBuffSize: 10,
dataBuffSize: 3,
blob: "1234567",
seekOffset: 2,
wantResetErr: nil,
},
{
name: "Smaller io buffer",
IOBuffSize: 1,
dataBuffSize: 3,
blob: "1234567",
seekOffset: 2,
wantResetErr: nil,
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
path, err := testutil.CreateFile(t, false, tc.blob)
if err != nil {
t.Fatalf("Failed to make temp file: %v", err)
}
data := make([]byte, tc.dataBuffSize)
r := NewFileReadSeeker(path, tc.IOBuffSize)
defer r.Close()
if _, err := r.Read(data); err == nil {
t.Errorf("Read() = should have err'd on unitialized reader")
}
if err := r.Initialize(); err != nil {
t.Fatalf("Failed to initialize reader: %v", err)
}
n, err := io.ReadFull(r, data)
if n != tc.dataBuffSize {
t.Errorf("Read() = %d bytes, expected %d", n, tc.dataBuffSize)
}
if err != nil {
t.Errorf("Read() = %v err, expected nil", err)
}
if diff := cmp.Diff(string(data), tc.blob[:tc.dataBuffSize]); diff != "" {
t.Errorf("Read() = incorrect result, diff(-want, +got): %v", diff)
}
r.SeekOffset(tc.seekOffset)
if _, err := r.Read(data); err == nil {
t.Errorf("Read() = should have err'd on unitialized reader")
}
if err := r.Initialize(); err != nil {
t.Fatalf("Failed to initialize reader: %v", err)
}
n, err = io.ReadFull(r, data)
if n != tc.dataBuffSize {
t.Errorf("Read() = %d bytes, expected %d", n, tc.dataBuffSize)
}
if err != nil {
t.Errorf("Read() = %v err, expected nil", err)
}
endRead := int(tc.seekOffset) + tc.dataBuffSize
if endRead > len(tc.blob) {
endRead = len(tc.blob)
}
if diff := cmp.Diff(string(data), tc.blob[tc.seekOffset:endRead]); diff != "" {
t.Errorf("Read() = incorrect result, diff(-want, +got): %v", diff)
}
})
}
}
func TestFileReaderSeeksPastOffset(t *testing.T) {
t.Parallel()
path, err := testutil.CreateFile(t, false, "12345")
if err != nil {
t.Fatalf("Failed to make temp file: %v", err)
}
r := NewFileReadSeeker(path, 10)
defer r.Close()
// Past Offset
r.SeekOffset(10)
if err := r.Initialize(); err != nil {
t.Fatalf("Failed to initialize reader: %v", err)
}
data := make([]byte, 1)
if _, err := r.Read(data); err == nil {
t.Errorf("Expected err, got nil")
}
}