Fix server crash on invalid LiveQuery socket event (#4533)
* add failing test for missing command message * don't mock tv4.validate * fix existing tests * make request.op required * Update comment
This commit is contained in:
@@ -41,11 +41,6 @@ describe('ParseLiveQueryServer', function() {
|
|||||||
// Mock matchesQuery
|
// Mock matchesQuery
|
||||||
var mockMatchesQuery = jasmine.createSpy('matchesQuery').and.returnValue(true);
|
var mockMatchesQuery = jasmine.createSpy('matchesQuery').and.returnValue(true);
|
||||||
jasmine.mockLibrary('../src/LiveQuery/QueryTools', 'matchesQuery', mockMatchesQuery);
|
jasmine.mockLibrary('../src/LiveQuery/QueryTools', 'matchesQuery', mockMatchesQuery);
|
||||||
// Mock tv4
|
|
||||||
var mockValidate = function() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
jasmine.mockLibrary('tv4', 'validate', mockValidate);
|
|
||||||
// Mock ParsePubSub
|
// Mock ParsePubSub
|
||||||
var mockParsePubSub = {
|
var mockParsePubSub = {
|
||||||
createPublisher: function() {
|
createPublisher: function() {
|
||||||
@@ -350,7 +345,8 @@ describe('ParseLiveQueryServer', function() {
|
|||||||
|
|
||||||
// Check connect request
|
// Check connect request
|
||||||
var connectRequest = {
|
var connectRequest = {
|
||||||
op: 'connect'
|
op: 'connect',
|
||||||
|
applicationId: '1'
|
||||||
};
|
};
|
||||||
// Trigger message event
|
// Trigger message event
|
||||||
parseWebSocket.emit('message', connectRequest);
|
parseWebSocket.emit('message', connectRequest);
|
||||||
@@ -370,7 +366,11 @@ describe('ParseLiveQueryServer', function() {
|
|||||||
parseLiveQueryServer._onConnect(parseWebSocket);
|
parseLiveQueryServer._onConnect(parseWebSocket);
|
||||||
|
|
||||||
// Check subscribe request
|
// Check subscribe request
|
||||||
var subscribeRequest = '{"op":"subscribe"}';
|
var subscribeRequest = JSON.stringify({
|
||||||
|
op: 'subscribe',
|
||||||
|
requestId: 1,
|
||||||
|
query: {className: 'Test', where: {}}
|
||||||
|
});
|
||||||
// Trigger message event
|
// Trigger message event
|
||||||
parseWebSocket.emit('message', subscribeRequest);
|
parseWebSocket.emit('message', subscribeRequest);
|
||||||
// Make sure _handleSubscribe is called
|
// Make sure _handleSubscribe is called
|
||||||
@@ -390,7 +390,7 @@ describe('ParseLiveQueryServer', function() {
|
|||||||
parseLiveQueryServer._onConnect(parseWebSocket);
|
parseLiveQueryServer._onConnect(parseWebSocket);
|
||||||
|
|
||||||
// Check unsubscribe request
|
// Check unsubscribe request
|
||||||
var unsubscribeRequest = '{"op":"unsubscribe"}';
|
var unsubscribeRequest = JSON.stringify({op: 'unsubscribe', requestId: 1});
|
||||||
// Trigger message event
|
// Trigger message event
|
||||||
parseWebSocket.emit('message', unsubscribeRequest);
|
parseWebSocket.emit('message', unsubscribeRequest);
|
||||||
// Make sure _handleUnsubscribe is called
|
// Make sure _handleUnsubscribe is called
|
||||||
@@ -414,7 +414,11 @@ describe('ParseLiveQueryServer', function() {
|
|||||||
parseLiveQueryServer._onConnect(parseWebSocket);
|
parseLiveQueryServer._onConnect(parseWebSocket);
|
||||||
|
|
||||||
// Check updateRequest request
|
// Check updateRequest request
|
||||||
var updateRequest = '{"op":"update"}';
|
var updateRequest = JSON.stringify({
|
||||||
|
op: 'update',
|
||||||
|
requestId: 1,
|
||||||
|
query: {className: 'Test', where: {}}
|
||||||
|
});
|
||||||
// Trigger message event
|
// Trigger message event
|
||||||
parseWebSocket.emit('message', updateRequest);
|
parseWebSocket.emit('message', updateRequest);
|
||||||
// Make sure _handleUnsubscribe is called
|
// Make sure _handleUnsubscribe is called
|
||||||
@@ -428,6 +432,22 @@ describe('ParseLiveQueryServer', function() {
|
|||||||
expect(parseLiveQueryServer._handleSubscribe).toHaveBeenCalled();
|
expect(parseLiveQueryServer._handleSubscribe).toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('can set missing command message handler for a parseWebSocket', function() {
|
||||||
|
var parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
|
||||||
|
// Make mock parseWebsocket
|
||||||
|
var EventEmitter = require('events');
|
||||||
|
var parseWebSocket = new EventEmitter();
|
||||||
|
// Register message handlers for the parseWebSocket
|
||||||
|
parseLiveQueryServer._onConnect(parseWebSocket);
|
||||||
|
|
||||||
|
// Check invalid request
|
||||||
|
var invalidRequest = '{}';
|
||||||
|
// Trigger message event
|
||||||
|
parseWebSocket.emit('message', invalidRequest);
|
||||||
|
var Client = require('../src/LiveQuery/Client').Client;
|
||||||
|
expect(Client.pushError).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
it('can set unknown command message handler for a parseWebSocket', function() {
|
it('can set unknown command message handler for a parseWebSocket', function() {
|
||||||
var parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
|
var parseLiveQueryServer = new ParseLiveQueryServer(10, 10, {});
|
||||||
// Make mock parseWebsocket
|
// Make mock parseWebsocket
|
||||||
@@ -1193,7 +1213,6 @@ describe('ParseLiveQueryServer', function() {
|
|||||||
jasmine.restoreLibrary('../src/LiveQuery/Subscription', 'Subscription');
|
jasmine.restoreLibrary('../src/LiveQuery/Subscription', 'Subscription');
|
||||||
jasmine.restoreLibrary('../src/LiveQuery/QueryTools', 'queryHash');
|
jasmine.restoreLibrary('../src/LiveQuery/QueryTools', 'queryHash');
|
||||||
jasmine.restoreLibrary('../src/LiveQuery/QueryTools', 'matchesQuery');
|
jasmine.restoreLibrary('../src/LiveQuery/QueryTools', 'matchesQuery');
|
||||||
jasmine.restoreLibrary('tv4', 'validate');
|
|
||||||
jasmine.restoreLibrary('../src/LiveQuery/ParsePubSub', 'ParsePubSub');
|
jasmine.restoreLibrary('../src/LiveQuery/ParsePubSub', 'ParsePubSub');
|
||||||
jasmine.restoreLibrary('../src/LiveQuery/SessionTokenCache', 'SessionTokenCache');
|
jasmine.restoreLibrary('../src/LiveQuery/SessionTokenCache', 'SessionTokenCache');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ const general = {
|
|||||||
'enum': ['connect', 'subscribe', 'unsubscribe', 'update']
|
'enum': ['connect', 'subscribe', 'unsubscribe', 'update']
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
'required': ['op']
|
||||||
};
|
};
|
||||||
|
|
||||||
const connect = {
|
const connect = {
|
||||||
|
|||||||
Reference in New Issue
Block a user