retrieval: Test non-matching path traversal

This commit is contained in:
Łukasz Magiera 2021-11-29 20:52:55 +01:00
parent 61791b90ea
commit 227188e908

View File

@ -29,6 +29,7 @@ var (
sourceCar = "../build/genesis/mainnet.car" sourceCar = "../build/genesis/mainnet.car"
carRoot, _ = cid.Parse("bafy2bzacecnamqgqmifpluoeldx7zzglxcljo6oja4vrmtj7432rphldpdmm2") carRoot, _ = cid.Parse("bafy2bzacecnamqgqmifpluoeldx7zzglxcljo6oja4vrmtj7432rphldpdmm2")
carCommp, _ = cid.Parse("baga6ea4seaqmrivgzei3fmx5qxtppwankmtou6zvigyjaveu3z2zzwhysgzuina") carCommp, _ = cid.Parse("baga6ea4seaqmrivgzei3fmx5qxtppwankmtou6zvigyjaveu3z2zzwhysgzuina")
selectedCid, _ = cid.Parse("bafkqaetgnfwc6mjpon2g64tbm5sxa33xmvza")
carPieceSize = abi.PaddedPieceSize(2097152) carPieceSize = abi.PaddedPieceSize(2097152)
textSelector = api.Selector("8/1/8/1/0/1/0") textSelector = api.Selector("8/1/8/1/0/1/0")
textSelectorNonLink = api.Selector("8/1/8/1/0/1") textSelectorNonLink = api.Selector("8/1/8/1/0/1")
@ -54,6 +55,7 @@ func TestPartialRetrieval(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
// first test retrieval from local car, then do an actual deal // first test retrieval from local car, then do an actual deal
for _, matchPath := range []bool{false, true} {
for _, fullCycle := range []bool{false, true} { for _, fullCycle := range []bool{false, true} {
var retOrder api.RetrievalOrder var retOrder api.RetrievalOrder
@ -96,7 +98,7 @@ func TestPartialRetrieval(t *testing.T) {
retOrder.DataSelector = &textSelector retOrder.DataSelector = &textSelector
eref.DAGs = append(eref.DAGs, api.DagSpec{ eref.DAGs = append(eref.DAGs, api.DagSpec{
DataSelector: &textSelector, DataSelector: &textSelector,
MatchPath: true, MatchPath: matchPath,
}) })
eref.Root = carRoot eref.Root = carRoot
@ -127,6 +129,7 @@ func TestPartialRetrieval(t *testing.T) {
time.Sleep(time.Second) time.Sleep(time.Second)
} }
} }
}
// ensure non-existent paths fail // ensure non-existent paths fail
require.EqualError( require.EqualError(
@ -214,8 +217,10 @@ func testGenesisRetrieval(ctx context.Context, client *kit.TestFullNode, retOrde
if len(cr.Header.Roots) != 1 { if len(cr.Header.Roots) != 1 {
return fmt.Errorf("expected a single root in result car, got %d", len(cr.Header.Roots)) return fmt.Errorf("expected a single root in result car, got %d", len(cr.Header.Roots))
} else if cr.Header.Roots[0].String() != carRoot.String() { } else if eref.DAGs[0].MatchPath && cr.Header.Roots[0].String() != carRoot.String() {
return fmt.Errorf("expected root cid '%s', got '%s'", carRoot.String(), cr.Header.Roots[0].String()) return fmt.Errorf("expected root cid '%s', got '%s'", carRoot.String(), cr.Header.Roots[0].String())
} else if !eref.DAGs[0].MatchPath && cr.Header.Roots[0].String() != selectedCid.String() {
return fmt.Errorf("expected root cid '%s', got '%s'", selectedCid.String(), cr.Header.Roots[0].String())
} }
blks := make([]blocks.Block, 0) blks := make([]blocks.Block, 0)
@ -230,11 +235,11 @@ func testGenesisRetrieval(ctx context.Context, client *kit.TestFullNode, retOrde
blks = append(blks, b) blks = append(blks, b)
} }
if len(blks) != 3 { if (eref.DAGs[0].MatchPath && len(blks) != 3) || (!eref.DAGs[0].MatchPath && len(blks) != 1) {
return fmt.Errorf("expected a car file with 3 blocks, got one with %d instead", len(blks)) return fmt.Errorf("expected a car file with 3/1 blocks, got one with %d instead", len(blks))
} }
data = blks[2].RawData() data = blks[len(blks)-1].RawData()
} }
if string(data) != expectedResult { if string(data) != expectedResult {