diff --git a/.gitignore b/.gitignore index 123ae94..d36d47f 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,6 @@ build/Release # Dependency directory # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git node_modules + +lib +dist \ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..59a480e --- /dev/null +++ b/.npmignore @@ -0,0 +1,29 @@ +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules + +test \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 2bd8b0e..dd9e44e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,25 @@ sudo: false language: node_js node_js: - - "4.0" + - 4 + - 5 + - stable # Make sure we have new NPM. before_install: - npm install -g npm script: + - npm run lint - npm test + - npm run coverage + +addons: + firefox: 'latest' + +before_script: + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start + +after_success: + - npm run coverage-publish diff --git a/circle.yml b/circle.yml index 2dea02b..434211a 100644 --- a/circle.yml +++ b/circle.yml @@ -1,8 +1,12 @@ -dependencies: - pre: - # setup ipv6 - - sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=0 net.ipv6.conf.default.disable_ipv6=0 net.ipv6.conf.all.disable_ipv6=0 - machine: node: version: stable + +dependencies: + pre: + - google-chrome --version + - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - + - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' + - sudo apt-get update + - sudo apt-get --only-upgrade install google-chrome-stable + - google-chrome --version diff --git a/package.json b/package.json index 42b9cd9..1b4d7c3 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,17 @@ "name": "libp2p-tcp", "version": "0.5.1", "description": "Node.js implementation of the TCP module that libp2p uses, which implements the interface-connection and interface-transport interfaces", - "main": "src/index.js", + "main": "lib/index.js", + "jsnext:main": "src/index.js", "scripts": { - "test:compliance:connection": "node tests/connection.js", - "test:compliance:transport": "node tests/transport.js", - "test:specific": "mocha tests/*-test.js", - "test": "npm run test:specific", - "test-2": "npm run test:specific && npm run test:compliance:transport && npm run test:compliance:connection", - "lint": "standard" + "lint": "aegir-lint", + "build": "aegir-build --env node", + "test": "aegir-test --env node", + "release": "aegir-release --env node", + "release-minor": "aegir-release --type minor", + "release-major": "aegir-release --type major", + "coverage": "aegir-coverage", + "coverage-publish": "aegir-coverage publish" }, "pre-commit": [ "lint", @@ -29,18 +32,17 @@ }, "homepage": "https://github.com/diasdavid/js-libp2p-tcp", "devDependencies": { + "aegir": "^3.0.1", "chai": "^3.5.0", "interface-connection": "0.0.3", "interface-transport": "^0.1.1", - "istanbul": "^0.4.2", - "mocha": "^2.4.5", "pre-commit": "^1.1.2", - "standard": "^6.0.7", - "tape": "^4.2.0" + "tape": "^4.5.1" }, "dependencies": { "ip-address": "^5.8.0", "mafmt": "^1.0.1", - "multiaddr": "^1.1.1" + "multiaddr": "^1.1.1", + "run-parallel": "^1.1.6" } } diff --git a/src/index.js b/src/index.js index 5da28fe..2588b0e 100644 --- a/src/index.js +++ b/src/index.js @@ -1,9 +1,12 @@ +'use strict' + const debug = require('debug') const log = debug('libp2p:tcp') const tcp = require('net') const multiaddr = require('multiaddr') const Address6 = require('ip-address').Address6 const mafmt = require('mafmt') +const parallel = require('run-parallel') exports = module.exports = TCP @@ -31,10 +34,9 @@ function TCP () { multiaddrs = [multiaddrs] } - var count = 0 const freshMultiaddrs = [] - multiaddrs.forEach((m) => { + parallel(multiaddrs.map((m) => (cb) => { const listener = tcp.createServer((conn) => { conn.getObservedAddrs = () => { return [getMultiaddr(conn)] @@ -49,15 +51,16 @@ function TCP () { m = m.encapsulate('/tcp/' + address.port) freshMultiaddrs.push(m) } + if (address.family === 'IPv6') { freshMultiaddrs.push(multiaddr('/ip6/' + address.address + '/tcp/' + address.port)) } - if (++count === multiaddrs.length) { - callback(null, freshMultiaddrs) - } + cb() }) listeners.push(listener) + }), (err) => { + callback(err, freshMultiaddrs) }) } @@ -66,14 +69,10 @@ function TCP () { log('Called close with no active listeners') return callback() } - var count = 0 - listeners.forEach((listener) => { - listener.close(() => { - if (++count === listeners.length && callback) { - callback() - } - }) - }) + + parallel(listeners.map((listener) => { + return (cb) => listener.close(cb) + }), callback) } this.filter = (multiaddrs) => { diff --git a/tests/libp2p-tcp-test.js b/test/index.spec.js similarity index 99% rename from tests/libp2p-tcp-test.js rename to test/index.spec.js index 5a2c533..9f7572f 100644 --- a/tests/libp2p-tcp-test.js +++ b/test/index.spec.js @@ -1,4 +1,5 @@ /* eslint-env mocha */ +'use strict' const expect = require('chai').expect const TCPlibp2p = require('../src') diff --git a/test/interface-transport.spec.js b/test/interface-transport.spec.js new file mode 100644 index 0000000..d8d5827 --- /dev/null +++ b/test/interface-transport.spec.js @@ -0,0 +1,23 @@ +/* eslint-env mocha */ +'use strict' + +const tape = require('tape') +const tests = require('interface-transport/tests') +const TCP = require('../src') + +// Not adhering to this interface anymore! +describe.skip('interface-transport', () => { + it('works', (done) => { + const common = { + setup (t, cb) { + cb(null, new TCP()) + }, + teardown (t, cb) { + cb() + } + } + + tape.onFinish(done) + tests(tape, common) + }) +}) diff --git a/tests/connection.js b/tests/connection.js deleted file mode 100644 index e69de29..0000000 diff --git a/tests/transport.js b/tests/transport.js deleted file mode 100644 index 13f1a1d..0000000 --- a/tests/transport.js +++ /dev/null @@ -1,14 +0,0 @@ -var tape = require('tape') -var tests = require('interface-transport/tests') -var conn = require('../src') - -var common = { - setup: function (t, cb) { - cb(null, conn) - }, - teardown: function (t, cb) { - cb() - } -} - -tests(tape, common)