func TestReaderSeekStress(t *testing.T) { const fileSize = 750<<10 + 123 bigFile := make([]byte, fileSize) rnd := rand.New(rand.NewSource(1)) for i := range bigFile { bigFile[i] = byte(rnd.Intn(256)) } sto := new(test.Fetcher) // in-memory blob storage fileMap := NewFileMap("testfile") fileref, err := WriteFileMap(sto, fileMap, bytes.NewReader(bigFile)) if err != nil { t.Fatalf("WriteFileMap: %v", err) } c, ok := sto.BlobContents(fileref) if !ok { t.Fatal("expected file contents to be present") } const debug = false if debug { t.Logf("Fileref %s: %s", fileref, c) } // Test a bunch of reads at different offsets, making sure we always // get the same results. skipBy := int64(999) if testing.Short() { skipBy += 10 << 10 } for off := int64(0); off < fileSize; off += skipBy { fr, err := NewFileReader(sto, fileref) if err != nil { t.Fatal(err) } skipBytes(fr, uint64(off)) got, err := ioutil.ReadAll(fr) if err != nil { t.Fatal(err) } want := bigFile[off:] if !bytes.Equal(got, want) { t.Errorf("Incorrect read at offset %d:\n got: %s\n want: %s", off, summary(got), summary(want)) off := 0 for len(got) > 0 && len(want) > 0 && got[0] == want[0] { off++ got = got[1:] want = want[1:] } t.Errorf(" differences start at offset %d:\n got: %s\n want: %s\n", off, summary(got), summary(want)) break } fr.Close() } }