diff --git a/server-ce/test/host-admin.js b/server-ce/test/host-admin.js index c76151745c..5a066f96ed 100644 --- a/server-ce/test/host-admin.js +++ b/server-ce/test/host-admin.js @@ -42,6 +42,7 @@ function defaultDockerComposeOverride() { environment: {}, }, 'git-bridge': {}, + mongo: {}, }, } } @@ -55,7 +56,7 @@ function readDockerComposeOverride() { if (error.code !== 'ENOENT') { throw error } - return defaultDockerComposeOverride + return defaultDockerComposeOverride() } } @@ -281,11 +282,13 @@ function setVarsDockerCompose({ } if (mongoVersion) { - cfg.services.mongo = { - image: `mongo:${mongoVersion}`, - } + cfg.services.mongo.image = `mongo:${mongoVersion}` } else { - delete cfg.services.mongo + delete cfg.services.mongo.image + } + + if (version === 'latest') { + cfg.services.mongo.command = '--replSet overleaf --notablescan' } writeDockerComposeOverride(cfg) diff --git a/services/web/scripts/e2e_test_setup.mjs b/services/web/scripts/e2e_test_setup.mjs index 3667b83649..f7c8b5d12f 100644 --- a/services/web/scripts/e2e_test_setup.mjs +++ b/services/web/scripts/e2e_test_setup.mjs @@ -3,7 +3,7 @@ import Path from 'node:path' import { fileURLToPath } from 'node:url' import { promiseMapWithLimit } from '@overleaf/promise-utils' import Settings from '@overleaf/settings' -import { db } from '../app/src/infrastructure/mongodb.mjs' +import { connectionPromise, db } from '../app/src/infrastructure/mongodb.mjs' import GracefulShutdown from '../app/src/infrastructure/GracefulShutdown.mjs' import ProjectDeleter from '../app/src/Features/Project/ProjectDeleter.mjs' import SplitTestManager from '../app/src/Features/SplitTests/SplitTestManager.mjs' @@ -62,7 +62,7 @@ async function deleteUser(email) { // Hard-delete the users projects. const projects = await db.deletedProjects .find( - { deletedProjectOwnerId: user._id }, + { 'deleterData.deletedProjectOwnerId': user._id }, { projection: { deletedProjectId: 1 } } ) .toArray() @@ -137,10 +137,31 @@ async function provisionSplitTests() { await SplitTestManager.replaceSplitTests(SPLIT_TESTS) } +async function checkNoTableScan() { + const client = await connectionPromise + const { notablescan } = await client + .db() + .admin() + .command({ getParameter: 1, notablescan: 1 }) + if (!notablescan) { + console.error() + console.error('!!! mongo is running without --notablescan') + console.error() + console.error('To fix this, either') + console.error('- run "internal$ bin/e2e_test_setup"') + console.error( + '- or add MONGO_EXTRA_ARGS=--notablescan in config/local.env and apply with "internal$ bin/up mongo"' + ) + console.error() + throw new Error('mongo is running without --notablescan') + } +} + async function main() { if (process.env.NODE_ENV !== 'development') { throw new Error('only available in dev-env') } + await checkNoTableScan() await Promise.all([purgeNewUsers(), provisionUsers(), provisionSplitTests()]) }