log4js-node/test/tap/pause-test.js
2022-06-23 01:00:07 +08:00

123 lines
3.1 KiB
JavaScript

const tap = require('tap');
const fs = require('fs');
const log4js = require('../../lib/log4js');
const removeFiles = async (filenames) => {
if (!Array.isArray(filenames)) filenames = [filenames];
const promises = filenames.map((filename) => fs.promises.unlink(filename));
await Promise.allSettled(promises);
};
tap.test('Drain event test', (batch) => {
batch.test(
'Should emit pause event and resume when logging in a file with high frequency',
(t) => {
t.teardown(async () => {
process.off(
'log4js:pause',
process.listeners('log4js:pause')[
process.listeners('log4js:pause').length - 1
]
);
await removeFiles('logs/drain.log');
});
// Generate logger with 5k of highWaterMark config
log4js.configure({
appenders: {
file: {
type: 'file',
filename: 'logs/drain.log',
highWaterMark: 5 * 1024,
},
},
categories: {
default: { appenders: ['file'], level: 'debug' },
},
});
let paused = false;
let resumed = false;
process.on('log4js:pause', (value) => {
if (value) {
paused = true;
t.ok(value, 'log4js:pause, true');
} else {
resumed = true;
t.ok(!value, 'log4js:pause, false');
t.end();
}
});
const logger = log4js.getLogger();
while (!paused && !resumed) {
if (!paused) {
logger.info('This is a test for emitting drain event');
}
}
}
);
batch.test(
'Should emit pause event and resume when logging in a date file with high frequency',
(t) => {
t.teardown(async () => {
process.off(
'log4js:pause',
process.listeners('log4js:pause')[
process.listeners('log4js:pause').length - 1
]
);
await removeFiles('logs/date-file-drain.log');
});
// Generate date file logger with 5kb of highWaterMark config
log4js.configure({
appenders: {
file: {
type: 'dateFile',
filename: 'logs/date-file-drain.log',
highWaterMark: 5 * 1024,
},
},
categories: {
default: { appenders: ['file'], level: 'debug' },
},
});
let paused = false;
let resumed = false;
process.on('log4js:pause', (value) => {
if (value) {
paused = true;
t.ok(value, 'log4js:pause, true');
} else {
resumed = true;
t.ok(!value, 'log4js:pause, false');
t.end();
}
});
const logger = log4js.getLogger();
while (!paused && !resumed) {
if (!paused)
logger.info(
'This is a test for emitting drain event in date file logger'
);
}
}
);
batch.teardown(async () => {
try {
const files = fs.readdirSync('logs');
await removeFiles(files.map((filename) => `logs/${filename}`));
fs.rmdirSync('logs');
} catch (e) {
// doesn't matter
}
});
batch.end();
});