perf: reduce memory usage upon running server tests (#3949)
* perf: reduce memory usage upon running server tests * perf: plug leaks in server/routes * perf: plug leaks in server/scripts * perf: plug leaks in server/policies * perf: plug leaks in server/models * perf: plug leaks in server/middlewares * perf: plug leaks in server/commands * fix: missing await on db.flush * perf: plug leaks in server/queues * chore: remove unused legacy funcs * fix: await on db.flush * perf: await on GC to run in between tests * fix: remove db refs * fix: revert embeds * perf: plug leaks in shared/i18n
This commit is contained in:
@@ -1,24 +1,11 @@
|
||||
import TestServer from "fetch-test-server";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import { sequelize } from "@server/database/sequelize";
|
||||
import { sequelize as db } from "@server/database/sequelize";
|
||||
import { User, Document, Collection, Team } from "@server/models";
|
||||
import webService from "@server/services/web";
|
||||
|
||||
const sql = sequelize.getQueryInterface();
|
||||
const tables = Object.keys(sequelize.models).map((model) => {
|
||||
const n = sequelize.models[model].getTableName();
|
||||
return (sql.queryGenerator as any).quoteTable(
|
||||
typeof n === "string" ? n : n.tableName
|
||||
);
|
||||
});
|
||||
const flushQuery = `TRUNCATE ${tables.join(", ")} CASCADE`;
|
||||
|
||||
export function flushdb() {
|
||||
return sequelize.query(flushQuery);
|
||||
}
|
||||
|
||||
export const seed = async () => {
|
||||
return sequelize.transaction(async (transaction) => {
|
||||
return db.transaction(async (transaction) => {
|
||||
const team = await Team.create(
|
||||
{
|
||||
name: "Team",
|
||||
@@ -112,14 +99,35 @@ export const seed = async () => {
|
||||
});
|
||||
};
|
||||
|
||||
let testServer: typeof TestServer | undefined;
|
||||
|
||||
export function getTestServer() {
|
||||
if (testServer) {
|
||||
return testServer;
|
||||
}
|
||||
|
||||
const app = webService();
|
||||
testServer = new TestServer(app.callback());
|
||||
return testServer;
|
||||
const server = new TestServer(app.callback());
|
||||
|
||||
server.disconnect = async () => {
|
||||
await db.close();
|
||||
server.close();
|
||||
};
|
||||
|
||||
return server;
|
||||
}
|
||||
|
||||
export function getTestDatabase() {
|
||||
const flush = async () => {
|
||||
const sql = db.getQueryInterface();
|
||||
const tables = Object.keys(db.models).map((model) => {
|
||||
const n = db.models[model].getTableName();
|
||||
return (sql.queryGenerator as any).quoteTable(
|
||||
typeof n === "string" ? n : n.tableName
|
||||
);
|
||||
});
|
||||
const flushQuery = `TRUNCATE ${tables.join(", ")} CASCADE`;
|
||||
|
||||
await db.query(flushQuery);
|
||||
};
|
||||
|
||||
const disconnect = async () => {
|
||||
await db.close();
|
||||
};
|
||||
|
||||
return { flush, disconnect };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user