UNPKG

@stryker-mutator/core

Version:

The extendable JavaScript mutation testing framework

127 lines 7.09 kB
import { fileURLToPath, URL } from 'url'; import { expect } from 'chai'; import log4js from 'log4js'; import sinon from 'sinon'; import { LogConfigurator } from '../../../src/logging/index.js'; import { netUtils } from '../../../src/utils/net-utils.js'; describe('LogConfigurator', () => { const sut = LogConfigurator; let getFreePortStub; let log4jsConfigure; let log4jsShutdown; beforeEach(() => { getFreePortStub = sinon.stub(netUtils, 'getFreePort'); log4jsConfigure = sinon.stub(log4js, 'configure'); log4jsShutdown = sinon.stub(log4js, 'shutdown'); }); describe('configureMainProcess', () => { it('should configure console, file and console color', () => { const allowConsoleColors = true; sut.configureMainProcess("info" /* LogLevel.Information */, "trace" /* LogLevel.Trace */, allowConsoleColors); expect(log4jsConfigure).calledWith(createMasterConfig("info" /* LogLevel.Information */, "trace" /* LogLevel.Trace */, "trace" /* LogLevel.Trace */, allowConsoleColors)); }); it('should configure no colored console layout if `allowConsoleColors` is `false`', () => { const allowConsoleColors = false; sut.configureMainProcess("info" /* LogLevel.Information */, "trace" /* LogLevel.Trace */, allowConsoleColors); expect(log4jsConfigure).calledWith(createMasterConfig("info" /* LogLevel.Information */, "trace" /* LogLevel.Trace */, "trace" /* LogLevel.Trace */, allowConsoleColors)); }); it('should not configure file if it is "off"', () => { const allowConsoleColors = true; sut.configureMainProcess("info" /* LogLevel.Information */, "off" /* LogLevel.Off */, allowConsoleColors); const masterConfig = createMasterConfig("info" /* LogLevel.Information */, "off" /* LogLevel.Off */, "info" /* LogLevel.Information */, allowConsoleColors); delete masterConfig.appenders.file; delete masterConfig.appenders.filterLevelFile; delete masterConfig.appenders.stripAnsi; delete masterConfig.appenders.filterLog4jsCategoryFile; masterConfig.appenders.all.appenders = ['filterLevelConsole']; expect(log4jsConfigure).calledWith(masterConfig); }); }); describe('configureLoggingServer', () => { it('should configure console, file, server and console color', async () => { // Arrange const allowConsoleColors = true; const expectedLoggingContext = { port: 42, level: "error" /* LogLevel.Error */ }; getFreePortStub.resolves(expectedLoggingContext.port); const expectedConfig = createMasterConfig("error" /* LogLevel.Error */, "fatal" /* LogLevel.Fatal */, "error" /* LogLevel.Error */, allowConsoleColors); const serverAppender = { type: 'multiprocess', mode: 'master', loggerPort: 42, appender: 'all' }; expectedConfig.appenders.server = serverAppender; // Act const actualLoggingContext = await sut.configureLoggingServer("error" /* LogLevel.Error */, "fatal" /* LogLevel.Fatal */, allowConsoleColors); // Assert expect(log4jsConfigure).calledWith(expectedConfig); expect(getFreePortStub).called; expect(actualLoggingContext).deep.eq(expectedLoggingContext); }); it('should configure no colored console layout if `allowConsoleColors` is `false`', async () => { // Arrange const allowConsoleColors = false; const expectedLoggingContext = { port: 42, level: "error" /* LogLevel.Error */ }; getFreePortStub.resolves(expectedLoggingContext.port); const expectedConfig = createMasterConfig("error" /* LogLevel.Error */, "fatal" /* LogLevel.Fatal */, "error" /* LogLevel.Error */, allowConsoleColors); const serverAppender = { type: 'multiprocess', mode: 'master', loggerPort: 42, appender: 'all' }; expectedConfig.appenders.server = serverAppender; // Act const actualLoggingContext = await sut.configureLoggingServer("error" /* LogLevel.Error */, "fatal" /* LogLevel.Fatal */, allowConsoleColors); // Assert expect(log4jsConfigure).calledWith(expectedConfig); expect(getFreePortStub).called; expect(actualLoggingContext).deep.eq(expectedLoggingContext); }); }); describe('configureChildProcess', () => { it('should configure the logging client', () => { sut.configureChildProcess({ port: 42, level: "info" /* LogLevel.Information */ }); const multiProcessAppender = { type: 'multiprocess', mode: 'worker', loggerPort: 42 }; const expectedConfig = { appenders: { all: multiProcessAppender, }, categories: { default: { level: "info" /* LogLevel.Information */, appenders: ['all'] }, }, }; expect(log4jsConfigure).calledWith(expectedConfig); }); }); describe('shutdown', () => { it('should shutdown log4js', async () => { log4jsShutdown.callsArg(0); await sut.shutdown(); expect(log4jsShutdown).called; }); }); function createMasterConfig(consoleLevel, fileLevel, defaultLevel, allowConsoleColors) { const coloredLayout = { pattern: '%[%r (%z) %p %c%] %m', type: 'pattern', }; const notColoredLayout = { pattern: '%r (%z) %p %c %m', type: 'pattern', }; const consoleLayout = allowConsoleColors ? coloredLayout : notColoredLayout; return { appenders: { all: { type: fileURLToPath(new URL('../../../src/logging/multi-appender.cjs', import.meta.url)), appenders: ['filterLevelConsole', 'filterLevelFile'], }, console: { type: 'stdout', layout: consoleLayout }, file: { type: 'file', layout: notColoredLayout, filename: 'stryker.log' }, filterLog4jsCategoryConsole: { type: 'categoryFilter', appender: 'console', exclude: 'log4js' }, filterLog4jsCategoryFile: { type: 'categoryFilter', appender: 'stripAnsi', exclude: 'log4js' }, filterLevelConsole: { type: 'logLevelFilter', appender: 'filterLog4jsCategoryConsole', level: consoleLevel }, stripAnsi: { type: fileURLToPath(new URL('../../../src/logging/strip-ansi-appender.cjs', import.meta.url)), appender: 'file', }, filterLevelFile: { type: 'logLevelFilter', appender: 'filterLog4jsCategoryFile', level: fileLevel }, }, categories: { default: { level: defaultLevel, appenders: ['all'] }, }, }; } }); //# sourceMappingURL=log-configurator.spec.js.map