diff --git a/__tests__/unit/core-manager/database/logs-database-service.test.ts b/__tests__/unit/core-manager/database/logs-database-service.test.ts index 10bc3b2ca1..fda4b81b6c 100644 --- a/__tests__/unit/core-manager/database/logs-database-service.test.ts +++ b/__tests__/unit/core-manager/database/logs-database-service.test.ts @@ -70,10 +70,15 @@ describe("LogsDatabaseService", () => { it("should dispose", async () => { database.boot(); database.dispose(); + }); + + it("should not throw if add is called after dispose", async () => { + database.boot(); + database.dispose(); expect(() => { database.add("info", "log content"); - }).toThrowError(); + }).not.toThrowError(); }); }); diff --git a/__tests__/unit/core-manager/service-provider.test.ts b/__tests__/unit/core-manager/service-provider.test.ts index 439aa31ea4..6c9d5808c4 100644 --- a/__tests__/unit/core-manager/service-provider.test.ts +++ b/__tests__/unit/core-manager/service-provider.test.ts @@ -33,7 +33,7 @@ beforeEach(() => { app.bind(Container.Identifiers.LogService).toConstantValue(logger); app.bind(Container.Identifiers.PluginConfiguration).to(Providers.PluginConfiguration).inSingletonScope(); - app.bind(Container.Identifiers.ConfigFlags).toConstantValue({ processType: "core" }); + app.bind(Container.Identifiers.ConfigFlags).toConstantValue({ processType: "manager" }); app.bind(Container.Identifiers.FilesystemService).toConstantValue({}); app.bind(Container.Identifiers.EventDispatcherService).toConstantValue(mockEventDispatcher); app.bind(Container.Identifiers.WalletAttributes).toConstantValue({}); @@ -84,6 +84,26 @@ describe("ServiceProvider", () => { await expect(serviceProvider.dispose()).toResolve(); }); + it("should not boot HTTP server and register actions when process is not manager", async () => { + app.rebind(Container.Identifiers.ConfigFlags).toConstantValue({ processType: "core" }); + + const usedDefaults = { ...defaults }; + + usedDefaults.server.http.enabled = true; + + setPluginConfiguration(app, serviceProvider, usedDefaults); + + await expect(serviceProvider.register()).toResolve(); + + await expect(serviceProvider.boot()).toResolve(); + + expect(app.isBound(Identifiers.HTTP)).toBeFalse(); + expect(app.isBound(Identifiers.HTTPS)).toBeFalse(); + expect(app.isBound(Identifiers.ActionReader)).toBeFalse(); + + await expect(serviceProvider.dispose()).toResolve(); + }); + it("should boot and dispose HTTPS server", async () => { const usedDefaults = { ...defaults }; diff --git a/packages/core-manager/src/database/database.ts b/packages/core-manager/src/database/database.ts index 7a4b4e901d..4f80dc1ea7 100644 --- a/packages/core-manager/src/database/database.ts +++ b/packages/core-manager/src/database/database.ts @@ -51,6 +51,10 @@ export class Database { this.database = new BetterSqlite3(filename); } + public isOpen(): boolean { + return this.database.open; + } + public boot(flush: boolean = false): void { this.exec(this.createDatabaseSQL()); diff --git a/packages/core-manager/src/database/logs-database-service.ts b/packages/core-manager/src/database/logs-database-service.ts index 6aa26a44de..52e5a76839 100644 --- a/packages/core-manager/src/database/logs-database-service.ts +++ b/packages/core-manager/src/database/logs-database-service.ts @@ -70,6 +70,10 @@ export class LogsDatabaseService { } public add(level: string, content: string): void { + if (!this.database.isOpen()) { + return; + } + this.database.add("logs", { process: this.configFlags.processType, level, diff --git a/packages/core-manager/src/service-provider.ts b/packages/core-manager/src/service-provider.ts index 593d8bfb9b..58f63762a9 100644 --- a/packages/core-manager/src/service-provider.ts +++ b/packages/core-manager/src/service-provider.ts @@ -21,7 +21,7 @@ export class ServiceProvider extends Providers.ServiceProvider { this.app.get(Identifiers.WatcherDatabaseService).boot(); this.app.bind(Identifiers.LogsDatabaseService).to(LogsDatabaseService).inSingletonScope(); - this.app.get(Identifiers.LogsDatabaseService).boot(); + this.app.get(Identifiers.LogsDatabaseService).boot(); if (this.config().getRequired<{ enabled: boolean }>("watcher").enabled) { this.app.bind(Identifiers.EventsListener).to(Listener).inSingletonScope(); @@ -43,15 +43,17 @@ export class ServiceProvider extends Providers.ServiceProvider { ); } - this.app.bind(Identifiers.ActionReader).to(ActionReader).inSingletonScope(); - this.app.bind(Identifiers.PluginFactory).to(PluginFactory).inSingletonScope(); - this.app.bind(Identifiers.BasicCredentialsValidator).to(Argon2id).inSingletonScope(); - this.app.bind(Identifiers.TokenValidator).to(SimpleTokenValidator).inSingletonScope(); - this.app.bind(Identifiers.SnapshotsManager).to(SnapshotsManager).inSingletonScope(); - this.app.bind(Identifiers.CliManager).to(CliManager).inSingletonScope(); + if (this.app.get(Container.Identifiers.ConfigFlags).processType === "manager") { + this.app.bind(Identifiers.ActionReader).to(ActionReader).inSingletonScope(); + this.app.bind(Identifiers.PluginFactory).to(PluginFactory).inSingletonScope(); + this.app.bind(Identifiers.BasicCredentialsValidator).to(Argon2id).inSingletonScope(); + this.app.bind(Identifiers.TokenValidator).to(SimpleTokenValidator).inSingletonScope(); + this.app.bind(Identifiers.SnapshotsManager).to(SnapshotsManager).inSingletonScope(); + this.app.bind(Identifiers.CliManager).to(CliManager).inSingletonScope(); - const pkg: Types.PackageJson = require("../package.json"); - this.app.bind(Identifiers.CLI).toConstantValue(ApplicationFactory.make(new Container.Container(), pkg)); + const pkg: Types.PackageJson = require("../package.json"); + this.app.bind(Identifiers.CLI).toConstantValue(ApplicationFactory.make(new Container.Container(), pkg)); + } } /** @@ -59,14 +61,16 @@ export class ServiceProvider extends Providers.ServiceProvider { * @memberof ServiceProvider */ public async boot(): Promise { - if (this.config().get("server.http.enabled")) { - await this.buildServer("http", Identifiers.HTTP); - await this.app.get(Identifiers.HTTP).boot(); - } + if (this.app.get(Container.Identifiers.ConfigFlags).processType === "manager") { + if (this.config().get("server.http.enabled")) { + await this.buildServer("http", Identifiers.HTTP); + await this.app.get(Identifiers.HTTP).boot(); + } - if (this.config().get("server.https.enabled")) { - await this.buildServer("https", Identifiers.HTTPS); - await this.app.get(Identifiers.HTTPS).boot(); + if (this.config().get("server.https.enabled")) { + await this.buildServer("https", Identifiers.HTTPS); + await this.app.get(Identifiers.HTTPS).boot(); + } } if (this.config().getRequired<{ enabled: boolean }>("watcher").enabled) { @@ -84,7 +88,7 @@ export class ServiceProvider extends Providers.ServiceProvider { } this.app.get(Identifiers.WatcherDatabaseService).dispose(); - this.app.get(Identifiers.LogsDatabaseService).dispose(); + this.app.get(Identifiers.LogsDatabaseService).dispose(); } public async required(): Promise { diff --git a/packages/core/bin/config/devnet/app.json b/packages/core/bin/config/devnet/app.json index 3dfb0431b5..bb2131a41a 100644 --- a/packages/core/bin/config/devnet/app.json +++ b/packages/core/bin/config/devnet/app.json @@ -4,6 +4,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-state" }, @@ -47,6 +50,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-state" }, @@ -84,6 +90,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-forger" } @@ -94,6 +103,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-snapshots" } diff --git a/packages/core/bin/config/mainnet/app.json b/packages/core/bin/config/mainnet/app.json index 502df55e36..e207b96f88 100644 --- a/packages/core/bin/config/mainnet/app.json +++ b/packages/core/bin/config/mainnet/app.json @@ -4,6 +4,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-state" }, @@ -44,6 +47,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-state" }, @@ -81,6 +87,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-forger" } @@ -91,6 +100,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-snapshots" } diff --git a/packages/core/bin/config/testnet/app.json b/packages/core/bin/config/testnet/app.json index 3dfb0431b5..bb2131a41a 100644 --- a/packages/core/bin/config/testnet/app.json +++ b/packages/core/bin/config/testnet/app.json @@ -4,6 +4,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-state" }, @@ -47,6 +50,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-state" }, @@ -84,6 +90,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-forger" } @@ -94,6 +103,9 @@ { "package": "@arkecosystem/core-logger-pino" }, + { + "package": "@arkecosystem/core-manager" + }, { "package": "@arkecosystem/core-snapshots" } diff --git a/packages/core/src/commands/core-run.ts b/packages/core/src/commands/core-run.ts index f588d3d9c5..297755185a 100644 --- a/packages/core/src/commands/core-run.ts +++ b/packages/core/src/commands/core-run.ts @@ -66,16 +66,6 @@ export class Command extends Commands.Command { networkStart: flags.networkStart, }, "@arkecosystem/core-forger": await buildBIP38(flags, this.app.getCorePath("config")), - "@arkecosystem/core-manager": { - server: { - http: { - enabled: false, - }, - https: { - enabled: false, - }, - }, - }, }, }); diff --git a/packages/core/src/commands/manager-run.ts b/packages/core/src/commands/manager-run.ts index 2af6a08beb..24376827a3 100644 --- a/packages/core/src/commands/manager-run.ts +++ b/packages/core/src/commands/manager-run.ts @@ -51,14 +51,7 @@ export class Command extends Commands.Command { await Utils.buildApplication({ flags, - plugins: { - "@arkecosystem/core-manager": { - watcher: { - enabled: false, - resetDatabase: process.env.CORE_RESET_DATABASE, - }, - }, - }, + plugins: {}, }); // Prevent resolving execute method