Skip to content

Commit

Permalink
test: add listen tests
Browse files Browse the repository at this point in the history
  • Loading branch information
daviddias committed Mar 19, 2018
1 parent e6e6e54 commit 98a1a91
Show file tree
Hide file tree
Showing 5 changed files with 180 additions and 27 deletions.
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -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",
Expand Down
3 changes: 1 addition & 2 deletions src/create-listener.js
Expand Up @@ -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)

Expand Down Expand Up @@ -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) => {
Expand Down
9 changes: 7 additions & 2 deletions 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') {
Expand All @@ -25,4 +29,5 @@ module.exports = (socket) => {
}
return ma
*/
}
22 changes: 0 additions & 22 deletions test/listen-dial.js

This file was deleted.

171 changes: 171 additions & 0 deletions 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()
})
})

0 comments on commit 98a1a91

Please sign in to comment.