This repository has been archived by the owner on Feb 24, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 22
/
send.js
114 lines (92 loc) · 2.34 KB
/
send.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
'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')
let peers
async function sendData (a, b, opts) {
opts = Object.assign({ times: 1, size: 100 }, opts)
let i = opts.times
pipe(
function * () {
while (i--) {
yield new Uint8Array(opts.size)
}
},
a
)
const res = await pipe(
b,
reduce((acc, val) => acc + val.length, 0)
)
if (res !== opts.times * opts.size) {
throw new Error('Did not receive enough chunks')
}
}
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'))
])
deferred.resolve()
}
})
suite.add('establish an encrypted channel', {
defer: true,
fn: async (deferred) => {
const p = DuplexPair()
const peerA = peers[0]
const peerB = peers[1]
const [aToB, bToA] = await Promise.all([
secio.secureInbound(peerA, p[0], peerB),
secio.secureOutbound(peerB, p[1], peerA)
])
await sendData(aToB.conn, bToA.conn, {})
deferred.resolve()
}
})
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()
}
})
suite.add(`send encrypted ${times} x ${size} bytes`, {
defer: true,
fn: async (deferred) => {
const p = DuplexPair()
const peerA = peers[0]
const peerB = peers[1]
const [aToB, bToA] = await Promise.all([
secio.secureInbound(peerA, p[0], peerB),
secio.secureOutbound(peerB, p[1], peerA)
])
await sendData(aToB.conn, bToA.conn, { times: times, size: size })
deferred.resolve()
}
})
})
suite.on('cycle', (event) => {
console.log(String(event.target))
})
// run async
suite.run({ async: true })