unixfs: add ReadAndSeek test
License: MIT Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
Jakub Sztandera committed
Aug 17, 2016 at 21:51 UTC
9f9ca6cb196ad7d4f268df6d7f071c25bdc71b93
2 files changed
+68
unixfs/io/dagreader.go
+4
@@ -210,6 +210,10 @@ func (dr *DagReader) Close() error {
210
return nil
211
}
212
213
+func (dr *DagReader) Offset() int64 {
214
+ return dr.offset
215
+}
216
+
217
// Seek implements io.Seeker, and will seek to a given offset in the file
218
// interface matches standard unix seek
219
// TODO: check if we can do relative seeks, to reduce the amount of dagreader
unixfs/mod/dagmodifier_test.go
+64
@@ -629,6 +629,70 @@ func TestEndSeek(t *testing.T) {
629
}
630
}
631
632
+func TestReadAndSeek(t *testing.T) {
633
+ dserv := getMockDagServ(t)
634
+
635
+ _, n := getNode(t, dserv, 0)
636
+ ctx, cancel := context.WithCancel(context.Background())
637
+ defer cancel()
638
+
639
+ dagmod, err := NewDagModifier(ctx, n, dserv, sizeSplitterGen(512))
640
+ if err != nil {
641
+ t.Fatal(err)
642
+ }
643
+
644
+ writeBuf := []byte{0, 1, 2, 3, 4, 5, 6, 7}
645
+ dagmod.Write(writeBuf)
646
+
647
+ readBuf := make([]byte, 4)
648
+ offset, err := dagmod.Seek(0, os.SEEK_SET)
649
+ if offset != 0 {
650
+ t.Fatal("expected offset to be 0")
651
+ }
652
+ if err != nil {
653
+ t.Fatal(err)
654
+ }
655
+
656
+ // read 0,1,2,3
657
+ c, err := dagmod.Read(readBuf)
658
+ if err != nil {
659
+ t.Fatal(err)
660
+ }
661
+ if c != 4 {
662
+ t.Fatalf("expected length of 4 got %d", c)
663
+ }
664
+
665
+ for i := byte(0); i < 4; i++ {
666
+ if readBuf[i] != i {
667
+ t.Fatalf("wrong value %d [at index %d]", readBuf[i], i)
668
+ }
669
+ }
670
+
671
+ // skip 4
672
+ _, err = dagmod.Seek(1, os.SEEK_CUR)
673
+ if err != nil {
674
+ t.Fatalf("error: %s, offset %d, reader offset %d", err, dagmod.curWrOff, dagmod.read.Offset())
675
+ }
676
+
677
+ //read 5,6,7
678
+ readBuf = make([]byte, 3)
679
+ c, err = dagmod.Read(readBuf)
680
+ if err != nil {
681
+ t.Fatal(err)
682
+ }
683
+ if c != 3 {
684
+ t.Fatalf("expected length of 3 got %d", c)
685
+ }
686
+
687
+ for i := byte(0); i < 3; i++ {
688
+ if readBuf[i] != i+5 {
689
+ t.Fatalf("wrong value %d [at index %d]", readBuf[i], i)
690
+ }
691
+
692
+ }
693
+
694
+}
695
+
696
func BenchmarkDagmodWrite(b *testing.B) {
697
b.StopTimer()
698
dserv := getMockDagServ(b)