From fc1be3a9256744c68fe0c8efb80da4252be79141 Mon Sep 17 00:00:00 2001 From: David Dias Date: Thu, 1 Dec 2016 07:49:04 +0000 Subject: [PATCH] feat: update Ping to latests libp2p versions, fix tests, add more tests, update API --- package.json | 41 ++++++++++++------------ src/index.js | 53 ++++++++++++++++++------------ test/browser.js | 1 + test/node.js | 3 ++ test/ping.spec.js | 57 -------------------------------- test/test-ping.js | 82 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 138 insertions(+), 99 deletions(-) create mode 100644 test/browser.js create mode 100644 test/node.js delete mode 100644 test/ping.spec.js create mode 100644 test/test-ping.js diff --git a/package.json b/package.json index 01e4dac..5debd89 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,24 @@ { "name": "libp2p-ping", "version": "0.2.0", - "description": "Node.js IPFS Ping protocol implementation", - "main": "lib/index.js", - "jsnext:main": "src/index.js", + "description": "libp2p Ping protocol implementation", + "main": "src/index.js", "pre-commit": [ "lint", "test" ], "scripts": { - "test": "aegir-test --env node", + "test": "aegir-test", "lint": "aegir-lint", - "build": "aegir-build node", - "release": "aegir-release --env node", - "release-minor": "aegir-release --env node --type minor", - "release-major": "aegir-release --env node --type major", + "release": "aegir-release", + "release-minor": "aegir-release --type minor", + "release-major": "aegir-release --type major", "coverage": "aegir-coverage", "coverage-publish": "aegir-coverage publish" }, "repository": { "type": "git", - "url": "https://github.com/diasdavid/js-ipfs-ping.git" + "url": "https://github.com/libp2p/js-ipfs-ping.git" }, "keywords": [ "IPFS" @@ -28,25 +26,26 @@ "author": "David Dias ", "license": "MIT", "bugs": { - "url": "https://github.com/diasdavid/js-ipfs-ping/issues" + "url": "https://github.com/libp2p/js-ipfs-ping/issues" }, - "homepage": "https://github.com/diasdavid/js-ipfs-ping", + "homepage": "https://github.com/libp2p/js-ipfs-ping", "devDependencies": { - "aegir": "^9.1.1", + "aegir": "^9.1.2", + "async": "^2.1.4", "chai": "^3.5.0", - "debug": "^2.2.0", + "debug": "^2.3.3", "gulp": "^3.9.1", - "libp2p-swarm": "^0.26.0", - "libp2p-tcp": "^0.8.1", - "multiaddr": "^2.0.2", - "peer-id": "^0.7.0", - "peer-info": "^0.7.0", - "pre-commit": "^1.1.2", + "libp2p-swarm": "^0.26.3", + "libp2p-tcp": "^0.9.1", + "multiaddr": "^2.1.1", + "peer-id": "^0.8.0", + "peer-info": "^0.8.1", + "pre-commit": "^1.1.3", "run-parallel": "^1.1.6" }, "dependencies": { "pull-reader": "^1.2.8", - "pull-stream": "^3.4.5" + "pull-stream": "^3.5.0" }, "contributors": [ "David Dias ", @@ -55,4 +54,4 @@ "Richard Littauer ", "greenkeeperio-bot " ] -} \ No newline at end of file +} diff --git a/src/index.js b/src/index.js index e5511e2..07efe91 100644 --- a/src/index.js +++ b/src/index.js @@ -16,11 +16,8 @@ class Ping extends EventEmitter { this.cont = true log('dialing %s to %s', PROTOCOL, peer.id.toB58String()) - swarm.dial(peer, PROTOCOL, (err, conn) => { - if (err === true) { - return - } + swarm.dial(peer, PROTOCOL, (err, conn) => { if (err) { log.error(err) this.emit('error', err) @@ -28,17 +25,24 @@ class Ping extends EventEmitter { } let start = new Date() - let buf = new Buffer(PING_LENGTH) // buffer creation doesn't memset the buffer to 0 - const reader = Reader() + // buffer creation doesn't memset the buffer to 0 + let buf = new Buffer(PING_LENGTH) + let reader = Reader() - pull(pull.values([buf]), conn, reader) + pull( + pull.values([buf]), + conn, + reader) const gotBack = (err, bufBack) => { let end = new Date() if (err || !buf.equals(bufBack)) { - pull(pull.empty(), conn) + pull( + pull.empty(), + conn + ) this.emit('error', err || new Error('Received wrong ping ack')) return } @@ -46,7 +50,10 @@ class Ping extends EventEmitter { this.emit('ping', end - start) if (!this.cont) { - pull(pull.empty(), conn) + pull( + pull.empty(), + conn + ) } start = new Date() @@ -70,33 +77,37 @@ class Ping extends EventEmitter { } } -function attach (swarm) { - swarm.handle(PROTOCOL, (conn) => { +function mount (swarm) { + swarm.handle(PROTOCOL, (protocol, conn) => { const reader = Reader() - pull(conn, reader) + + pull( + conn, + reader + ) reader.read(PING_LENGTH, echo) function echo (err, buf) { - if (err === true) { - return - } - if (err) { - log.error(err) + return log.error(err) } - pull(pull.values([buf]), conn) + pull( + pull.values([buf]), + conn + ) + reader.read(PING_LENGTH, echo) } }) } -function detach (swarm) { +function unmount (swarm) { swarm.unhandle(PROTOCOL) } -Ping.attach = attach -Ping.detach = detach +Ping.mount = mount +Ping.unmount = unmount module.exports = Ping diff --git a/test/browser.js b/test/browser.js new file mode 100644 index 0000000..ccacec3 --- /dev/null +++ b/test/browser.js @@ -0,0 +1 @@ +'use strict' diff --git a/test/node.js b/test/node.js new file mode 100644 index 0000000..5539651 --- /dev/null +++ b/test/node.js @@ -0,0 +1,3 @@ +'use strict' + +require('./test-ping.js') diff --git a/test/ping.spec.js b/test/ping.spec.js deleted file mode 100644 index 7a5adde..0000000 --- a/test/ping.spec.js +++ /dev/null @@ -1,57 +0,0 @@ -/* eslint-env mocha */ -'use strict' - -const expect = require('chai').expect -const Peer = require('peer-info') -const Swarm = require('libp2p-swarm') -const TCP = require('libp2p-tcp') -const multiaddr = require('multiaddr') -const parallel = require('run-parallel') - -const Ping = require('./../src') - -let swarmA -let swarmB -let peerA -let peerB - -describe('ping', () => { - beforeEach((done) => { - peerA = new Peer() - peerB = new Peer() - - peerB.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/8101')) - - swarmA = new Swarm(peerA) - swarmB = new Swarm(peerB) - - swarmA.transport.add('tcp', new TCP()) - swarmB.transport.add('tcp', new TCP()) - - swarmB.transport.listen('tcp', {}, null, done) - }) - - afterEach((done) => { - parallel([ - (cb) => swarmA.close(cb), - (cb) => swarmB.close(cb) - ], done) - }) - - it('ECHO', (done) => { - Ping.attach(swarmB) - - var p = new Ping(swarmA, peerB) - - p.on('error', (err) => { - throw err - }) - - p.on('ping', (time) => { - expect(time).to.be.a('Number') - p.stop() - Ping.detach(swarmB) - done() - }) - }) -}) diff --git a/test/test-ping.js b/test/test-ping.js new file mode 100644 index 0000000..2a3412f --- /dev/null +++ b/test/test-ping.js @@ -0,0 +1,82 @@ +/* eslint-env mocha */ +'use strict' + +const expect = require('chai').expect +const PeerInfo = require('peer-info') +const Swarm = require('libp2p-swarm') +const TCP = require('libp2p-tcp') +const multiaddr = require('multiaddr') +const series = require('async/series') +const parallel = require('async/parallel') + +const Ping = require('./../src') + +describe('libp2p ping', () => { + let swarmA + let swarmB + let peerA + let peerB + + before((done) => { + series([ + (cb) => { + PeerInfo.create((err, peerInfo) => { + expect(err).to.not.exist + peerA = peerInfo + peerA.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/0')) + cb() + }) + }, + (cb) => { + PeerInfo.create((err, peerInfo) => { + expect(err).to.not.exist + peerB = peerInfo + peerB.multiaddr.add(multiaddr('/ip4/127.0.0.1/tcp/0')) + cb() + }) + }, + (cb) => { + swarmA = new Swarm(peerA) + swarmB = new Swarm(peerB) + swarmA.transport.add('tcp', new TCP()) + swarmB.transport.add('tcp', new TCP()) + cb() + }, + (cb) => swarmA.listen(cb), + (cb) => swarmB.listen(cb) + ], done) + }) + + after((done) => { + parallel([ + (cb) => swarmA.close(cb), + (cb) => swarmB.close(cb) + ], done) + }) + + it('mount ping protocol', () => { + Ping.mount(swarmA) + Ping.mount(swarmB) + }) + + it('ping once from peerA to peerB', (done) => { + const p = new Ping(swarmA, peerB) + + p.on('error', (err) => { + expect(err).to.not.exist + }) + + p.on('ping', (time) => { + expect(time).to.be.a('Number') + p.stop() + done() + }) + }) + + it.skip('ping 3 times from peerA to peerB', (done) => {}) + + it('unmount PING protocol', () => { + Ping.unmount(swarmA) + Ping.unmount(swarmB) + }) +})