diff --git a/unixfs/io/dagreader_test.go b/unixfs/io/dagreader_test.go index 67d2b01a3..cb8dd399d 100644 --- a/unixfs/io/dagreader_test.go +++ b/unixfs/io/dagreader_test.go @@ -50,22 +50,15 @@ func TestSeekAndRead(t *testing.T) { for i := 255; i >= 0; i-- { reader.Seek(int64(i), os.SEEK_SET) - out := make([]byte, 1) if reader.Offset() != int64(i) { t.Fatal("expected offset to be increased by one after read") } - c, err := reader.Read(out) - if c != 1 { - t.Fatal("reader should have read just one byte") - } - if err != nil { - t.Fatal(err) - } + out := readByte(t, reader) - if int(out[0]) != i { - t.Fatalf("read %d at index %d, expected %d", out[0], i, i) + if int(out) != i { + t.Fatalf("read %d at index %d, expected %d", out, i, i) } if reader.Offset() != int64(i+1) { @@ -73,3 +66,44 @@ func TestSeekAndRead(t *testing.T) { } } } + +func TestRelativeSeek(t *testing.T) { + dserv := testu.GetDAGServ() + ctx, closer := context.WithCancel(context.Background()) + defer closer() + + inbuf := make([]byte, 1024) + + for i := 0; i < 256; i++ { + inbuf[i*4] = byte(i) + } + node := testu.GetNode(t, dserv, inbuf) + + reader, err := NewDagReader(ctx, node, dserv) + if err != nil { + t.Fatal(err) + } + + for i := 0; i < 256; i++ { + out := readByte(t, reader) + if int(out) != i { + t.Fatalf("expected to read: %d at %d, read %d", i, reader.Offset(), out) + } + reader.Seek(3, os.SEEK_CUR) + } + +} + +func readByte(t testing.TB, reader *DagReader) byte { + out := make([]byte, 1) + c, err := reader.Read(out) + + if c != 1 { + t.Fatal("reader should have read just one byte") + } + if err != nil { + t.Fatal(err) + } + + return out[0] +}