js-libp2p-tcp/test/connection.spec.js

86 lines
2.3 KiB
JavaScript
Raw Normal View History

2018-02-07 05:56:55 +00:00
/* eslint-env mocha */
'use strict'
const { expect } = require('aegir/utils/chai')
2018-02-07 05:56:55 +00:00
const TCP = require('../src')
const multiaddr = require('multiaddr')
describe('valid localAddr and remoteAddr', () => {
2018-02-07 05:56:55 +00:00
let tcp
const mockUpgrader = {
upgradeInbound: maConn => maConn,
upgradeOutbound: maConn => maConn
}
2018-02-07 05:56:55 +00:00
beforeEach(() => {
tcp = new TCP({ upgrader: mockUpgrader })
2018-02-07 05:56:55 +00:00
})
2021-04-09 17:59:25 +03:00
const ma = new multiaddr.Multiaddr('/ip4/127.0.0.1/tcp/0')
2018-02-07 05:56:55 +00:00
it('should resolve port 0', async () => {
// Create a Promise that resolves when a connection is handled
let handled
const handlerPromise = new Promise(resolve => { handled = resolve })
2018-02-07 05:56:55 +00:00
const handler = conn => handled(conn)
2018-02-07 05:56:55 +00:00
// Create a listener with the handler
const listener = tcp.createListener(handler)
2018-02-07 05:56:55 +00:00
// Listen on the multi-address
await listener.listen(ma)
2018-02-07 05:56:55 +00:00
const localAddrs = listener.getAddrs()
expect(localAddrs.length).to.equal(1)
2018-02-07 05:56:55 +00:00
// Dial to that address
const dialerConn = await tcp.dial(localAddrs[0])
2018-02-07 05:56:55 +00:00
// Wait for the incoming dial to be handled
const listenerConn = await handlerPromise
2018-02-07 05:56:55 +00:00
// Close the listener
await listener.close()
2018-02-07 05:56:55 +00:00
expect(dialerConn.localAddr.toString())
.to.equal(listenerConn.remoteAddr.toString())
2018-02-07 05:56:55 +00:00
expect(dialerConn.remoteAddr.toString())
.to.equal(listenerConn.localAddr.toString())
2018-02-07 05:56:55 +00:00
})
2021-02-03 07:03:09 -05:00
it('should handle multiple simultaneous closes', async () => {
// Create a Promise that resolves when a connection is handled
let handled
const handlerPromise = new Promise(resolve => { handled = resolve })
const handler = conn => handled(conn)
// Create a listener with the handler
const listener = tcp.createListener(handler)
// Listen on the multi-address
await listener.listen(ma)
const localAddrs = listener.getAddrs()
expect(localAddrs.length).to.equal(1)
// Dial to that address
const dialerConn = await tcp.dial(localAddrs[0])
// Wait for the incoming dial to be handled
await handlerPromise
// Close the listener with two simultaneous calls to `close`
await Promise.race([
new Promise((resolve, reject) => setTimeout(() => reject(new Error('Timed out waiting for connection close')), 500)),
await Promise.all([
dialerConn.close(),
dialerConn.close()
])
])
})
2018-02-07 05:56:55 +00:00
})