mirror of
https://github.com/Infisical/infisical.git
synced 2026-01-10 07:58:15 -05:00
163 lines
5.0 KiB
TypeScript
163 lines
5.0 KiB
TypeScript
// eslint-disable-next-line
|
|
import "ts-node/register";
|
|
|
|
import dotenv from "dotenv";
|
|
import { crypto } from "@app/lib/crypto/cryptography";
|
|
import path from "path";
|
|
|
|
import { seedData1 } from "@app/db/seed-data";
|
|
import { getDatabaseCredentials, getHsmConfig, initEnvConfig } from "@app/lib/config/env";
|
|
import { initLogger } from "@app/lib/logger";
|
|
import { main } from "@app/server/app";
|
|
import { AuthMethod, AuthTokenType } from "@app/services/auth/auth-type";
|
|
|
|
import { mockSmtpServer } from "./mocks/smtp";
|
|
import { initDbConnection } from "@app/db";
|
|
import { queueServiceFactory } from "@app/queue";
|
|
import { keyStoreFactory } from "@app/keystore/keystore";
|
|
import { keyValueStoreDALFactory } from "@app/keystore/key-value-store-dal";
|
|
import { initializeHsmModule } from "@app/ee/services/hsm/hsm-fns";
|
|
import { buildRedisFromConfig } from "@app/lib/config/redis";
|
|
import { superAdminDALFactory } from "@app/services/super-admin/super-admin-dal";
|
|
import { bootstrapCheck } from "@app/server/boot-strap-check";
|
|
import { hsmServiceFactory } from "@app/ee/services/hsm/hsm-service";
|
|
import { kmsRootConfigDALFactory } from "@app/services/kms/kms-root-config-dal";
|
|
|
|
dotenv.config({ path: path.join(__dirname, "../../.env.test"), debug: true });
|
|
export default {
|
|
name: "knex-env",
|
|
transformMode: "ssr",
|
|
async setup() {
|
|
const logger = initLogger();
|
|
const databaseCredentials = getDatabaseCredentials(logger);
|
|
const hsmConfig = getHsmConfig(logger);
|
|
|
|
const db = initDbConnection({
|
|
dbConnectionUri: databaseCredentials.dbConnectionUri,
|
|
dbRootCert: databaseCredentials.dbRootCert
|
|
});
|
|
|
|
const superAdminDAL = superAdminDALFactory(db);
|
|
const kmsRootConfigDAL = kmsRootConfigDALFactory(db);
|
|
|
|
const hsmModule = initializeHsmModule(hsmConfig);
|
|
hsmModule.initialize();
|
|
|
|
const hsmService = hsmServiceFactory({
|
|
hsmModule: hsmModule.getModule(),
|
|
envConfig: hsmConfig
|
|
});
|
|
|
|
await hsmService.startService();
|
|
|
|
const envCfg = await initEnvConfig(hsmService, kmsRootConfigDAL, superAdminDAL, logger);
|
|
|
|
const redis = buildRedisFromConfig(envCfg);
|
|
await redis.flushdb("SYNC");
|
|
|
|
try {
|
|
await db.migrate.rollback(
|
|
{
|
|
directory: path.join(__dirname, "../src/db/migrations"),
|
|
extension: "ts",
|
|
tableName: "infisical_migrations"
|
|
},
|
|
true
|
|
);
|
|
|
|
await db.migrate.latest({
|
|
directory: path.join(__dirname, "../src/db/migrations"),
|
|
extension: "ts",
|
|
tableName: "infisical_migrations"
|
|
});
|
|
|
|
await db.seed.run({
|
|
directory: path.join(__dirname, "../src/db/seeds"),
|
|
extension: "ts"
|
|
});
|
|
|
|
const smtp = mockSmtpServer();
|
|
const queue = queueServiceFactory(envCfg, { dbConnectionUrl: envCfg.DB_CONNECTION_URI });
|
|
const keyValueStoreDAL = keyValueStoreDALFactory(db);
|
|
const keyStore = keyStoreFactory(envCfg, keyValueStoreDAL);
|
|
|
|
await queue.initialize();
|
|
|
|
const server = await main({
|
|
db,
|
|
smtp,
|
|
logger,
|
|
queue,
|
|
keyStore,
|
|
hsmService,
|
|
kmsRootConfigDAL,
|
|
superAdminDAL,
|
|
redis,
|
|
envConfig: envCfg
|
|
});
|
|
|
|
await bootstrapCheck({ db });
|
|
|
|
// @ts-expect-error type
|
|
globalThis.testServer = server;
|
|
// @ts-expect-error type
|
|
globalThis.testQueue = queue;
|
|
// @ts-expect-error type
|
|
globalThis.testSuperAdminDAL = superAdminDAL;
|
|
// @ts-expect-error type
|
|
globalThis.testKmsRootConfigDAL = kmsRootConfigDAL;
|
|
// @ts-expect-error type
|
|
globalThis.testHsmService = hsmService;
|
|
// @ts-expect-error type
|
|
globalThis.jwtAuthToken = crypto.jwt().sign(
|
|
{
|
|
authTokenType: AuthTokenType.ACCESS_TOKEN,
|
|
userId: seedData1.id,
|
|
tokenVersionId: seedData1.token.id,
|
|
authMethod: AuthMethod.EMAIL,
|
|
organizationId: seedData1.organization.id,
|
|
accessVersion: 1
|
|
},
|
|
envCfg.AUTH_SECRET,
|
|
{ expiresIn: envCfg.JWT_AUTH_LIFETIME }
|
|
);
|
|
} catch (error) {
|
|
// eslint-disable-next-line
|
|
console.log("[TEST] Error setting up environment", error);
|
|
await db.destroy();
|
|
throw error;
|
|
}
|
|
|
|
// custom setup
|
|
return {
|
|
async teardown() {
|
|
// @ts-expect-error type
|
|
await globalThis.testQueue.shutdown();
|
|
// @ts-expect-error type
|
|
await globalThis.testServer.close();
|
|
// @ts-expect-error type
|
|
delete globalThis.testServer;
|
|
// @ts-expect-error type
|
|
delete globalThis.testSuperAdminDAL;
|
|
// @ts-expect-error type
|
|
delete globalThis.jwtAuthToken;
|
|
// @ts-expect-error type
|
|
delete globalThis.testQueue;
|
|
// called after all tests with this env have been run
|
|
await db.migrate.rollback(
|
|
{
|
|
directory: path.join(__dirname, "../src/db/migrations"),
|
|
extension: "ts",
|
|
tableName: "infisical_migrations"
|
|
},
|
|
true
|
|
);
|
|
|
|
await redis.flushdb("ASYNC");
|
|
redis.disconnect();
|
|
await db.destroy();
|
|
}
|
|
};
|
|
}
|
|
};
|