UNPKG

2.66 kBJavaScriptView Raw
1'use strict'
2
3var http = require('http')
4var websocket = require('websocket-stream')
5var WebSocketServer = require('ws').Server
6var Connection = require('mqtt-connection')
7var abstractClientTests = require('./abstract_client')
8var mqtt = require('../')
9var xtend = require('xtend')
10var port = 9999
11var server = http.createServer()
12
13function attachWebsocketServer (wsServer) {
14 var wss = new WebSocketServer({server: wsServer})
15
16 wss.on('connection', function (ws) {
17 var stream = websocket(ws)
18 var connection = new Connection(stream)
19
20 wsServer.emit('client', connection)
21 stream.on('error', function () {})
22 connection.on('error', function () {})
23 })
24
25 return wsServer
26}
27
28attachWebsocketServer(server)
29
30server.on('client', function (client) {
31 client.on('connect', function (packet) {
32 if (packet.clientId === 'invalid') {
33 client.connack({ returnCode: 2 })
34 } else {
35 server.emit('connect', client)
36 client.connack({returnCode: 0})
37 }
38 })
39
40 client.on('publish', function (packet) {
41 setImmediate(function () {
42 switch (packet.qos) {
43 case 0:
44 break
45 case 1:
46 client.puback(packet)
47 break
48 case 2:
49 client.pubrec(packet)
50 break
51 }
52 })
53 })
54
55 client.on('pubrel', function (packet) {
56 client.pubcomp(packet)
57 })
58
59 client.on('pubrec', function (packet) {
60 client.pubrel(packet)
61 })
62
63 client.on('pubcomp', function () {
64 // Nothing to be done
65 })
66
67 client.on('subscribe', function (packet) {
68 client.suback({
69 messageId: packet.messageId,
70 granted: packet.subscriptions.map(function (e) {
71 return e.qos
72 })
73 })
74 })
75
76 client.on('unsubscribe', function (packet) {
77 client.unsuback(packet)
78 })
79
80 client.on('pingreq', function () {
81 client.pingresp()
82 })
83}).listen(port)
84
85describe('Websocket Client', function () {
86 var config = { protocol: 'ws', port: port }
87
88 it('should use mqtt as the protocol by default', function (done) {
89 server.once('client', function (client) {
90 client.stream.socket.protocol.should.equal('mqtt')
91 })
92
93 var opts = xtend(config, {})
94
95 mqtt.connect(opts).on('connect', function () {
96 this.end(true, done)
97 })
98 })
99
100 it('should use mqttv3.1 as the protocol if using v3.1', function (done) {
101 server.once('client', function (client) {
102 client.stream.socket.protocol.should.equal('mqttv3.1')
103 })
104
105 var opts = xtend(config, {
106 protocolId: 'MQIsdp',
107 protocolVersion: 3
108 })
109
110 mqtt.connect(opts).on('connect', function () {
111 this.end(true, done)
112 })
113 })
114
115 abstractClientTests(server, config)
116})