| 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") |
| } |
| } |