2020-12-08 09:20:59 +01:00
|
|
|
'use strict';
|
2020-10-08 07:42:49 +02:00
|
|
|
|
2021-02-03 13:08:43 +01:00
|
|
|
const apiHandler = require('../../node/handler/APIHandler');
|
|
|
|
const log4js = require('log4js');
|
2020-10-08 07:42:49 +02:00
|
|
|
const process = require('process');
|
2021-02-03 13:08:43 +01:00
|
|
|
const server = require('../../node/server');
|
|
|
|
const settings = require('../../node/utils/Settings');
|
|
|
|
const supertest = require('supertest');
|
|
|
|
const webaccess = require('../../node/hooks/express/webaccess');
|
2020-10-01 22:23:32 +02:00
|
|
|
|
|
|
|
const backups = {};
|
2021-02-13 01:41:55 +01:00
|
|
|
let agentPromise = null;
|
2020-10-01 22:23:32 +02:00
|
|
|
|
2020-10-08 07:37:17 +02:00
|
|
|
exports.apiKey = apiHandler.exportedForTestingOnly.apiKey;
|
2020-10-01 22:23:32 +02:00
|
|
|
exports.agent = null;
|
|
|
|
exports.baseUrl = null;
|
|
|
|
exports.httpServer = null;
|
|
|
|
exports.logger = log4js.getLogger('test');
|
|
|
|
|
2021-10-31 03:18:42 +01:00
|
|
|
const logger = exports.logger;
|
|
|
|
const logLevel = logger.level;
|
2020-10-04 23:29:45 +02:00
|
|
|
|
2020-10-08 07:42:49 +02:00
|
|
|
// Mocha doesn't monitor unhandled Promise rejections, so convert them to uncaught exceptions.
|
|
|
|
// https://github.com/mochajs/mocha/issues/2640
|
|
|
|
process.on('unhandledRejection', (reason, promise) => { throw reason; });
|
|
|
|
|
2021-02-13 01:39:31 +01:00
|
|
|
before(async function () {
|
|
|
|
this.timeout(60000);
|
|
|
|
await exports.init();
|
|
|
|
});
|
|
|
|
|
2020-11-23 19:21:51 +01:00
|
|
|
exports.init = async function () {
|
2021-02-13 01:41:55 +01:00
|
|
|
if (agentPromise != null) return await agentPromise;
|
|
|
|
let agentResolve;
|
|
|
|
agentPromise = new Promise((resolve) => { agentResolve = resolve; });
|
2020-10-01 22:23:32 +02:00
|
|
|
|
2020-10-04 23:29:45 +02:00
|
|
|
if (!logLevel.isLessThanOrEqualTo(log4js.levels.DEBUG)) {
|
2021-10-31 03:18:42 +01:00
|
|
|
logger.warn('Disabling non-test logging for the duration of the test. ' +
|
|
|
|
'To enable non-test logging, change the loglevel setting to DEBUG.');
|
2020-10-04 23:29:45 +02:00
|
|
|
log4js.setGlobalLogLevel(log4js.levels.OFF);
|
2021-10-31 03:18:42 +01:00
|
|
|
logger.setLevel(logLevel);
|
2020-10-04 23:29:45 +02:00
|
|
|
}
|
|
|
|
|
2020-10-01 22:23:32 +02:00
|
|
|
// Note: This is only a shallow backup.
|
|
|
|
backups.settings = Object.assign({}, settings);
|
|
|
|
// Start the Etherpad server on a random unused port.
|
|
|
|
settings.port = 0;
|
|
|
|
settings.ip = 'localhost';
|
2021-02-17 02:44:58 +01:00
|
|
|
settings.importExportRateLimiting = {max: 0};
|
|
|
|
settings.commitRateLimiting = {duration: 0.001, points: 1e6};
|
2020-10-01 22:23:32 +02:00
|
|
|
exports.httpServer = await server.start();
|
|
|
|
exports.baseUrl = `http://localhost:${exports.httpServer.address().port}`;
|
2021-10-31 03:18:42 +01:00
|
|
|
logger.debug(`HTTP server at ${exports.baseUrl}`);
|
2020-10-01 22:23:32 +02:00
|
|
|
// Create a supertest user agent for the HTTP server.
|
|
|
|
exports.agent = supertest(exports.baseUrl);
|
|
|
|
// Speed up authn tests.
|
|
|
|
backups.authnFailureDelayMs = webaccess.authnFailureDelayMs;
|
|
|
|
webaccess.authnFailureDelayMs = 0;
|
|
|
|
|
2020-11-23 19:21:51 +01:00
|
|
|
after(async function () {
|
2020-10-01 22:23:32 +02:00
|
|
|
webaccess.authnFailureDelayMs = backups.authnFailureDelayMs;
|
|
|
|
// Note: This does not unset settings that were added.
|
|
|
|
Object.assign(settings, backups.settings);
|
2020-10-04 23:29:45 +02:00
|
|
|
log4js.setGlobalLogLevel(logLevel);
|
2020-12-22 07:08:50 +01:00
|
|
|
await server.exit();
|
2020-10-01 22:23:32 +02:00
|
|
|
});
|
|
|
|
|
2021-02-13 01:41:55 +01:00
|
|
|
agentResolve(exports.agent);
|
2020-10-01 22:23:32 +02:00
|
|
|
return exports.agent;
|
|
|
|
};
|