Skip to content

Commit

Permalink
coreapi: add some seeker tests
Browse files Browse the repository at this point in the history
License: MIT
Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
  • Loading branch information
magik6k committed Jan 21, 2019
1 parent de0bbb0 commit d0892cd
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 2 deletions.
2 changes: 1 addition & 1 deletion core/coreapi/interface/tests/path.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ func (tp *provider) TestInvalidPathRemainder(t *testing.T) {
}

_, err = api.ResolvePath(ctx, p1)
if err == nil || err.Error() != "no such link found" {
if err == nil || !strings.Contains(err.Error(), "no such link found") {
t.Fatalf("unexpected error: %s", err)
}
}
Expand Down
95 changes: 94 additions & 1 deletion core/coreapi/interface/tests/unixfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ package tests
import (
"bytes"
"context"
"fmt"
"io"
"io/ioutil"
"math"
"math/rand"
"os"
"strconv"
"strings"
Expand Down Expand Up @@ -42,6 +44,7 @@ func (tp *provider) TestUnixfs(t *testing.T) {
t.Run("TestLsEmptyDir", tp.TestLsEmptyDir)
t.Run("TestLsNonUnixfs", tp.TestLsNonUnixfs)
t.Run("TestAddCloses", tp.TestAddCloses)
t.Run("TestGetSeek", tp.TestGetSeek)
}

// `echo -n 'hello, world!' | ipfs add`
Expand Down Expand Up @@ -587,7 +590,7 @@ func (tp *provider) TestAddHashOnly(t *testing.T) {
if err == nil {
t.Fatal("expected an error")
}
if err.Error() != "blockservice: key not found" {
if !strings.Contains(err.Error(),"blockservice: key not found") {
t.Errorf("unxepected error: %s", err.Error())
}
}
Expand Down Expand Up @@ -884,5 +887,95 @@ func (tp *provider) TestAddCloses(t *testing.T) {
t.Errorf("dir %d not closed!", i)
}
}
}

func (tp *provider) TestGetSeek(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
api, err := tp.makeAPI(ctx)
if err != nil {
t.Error(err)
}

dataSize := int64(100000)
tf := files.NewReaderFile(io.LimitReader(rand.New(rand.NewSource(1403768328)), dataSize))

p, err := api.Unixfs().Add(ctx, tf, options.Unixfs.Chunker("size-100"))
if err != nil {
t.Fatal(err)
}

r, err := api.Unixfs().Get(ctx, p)
if err != nil {
t.Fatal(err)
}

f := files.ToFile(r)
if f == nil {
t.Fatal("not a file")
}

orig := make([]byte, dataSize)
if _, err := f.Read(orig); err != nil {
t.Fatal(err)
}
r.Close()

origR := bytes.NewReader(orig)

r, err = api.Unixfs().Get(ctx, p)
if err != nil {
t.Fatal(err)
}

f = files.ToFile(r)
if f == nil {
t.Fatal("not a file")
}

test := func(offset int64, whence int, read int, expect int64) {
t.Run(fmt.Sprintf("seek%d+%d-r%d-%d", whence, offset, read, expect), func(t *testing.T) {
n, err := f.Seek(offset, whence)
if err != nil {
t.Fatal(err)
}
origN, err := origR.Seek(offset, whence)
if err != nil {
t.Fatal(err)
}

if n != origN {
t.Fatalf("offsets didn't match, expected %d, got %d", origN, n)
}

buf := make([]byte, read)
origBuf := make([]byte, read)
origRead, err := origR.Read(origBuf)
if err != nil {
t.Fatalf("orig: %s", err)
}
r, err := f.Read(buf)
if err != nil {
t.Fatalf("f: %s", err)
}

if int64(r) != expect {
t.Fatal("read wrong amount of data")
}
if r != origRead {
t.Fatal("read different amount of data than bytes.Reader")
}
if !bytes.Equal(buf, origBuf) {
t.Fatal("data didn't match")
}
})
}

test(3, io.SeekCurrent, 10, 10)
test(3, io.SeekCurrent, 10, 10)
test(500, io.SeekCurrent, 10, 10)
test(350, io.SeekStart, 100, 100)
test(-123, io.SeekCurrent, 100, 100)
test(dataSize - 50, io.SeekStart, 100, 50)
test(-5, io.SeekEnd, 100, 5)
}

0 comments on commit d0892cd

Please sign in to comment.