From 98a1a91cf639e41b1fcbbaa2b8836183fa6f8d77 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 19 Feb 2018 10:36:47 +0000 Subject: [PATCH] test: add listen tests --- package.json | 2 +- src/create-listener.js | 3 +- src/get-multiaddr.js | 9 ++- test/listen-dial.js | 22 ----- test/listen-dial.spec.js | 171 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 180 insertions(+), 27 deletions(-) delete mode 100644 test/listen-dial.js create mode 100644 test/listen-dial.spec.js diff --git a/package.json b/package.json index 06872ce..40058a5 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "release-minor": "aegir release --type minor -t node --no-build", "release-major": "aegir release --type major -t node --no-build", "coverage": "aegir coverage", - "coverage-publish": "aegir coverage publish" + "coverage-publish": "aegir coverage publish --providers coveralls" }, "pre-push": [ "lint", diff --git a/src/create-listener.js b/src/create-listener.js index ed67e1f..f82016c 100644 --- a/src/create-listener.js +++ b/src/create-listener.js @@ -25,7 +25,6 @@ module.exports = (handler) => { socket.on('error', noop) const addr = getMultiaddr(socket) - log('new connection', addr.toString()) const s = toPull.duplex(socket) @@ -80,7 +79,7 @@ module.exports = (handler) => { const lOpts = listeningAddr.toOptions() log('Listening on %s %s', lOpts.port, lOpts.host) - return server.listen(lOpts.port, lOpts.host, callback) + server.listen(lOpts.port, lOpts.host, callback) } listener.getAddrs = (callback) => { diff --git a/src/get-multiaddr.js b/src/get-multiaddr.js index bc99799..5edb8db 100644 --- a/src/get-multiaddr.js +++ b/src/get-multiaddr.js @@ -1,9 +1,13 @@ 'use strict' -const multiaddr = require('multiaddr') -const Address6 = require('ip-address').Address6 +// const multiaddr = require('multiaddr') +// const Address6 = require('ip-address').Address6 module.exports = (socket) => { + // utp-native does not pack the remoteAddress + // TODO check if it is possible + return null + /* let ma if (socket.remoteFamily === 'IPv6') { @@ -25,4 +29,5 @@ module.exports = (socket) => { } return ma + */ } diff --git a/test/listen-dial.js b/test/listen-dial.js deleted file mode 100644 index d21c357..0000000 --- a/test/listen-dial.js +++ /dev/null @@ -1,22 +0,0 @@ -/* eslint-env mocha */ -'use strict' - -const chai = require('chai') -const dirtyChai = require('dirty-chai') -const expect = chai.expect -chai.use(dirtyChai) -const UTP = require('../src') - -describe('listen', () => { - it('create an instance', () => { - const utp = new UTP() - expect(utp).to.exist() - }) -}) - -describe('dial', () => { - it('create an instance', () => { - const utp = new UTP() - expect(utp).to.exist() - }) -}) diff --git a/test/listen-dial.spec.js b/test/listen-dial.spec.js new file mode 100644 index 0000000..460c483 --- /dev/null +++ b/test/listen-dial.spec.js @@ -0,0 +1,171 @@ +/* eslint-env mocha */ +'use strict' + +const chai = require('chai') +const dirtyChai = require('dirty-chai') +const expect = chai.expect +chai.use(dirtyChai) +const nativeUTP = require('utp-native') +const pull = require('pull-stream') +const multiaddr = require('multiaddr') + +const UTP = require('../src') +const isCI = process.env.CI + +describe('listen', () => { + let utp + + function ma (port) { + const base = '/ip4/127.0.0.1/udp/' + return multiaddr(`${base}${port}/utp`) + } + + beforeEach(() => { + utp = new UTP() + }) + + it('close listener with connections, through timeout', function (done) { + this.timeout(20 * 1000) + + const listener = utp.createListener((conn) => { + pull(conn, conn) + }) + + listener.on('connection', () => { + // Testing + console.log('incomming connection') + }) + + const addr = ma(12000) + const connectOptions = addr.toOptions() + + listener.listen(addr, () => { + const socket1 = nativeUTP.connect(connectOptions.port, connectOptions.host) + const socket2 = nativeUTP.connect(connectOptions.port, connectOptions.host) + + socket1.write('Some data that is never handled') + socket1.end() + + // TODO Unfortunately utp has no notion of gracious socket closing + // This feature needs to be shimmed on top to make it a proper libp2p + // transport + socket1.on('error', (err) => { + expect(err).to.not.exist() + }) + socket2.on('error', (err) => { + expect(err).to.not.exist() + }) + socket1.on('connect', () => { + listener.close(done) + }) + }) + }) + + it.skip('listen on port 0', (done) => { + const listener = utp.createListener((conn) => {}) + + listener.listen(ma(0), () => { + listener.close(done) + }) + }) + + it.skip('listen on IPv6 addr', function (done) { + if (isCI) { return this.skip() } + + const ma = multiaddr('/ip6/::/udp/12000/utp') + + const listener = utp.createListener((conn) => {}) + listener.listen(ma, () => { + listener.close(done) + }) + }) + + it.skip('listen on any Interface', (done) => { + const ma = multiaddr('/ip4/0.0.0.0/udp/12000/utp') + + const listener = utp.createListener((conn) => {}) + + listener.listen(ma, () => { + listener.close(done) + }) + }) + + it.skip('getAddrs', (done) => { + const listener = utp.createListener((conn) => {}) + const addr = ma(12000) + + listener.listen(addr, () => { + listener.getAddrs((err, multiaddrs) => { + expect(err).to.not.exist() + expect(multiaddrs.length).to.equal(1) + expect(multiaddrs[0]).to.eql(addr) + listener.close(done) + }) + }) + }) + + it.skip('getAddrs on port 0 listen', (done) => { + const addr = ma(0) + + const listener = utp.createListener((conn) => {}) + listener.listen(addr, () => { + listener.getAddrs((err, multiaddrs) => { + expect(err).to.not.exist() + expect(multiaddrs.length).to.equal(1) + listener.close(done) + }) + }) + }) + + it.skip('getAddrs from listening on 0.0.0.0', (done) => { + const addr = multiaddr('/ip4/0.0.0.0/udp/12000/utp') + + const listener = utp.createListener((conn) => {}) + + listener.listen(addr, () => { + listener.getAddrs((err, multiaddrs) => { + expect(err).to.not.exist() + expect(multiaddrs.length > 0).to.equal(true) + expect(multiaddrs[0].toString().indexOf('0.0.0.0')).to.equal(-1) + listener.close(done) + }) + }) + }) + + it.skip('getAddrs from listening on 0.0.0.0 and port 0', (done) => { + const addr = multiaddr('/ip4/0.0.0.0/udp/0/utp') + const listener = utp.createListener((conn) => {}) + + listener.listen(addr, () => { + listener.getAddrs((err, multiaddrs) => { + expect(err).to.not.exist() + expect(multiaddrs.length > 0).to.equal(true) + expect(multiaddrs[0].toString().indexOf('0.0.0.0')).to.equal(-1) + listener.close(done) + }) + }) + }) + + it.skip('getAddrs preserves IPFS Id', (done) => { + const ipfsId = '/ipfs/Qmb6owHp6eaWArVbcJJbQSyifyJBttMMjYV76N2hMbf5Vw' + const addr = ma(9090).encapsulate(ipfsId) + + const listener = utp.createListener((conn) => {}) + + listener.listen(addr, () => { + listener.getAddrs((err, multiaddrs) => { + expect(err).to.not.exist() + expect(multiaddrs.length).to.equal(1) + expect(multiaddrs[0]).to.eql(ma) + listener.close(done) + }) + }) + }) +}) + +describe('dial', () => { + it.skip('create an instance', () => { + const utp = new UTP() + expect(utp).to.exist() + }) +})