From 4539a41dad01886f6a0353f103f99cf6f544fe8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jimmy=20W=C3=A4rting?= Date: Tue, 28 Aug 2018 19:34:08 +0200 Subject: [PATCH] modernize test files --- index.js | 24 +++++---- test/basic.js | 25 +++++---- test/fetch.js | 143 ++++++++++++++++++++++++++++---------------------- 3 files changed, 109 insertions(+), 83 deletions(-) diff --git a/index.js b/index.js index ce938e6..faac34b 100644 --- a/index.js +++ b/index.js @@ -4,9 +4,9 @@ const BitField = require('bitfield') const debug = require('debug')('ut_metadata') const sha1 = require('simple-sha1') -const MAX_METADATA_SIZE = 10000000 // 10MB -const BITFIELD_GROW = 1000 -const PIECE_LENGTH = 16 * 1024 +const MAX_METADATA_SIZE = 1E7 // 10 MB +const BITFIELD_GROW = 1E3 +const PIECE_LENGTH = 1 << 14 // 16 KiB module.exports = metadata => { class utMetadata extends EventEmitter { @@ -15,14 +15,15 @@ module.exports = metadata => { this._wire = wire + this._fetching = false this._metadataComplete = false this._metadataSize = null - this._remainingRejects = null // how many reject messages to tolerate before quitting - this._fetching = false + // how many reject messages to tolerate before quitting + this._remainingRejects = null - // The largest .torrent file that I know of is ~1-2MB, which is ~100 pieces. - // Therefore, cap the bitfield to 10x that (1000 pieces) so a malicious peer can't - // make it grow to fill all memory. + // The largest torrent file that I know of is ~1-2MB, which is ~100 + // pieces. Therefore, cap the bitfield to 10x that (1000 pieces) so a + // malicious peer can't make it grow to fill all memory. this._bitfield = new BitField(0, { grow: BITFIELD_GROW }) if (Buffer.isBuffer(metadata)) { @@ -134,7 +135,9 @@ module.exports = metadata => { this._metadataSize = this.metadata.length this._wire.extendedHandshake.metadata_size = this._metadataSize - this.emit('metadata', bencode.encode({ info: bencode.decode(this.metadata) })) + this.emit('metadata', bencode.encode({ + info: bencode.decode(this.metadata) + })) return true } @@ -188,7 +191,8 @@ module.exports = metadata => { _onReject (piece) { if (this._remainingRejects > 0 && this._fetching) { - // If we haven't been rejected too much, then try to request the piece again + // If we haven't been rejected too much, + // then try to request the piece again this._request(piece) this._remainingRejects -= 1 } else { diff --git a/test/basic.js b/test/basic.js index 68bd0e0..cd4d176 100644 --- a/test/basic.js +++ b/test/basic.js @@ -1,11 +1,11 @@ -var bencode = require('bencode') -var fixtures = require('webtorrent-fixtures') -var Protocol = require('bittorrent-protocol') -var test = require('tape') -var utMetadata = require('../') +const { leavesMetadata } = require('webtorrent-fixtures') +const bencode = require('bencode') +const Protocol = require('bittorrent-protocol') +const test = require('tape') +const utMetadata = require('../') -test('wire.use(utMetadata())', function (t) { - var wire = new Protocol() +test('wire.use(utMetadata())', t => { + const wire = new Protocol() wire.pipe(wire) wire.use(utMetadata()) @@ -17,15 +17,18 @@ test('wire.use(utMetadata())', function (t) { t.end() }) -test('wire.use(utMetadata(metadata))', function (t) { - var wire = new Protocol() +test('wire.use(utMetadata(metadata))', t => { + const wire = new Protocol() wire.pipe(wire) - wire.use(utMetadata(fixtures.leavesMetadata.torrent)) + wire.use(utMetadata(leavesMetadata.torrent)) t.ok(wire.ut_metadata) t.ok(wire.ut_metadata.fetch) t.ok(wire.ut_metadata.cancel) - t.equal(wire.ut_metadata.metadata.toString('hex'), bencode.encode(bencode.decode(fixtures.leavesMetadata.torrent).info).toString('hex')) + t.equal( + wire.ut_metadata.metadata.toString('hex'), + bencode.encode(bencode.decode(leavesMetadata.torrent).info).toString('hex') + ) t.end() }) diff --git a/test/fetch.js b/test/fetch.js index 302a9a3..e9664c2 100644 --- a/test/fetch.js +++ b/test/fetch.js @@ -1,34 +1,39 @@ -var bencode = require('bencode') -var fixtures = require('webtorrent-fixtures') -var Protocol = require('bittorrent-protocol') -var test = require('tape') -var utMetadata = require('../') +const { leavesMetadata, sintel } = require('webtorrent-fixtures') +const bencode = require('bencode') +const Protocol = require('bittorrent-protocol') +const test = require('tape') +const utMetadata = require('../') -var id1 = Buffer.from('01234567890123456789') -var id2 = Buffer.from('12345678901234567890') +const id1 = Buffer.from('01234567890123456789') +const id2 = Buffer.from('12345678901234567890') -test('fetch()', function (t) { +test('fetch()', t => { t.plan(3) - var wire1 = new Protocol() - var wire2 = new Protocol() + const wire1 = new Protocol() + const wire2 = new Protocol() wire1.pipe(wire2).pipe(wire1) - wire1.use(utMetadata(fixtures.leavesMetadata.torrent)) // wire1 already has metadata + wire1.use(utMetadata(leavesMetadata.torrent)) // wire1 already has metadata wire2.use(utMetadata()) // wire2 does not wire2.ut_metadata.fetch() - wire2.ut_metadata.on('metadata', function (_metadata) { + wire2.ut_metadata.on('metadata', _metadata => { // got metadata! - t.equal(_metadata.toString('hex'), bencode.encode({ info: bencode.decode(fixtures.leavesMetadata.torrent).info }).toString('hex')) + t.equal( + _metadata.toString('hex'), + bencode.encode({ + info: bencode.decode(leavesMetadata.torrent).info + }).toString('hex') + ) }) - wire2.on('handshake', function (infoHash, peerId, extensions) { - wire2.handshake(fixtures.leavesMetadata.parsedTorrent.infoHash, id2) + wire2.on('handshake', (infoHash, peerId, extensions) => { + wire2.handshake(leavesMetadata.parsedTorrent.infoHash, id2) }) - wire2.on('extended', function (ext) { + wire2.on('extended', ext => { if (ext === 'handshake') { t.pass('got extended handshake') } else if (ext === 'ut_metadata') { @@ -41,14 +46,14 @@ test('fetch()', function (t) { } }) - wire1.handshake(fixtures.leavesMetadata.parsedTorrent.infoHash, id1) + wire1.handshake(leavesMetadata.parsedTorrent.infoHash, id1) }) -test('fetch() from peer without metadata', function (t) { +test('fetch() from peer without metadata', t => { t.plan(2) - var wire1 = new Protocol() - var wire2 = new Protocol() + const wire1 = new Protocol() + const wire2 = new Protocol() wire1.pipe(wire2).pipe(wire1) wire1.use(utMetadata()) // neither wire has metadata @@ -56,25 +61,25 @@ test('fetch() from peer without metadata', function (t) { wire2.ut_metadata.fetch() - wire2.ut_metadata.on('metadata', function () { + wire2.ut_metadata.on('metadata', () => { t.fail('No "metadata" event should fire') }) - wire1.ut_metadata.onMessage = function () { + wire1.ut_metadata.onMessage = () => { t.fail('No messages should be sent to wire1') - // No messages should be sent because wire1 never sent metadata_size in the - // extended handshake, so he doesn't have metadata + // No messages should be sent because wire1 never sent metadata_size + // in the extended handshake, so he doesn't have metadata } - wire2.ut_metadata.on('warning', function () { + wire2.ut_metadata.on('warning', () => { t.pass('got warning about peer missing metadata') }) - wire2.on('handshake', function (infoHash, peerId, extensions) { - wire2.handshake(fixtures.leavesMetadata.parsedTorrent.infoHash, id2) + wire2.on('handshake', (infoHash, peerId, extensions) => { + wire2.handshake(leavesMetadata.parsedTorrent.infoHash, id2) }) - wire2.on('extended', function (ext) { + wire2.on('extended', ext => { if (ext === 'handshake') { t.pass('got extended handshake') } else if (ext === 'ut_metadata') { @@ -84,36 +89,44 @@ test('fetch() from peer without metadata', function (t) { } }) - wire1.handshake(fixtures.leavesMetadata.parsedTorrent.infoHash, id1) + wire1.handshake(leavesMetadata.parsedTorrent.infoHash, id1) }) -test('fetch when peer gets metadata later (setMetadata)', function (t) { +test('fetch when peer gets metadata later (setMetadata)', t => { t.plan(3) - var wire1 = new Protocol() - var wire2 = new Protocol() + const wire1 = new Protocol() + const wire2 = new Protocol() + wire1.pipe(wire2).pipe(wire1) wire1.use(utMetadata()) // wire1 starts without metadata - process.nextTick(function () { - wire1.ut_metadata.setMetadata(fixtures.leavesMetadata.torrent) // wire1 gets metadata later + process.nextTick(() => { + // wire1 gets metadata later + wire1.ut_metadata.setMetadata(leavesMetadata.torrent) - process.nextTick(function () { - // wire2 does not start with metadata, but connects to wire1 after it gets metadata + process.nextTick(() => { + // wire2 does not start with metadata, + // but connects to wire1 after it gets metadata wire2.use(utMetadata()) wire2.ut_metadata.fetch() - wire2.ut_metadata.on('metadata', function (_metadata) { + wire2.ut_metadata.on('metadata', _metadata => { // got metadata! - t.equal(_metadata.toString('hex'), bencode.encode({ info: bencode.decode(fixtures.leavesMetadata.torrent).info }).toString('hex')) + t.equal( + _metadata.toString('hex'), + bencode.encode({ + info: bencode.decode(leavesMetadata.torrent).info + }).toString('hex') + ) }) - wire2.on('handshake', function (infoHash, peerId, extensions) { - wire2.handshake(fixtures.leavesMetadata.parsedTorrent.infoHash, id2) + wire2.on('handshake', (infoHash, peerId, extensions) => { + wire2.handshake(leavesMetadata.parsedTorrent.infoHash, id2) }) - wire2.on('extended', function (ext) { + wire2.on('extended', ext => { if (ext === 'handshake') { t.pass('got extended handshake') } else if (ext === 'ut_metadata') { @@ -126,37 +139,43 @@ test('fetch when peer gets metadata later (setMetadata)', function (t) { } }) - wire1.handshake(fixtures.leavesMetadata.parsedTorrent.infoHash, id1) + wire1.handshake(leavesMetadata.parsedTorrent.infoHash, id1) }) }) }) -test('fetch() large torrent', function (t) { +test('fetch() large torrent', t => { t.plan(4) - var wire1 = new Protocol() - var wire2 = new Protocol() + const wire1 = new Protocol() + const wire2 = new Protocol() wire1.pipe(wire2).pipe(wire1) - wire1.use(utMetadata(fixtures.sintel.torrent)) // wire1 already has metadata + wire1.use(utMetadata(sintel.torrent)) // wire1 already has metadata wire2.use(utMetadata()) // wire2 does not wire2.ut_metadata.fetch() - wire2.ut_metadata.on('metadata', function (_metadata) { + wire2.ut_metadata.on('metadata', _metadata => { // got metadata! - t.equal(_metadata.toString('hex'), bencode.encode({ info: bencode.decode(fixtures.sintel.torrent).info }).toString('hex')) + t.equal( + _metadata.toString('hex'), + bencode.encode({ + info: bencode.decode(sintel.torrent).info + }).toString('hex') + ) }) - wire2.on('handshake', function (infoHash, peerId, extensions) { - wire2.handshake(fixtures.sintel.parsedTorrent.infoHash, id2) + wire2.on('handshake', (infoHash, peerId, extensions) => { + wire2.handshake(sintel.parsedTorrent.infoHash, id2) }) - wire2.on('extended', function (ext) { + wire2.on('extended', 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 sintel metadata + // note: this should get called twice, + // once for each block of the sintel metadata t.pass('got extended ut_metadata message') // this is emitted for consistency's sake, but it's ignored @@ -167,17 +186,17 @@ test('fetch() large torrent', function (t) { } }) - wire1.handshake(fixtures.sintel.parsedTorrent.infoHash, id1) + wire1.handshake(sintel.parsedTorrent.infoHash, id1) }) -test('discard invalid metadata', function (t) { +test('discard invalid metadata', t => { t.plan(1) - var wire1 = new Protocol() - var wire2 = new Protocol() + const wire1 = new Protocol() + const wire2 = new Protocol() wire1.pipe(wire2).pipe(wire1) - var invalidMetadata = fixtures.leavesMetadata.torrent.slice(0) + const invalidMetadata = leavesMetadata.torrent.slice(0) invalidMetadata[55] = 65 // mess up a byte in the info block wire1.use(utMetadata(invalidMetadata)) @@ -185,17 +204,17 @@ test('discard invalid metadata', function (t) { wire2.ut_metadata.fetch() - wire2.ut_metadata.on('metadata', function () { + wire2.ut_metadata.on('metadata', () => { t.fail('No "metadata" event should fire') }) - wire2.ut_metadata.on('warning', function () { + wire2.ut_metadata.on('warning', () => { t.pass('got warning because peer sent reject too much') }) - wire2.on('handshake', function (infoHash, peerId, extensions) { - wire2.handshake(fixtures.leavesMetadata.parsedTorrent.infoHash, id2) + wire2.on('handshake', (infoHash, peerId, extensions) => { + wire2.handshake(leavesMetadata.parsedTorrent.infoHash, id2) }) - wire1.handshake(fixtures.leavesMetadata.parsedTorrent.infoHash, id1) + wire1.handshake(leavesMetadata.parsedTorrent.infoHash, id1) })