@stryker-mutator/core
Version:
The extendable JavaScript mutation testing framework
127 lines • 7.09 kB
JavaScript
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