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": {
"@id": "urn:solid-server:default:ServerFactory"
},
"Setup:_loggerFactory": {
"@id": "urn:solid-server:default:LoggerFactory"
},
"Setup:_initializer": {
"@id": "urn:solid-server:default:Initializer"
},
@ -24,6 +21,12 @@
"@id": "urn:solid-server:default:Initializer",
"@type": "AllVoidCompositeHandler",
"AllVoidCompositeHandler:_handlers": [
{
"@type": "LoggerInitializer",
"LoggerInitializer:_loggerFactory": {
"@id": "urn:solid-server:default:LoggerFactory"
}
},
{
"@type": "AclInitializer",
"AclInitializer:_baseUrl": {

View File

@ -16,6 +16,7 @@ export * from './authorization/WebAclAuthorizer';
export * from './init/AclInitializer';
export * from './init/CliRunner';
export * from './init/Initializer';
export * from './init/LoggerInitializer';
export * from './init/Setup';
// 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 { Initializer } from './Initializer';
@ -7,23 +5,19 @@ import type { Initializer } from './Initializer';
* Invokes all logic to setup a server.
*/
export class Setup {
protected readonly logger = getLoggerFor(this);
private readonly serverFactory: HttpServerFactory;
private readonly loggerFactory: LoggerFactory;
private readonly initializer: Initializer;
private readonly base: string;
private readonly port: number;
public constructor(
serverFactory: HttpServerFactory,
loggerFactory: LoggerFactory,
initializer: Initializer,
serverFactory: HttpServerFactory,
base: string,
port: number,
) {
this.serverFactory = serverFactory;
this.loggerFactory = loggerFactory;
this.initializer = initializer;
this.serverFactory = serverFactory;
this.base = base;
this.port = port;
}
@ -32,10 +26,7 @@ export class Setup {
* Set up a server.
*/
public async setup(): Promise<string> {
setGlobalLoggerFactory(this.loggerFactory);
await this.initializer.handleSafe();
this.serverFactory.startServer(this.port);
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 { Setup } from '../../../src/init/Setup';
import { VoidLoggerFactory } from '../../../src/logging/VoidLoggerFactory';
import type { HttpServerFactory } from '../../../src/server/HttpServerFactory';
describe('Setup', (): void => {
@ -12,7 +11,7 @@ describe('Setup', (): void => {
} as any;
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();
});