115 lines
2.3 KiB
JavaScript
Raw Normal View History

'use strict'
/* eslint-disable no-console */
const Benchmark = require('benchmark')
const PeerId = require('peer-id')
const pipe = require('it-pipe')
const { reduce } = require('streaming-iterables')
const DuplexPair = require('it-pair/duplex')
const secio = require('..')
const suite = new Benchmark.Suite('secio')
2018-01-07 12:02:09 +00:00
let peers
2017-07-22 15:44:43 -07:00
async function sendData (a, b, opts) {
2018-01-07 12:02:09 +00:00
opts = Object.assign({ times: 1, size: 100 }, opts)
let i = opts.times
pipe(
function * () {
while (i--) {
yield Buffer.allocUnsafe(opts.size)
}
},
2018-01-07 12:02:09 +00:00
a
)
const res = await pipe(
2018-01-07 12:02:09 +00:00
b,
reduce((acc, val) => acc + val.length, 0)
2018-01-07 12:02:09 +00:00
)
if (res !== opts.times * opts.size) {
throw new Error('Did not receive enough chunks')
2018-01-07 18:44:33 +00: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()
}
})
suite.add('establish an encrypted channel', {
defer: true,
fn: async (deferred) => {
const p = DuplexPair()
2018-01-07 12:02:09 +00:00
const peerA = peers[0]
const peerB = peers[1]
2018-01-07 12:02:09 +00: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
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]
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
suite.add(`send encrypted ${times} x ${size} bytes`, {
defer: true,
fn: async (deferred) => {
const p = DuplexPair()
2018-01-07 12:02:09 +00:00
const peerA = peers[0]
const peerB = peers[1]
2017-07-22 15:44:43 -07: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
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) => {
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 })