log4js-node/test/tap/default-settings-test.js

128 lines
4.1 KiB
JavaScript

const { test } = require("tap");
const debug = require("debug");
const sandbox = require("@log4js-node/sandboxed-module");
test("default settings", batch => {
const originalListener = process.listeners("warning")[process.listeners("warning").length - 1];
const warningListener = error => {
if (error.name === "DeprecationWarning") {
if (error.code.startsWith("log4js-node-DEP0001") || error.code.startsWith("log4js-node-DEP0002")) {
return;
}
}
originalListener(error);
};
process.off("warning", originalListener);
process.on("warning", warningListener);
const debugWasEnabled = debug.enabled("log4js:appenders");
const debugLogs = [];
const originalWrite = process.stderr.write;
process.stderr.write = (string, encoding, fd) => {
debugLogs.push(string);
if (debugWasEnabled) {
originalWrite.apply(process.stderr, [string, encoding, fd]);
}
};
const originalNamespace = debug.disable();
debug.enable(`${originalNamespace}, log4js:appenders`);
batch.teardown(async () => {
// next event loop so that past warnings will not be printed
setImmediate(() => {
process.off("warning", warningListener);
process.on("warning", originalListener);
});
process.stderr.write = originalWrite;
debug.enable(originalNamespace);
});
const output = [];
const log4js = sandbox.require("../../lib/log4js", {
requires: {
"./appenders/stdout": {
name: "stdout",
appender() { // deprecated
return function(evt) {
output.push(evt);
};
},
shutdown() { // deprecated
},
configure() {
return this.appender();
}
},
debug
}
});
let logger;
batch.test("should call configure() on getLogger() if not configured", t => {
const DEP0001 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length;
const DEP0002 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length;
logger = log4js.getLogger("default-settings");
t.equal(
debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length,
DEP0001 + 1,
"deprecation log4js-node-DEP0001 emitted"
);
t.equal(
debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length,
DEP0002 + 1,
"deprecation log4js-node-DEP0002 emitted"
);
t.end();
});
batch.test("nothing should be logged until level is set or configure() is called", t => {
const originalLevel = logger.level;
t.equal(
originalLevel.levelStr,
"OFF",
"default logger.level should be OFF"
);
logger.info("This should not be logged yet.");
t.equal(output.length, 0, "nothing should be logged");
t.test("after level is set", assert => {
logger.level = "debug";
logger.info("This should be logged.");
assert.equal(output.length, 1, "should log the message if level is set");
assert.equal(output[output.length - 1].data[0], "This should be logged.");
logger.level = originalLevel;
assert.end();
});
t.test("after configure() is called", assert => {
const DEP0001 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length;
const DEP0002 = debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length;
log4js.configure({
appenders: { stdout: { type: "stdout" } },
categories: { default: { appenders: ["stdout"], level: "debug" } }
});
assert.equal(
debugLogs.filter((e) => e.indexOf("log4js-node-DEP0001") > -1).length,
DEP0001 + 1,
"deprecation log4js-node-DEP0001 emitted"
);
assert.equal(
debugLogs.filter((e) => e.indexOf("log4js-node-DEP0002") > -1).length,
DEP0002 + 1,
"deprecation log4js-node-DEP0002 emitted"
);
logger.info("This should go to stdout.");
assert.equal(output.length, 2, "should log the message after configure() is called");
assert.equal(output[output.length - 1].data[0], "This should go to stdout.");
assert.end();
});
t.end();
});
batch.end();
});