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:
Apoorv Mishra
2022-08-11 21:39:17 +05:30
committed by GitHub
parent 8e1f42a9cb
commit 0c51bfb899
68 changed files with 463 additions and 178 deletions

View File

@@ -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 };
}