diff --git a/libtextsecure/test/index.html b/libtextsecure/test/index.html index ebde4ac2..9c3d7950 100644 --- a/libtextsecure/test/index.html +++ b/libtextsecure/test/index.html @@ -47,6 +47,7 @@ + diff --git a/libtextsecure/test/websocket_test.js b/libtextsecure/test/websocket_test.js new file mode 100644 index 00000000..75946ea5 --- /dev/null +++ b/libtextsecure/test/websocket_test.js @@ -0,0 +1,64 @@ +/* vim: ts=4:sw=4:expandtab + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +describe('TextSecureWebSocket', function() { + var WebSocket = window.WebSocket; + before(function() { window.WebSocket = MockSocket; }); + after (function() { window.WebSocket = WebSocket; }); + it('connects a websocket', function(done) { + var mockServer = new MockServer('ws://localhost:8080'); + mockServer.on('connection', function(server) { + server.on('message', function(data) { + server.send('hello'); + }); + }); + + var socket = new TextSecureWebSocket('ws://localhost:8080'); + socket.onmessage = function(response) { + assert.strictEqual(response.data, 'hello'); + done(); + }; + socket.send('data'); + }); + + it('sends a keepalive once a minute', function(done) { + this.timeout(60000); + var mockServer = new MockServer('ws://localhost:8080'); + mockServer.on('connection', function(server) { + server.on('message', function(data) { + var message = textsecure.protobuf.WebSocketMessage.decode(data); + assert.strictEqual(message.type, textsecure.protobuf.WebSocketMessage.Type.REQUEST); + assert.strictEqual(message.request.verb, 'GET'); + assert.strictEqual(message.request.path, '/v1/keepalive'); + done(); + }); + }); + var socket = new TextSecureWebSocket('ws://localhost:8080'); + }); + + it('reconnects', function(done) { + this.timeout(60000); + var mockServer = new MockServer('ws://localhost:8080'); + var socket = new TextSecureWebSocket('ws://localhost:8080'); + socket.onclose = function() { + var mockServer = new MockServer('ws://localhost:8080'); + mockServer.on('connection', function() { + done(); + }); + }; + mockServer.close(); + }); +});