From 1eef75b61e4649acec62d9a0cb868b708716f194 Mon Sep 17 00:00:00 2001 From: fisch0920 Date: Sun, 11 May 2014 01:53:46 -0400 Subject: [PATCH] added test case confirming support of multi-block metadata --- test/fetch.js | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/test/fetch.js b/test/fetch.js index 52e9217..2070239 100644 --- a/test/fetch.js +++ b/test/fetch.js @@ -8,6 +8,10 @@ var test = require('tape') // Used in multiple tests var metadata = fs.readFileSync(__dirname + '/torrents/leaves-magnet.torrent') var parsedTorrent = parseTorrent(metadata) + +var largeMetadata = fs.readFileSync(__dirname + '/torrents/ubuntu-12.04.4-alternate-amd64.iso.torrent') +var largeParsedTorrent = parseTorrent(largeMetadata) + var id1 = new Buffer('01234567890123456789') var id2 = new Buffer('12345678901234567890') @@ -91,6 +95,45 @@ test('fetch() from peer without metadata', function (t) { wire1.handshake(parsedTorrent.infoHash, id1) }) +test('fetch() large torrent', function (t) { + t.plan(4) + + var wire1 = new Protocol() + var wire2 = new Protocol() + wire1.pipe(wire2).pipe(wire1) + + wire1.use(ut_metadata(largeMetadata)) // wire1 already has metadata + wire2.use(ut_metadata()) // wire2 does not + + wire2.ut_metadata.fetch() + + wire2.ut_metadata.on('metadata', function (_metadata) { + // got metadata! + t.equal(_metadata.toString('hex'), bncode.encode({ info: bncode.decode(largeMetadata).info }).toString('hex')) + }) + + wire2.on('handshake', function (infoHash, peerId, extensions) { + wire2.handshake(largeParsedTorrent.infoHash, id2) + }) + + wire2.on('extended', function (ext) { + if (ext === 'handshake') { + t.pass('got extended handshake') + } else if (ext === 'ut_metadata') { + // note: this should get called twice, once for each block of the ubuntu metadata + t.pass('got extended ut_metadata message') + + // this is emitted for consistency's sake, but it's ignored + // by the user since the ut_metadata package handles the + // complexities internally + } else { + t.fail('unexpected handshake type') + } + }) + + wire1.handshake(largeParsedTorrent.infoHash, id1) +}) + test('discard invalid metadata', function (t) { t.plan(1) @@ -120,3 +163,4 @@ test('discard invalid metadata', function (t) { wire1.handshake(parsedTorrent.infoHash, id1) }) +