UNPKG

2.57 kBJavaScriptView Raw
1const mqtt = require('./')
2const crypto = require('crypto')
3const max = 1E5
4const start = Date.now() / 1000
5let errors = 0
6let packets = 0
7let randomPacket
8const firstBytes = [
9 16 * 1, // CONNECT
10 16 * 2, // CONNACK
11 16 * 3, // PUBLISH, QoS: 0, No Retain, No Dup
12 16 * 3 + 1, // PUBLISH, QoS: 0, Retain, No Dup
13 16 * 3 + 8, // PUBLISH, QoS: 0, No Retain, Dup
14 16 * 3 + 1 + 8, // PUBLISH, QoS: 0, Retain, Dup
15 16 * 3 + 2, // PUBLISH, QoS: 1, No Retain, No Dup
16 16 * 3 + 2 + 1, // PUBLISH, QoS: 1, Retain, No Dup
17 16 * 3 + 2 + 8, // PUBLISH, QoS: 1, No Retain, Dup
18 16 * 3 + 2 + 1 + 8, // PUBLISH, QoS: 1, Retain, Dup
19 16 * 3 + 4, // PUBLISH, QoS: 2, No Retain, No Dup
20 16 * 3 + 4 + 1, // PUBLISH, QoS: 2, Retain, No Dup
21 16 * 3 + 4 + 8, // PUBLISH, QoS: 2, No Retain, Dup
22 16 * 3 + 4 + 1 + 8, // PUBLISH, QoS: 2, Retain, Dup
23 16 * 4, // PUBACK
24 16 * 5, // PUBREC
25 16 * 6, // PUBREL
26 16 * 7, // PUBCOMP
27 16 * 8, // SUBSCRIBE
28 16 * 9, // SUBACK
29 16 * 10, // UNSUBSCRIBE
30 16 * 11, // UNSUBACK
31 16 * 12, // PINGREQ
32 16 * 13, // PINGRESP
33 16 * 14, // DISCONNECT
34 16 * 15 // RESERVED
35]
36
37function doParse () {
38 const parser = mqtt.parser()
39
40 parser.on('error', onError)
41 parser.on('packet', onPacket)
42 randomPacket = crypto.randomBytes(Math.floor(Math.random() * 512))
43
44 // Increase probability to have a valid first byte in order to at least
45 // enter the parser
46 if (Math.random() > 0.2 && randomPacket.length > 0) randomPacket.writeUInt8(firstBytes[Math.floor(Math.random() * firstBytes.length)], 0)
47 parser.parse(randomPacket)
48}
49
50try {
51 console.log('Starting benchmark')
52 for (let i = 0; i < max; i++) {
53 doParse()
54 }
55} catch (e) {
56 console.log('Exception occurred at packet')
57 console.log(randomPacket)
58 console.log(e.message)
59 console.log(e.stack)
60}
61
62function onError () {
63 errors++
64}
65
66function onPacket () {
67 packets++
68}
69
70const delta = Math.abs(max - packets - errors)
71const time = Date.now() / 1000 - start
72console.log('Benchmark complete')
73console.log('==========================')
74console.log('Sent packets:', max)
75console.log('Total time:', Math.round(time * 100) / 100, 'seconds', '\r\n')
76
77console.log('Valid packets:', packets)
78console.log('Erroneous packets:', errors)
79
80if ((max - packets - errors) < 0) console.log('Excess packets:', delta, '\r\n')
81else console.log('Missing packets:', delta, '\r\n')
82
83console.log('Total packets:', packets + errors)
84console.log('Total errors:', errors + delta)
85console.log('Error rate:', `${((errors + delta) / max * 100).toFixed(2)}%`)
86console.log('==========================')