diff --git a/libtextsecure/test/index.html b/libtextsecure/test/index.html index 8090f0c92..3a40aed24 100644 --- a/libtextsecure/test/index.html +++ b/libtextsecure/test/index.html @@ -50,11 +50,11 @@ - + diff --git a/libtextsecure/test/message_receiver_test.js b/libtextsecure/test/message_receiver_test.js index 1bdd6711e..8ce2ecc9f 100644 --- a/libtextsecure/test/message_receiver_test.js +++ b/libtextsecure/test/message_receiver_test.js @@ -84,22 +84,4 @@ describe('MessageReceiver', function() { var messageReceiver = new textsecure.MessageReceiver('ws://localhost:8080', window); }); }); - - describe('keepalives', function() { - it('sends a keepalive once a minute', function(done) { - this.timeout(60000); - var mockServer = new MockServer('ws://localhost:8081/v1/websocket/?login='+ encodeURIComponent(number) +'.1&password=password'); - 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'); - server.close(); - done(); - }); - }); - var messageReceiver = new textsecure.MessageReceiver('ws://localhost:8081', window); - }); - }); }); diff --git a/libtextsecure/test/websocket-resources_test.js b/libtextsecure/test/websocket-resources_test.js index 509a22cef..d45d12838 100644 --- a/libtextsecure/test/websocket-resources_test.js +++ b/libtextsecure/test/websocket-resources_test.js @@ -18,80 +18,149 @@ 'use strict'; describe('WebSocket-Resource', function() { - it('receives requests and sends responses', function(done) { - // mock socket - var request_id = '1'; - var socket = { - send: function(data) { - var message = textsecure.protobuf.WebSocketMessage.decode(data); - assert.strictEqual(message.type, textsecure.protobuf.WebSocketMessage.Type.RESPONSE); - assert.strictEqual(message.response.message, 'OK'); - assert.strictEqual(message.response.status, 200); - assert.strictEqual(message.response.id.toString(), request_id); - done(); - } - }; + describe('requests and responses', function () { + it('receives requests and sends responses', function(done) { + // mock socket + var request_id = '1'; + var socket = { + send: function(data) { + var message = textsecure.protobuf.WebSocketMessage.decode(data); + assert.strictEqual(message.type, textsecure.protobuf.WebSocketMessage.Type.RESPONSE); + assert.strictEqual(message.response.message, 'OK'); + assert.strictEqual(message.response.status, 200); + assert.strictEqual(message.response.id.toString(), request_id); + done(); + } + }; - // actual test - var resource = new WebSocketResource(socket, function (request) { - assert.strictEqual(request.verb, 'PUT'); - assert.strictEqual(request.path, '/some/path'); - assertEqualArrayBuffers(request.body.toArrayBuffer(), new Uint8Array([1,2,3]).buffer); - request.respond(200, 'OK'); + // actual test + var resource = new WebSocketResource(socket, { + handleRequest: function (request) { + assert.strictEqual(request.verb, 'PUT'); + assert.strictEqual(request.path, '/some/path'); + assertEqualArrayBuffers(request.body.toArrayBuffer(), new Uint8Array([1,2,3]).buffer); + request.respond(200, 'OK'); + } + }); + + // mock socket request + socket.onmessage({ + data: new Blob([ + new textsecure.protobuf.WebSocketMessage({ + type: textsecure.protobuf.WebSocketMessage.Type.REQUEST, + request: { + id: request_id, + verb: 'PUT', + path: '/some/path', + body: new Uint8Array([1,2,3]).buffer + } + }).encode().toArrayBuffer() + ]) + }); }); - // mock socket request - socket.onmessage({ - data: new Blob([ - new textsecure.protobuf.WebSocketMessage({ - type: textsecure.protobuf.WebSocketMessage.Type.REQUEST, - request: { - id: request_id, - verb: 'PUT', - path: '/some/path', - body: new Uint8Array([1,2,3]).buffer - } - }).encode().toArrayBuffer() - ]) + it('sends requests and receives responses', function(done) { + // mock socket and request handler + var request_id; + var socket = { + send: function(data) { + var message = textsecure.protobuf.WebSocketMessage.decode(data); + assert.strictEqual(message.type, textsecure.protobuf.WebSocketMessage.Type.REQUEST); + assert.strictEqual(message.request.verb, 'PUT'); + assert.strictEqual(message.request.path, '/some/path'); + assertEqualArrayBuffers(message.request.body.toArrayBuffer(), new Uint8Array([1,2,3]).buffer); + request_id = message.request.id; + } + }; + + // actual test + var resource = new WebSocketResource(socket); + resource.sendRequest({ + verb: 'PUT', + path: '/some/path', + body: new Uint8Array([1,2,3]).buffer, + error: done, + success: function(message, status, request) { + assert.strictEqual(message, 'OK'); + assert.strictEqual(status, 200); + done(); + } + }); + + // mock socket response + socket.onmessage({ + data: new Blob([ + new textsecure.protobuf.WebSocketMessage({ + type: textsecure.protobuf.WebSocketMessage.Type.RESPONSE, + response: { id: request_id, message: 'OK', status: 200 } + }).encode().toArrayBuffer() + ]) + }); }); }); - it('sends requests and receives responses', function(done) { - // mock socket and request handler - var request_id; - var socket = { - send: function(data) { - var message = textsecure.protobuf.WebSocketMessage.decode(data); - assert.strictEqual(message.type, textsecure.protobuf.WebSocketMessage.Type.REQUEST); - assert.strictEqual(message.request.verb, 'PUT'); - assert.strictEqual(message.request.path, '/some/path'); - assertEqualArrayBuffers(message.request.body.toArrayBuffer(), new Uint8Array([1,2,3]).buffer); - request_id = message.request.id; - } - }; + describe('close', function() { + before(function() { window.WebSocket = MockSocket; }); + after (function() { window.WebSocket = WebSocket; }); + it('closes the connection', function(done) { + var mockServer = new MockServer('ws://localhost:8081'); + mockServer.on('connection', function(server) { + server.on('close', done); + }); + var resource = new WebSocketResource(new WebSocket('ws://localhost:8081')); + resource.close(); + }); + }); - // actual test - var resource = new WebSocketResource(socket, function() {}); - resource.sendRequest({ - verb: 'PUT', - path: '/some/path', - body: new Uint8Array([1,2,3]).buffer, - error: done, - success: function(message, status, request) { - assert.strictEqual(message, 'OK'); - assert.strictEqual(status, 200); - done(); - } + describe('with a keepalive config', function() { + before(function() { window.WebSocket = MockSocket; }); + after (function() { window.WebSocket = WebSocket; }); + this.timeout(60000); + it('sends keepalives once a minute', function(done) { + var mockServer = new MockServer('ws://localhost:8081'); + 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'); + server.close(); + done(); + }); + }); + var resource = new WebSocketResource(new WebSocket('ws://localhost:8081'), { + keepalive: { path: '/v1/keepalive' } + }); }); - // mock socket response - socket.onmessage({ - data: new Blob([ - new textsecure.protobuf.WebSocketMessage({ - type: textsecure.protobuf.WebSocketMessage.Type.RESPONSE, - response: { id: request_id, message: 'OK', status: 200 } - }).encode().toArrayBuffer() - ]) + it('uses / as a default path', function() { + var mockServer = new MockServer('ws://localhost:8081'); + 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, '/'); + server.close(); + done(); + }); + }); + var resource = new WebSocketResource(new WebSocket('ws://localhost:8081'), { + keepalive: true + }); + + }); + + it('optionally disconnects if no response', function(done) { + this.timeout(65000); + var mockServer = new MockServer('ws://localhost:8081'); + var socket = new WebSocket('ws://localhost:8081'); + mockServer.on('connection', function(server) { + server.on('close', done); + }); + var resource = new WebSocketResource(socket, { + keepalive: { disconnect: true } + }); }); }); });