From dea8c4d70bc6cb1bae8e7faff5e675e828af5bd2 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Sun, 31 Dec 2017 15:15:18 -0800 Subject: [PATCH] test promised don't get allocated where not wanted License: MIT Signed-off-by: Jeromy --- unixfs/io/dagreader_test.go | 50 +++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/unixfs/io/dagreader_test.go b/unixfs/io/dagreader_test.go index a5ed6dd39..da16feaf7 100644 --- a/unixfs/io/dagreader_test.go +++ b/unixfs/io/dagreader_test.go @@ -4,6 +4,7 @@ import ( "bytes" "io" "io/ioutil" + "math/rand" "strings" "testing" @@ -72,6 +73,55 @@ func TestSeekAndRead(t *testing.T) { } } +func TestSeekAndReadLarge(t *testing.T) { + dserv := testu.GetDAGServ() + inbuf := make([]byte, 20000) + rand.Read(inbuf) + + node := testu.GetNode(t, dserv, inbuf, testu.UseProtoBufLeaves) + ctx, closer := context.WithCancel(context.Background()) + defer closer() + + reader, err := NewDagReader(ctx, node, dserv) + if err != nil { + t.Fatal(err) + } + + _, err = reader.Seek(10000, io.SeekStart) + if err != nil { + t.Fatal(err) + } + + buf := make([]byte, 100) + _, err = io.ReadFull(reader, buf) + if err != nil { + t.Fatal(err) + } + + if !bytes.Equal(buf, inbuf[10000:10100]) { + t.Fatal("seeked read failed") + } + + pbdr := reader.(*pbDagReader) + var count int + for i, p := range pbdr.promises { + if i > 20 && i < 30 { + if p == nil { + t.Fatal("expected index to be not nil: ", i) + } + count++ + } else { + if p != nil { + t.Fatal("expected index to be nil: ", i) + } + } + } + // -1 because we read some and it cleared one + if count != preloadSize-1 { + t.Fatalf("expected %d preloaded promises, got %d", preloadSize-1, count) + } +} + func TestRelativeSeek(t *testing.T) { dserv := testu.GetDAGServ() ctx, closer := context.WithCancel(context.Background())