mirror of
https://github.com/fluencelabs/js-libp2p-secio
synced 2025-03-15 09:50:55 +00:00
99 lines
2.2 KiB
JavaScript
99 lines
2.2 KiB
JavaScript
'use strict'
|
|
|
|
const Benchmark = require('benchmark')
|
|
const pull = require('pull-stream')
|
|
const parallel = require('async/parallel')
|
|
const pair = require('pull-pair/duplex')
|
|
const PeerId = require('peer-id')
|
|
|
|
const secio = require('../src')
|
|
|
|
const suite = new Benchmark.Suite('secio')
|
|
let peers
|
|
|
|
function sendData (a, b, opts, finish) {
|
|
opts = Object.assign({ times: 1, size: 100 }, opts)
|
|
|
|
pull(
|
|
pull.infinite(() => Buffer.allocUnsafe(opts.size)),
|
|
pull.take(opts.times),
|
|
a
|
|
)
|
|
|
|
let length = 0
|
|
|
|
pull(
|
|
b,
|
|
pull.drain((data) => {
|
|
length += data.length
|
|
}, () => {
|
|
if (length !== opts.times * opts.size) {
|
|
throw new Error('Did not receive enough chunks')
|
|
}
|
|
finish.resolve()
|
|
})
|
|
)
|
|
}
|
|
|
|
suite.add('create peers for test', (deferred) => {
|
|
parallel([
|
|
(cb) => PeerId.createFromJSON(require('./peer-a'), cb),
|
|
(cb) => PeerId.createFromJSON(require('./peer-b'), cb)
|
|
], (err, _peers) => {
|
|
if (err) { throw err }
|
|
peers = _peers
|
|
|
|
deferred.resolve()
|
|
})
|
|
}, { defer: true })
|
|
|
|
suite.add('establish an encrypted channel', (deferred) => {
|
|
const p = pair()
|
|
|
|
const peerA = peers[0]
|
|
const peerB = peers[1]
|
|
|
|
const aToB = secio.encrypt(peerB, peerA.privKey, p[0], (err) => { throw err })
|
|
const bToA = secio.encrypt(peerA, peerB.privKey, p[1], (err) => { throw err })
|
|
|
|
sendData(aToB, bToA, {}, deferred)
|
|
}, { defer: true })
|
|
|
|
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`, (deferred) => {
|
|
const p = pair()
|
|
|
|
sendData(p[0], p[1], { times: times, size: size }, deferred)
|
|
}, { defer: true })
|
|
|
|
suite.add(`send encrypted ${times} x ${size} bytes`, (deferred) => {
|
|
const p = pair()
|
|
|
|
const peerA = peers[0]
|
|
const peerB = peers[1]
|
|
|
|
const aToB = secio.encrypt(peerB, peerA.privKey, p[0], (err) => { throw err })
|
|
const bToA = secio.encrypt(peerA, peerB.privKey, p[1], (err) => { throw err })
|
|
|
|
sendData(aToB, bToA, { times: times, size: size }, deferred)
|
|
}, { defer: true })
|
|
})
|
|
|
|
suite.on('cycle', (event) => {
|
|
console.log(String(event.target))
|
|
})
|
|
|
|
// run async
|
|
suite.run({ async: true })
|