145 lines
4.9 KiB
JavaScript
145 lines
4.9 KiB
JavaScript
const Config = require('../lib/Config');
|
|
|
|
describe('Config Keys', () => {
|
|
const invalidKeyErrorMessage = 'Invalid key\\(s\\) found in Parse Server configuration';
|
|
let loggerErrorSpy;
|
|
|
|
beforeEach(async () => {
|
|
const logger = require('../lib/logger').logger;
|
|
loggerErrorSpy = spyOn(logger, 'error').and.callThrough();
|
|
spyOn(Config, 'validateOptions').and.callFake(() => {});
|
|
});
|
|
|
|
it('recognizes invalid keys in root', async () => {
|
|
await expectAsync(reconfigureServer({
|
|
invalidKey: 1,
|
|
})).toBeResolved();
|
|
const error = loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '');
|
|
expect(error).toMatch(invalidKeyErrorMessage);
|
|
});
|
|
|
|
it('recognizes invalid keys in pages.customUrls', async () => {
|
|
await expectAsync(reconfigureServer({
|
|
pages: {
|
|
customUrls: {
|
|
invalidKey: 1,
|
|
EmailVerificationSendFail: 1,
|
|
}
|
|
}
|
|
})).toBeResolved();
|
|
const error = loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '');
|
|
expect(error).toMatch(invalidKeyErrorMessage);
|
|
expect(error).toMatch(`invalidKey`);
|
|
expect(error).toMatch(`EmailVerificationSendFail`);
|
|
});
|
|
|
|
it('recognizes invalid keys in liveQueryServerOptions', async () => {
|
|
await expectAsync(reconfigureServer({
|
|
liveQueryServerOptions: {
|
|
invalidKey: 1,
|
|
MasterKey: 1,
|
|
}
|
|
})).toBeResolved();
|
|
const error = loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '');
|
|
expect(error).toMatch(invalidKeyErrorMessage);
|
|
expect(error).toMatch(`MasterKey`);
|
|
});
|
|
|
|
it('recognizes invalid keys in rateLimit', async () => {
|
|
await expectAsync(reconfigureServer({
|
|
rateLimit: [
|
|
{ invalidKey: 1 },
|
|
{ RequestPath: 1 },
|
|
{ RequestTimeWindow: 1 },
|
|
]
|
|
})).toBeRejected();
|
|
const error = loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '');
|
|
expect(error).toMatch(invalidKeyErrorMessage);
|
|
expect(error).toMatch('rateLimit\\[0\\]\\.invalidKey');
|
|
expect(error).toMatch('rateLimit\\[1\\]\\.RequestPath');
|
|
expect(error).toMatch('rateLimit\\[2\\]\\.RequestTimeWindow');
|
|
});
|
|
|
|
it_only_db('mongo')('recognizes valid keys in default configuration', async () => {
|
|
await expectAsync(reconfigureServer({
|
|
...defaultConfiguration,
|
|
})).toBeResolved();
|
|
expect(loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '')).not.toMatch(invalidKeyErrorMessage);
|
|
});
|
|
|
|
it_only_db('mongo')('recognizes valid keys in databaseOptions (MongoDB)', async () => {
|
|
await expectAsync(reconfigureServer({
|
|
databaseURI: 'mongodb://localhost:27017/parse',
|
|
filesAdapter: null,
|
|
databaseAdapter: null,
|
|
databaseOptions: {
|
|
appName: 'MyParseApp',
|
|
|
|
// Cannot be tested as it requires authentication setup
|
|
// authMechanism: 'SCRAM-SHA-256',
|
|
// authMechanismProperties: { SERVICE_NAME: 'mongodb' },
|
|
|
|
authSource: 'admin',
|
|
autoSelectFamily: true,
|
|
autoSelectFamilyAttemptTimeout: 3000,
|
|
compressors: ['zlib'],
|
|
connectTimeoutMS: 5000,
|
|
directConnection: false,
|
|
disableIndexFieldValidation: true,
|
|
forceServerObjectId: false,
|
|
heartbeatFrequencyMS: 10000,
|
|
localThresholdMS: 15,
|
|
maxConnecting: 2,
|
|
maxIdleTimeMS: 60000,
|
|
maxPoolSize: 10,
|
|
maxStalenessSeconds: 90,
|
|
maxTimeMS: 1000,
|
|
minPoolSize: 5,
|
|
|
|
// Cannot be tested as it requires a proxy setup
|
|
// proxyHost: 'proxy.example.com',
|
|
// proxyPassword: 'proxypass',
|
|
// proxyPort: 1080,
|
|
// proxyUsername: 'proxyuser',
|
|
|
|
readConcernLevel: 'majority',
|
|
readPreference: 'secondaryPreferred',
|
|
readPreferenceTags: [{ dc: 'east' }],
|
|
|
|
// Cannot be tested as it requires a replica set setup
|
|
// replicaSet: 'myReplicaSet',
|
|
|
|
retryReads: true,
|
|
retryWrites: true,
|
|
serverMonitoringMode: 'auto',
|
|
serverSelectionTimeoutMS: 5000,
|
|
socketTimeoutMS: 5000,
|
|
|
|
// Cannot be tested as it requires a replica cluster setup
|
|
// srvMaxHosts: 0,
|
|
// srvServiceName: 'mongodb',
|
|
|
|
ssl: false,
|
|
tls: false,
|
|
tlsAllowInvalidCertificates: false,
|
|
tlsAllowInvalidHostnames: false,
|
|
tlsCAFile: __dirname + '/support/cert/cert.pem',
|
|
tlsCertificateKeyFile: __dirname + '/support/cert/cert.pem',
|
|
tlsCertificateKeyFilePassword: 'password',
|
|
waitQueueTimeoutMS: 5000,
|
|
zlibCompressionLevel: 6,
|
|
},
|
|
})).toBeResolved();
|
|
await expectAsync(reconfigureServer({
|
|
databaseURI: 'mongodb://localhost:27017/parse',
|
|
filesAdapter: null,
|
|
databaseAdapter: null,
|
|
databaseOptions: {
|
|
// The following option needs to be tested separately due to driver config rules
|
|
tlsInsecure: false,
|
|
},
|
|
})).toBeResolved();
|
|
expect(loggerErrorSpy.calls.all().reduce((s, call) => s += call.args[0], '')).not.toMatch(invalidKeyErrorMessage);
|
|
});
|
|
});
|