@cryptotaxi247 / kubo / commits / 9f9ca6cb1

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)