refactor: Split off LoggerInitializer.

This commit is contained in:
Ruben Verborgh 2020-12-07 22:16:30 +01:00 committed by Joachim Van Herwegen
parent 8fbb4f592e
commit b0ecf1c1d8
6 changed files with 49 additions and 16 deletions

View File

@ -7,9 +7,6 @@
"Setup:_serverFactory": { "Setup:_serverFactory": {
"@id": "urn:solid-server:default:ServerFactory" "@id": "urn:solid-server:default:ServerFactory"
}, },
"Setup:_loggerFactory": {
"@id": "urn:solid-server:default:LoggerFactory"
},
"Setup:_initializer": { "Setup:_initializer": {
"@id": "urn:solid-server:default:Initializer" "@id": "urn:solid-server:default:Initializer"
}, },
@ -24,6 +21,12 @@
"@id": "urn:solid-server:default:Initializer", "@id": "urn:solid-server:default:Initializer",
"@type": "AllVoidCompositeHandler", "@type": "AllVoidCompositeHandler",
"AllVoidCompositeHandler:_handlers": [ "AllVoidCompositeHandler:_handlers": [
{
"@type": "LoggerInitializer",
"LoggerInitializer:_loggerFactory": {
"@id": "urn:solid-server:default:LoggerFactory"
}
},
{ {
"@type": "AclInitializer", "@type": "AclInitializer",
"AclInitializer:_baseUrl": { "AclInitializer:_baseUrl": {

View File

@ -16,6 +16,7 @@ export * from './authorization/WebAclAuthorizer';
export * from './init/AclInitializer'; export * from './init/AclInitializer';
export * from './init/CliRunner'; export * from './init/CliRunner';
export * from './init/Initializer'; export * from './init/Initializer';
export * from './init/LoggerInitializer';
export * from './init/Setup'; export * from './init/Setup';
// LDP/HTTP/Metadata // LDP/HTTP/Metadata

View File

@ -0,0 +1,19 @@
import type { LoggerFactory } from '../logging/LoggerFactory';
import { setGlobalLoggerFactory } from '../logging/LogUtil';
import { Initializer } from './Initializer';
/**
* Sets up the global logger factory.
*/
export class LoggerInitializer extends Initializer {
private readonly loggerFactory: LoggerFactory;
public constructor(loggerFactory: LoggerFactory) {
super();
this.loggerFactory = loggerFactory;
}
public async handle(): Promise<void> {
setGlobalLoggerFactory(this.loggerFactory);
}
}

View File

@ -1,5 +1,3 @@
import type { LoggerFactory } from '../logging/LoggerFactory';
import { getLoggerFor, setGlobalLoggerFactory } from '../logging/LogUtil';
import type { HttpServerFactory } from '../server/HttpServerFactory'; import type { HttpServerFactory } from '../server/HttpServerFactory';
import type { Initializer } from './Initializer'; import type { Initializer } from './Initializer';
@ -7,23 +5,19 @@ import type { Initializer } from './Initializer';
* Invokes all logic to setup a server. * Invokes all logic to setup a server.
*/ */
export class Setup { export class Setup {
protected readonly logger = getLoggerFor(this);
private readonly serverFactory: HttpServerFactory; private readonly serverFactory: HttpServerFactory;
private readonly loggerFactory: LoggerFactory;
private readonly initializer: Initializer; private readonly initializer: Initializer;
private readonly base: string; private readonly base: string;
private readonly port: number; private readonly port: number;
public constructor( public constructor(
serverFactory: HttpServerFactory,
loggerFactory: LoggerFactory,
initializer: Initializer, initializer: Initializer,
serverFactory: HttpServerFactory,
base: string, base: string,
port: number, port: number,
) { ) {
this.serverFactory = serverFactory;
this.loggerFactory = loggerFactory;
this.initializer = initializer; this.initializer = initializer;
this.serverFactory = serverFactory;
this.base = base; this.base = base;
this.port = port; this.port = port;
} }
@ -32,10 +26,7 @@ export class Setup {
* Set up a server. * Set up a server.
*/ */
public async setup(): Promise<string> { public async setup(): Promise<string> {
setGlobalLoggerFactory(this.loggerFactory);
await this.initializer.handleSafe(); await this.initializer.handleSafe();
this.serverFactory.startServer(this.port); this.serverFactory.startServer(this.port);
return this.base; return this.base;
} }

View File

@ -0,0 +1,20 @@
import { LoggerInitializer } from '../../../src/init/LoggerInitializer';
import type { LoggerFactory } from '../../../src/logging/LoggerFactory';
import { setGlobalLoggerFactory } from '../../../src/logging/LogUtil';
jest.mock('../../../src/logging/LogUtil');
describe('LoggerInitializer', (): void => {
const loggerFactory = {} as LoggerFactory;
let initializer: LoggerInitializer;
beforeAll(async(): Promise<void> => {
initializer = new LoggerInitializer(loggerFactory);
});
it('sets the global logger factory.', async(): Promise<void> => {
await initializer.handle();
expect(setGlobalLoggerFactory).toHaveBeenCalledTimes(1);
expect(setGlobalLoggerFactory).toHaveBeenCalledWith(loggerFactory);
});
});

View File

@ -1,6 +1,5 @@
import type { Initializer } from '../../../src/init/Initializer'; import type { Initializer } from '../../../src/init/Initializer';
import { Setup } from '../../../src/init/Setup'; import { Setup } from '../../../src/init/Setup';
import { VoidLoggerFactory } from '../../../src/logging/VoidLoggerFactory';
import type { HttpServerFactory } from '../../../src/server/HttpServerFactory'; import type { HttpServerFactory } from '../../../src/server/HttpServerFactory';
describe('Setup', (): void => { describe('Setup', (): void => {
@ -12,7 +11,7 @@ describe('Setup', (): void => {
} as any; } as any;
beforeAll(async(): Promise<void> => { beforeAll(async(): Promise<void> => {
const setup = new Setup(serverFactory, new VoidLoggerFactory(), initializer, 'http://localhost:3000/', 3000); const setup = new Setup(initializer, serverFactory, 'http://localhost:3000/', 3000);
await setup.setup(); await setup.setup();
}); });