UNPKG

3.02 kBJavaScriptView Raw
1'use strict'
2
3var mqtt = require('..')
4var path = require('path')
5var abstractClientTests = require('./abstract_client')
6var fs = require('fs')
7var port = 9899
8var KEY = path.join(__dirname, 'helpers', 'tls-key.pem')
9var CERT = path.join(__dirname, 'helpers', 'tls-cert.pem')
10var WRONG_CERT = path.join(__dirname, 'helpers', 'wrong-cert.pem')
11var Server = require('./server')
12
13var server = new Server.SecureServer({
14 key: fs.readFileSync(KEY),
15 cert: fs.readFileSync(CERT)
16}, function (client) {
17 client.on('connect', function (packet) {
18 if (packet.clientId === 'invalid') {
19 client.connack({returnCode: 2})
20 } else {
21 server.emit('connect', client)
22 client.connack({returnCode: 0})
23 }
24 })
25
26 client.on('publish', function (packet) {
27 setImmediate(function () {
28 /* jshint -W027 */
29 /* eslint default-case:0 */
30 switch (packet.qos) {
31 case 0:
32 break
33 case 1:
34 client.puback(packet)
35 break
36 case 2:
37 client.pubrec(packet)
38 break
39 }
40 /* jshint +W027 */
41 })
42 })
43
44 client.on('pubrel', function (packet) {
45 client.pubcomp(packet)
46 })
47
48 client.on('pubrec', function (packet) {
49 client.pubrel(packet)
50 })
51
52 client.on('pubcomp', function () {
53 // Nothing to be done
54 })
55
56 client.on('subscribe', function (packet) {
57 client.suback({
58 messageId: packet.messageId,
59 granted: packet.subscriptions.map(function (e) {
60 return e.qos
61 })
62 })
63 })
64
65 client.on('unsubscribe', function (packet) {
66 client.unsuback(packet)
67 })
68
69 client.on('pingreq', function () {
70 client.pingresp()
71 })
72}).listen(port)
73
74describe('MqttSecureClient', function () {
75 var config = { protocol: 'mqtts', port: port, rejectUnauthorized: false }
76 abstractClientTests(server, config)
77
78 describe('with secure parameters', function () {
79 it('should validate successfully the CA', function (done) {
80 var client = mqtt.connect({
81 protocol: 'mqtts',
82 port: port,
83 ca: [fs.readFileSync(CERT)],
84 rejectUnauthorized: true
85 })
86
87 client.on('error', function (err) {
88 done(err)
89 })
90
91 server.once('connect', function () {
92 done()
93 })
94 })
95
96 it('should validate unsuccessfully the CA', function (done) {
97 var client = mqtt.connect({
98 protocol: 'mqtts',
99 port: port,
100 ca: [fs.readFileSync(WRONG_CERT)],
101 rejectUnauthorized: true
102 })
103
104 client.once('error', function () {
105 done()
106 client.end()
107 client.on('error', function () {})
108 })
109 })
110
111 it('should emit close on TLS error', function (done) {
112 var client = mqtt.connect({
113 protocol: 'mqtts',
114 port: port,
115 ca: [fs.readFileSync(WRONG_CERT)],
116 rejectUnauthorized: true
117 })
118
119 client.on('error', function () {})
120
121 // TODO node v0.8.x emits multiple close events
122 client.once('close', function () {
123 done()
124 })
125 })
126 })
127})