Skip to content

Commit a98b0d7

Browse files
committed
split tests into selector / no-selector
1 parent 40fdb81 commit a98b0d7

File tree

1 file changed

+166
-48
lines changed

1 file changed

+166
-48
lines changed

itests/graphsync_retrieval_test.go

Lines changed: 166 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package itests
22

33
import (
44
"context"
5-
"math"
65
"path/filepath"
76
"testing"
87
"time"
@@ -14,14 +13,13 @@ import (
1413
"github.com/filecoin-project/lotus/itests/kit"
1514
"github.com/google/uuid"
1615
"github.com/ipfs/go-cid"
17-
"github.com/ipfs/go-unixfsnode"
1816
"github.com/ipld/go-ipld-prime/datamodel"
1917
"github.com/ipld/go-ipld-prime/node/basicnode"
2018
"github.com/ipld/go-ipld-prime/traversal/selector/builder"
2119
"github.com/stretchr/testify/require"
2220
)
2321

24-
func TestDealRetrieval(t *testing.T) {
22+
func TestDealRetrievalFull(t *testing.T) {
2523
ctx := context.Background()
2624
log := framework.Log
2725

@@ -114,62 +112,182 @@ func TestDealRetrieval(t *testing.T) {
114112
// Deal is stored and sealed, attempt different retrieval forms
115113

116114
retrievalCases := []struct {
117-
name string
118-
selector datamodel.Node
119-
matcherFrom, matcherTo int64
120-
expectCids []cid.Cid
115+
name string
116+
expectCids []cid.Cid
121117
}{
122118
{
123119
name: "full file, explore-all",
124-
selector: unixfsnode.UnixFSPathSelectorBuilder("", unixfsnode.ExploreAllRecursivelySelector, false),
125120
expectCids: append([]cid.Cid{root}, leaves...),
126121
},
122+
}
123+
124+
for _, tc := range retrievalCases {
125+
t.Run(tc.name, func(t *testing.T) {
126+
log.Debugw("deal is sealed, starting retrieval", "cid", dealCid.String(), "root", root)
127+
outPath := f.Retrieve(ctx, t, tempdir, root, res.DealParams.ClientDealProposal.Proposal.PieceCID, false, nil)
128+
129+
// Inspect what we got
130+
gotCids, err := testutil.CidsInCar(outPath)
131+
require.NoError(t, err)
132+
133+
toStr := func(c []cid.Cid) []string {
134+
// for nicer debugging given that we know the CIDs we expect
135+
out := make([]string, len(c))
136+
for i, v := range c {
137+
out[i] = v.String()
138+
}
139+
return out
140+
}
141+
142+
require.Equal(t, toStr(tc.expectCids), toStr(gotCids))
143+
})
144+
}
145+
}
146+
147+
func TestDealRetrievalSelector(t *testing.T) {
148+
ctx := context.Background()
149+
log := framework.Log
150+
151+
kit.QuietMiningLogs()
152+
framework.SetLogLevel()
153+
var opts []framework.FrameworkOpts
154+
opts = append(opts, framework.EnableLegacyDeals(true))
155+
opts = append(opts, framework.WithMaxStagingDealsBytes(10000000))
156+
f := framework.NewTestFramework(ctx, t, opts...)
157+
err := f.Start()
158+
require.NoError(t, err)
159+
defer f.Stop()
160+
161+
err = f.AddClientProviderBalance(abi.NewTokenAmount(1e15))
162+
require.NoError(t, err)
163+
164+
// Create a CAR file
165+
tempdir := t.TempDir()
166+
log.Debugw("using tempdir", "dir", tempdir)
167+
rseed := 0
168+
size := 7 << 20 // 7MiB file
169+
170+
inPath, dirEnt := testutil.CreateRandomUnixfsFileInCar(t, tempdir, rseed, size)
171+
root := dirEnt.Root
172+
leaves := dirEnt.SelfCids[:len(dirEnt.SelfCids)-1]
173+
/*
174+
175+
For a 7MiB file with seed 0, we expect to have this structure which we
176+
can perform range selections on. The root is dirEnt.Root, the raw leaf
177+
blocks are dirEnt.SelfCid, in order, minus the last one which is also
178+
the root.
179+
180+
bafybeiet25r42mzboo5osbxmze5gq45zb4peqksscavjb4ixycwjkbwioa | File | /[0:7340031] (7340032 B)
181+
bafkreifrdfke6yoyrjhhqbwkddacapg42vuzcbvwyau6ol24fbjxgfrsha | RawLeaf | ↳ /0[0:256143] (256144 B)
182+
bafkreigmdnzqhuaaqrkzhwo2cqa7heshji5neoygkqku2vrubuvzz4twti | RawLeaf | /0[256144:512287] (256144 B)
183+
bafkreidoafwiruc3tqk4fsvql6jfjhsi36pvmr334qwvfjzupkjnws2c7a | RawLeaf | /0[512288:768431] (256144 B)
184+
bafkreibcmiojncftk5kbjo4xdv4onlxacg6dfi3d3objfl4y7dqhld4a3e | RawLeaf | /0[768432:1024575] (256144 B)
185+
bafkreidpvdovcyfj4ypodcw47xgodpkwlq7yokmofzpxto5v3fjcwtaerm | RawLeaf | /0[1024576:1280719] (256144 B)
186+
bafkreicm6tt6ahmimqwuoxuc7m2jdlmlexiofxmsigfsvi4nsuda45kfpu | RawLeaf | /0[1280720:1536863] (256144 B)
187+
bafkreibnq24344buagftasgfpeomzjf6bbnhku4sw4vv3lnisx7wmvv7de | RawLeaf | /0[1536864:1793007] (256144 B)
188+
bafkreieeqrvyz7z3ezshaqlp24zd5jfnmlzb2gnsuie3rltyhxlyb3f46m | RawLeaf | /0[1793008:2049151] (256144 B)
189+
bafkreiaee3232qc3f3dsv5hezroy27va3cmcf35evzkw426liggu4qqguq | RawLeaf | /0[2049152:2305295] (256144 B)
190+
bafkreiccfzitpdvr3d2tyo2ly6e3qjqcc6vmnr4jfir3ys3zxsvaviaqmy | RawLeaf | /0[2305296:2561439] (256144 B)
191+
bafkreiek37qlpud6koj4jybkrwudic7bvdkraion37xk2x7hxmwyrqxzdi | RawLeaf | /0[2561440:2817583] (256144 B)
192+
bafkreifdib756bpqzucggrqp3tbv3c2mvf3kl6ir5erscbsmxt35lv3qf4 | RawLeaf | /0[2817584:3073727] (256144 B)
193+
bafkreiaflhrfx65ukovmuacvktlopj3j5d6iacvmxgi5vyyelqe77laxda | RawLeaf | /0[3073728:3329871] (256144 B)
194+
bafkreia43b3mtjeo5ycrur5dmj72wpktnt5r2tt6u26djl3syuwt2wirmq | RawLeaf | /0[3329872:3586015] (256144 B)
195+
bafkreic5vfpokxgadhzrx5s2yjoqtif6px6hlkqndvgscd3kgxf22omogy | RawLeaf | /0[3586016:3842159] (256144 B)
196+
bafkreibejeisigfddgxjq3gqirbsjcaikpm5ukp6hyelcdarim3mw4gusm | RawLeaf | /0[3842160:4098303] (256144 B)
197+
bafkreibua7gdtdndlwdpntzdzoleomfy4cuawbou2ibqcwdiqcd5c2cktq | RawLeaf | /0[4098304:4354447] (256144 B)
198+
bafkreihce3ojxvomz2afkl4sr67qlje3vvxqcnuugb2mekjocuf2m3axh4 | RawLeaf | /0[4354448:4610591] (256144 B)
199+
bafkreih6gxdebrtqukp7dgpz6uq4mcljkk42aont4f2fmu7yw3qvst5s44 | RawLeaf | /0[4610592:4866735] (256144 B)
200+
bafkreihsyox3ebuboypzrzdnja7mypcq7lugd7yajnyxswaphoqrfj3mvi | RawLeaf | /0[4866736:5122879] (256144 B)
201+
bafkreihqf3wqz5tv3vqlk7s2no7hchw2327ptwowfak773uvddarif2lzi | RawLeaf | /0[5122880:5379023] (256144 B)
202+
bafkreig6hrykcrosz7jwljalgb2bhdh3r2e43gatvy2q3zn7nbck77dnou | RawLeaf | /0[5379024:5635167] (256144 B)
203+
bafkreihblmdcjlmwp5p4esqn6e2h6ko5oytxilpb3msosjjdw5eaarakye | RawLeaf | /0[5635168:5891311] (256144 B)
204+
bafkreihfmufz2fss7oqxqg2gsz4ow5l7i3byhzuqmxev73bu5fi4vdklc4 | RawLeaf | /0[5891312:6147455] (256144 B)
205+
bafkreid3smar6sdcmi7io6e3ewdv3b3gdcyq7yrdznounhsrkswjdmptoa | RawLeaf | /0[6147456:6403599] (256144 B)
206+
bafkreif54hyudjfodmtdphrhass4rxrrle36xvzj5osfcuue52ck4i7pr4 | RawLeaf | /0[6403600:6659743] (256144 B)
207+
bafkreideyfbj2ljnows5gxnsibvpziyhr26azpae6ilesnhhaissbx5ori | RawLeaf | /0[6659744:6915887] (256144 B)
208+
bafkreighy3cp6pvp3pluq4ragvgrycom4s5upargqkawcyu3rw4flturky | RawLeaf | /0[6915888:7172031] (256144 B)
209+
bafkreifokzy5zcluf3hj23nkrvr7tx6sivpshkd4be5tpfibk6vm2mzlxy | RawLeaf | /0[7172032:7340031] (168000 B)
210+
*/
211+
212+
// Start a web server to serve the car files
213+
log.Debug("starting webserver")
214+
server, err := testutil.HttpTestFileServer(t, tempdir)
215+
require.NoError(t, err)
216+
defer server.Close()
217+
218+
// Create a new dummy deal
219+
log.Debug("creating dummy deal")
220+
dealUuid := uuid.New()
221+
222+
// Make a deal
223+
res, err := f.MakeDummyDeal(dealUuid, inPath, root, server.URL+"/"+filepath.Base(inPath), false)
224+
require.NoError(t, err)
225+
require.True(t, res.Result.Accepted)
226+
log.Debugw("got response from MarketDummyDeal", "res", spew.Sdump(res))
227+
dealCid, err := res.DealParams.ClientDealProposal.Proposal.Cid()
228+
require.NoError(t, err)
229+
230+
time.Sleep(2 * time.Second)
231+
232+
log.Debugw("got deal proposal cid", "cid", dealCid.String())
233+
234+
err = f.WaitForDealAddedToSector(res.DealParams.DealUUID)
235+
require.NoError(t, err)
236+
237+
// Deal is stored and sealed, attempt different retrieval forms
238+
239+
retrievalCases := []struct {
240+
name string
241+
selector datamodel.Node
242+
matcherFrom, matcherTo int64
243+
expectCids []cid.Cid
244+
}{
127245
{
128246
name: "slice: 0 to 7MiB",
129247
matcherFrom: 0,
130248
matcherTo: 7 << 20,
131249
expectCids: append([]cid.Cid{root}, leaves...),
132250
},
133-
{
134-
name: "slice: 1MiB to 2MiB",
135-
matcherFrom: 1 << 20,
136-
matcherTo: 2 << 20,
137-
expectCids: append([]cid.Cid{root}, leaves[4:9]...),
138-
},
139-
{
140-
name: "slice: first byte",
141-
matcherFrom: 0,
142-
matcherTo: 1,
143-
expectCids: append([]cid.Cid{root}, leaves[0]),
144-
},
145-
{
146-
name: "slice: last byte",
147-
matcherFrom: 7340031,
148-
matcherTo: 7340032,
149-
expectCids: append([]cid.Cid{root}, leaves[len(leaves)-1]),
150-
},
151-
{
152-
name: "slice: last two blocks, negative range, boundary",
153-
matcherFrom: -168000 - 1,
154-
matcherTo: math.MaxInt64,
155-
expectCids: append([]cid.Cid{root}, leaves[len(leaves)-2:]...),
156-
},
157-
{
158-
name: "slice: last block, negative range, boundary",
159-
matcherFrom: -168000,
160-
matcherTo: math.MaxInt64,
161-
expectCids: append([]cid.Cid{root}, leaves[len(leaves)-1]),
162-
},
163-
{
164-
// In this case we are attempting to traverse beyond the file to a
165-
// path that doesn't exist; we expect to only match the root and
166-
// return that. This is not strictly an error case, it's up to the
167-
// consumer of this data to verify the path doesn't resolve in the
168-
// data they get back.
169-
name: "path beyond file",
170-
selector: unixfsnode.UnixFSPathSelectorBuilder("not/a/path", unixfsnode.ExploreAllRecursivelySelector, false),
171-
expectCids: []cid.Cid{root},
172-
},
251+
//{
252+
//name: "slice: 1MiB to 2MiB",
253+
//matcherFrom: 1 << 20,
254+
//matcherTo: 2 << 20,
255+
//expectCids: append([]cid.Cid{root}, leaves[4:9]...),
256+
//},
257+
//{
258+
//name: "slice: first byte",
259+
//matcherFrom: 0,
260+
//matcherTo: 1,
261+
//expectCids: append([]cid.Cid{root}, leaves[0]),
262+
//},
263+
//{
264+
//name: "slice: last byte",
265+
//matcherFrom: 7340031,
266+
//matcherTo: 7340032,
267+
//expectCids: append([]cid.Cid{root}, leaves[len(leaves)-1]),
268+
//},
269+
//{
270+
//name: "slice: last two blocks, negative range, boundary",
271+
//matcherFrom: -168000 - 1,
272+
//matcherTo: math.MaxInt64,
273+
//expectCids: append([]cid.Cid{root}, leaves[len(leaves)-2:]...),
274+
//},
275+
//{
276+
//name: "slice: last block, negative range, boundary",
277+
//matcherFrom: -168000,
278+
//matcherTo: math.MaxInt64,
279+
//expectCids: append([]cid.Cid{root}, leaves[len(leaves)-1]),
280+
//},
281+
//{
282+
//// In this case we are attempting to traverse beyond the file to a
283+
//// path that doesn't exist; we expect to only match the root and
284+
//// return that. This is not strictly an error case, it's up to the
285+
//// consumer of this data to verify the path doesn't resolve in the
286+
//// data they get back.
287+
//name: "path beyond file",
288+
//selector: unixfsnode.UnixFSPathSelectorBuilder("not/a/path", unixfsnode.ExploreAllRecursivelySelector, false),
289+
//expectCids: []cid.Cid{root},
290+
//},
173291
}
174292

175293
for _, tc := range retrievalCases {

0 commit comments

Comments
 (0)