From 1504fb01fed507965ee03c0b1b995d4b3d1e4bd6 Mon Sep 17 00:00:00 2001 From: Eric Guan Date: Wed, 24 Jan 2024 11:12:56 -0800 Subject: [PATCH] test: add test for range request on multi block CAR (#55) * test: add test for range request on multi block CAR * fix: use proper range requested CAR file * fix: test command --- package.json | 2 +- test/car.spec.js | 17 +++++++++++++++++ test/fixtures/multi_block.car | Bin 0 -> 1496 bytes test/fixtures/multi_block_filtered.car | Bin 0 -> 748 bytes 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/multi_block.car create mode 100644 test/fixtures/multi_block_filtered.car diff --git a/package.json b/package.json index ee20e1f..ce2c58a 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "main": "src/index.js", "type": "module", "scripts": { - "test": "NODE_ENV=development TESTING=true node --test test/", + "test": "NODE_ENV=development TESTING=true node --test test/*", "build": "webpack --mode production", "prepack": "npm run build" }, diff --git a/test/car.spec.js b/test/car.spec.js index b1305c9..36217c8 100644 --- a/test/car.spec.js +++ b/test/car.spec.js @@ -79,6 +79,23 @@ describe('CAR Verification', () => { assert.strictEqual(actualContent, expectedContent) }) + it('should extract content from a valid multi block CAR with a range', async () => { + const cidPath = 'QmStvUMCtXxEb8wRjNSUqWwqHBEDhmnEd5nHp5siV7bm1Z' + const filepath = getFixturePath('multi_block_filtered.car') + const carStream = fs.createReadStream(filepath) + + const contentItr = await extractVerifiedContent(cidPath, carStream, { rangeStart: 300, rangeEnd: 349 }) + const buffer = await concatChunks(contentItr) + const actualContent = Buffer.from(buffer).toString('base64') + + // To get this value: + // $ mkdir -p outdir && car x -f multi_block.car outdir + // $ dd status=none if=outdir/unknown of=/dev/stdout bs=1 skip=300 count=50 | base64 + const expectedContent = 'Dubn28NGm5/ycJu4PqXEFrgvN0ys0yAwhuYjl2TV23ruEcDazo4LAzZSKF3JeNfCNgg=' + + assert.strictEqual(actualContent, expectedContent) + }) + it('should verify intermediate path segments', async () => { const cidPath = 'bafybeigeqgfwhivuuxgmuvcrrwvs4j3yfzgljssvnuqzokm6uby4fpmwsa/subdir/hello.txt' diff --git a/test/fixtures/multi_block.car b/test/fixtures/multi_block.car new file mode 100644 index 0000000000000000000000000000000000000000..b3e5d0c999c30e5c7a79bbecc499a8ce89c05dee GIT binary patch literal 1496 zcmcCmlv`Vjw>tZd7ctqL` zq?e@@6=&w>F+OA@tXN2sOG!wN7kq{y8>> zYlRSlL^l&e=~de#!`qXyoQzsIpZwze^y;w}TTB7l|KI5!=f;*r6`nv+TE3m-P17^0 zWxqeCCoaF8wp!)Vx=$?GTV6XIe2~QYgQE^fDNn7JgoO9a>AUhTFsQLu(j&g(6_3T!I`-5)B**4NP#fmWir{7P0=yWg_-;E%jL6HZB9 z7wzIs;S&3UNOA)@eo@7hGAo@chKQx}z4v#55x zl}kGPLOIw$^I+$TmVc|f5|6xR_xZf*74yN0HXXT3E}WN^9@V^=yXEm`g)Y5)fh<3^ zFYc8o}O~`cGWw<1GmogaWk6*X~dqaxPHit z!%#0}$t*LKv!@iK>?HOHKe@enYRSH<;@>LrT=t$f{g>~wvXW{2Bk9<%FC}wUcS^pM zJ14?cnqy(Mdh3+RC*ftXGvzzGmquTgD=>I3eNIpHcF5**{uaeo{ng3!FN4oMvE1OU zQ!~wLHd|24#`et(%oWDGdo8V)4bvj+bDy<#D(|b}yVvd=XW8A&Z1(5(Lm}CaGIPGY zk}Y}iAzyyU?Q=hr`Vbmigc30aTR? z23K0o#>NKuuDvJqjKnTBaz(JdHva5i>c!Y?pyesEbCs0xZkD*0%e_Ua>y)Q|IZ5)~Qz>u*F#c7>$jCXu}ZBA2R1+YD4i2@PMA?x1R;qUW3=1xew`Z!JTcmv1rP_Qy zB*km0mQ9F^lksKFP>fa^TUUpe_HJ?&Oa0|Tj|2n$SF0!dIGnUrRwjh zPZ3|HN`6gHD^Ciu47cRXZ?m6Q+{IOVWF~9VhsI1Fjzy+TOp34FA7o7Uopr4#XY=p4 z1J1AF&ilsa#;P>rJaF5}C7R&--axbC^=qOR`%kW@zqCyX_`$tGXB`fUSF@PnOuL5 zGy47M!@r9k%f2`>b<^KZZm%6B-@J^9@LT70C9F&EH1E`{dtz4?dS05{d^4d97+e7R CthZVK literal 0 HcmV?d00001 diff --git a/test/fixtures/multi_block_filtered.car b/test/fixtures/multi_block_filtered.car new file mode 100644 index 0000000000000000000000000000000000000000..1e4e9467b755c381d060a5ab1401575d3eeeafca GIT binary patch literal 748 zcmd;Dm|m7zRGgWg$HagJjG=sQs7xJ{wpf%}l%HQx+;~GPLYYBG!FjWWRPOCbKkQdr z9tHG0oq!T);M z%-b3-`^~(x)Mt2J{Bvv$*9sv9iEbu{(yO*fhPNkYIT^KbKKaG_>D6N|wwMC8|G(2e z&W$aLDm;Otw0t|uo2F-0%YJ`OPh5UGZMDj!b)Q(Wx4d>b_#lb(2S*)}Ql45b2?_6; z(|6@xU{GVR%2}d6OC&Gp%z;(8v+W9m3Pr$5xdb_wBpNsr8kpc{Et8M}As2CVFmW&m zH88p7+%UPi`{bGq|Bd@k%~!}d=(WziZrbc8vA1nh^!ztW`;(OZ@am!!7x%?oD&l+g z{PtnD+4DaY%-&(Q^oZCFeRH2RmlX`!o+(dHxq7?mo#266=lZyr&4M&yPgYz%WX55r zm$GD*nabHy3Q~3w`-Gp|UOlyB-&OH%6?rau&zt_scUoD=wEmHFY}l8QIjcJ*-^!g6 zVJpqCFk8KKO68OAGTE8(o!v{Luget}yq7+wr+PbNb2@*E;;a7ZzvTA0A4+{F(ZJNm!3a!bLePW;Vru|#0F+NCVOc`e5eje_kikFz0Bsy3@c;k- literal 0 HcmV?d00001