@@ -1,13 +1,13 @@
|
||||
'use strict'
|
||||
'use strict';
|
||||
|
||||
const Parse = require('parse/node');
|
||||
const ReadPreference = require('mongodb').ReadPreference;
|
||||
const rp = require('request-promise');
|
||||
const Config = require("../lib/Config");
|
||||
const Config = require('../lib/Config');
|
||||
|
||||
describe_only_db('mongo')('Read preference option', () => {
|
||||
it('should find in primary by default', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should find in primary by default', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -20,17 +20,21 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
const query = new Parse.Query('MyObject');
|
||||
query.equalTo('boolKey', false);
|
||||
|
||||
query.find().then((results) => {
|
||||
query.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(ReadPreference.PRIMARY);
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(
|
||||
ReadPreference.PRIMARY
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toBe(true);
|
||||
|
||||
@@ -40,23 +44,27 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
|
||||
it('should preserve the read preference set (#4831)', async () => {
|
||||
const { MongoStorageAdapter } = require('../lib/Adapters/Storage/Mongo/MongoStorageAdapter');
|
||||
const {
|
||||
MongoStorageAdapter,
|
||||
} = require('../lib/Adapters/Storage/Mongo/MongoStorageAdapter');
|
||||
const adapterOptions = {
|
||||
uri: 'mongodb://localhost:27017/parseServerMongoAdapterTestDatabase',
|
||||
mongoOptions: {
|
||||
readPreference: ReadPreference.NEAREST,
|
||||
}
|
||||
},
|
||||
};
|
||||
await reconfigureServer({ databaseAdapter: new MongoStorageAdapter(adapterOptions) });
|
||||
await reconfigureServer({
|
||||
databaseAdapter: new MongoStorageAdapter(adapterOptions),
|
||||
});
|
||||
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
const obj1 = new Parse.Object('MyObject');
|
||||
obj1.set('boolKey', true);
|
||||
|
||||
await Parse.Object.saveAll([obj0, obj1])
|
||||
await Parse.Object.saveAll([obj0, obj1]);
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
const query = new Parse.Query('MyObject');
|
||||
@@ -67,18 +75,20 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
expect(results[0].get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(ReadPreference.NEAREST);
|
||||
expect(call.args[2].readPreference.preference).toBe(
|
||||
ReadPreference.NEAREST
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toBe(true);
|
||||
});
|
||||
|
||||
it('should change read preference in the beforeFind trigger', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change read preference in the beforeFind trigger', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -88,23 +98,25 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject', req => {
|
||||
req.readPreference = 'SECONDARY';
|
||||
});
|
||||
|
||||
const query = new Parse.Query('MyObject');
|
||||
query.equalTo('boolKey', false);
|
||||
|
||||
query.find().then((results) => {
|
||||
query.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toEqual(ReadPreference.SECONDARY);
|
||||
|
||||
@@ -113,8 +125,8 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should change read preference in the beforeFind trigger even changing query', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change read preference in the beforeFind trigger even changing query', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -124,7 +136,7 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject', req => {
|
||||
req.query.equalTo('boolKey', true);
|
||||
req.readPreference = 'SECONDARY';
|
||||
});
|
||||
@@ -132,16 +144,18 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
const query = new Parse.Query('MyObject');
|
||||
query.equalTo('boolKey', false);
|
||||
|
||||
query.find().then((results) => {
|
||||
query.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(true);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toEqual(ReadPreference.SECONDARY);
|
||||
|
||||
@@ -150,8 +164,8 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should change read preference in the beforeFind trigger even returning query', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change read preference in the beforeFind trigger even returning query', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -161,7 +175,7 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject', req => {
|
||||
req.readPreference = 'SECONDARY';
|
||||
|
||||
const otherQuery = new Parse.Query('MyObject');
|
||||
@@ -172,16 +186,18 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
const query = new Parse.Query('MyObject');
|
||||
query.equalTo('boolKey', false);
|
||||
|
||||
query.find().then((results) => {
|
||||
query.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(true);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toEqual(ReadPreference.SECONDARY);
|
||||
|
||||
@@ -190,8 +206,8 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should change read preference in the beforeFind trigger even returning promise', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change read preference in the beforeFind trigger even returning promise', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -201,7 +217,7 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject', req => {
|
||||
req.readPreference = 'SECONDARY';
|
||||
|
||||
const otherQuery = new Parse.Query('MyObject');
|
||||
@@ -212,16 +228,18 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
const query = new Parse.Query('MyObject');
|
||||
query.equalTo('boolKey', false);
|
||||
|
||||
query.find().then((results) => {
|
||||
query.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(true);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toEqual(ReadPreference.SECONDARY);
|
||||
|
||||
@@ -230,8 +248,8 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should change read preference to PRIMARY_PREFERRED', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change read preference to PRIMARY_PREFERRED', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -241,33 +259,37 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject', req => {
|
||||
req.readPreference = 'PRIMARY_PREFERRED';
|
||||
});
|
||||
|
||||
const query = new Parse.Query('MyObject');
|
||||
query.equalTo('boolKey', false);
|
||||
|
||||
query.find().then((results) => {
|
||||
query.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toEqual(ReadPreference.PRIMARY_PREFERRED);
|
||||
expect(myObjectReadPreference).toEqual(
|
||||
ReadPreference.PRIMARY_PREFERRED
|
||||
);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should change read preference to SECONDARY_PREFERRED', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change read preference to SECONDARY_PREFERRED', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -277,33 +299,37 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject', req => {
|
||||
req.readPreference = 'SECONDARY_PREFERRED';
|
||||
});
|
||||
|
||||
const query = new Parse.Query('MyObject');
|
||||
query.equalTo('boolKey', false);
|
||||
|
||||
query.find().then((results) => {
|
||||
query.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toEqual(ReadPreference.SECONDARY_PREFERRED);
|
||||
expect(myObjectReadPreference).toEqual(
|
||||
ReadPreference.SECONDARY_PREFERRED
|
||||
);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should change read preference to NEAREST', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change read preference to NEAREST', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -313,23 +339,25 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject', req => {
|
||||
req.readPreference = 'NEAREST';
|
||||
});
|
||||
|
||||
const query = new Parse.Query('MyObject');
|
||||
query.equalTo('boolKey', false);
|
||||
|
||||
query.find().then((results) => {
|
||||
query.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toEqual(ReadPreference.NEAREST);
|
||||
|
||||
@@ -338,8 +366,8 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should change read preference for GET', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change read preference for GET', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -349,21 +377,23 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject', req => {
|
||||
req.readPreference = 'SECONDARY';
|
||||
});
|
||||
|
||||
const query = new Parse.Query('MyObject');
|
||||
|
||||
query.get(obj0.id).then((result) => {
|
||||
query.get(obj0.id).then(result => {
|
||||
expect(result.get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toEqual(ReadPreference.SECONDARY);
|
||||
|
||||
@@ -372,8 +402,8 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should change read preference for GET using API', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change read preference for GET using API', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -383,7 +413,7 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject', req => {
|
||||
req.readPreference = 'SECONDARY';
|
||||
});
|
||||
|
||||
@@ -392,18 +422,20 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
uri: 'http://localhost:8378/1/classes/MyObject/' + obj0.id,
|
||||
headers: {
|
||||
'X-Parse-Application-Id': 'test',
|
||||
'X-Parse-REST-API-Key': 'rest'
|
||||
'X-Parse-REST-API-Key': 'rest',
|
||||
},
|
||||
json: true,
|
||||
}).then(body => {
|
||||
expect(body.boolKey).toBe(false);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject') >= 0) {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toEqual(ReadPreference.SECONDARY);
|
||||
|
||||
@@ -412,8 +444,8 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should change read preference for count', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change read preference for count', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -423,20 +455,22 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'command').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject', req => {
|
||||
req.readPreference = 'SECONDARY';
|
||||
});
|
||||
|
||||
const query = new Parse.Query('MyObject');
|
||||
query.equalTo('boolKey', false);
|
||||
|
||||
query.count().then((result) => {
|
||||
query.count().then(result => {
|
||||
expect(result).toBe(1);
|
||||
|
||||
let myObjectReadPreference = null;
|
||||
databaseAdapter.database.serverConfig.command.calls.all().forEach((call) => {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
});
|
||||
databaseAdapter.database.serverConfig.command.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
myObjectReadPreference = call.args[2].readPreference.preference;
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference).toEqual(ReadPreference.SECONDARY);
|
||||
|
||||
@@ -445,8 +479,8 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should find includes in primary by default', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should find includes in primary by default', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject0');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -460,7 +494,7 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1, obj2]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject2', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject2', req => {
|
||||
req.readPreference = 'SECONDARY';
|
||||
});
|
||||
|
||||
@@ -469,29 +503,40 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
query.include('myObject1');
|
||||
query.include('myObject1.myObject0');
|
||||
|
||||
query.find().then((results) => {
|
||||
query.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
const firstResult = results[0];
|
||||
expect(firstResult.get('boolKey')).toBe(false);
|
||||
expect(firstResult.get('myObject1').get('boolKey')).toBe(true);
|
||||
expect(firstResult.get('myObject1').get('myObject0').get('boolKey')).toBe(false);
|
||||
expect(
|
||||
firstResult
|
||||
.get('myObject1')
|
||||
.get('myObject0')
|
||||
.get('boolKey')
|
||||
).toBe(false);
|
||||
|
||||
let myObjectReadPreference0 = null;
|
||||
let myObjectReadPreference1 = null;
|
||||
let myObjectReadPreference2 = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(ReadPreference.PRIMARY);
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(ReadPreference.PRIMARY);
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(
|
||||
ReadPreference.PRIMARY
|
||||
);
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(
|
||||
ReadPreference.PRIMARY
|
||||
);
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference0).toBe(true);
|
||||
expect(myObjectReadPreference1).toBe(true);
|
||||
@@ -502,8 +547,8 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should change includes read preference', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change includes read preference', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject0');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -517,7 +562,7 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1, obj2]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject2', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject2', req => {
|
||||
req.readPreference = 'SECONDARY_PREFERRED';
|
||||
req.includeReadPreference = 'SECONDARY';
|
||||
});
|
||||
@@ -527,40 +572,48 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
query.include('myObject1');
|
||||
query.include('myObject1.myObject0');
|
||||
|
||||
query.find().then((results) => {
|
||||
query.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
const firstResult = results[0];
|
||||
expect(firstResult.get('boolKey')).toBe(false);
|
||||
expect(firstResult.get('myObject1').get('boolKey')).toBe(true);
|
||||
expect(firstResult.get('myObject1').get('myObject0').get('boolKey')).toBe(false);
|
||||
|
||||
expect(
|
||||
firstResult
|
||||
.get('myObject1')
|
||||
.get('myObject0')
|
||||
.get('boolKey')
|
||||
).toBe(false);
|
||||
|
||||
let myObjectReadPreference0 = null;
|
||||
let myObjectReadPreference1 = null;
|
||||
let myObjectReadPreference2 = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference0).toEqual(ReadPreference.SECONDARY);
|
||||
expect(myObjectReadPreference1).toEqual(ReadPreference.SECONDARY);
|
||||
expect(myObjectReadPreference2).toEqual(ReadPreference.SECONDARY_PREFERRED);
|
||||
expect(myObjectReadPreference2).toEqual(
|
||||
ReadPreference.SECONDARY_PREFERRED
|
||||
);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should find subqueries in primary by default', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should find subqueries in primary by default', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject0');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -574,7 +627,7 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1, obj2]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject2', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject2', req => {
|
||||
req.readPreference = 'SECONDARY';
|
||||
});
|
||||
|
||||
@@ -587,26 +640,32 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
const query2 = new Parse.Query('MyObject2');
|
||||
query2.matchesQuery('myObject1', query1);
|
||||
|
||||
query2.find().then((results) => {
|
||||
query2.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference0 = null;
|
||||
let myObjectReadPreference1 = null;
|
||||
let myObjectReadPreference2 = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(ReadPreference.PRIMARY);
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(ReadPreference.PRIMARY);
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(
|
||||
ReadPreference.PRIMARY
|
||||
);
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = true;
|
||||
expect(call.args[2].readPreference.preference).toBe(
|
||||
ReadPreference.PRIMARY
|
||||
);
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference0).toBe(true);
|
||||
expect(myObjectReadPreference1).toBe(true);
|
||||
@@ -617,8 +676,8 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('should change subqueries read preference when using matchesQuery', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change subqueries read preference when using matchesQuery', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject0');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -632,7 +691,7 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1, obj2]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject2', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject2', req => {
|
||||
req.readPreference = 'SECONDARY_PREFERRED';
|
||||
req.subqueryReadPreference = 'SECONDARY';
|
||||
});
|
||||
@@ -646,36 +705,40 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
const query2 = new Parse.Query('MyObject2');
|
||||
query2.matchesQuery('myObject1', query1);
|
||||
|
||||
query2.find().then((results) => {
|
||||
query2.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference0 = null;
|
||||
let myObjectReadPreference1 = null;
|
||||
let myObjectReadPreference2 = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference0).toEqual(ReadPreference.SECONDARY);
|
||||
expect(myObjectReadPreference1).toEqual(ReadPreference.SECONDARY);
|
||||
expect(myObjectReadPreference2).toEqual(ReadPreference.SECONDARY_PREFERRED);
|
||||
expect(myObjectReadPreference2).toEqual(
|
||||
ReadPreference.SECONDARY_PREFERRED
|
||||
);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should change subqueries read preference when using doesNotMatchQuery', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change subqueries read preference when using doesNotMatchQuery', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject0');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -689,7 +752,7 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1, obj2]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject2', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject2', req => {
|
||||
req.readPreference = 'SECONDARY_PREFERRED';
|
||||
req.subqueryReadPreference = 'SECONDARY';
|
||||
});
|
||||
@@ -703,36 +766,40 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
const query2 = new Parse.Query('MyObject2');
|
||||
query2.doesNotMatchQuery('myObject1', query1);
|
||||
|
||||
query2.find().then((results) => {
|
||||
query2.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference0 = null;
|
||||
let myObjectReadPreference1 = null;
|
||||
let myObjectReadPreference2 = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference0).toEqual(ReadPreference.SECONDARY);
|
||||
expect(myObjectReadPreference1).toEqual(ReadPreference.SECONDARY);
|
||||
expect(myObjectReadPreference2).toEqual(ReadPreference.SECONDARY_PREFERRED);
|
||||
expect(myObjectReadPreference2).toEqual(
|
||||
ReadPreference.SECONDARY_PREFERRED
|
||||
);
|
||||
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should change subqueries read preference when using matchesKeyInQuery and doesNotMatchKeyInQuery', (done) => {
|
||||
const databaseAdapter = (Config.get(Parse.applicationId)).database.adapter;
|
||||
it('should change subqueries read preference when using matchesKeyInQuery and doesNotMatchKeyInQuery', done => {
|
||||
const databaseAdapter = Config.get(Parse.applicationId).database.adapter;
|
||||
|
||||
const obj0 = new Parse.Object('MyObject0');
|
||||
obj0.set('boolKey', false);
|
||||
@@ -746,7 +813,7 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
Parse.Object.saveAll([obj0, obj1, obj2]).then(() => {
|
||||
spyOn(databaseAdapter.database.serverConfig, 'cursor').and.callThrough();
|
||||
|
||||
Parse.Cloud.beforeFind('MyObject2', (req) => {
|
||||
Parse.Cloud.beforeFind('MyObject2', req => {
|
||||
req.readPreference = 'SECONDARY_PREFERRED';
|
||||
req.subqueryReadPreference = 'SECONDARY';
|
||||
});
|
||||
@@ -761,28 +828,32 @@ describe_only_db('mongo')('Read preference option', () => {
|
||||
query2.matchesKeyInQuery('boolKey', 'boolKey', query0);
|
||||
query2.doesNotMatchKeyInQuery('boolKey', 'boolKey', query1);
|
||||
|
||||
query2.find().then((results) => {
|
||||
query2.find().then(results => {
|
||||
expect(results.length).toBe(1);
|
||||
expect(results[0].get('boolKey')).toBe(false);
|
||||
|
||||
let myObjectReadPreference0 = null;
|
||||
let myObjectReadPreference1 = null;
|
||||
let myObjectReadPreference2 = null;
|
||||
databaseAdapter.database.serverConfig.cursor.calls.all().forEach((call) => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
databaseAdapter.database.serverConfig.cursor.calls
|
||||
.all()
|
||||
.forEach(call => {
|
||||
if (call.args[0].indexOf('MyObject0') >= 0) {
|
||||
myObjectReadPreference0 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject1') >= 0) {
|
||||
myObjectReadPreference1 = call.args[2].readPreference.preference;
|
||||
}
|
||||
if (call.args[0].indexOf('MyObject2') >= 0) {
|
||||
myObjectReadPreference2 = call.args[2].readPreference.preference;
|
||||
}
|
||||
});
|
||||
|
||||
expect(myObjectReadPreference0).toEqual(ReadPreference.SECONDARY);
|
||||
expect(myObjectReadPreference1).toEqual(ReadPreference.SECONDARY);
|
||||
expect(myObjectReadPreference2).toEqual(ReadPreference.SECONDARY_PREFERRED);
|
||||
expect(myObjectReadPreference2).toEqual(
|
||||
ReadPreference.SECONDARY_PREFERRED
|
||||
);
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user