mirror of
https://github.com/fluencelabs/js-libp2p-interfaces
synced 2025-04-25 11:42:33 +00:00
feat: add support for timeline proxying (#31)
This commit is contained in:
parent
721e475fd2
commit
541bf83c1e
@ -40,7 +40,8 @@
|
|||||||
"dirty-chai": "^2.0.1",
|
"dirty-chai": "^2.0.1",
|
||||||
"err-code": "^2.0.0",
|
"err-code": "^2.0.0",
|
||||||
"multiaddr": "^7.1.0",
|
"multiaddr": "^7.1.0",
|
||||||
"peer-id": "~0.13.2"
|
"peer-id": "~0.13.2",
|
||||||
|
"sinon": "^7.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"aegir": "^20.2.0",
|
"aegir": "^20.2.0",
|
||||||
|
@ -75,10 +75,6 @@ class Connection {
|
|||||||
*/
|
*/
|
||||||
this._stat = {
|
this._stat = {
|
||||||
...stat,
|
...stat,
|
||||||
timeline: {
|
|
||||||
...stat.timeline,
|
|
||||||
close: undefined
|
|
||||||
},
|
|
||||||
status: 'open'
|
status: 'open'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,12 @@ const pair = require('it-pair')
|
|||||||
|
|
||||||
describe('compliance tests', () => {
|
describe('compliance tests', () => {
|
||||||
tests({
|
tests({
|
||||||
async setup () {
|
/**
|
||||||
|
* Test setup. `properties` allows the compliance test to override
|
||||||
|
* certain values for testing.
|
||||||
|
* @param {*} properties
|
||||||
|
*/
|
||||||
|
async setup (properties) {
|
||||||
const localAddr = multiaddr('/ip4/127.0.0.1/tcp/8080')
|
const localAddr = multiaddr('/ip4/127.0.0.1/tcp/8080')
|
||||||
const remoteAddr = multiaddr('/ip4/127.0.0.1/tcp/8081')
|
const remoteAddr = multiaddr('/ip4/127.0.0.1/tcp/8081')
|
||||||
const [localPeer, remotePeer] = await Promise.all([
|
const [localPeer, remotePeer] = await Promise.all([
|
||||||
@ -49,7 +54,8 @@ describe('compliance tests', () => {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
close: () => {},
|
close: () => {},
|
||||||
getStreams: () => openStreams
|
getStreams: () => openStreams,
|
||||||
|
...properties
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
async teardown () {
|
async teardown () {
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
const chai = require('chai')
|
const chai = require('chai')
|
||||||
const expect = chai.expect
|
const expect = chai.expect
|
||||||
chai.use(require('dirty-chai'))
|
chai.use(require('dirty-chai'))
|
||||||
|
const sinon = require('sinon')
|
||||||
|
|
||||||
module.exports = (test) => {
|
module.exports = (test) => {
|
||||||
describe('connection', () => {
|
describe('connection', () => {
|
||||||
@ -69,9 +70,27 @@ module.exports = (test) => {
|
|||||||
|
|
||||||
describe('close connection', () => {
|
describe('close connection', () => {
|
||||||
let connection
|
let connection
|
||||||
|
let timelineProxy
|
||||||
|
const proxyHandler = {
|
||||||
|
set () {
|
||||||
|
return Reflect.set(...arguments)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
connection = await test.setup()
|
timelineProxy = new Proxy({
|
||||||
|
open: Date.now() - 10,
|
||||||
|
upgraded: Date.now()
|
||||||
|
}, proxyHandler)
|
||||||
|
|
||||||
|
connection = await test.setup({
|
||||||
|
stat: {
|
||||||
|
timeline: timelineProxy,
|
||||||
|
direction: 'outbound',
|
||||||
|
encryption: '/crypto/1.0.0',
|
||||||
|
multiplexer: '/muxer/1.0.0'
|
||||||
|
}
|
||||||
|
})
|
||||||
if (!connection) throw new Error('missing connection')
|
if (!connection) throw new Error('missing connection')
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -100,6 +119,18 @@ module.exports = (test) => {
|
|||||||
expect(connection.stat.status).to.equal('closed')
|
expect(connection.stat.status).to.equal('closed')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should support a proxy on the timeline', async () => {
|
||||||
|
sinon.spy(proxyHandler, 'set')
|
||||||
|
expect(connection.stat.timeline.close).to.not.exist()
|
||||||
|
|
||||||
|
await connection.close()
|
||||||
|
expect(proxyHandler.set.callCount).to.equal(1)
|
||||||
|
const [obj, key, value] = proxyHandler.set.getCall(0).args
|
||||||
|
expect(obj).to.eql(connection.stat.timeline)
|
||||||
|
expect(key).to.equal('close')
|
||||||
|
expect(value).to.be.a('number').that.equals(connection.stat.timeline.close)
|
||||||
|
})
|
||||||
|
|
||||||
it('should fail to create a new stream if the connection is closing', async () => {
|
it('should fail to create a new stream if the connection is closing', async () => {
|
||||||
expect(connection.stat.timeline.close).to.not.exist()
|
expect(connection.stat.timeline.close).to.not.exist()
|
||||||
connection.close()
|
connection.close()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user