2016-11-03 10:23:33 +01:00
|
|
|
'use strict'
|
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
/* eslint-disable no-console */
|
|
|
|
|
2016-11-03 10:23:33 +01:00
|
|
|
const Benchmark = require('benchmark')
|
|
|
|
const PeerId = require('peer-id')
|
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
const pipe = require('it-pipe')
|
|
|
|
const { reduce } = require('streaming-iterables')
|
|
|
|
const DuplexPair = require('it-pair/duplex')
|
|
|
|
|
|
|
|
const secio = require('..')
|
2016-11-03 10:23:33 +01:00
|
|
|
|
|
|
|
const suite = new Benchmark.Suite('secio')
|
2018-01-07 12:02:09 +00:00
|
|
|
let peers
|
2017-07-22 15:44:43 -07:00
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
async function sendData (a, b, opts) {
|
2018-01-07 12:02:09 +00:00
|
|
|
opts = Object.assign({ times: 1, size: 100 }, opts)
|
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
let i = opts.times
|
|
|
|
|
|
|
|
pipe(
|
|
|
|
function * () {
|
|
|
|
while (i--) {
|
|
|
|
yield Buffer.allocUnsafe(opts.size)
|
|
|
|
}
|
|
|
|
},
|
2018-01-07 12:02:09 +00:00
|
|
|
a
|
|
|
|
)
|
2016-11-03 10:23:33 +01:00
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
const res = await pipe(
|
2018-01-07 12:02:09 +00:00
|
|
|
b,
|
2019-11-22 21:18:17 +01:00
|
|
|
reduce((acc, val) => acc + val.length, 0)
|
2018-01-07 12:02:09 +00:00
|
|
|
)
|
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
if (res !== opts.times * opts.size) {
|
|
|
|
throw new Error('Did not receive enough chunks')
|
2018-01-07 18:44:33 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
suite.add('create peers for test', {
|
|
|
|
defer: true,
|
|
|
|
fn: async (deferred) => {
|
|
|
|
peers = await Promise.all([
|
|
|
|
PeerId.createFromJSON(require('./peer-a')),
|
|
|
|
PeerId.createFromJSON(require('./peer-b'))
|
|
|
|
])
|
2018-01-07 12:02:09 +00:00
|
|
|
deferred.resolve()
|
2019-11-22 21:18:17 +01:00
|
|
|
}
|
|
|
|
})
|
|
|
|
suite.add('establish an encrypted channel', {
|
|
|
|
defer: true,
|
|
|
|
fn: async (deferred) => {
|
|
|
|
const p = DuplexPair()
|
2018-01-07 12:02:09 +00:00
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
const peerA = peers[0]
|
|
|
|
const peerB = peers[1]
|
2018-01-07 12:02:09 +00:00
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
const [aToB, bToA] = await Promise.all([
|
|
|
|
secio.secureInbound(peerA, p[0], peerB),
|
|
|
|
secio.secureOutbound(peerB, p[1], peerA)
|
|
|
|
])
|
2018-01-07 12:02:09 +00:00
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
await sendData(aToB.conn, bToA.conn, {})
|
|
|
|
deferred.resolve()
|
|
|
|
}
|
|
|
|
})
|
2018-01-07 12:02:09 +00:00
|
|
|
|
|
|
|
const cases = [
|
|
|
|
[10, 262144],
|
|
|
|
[100, 262144],
|
|
|
|
[1000, 262144]
|
|
|
|
// [10000, 262144],
|
|
|
|
// [100000, 262144],
|
|
|
|
// [1000000, 262144]
|
|
|
|
]
|
|
|
|
cases.forEach((el) => {
|
|
|
|
const times = el[0]
|
|
|
|
const size = el[1]
|
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
suite.add(`send plaintext ${times} x ${size} bytes`, {
|
|
|
|
defer: true,
|
|
|
|
fn: async (deferred) => {
|
|
|
|
const p = DuplexPair()
|
|
|
|
await sendData(p[0], p[1], { times: times, size: size })
|
|
|
|
deferred.resolve()
|
|
|
|
}
|
|
|
|
})
|
2018-01-07 12:02:09 +00:00
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
suite.add(`send encrypted ${times} x ${size} bytes`, {
|
|
|
|
defer: true,
|
|
|
|
fn: async (deferred) => {
|
|
|
|
const p = DuplexPair()
|
2018-01-07 12:02:09 +00:00
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
const peerA = peers[0]
|
|
|
|
const peerB = peers[1]
|
2017-07-22 15:44:43 -07:00
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
const [aToB, bToA] = await Promise.all([
|
|
|
|
secio.secureInbound(peerA, p[0], peerB),
|
|
|
|
secio.secureOutbound(peerB, p[1], peerA)
|
|
|
|
])
|
2018-01-07 10:54:59 +00:00
|
|
|
|
2019-11-22 21:18:17 +01:00
|
|
|
await sendData(aToB.conn, bToA.conn, { times: times, size: size })
|
|
|
|
deferred.resolve()
|
|
|
|
}
|
|
|
|
})
|
2018-01-07 12:02:09 +00:00
|
|
|
})
|
2018-01-07 10:31:38 +00:00
|
|
|
|
|
|
|
suite.on('cycle', (event) => {
|
2016-11-03 10:23:33 +01:00
|
|
|
console.log(String(event.target))
|
|
|
|
})
|
2017-07-22 15:44:43 -07:00
|
|
|
|
2018-01-07 10:31:38 +00:00
|
|
|
// run async
|
|
|
|
suite.run({ async: true })
|