Skip to content

Commit 1330f0a

Browse files
committed
added missing test
1 parent 2ff4ecc commit 1330f0a

File tree

2 files changed

+133
-0
lines changed

2 files changed

+133
-0
lines changed

test/parallel/test-log-basic.js

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,97 @@ describe('multiple consumers', () => {
463463
});
464464
});
465465

466+
describe('LogConsumer level enabled getter', () => {
467+
it('should have enabled property for each level', () => {
468+
const consumer = new LogConsumer({ level: 'warn' });
469+
assert.strictEqual(consumer.trace.enabled, false);
470+
assert.strictEqual(consumer.debug.enabled, false);
471+
assert.strictEqual(consumer.info.enabled, false);
472+
assert.strictEqual(consumer.warn.enabled, true);
473+
assert.strictEqual(consumer.error.enabled, true);
474+
assert.strictEqual(consumer.fatal.enabled, true);
475+
});
476+
477+
it('should have all levels enabled when level is trace', () => {
478+
const consumer = new LogConsumer({ level: 'trace' });
479+
assert.strictEqual(consumer.trace.enabled, true);
480+
assert.strictEqual(consumer.debug.enabled, true);
481+
assert.strictEqual(consumer.info.enabled, true);
482+
assert.strictEqual(consumer.warn.enabled, true);
483+
assert.strictEqual(consumer.error.enabled, true);
484+
assert.strictEqual(consumer.fatal.enabled, true);
485+
});
486+
487+
it('should have only fatal enabled when level is fatal', () => {
488+
const consumer = new LogConsumer({ level: 'fatal' });
489+
assert.strictEqual(consumer.trace.enabled, false);
490+
assert.strictEqual(consumer.debug.enabled, false);
491+
assert.strictEqual(consumer.info.enabled, false);
492+
assert.strictEqual(consumer.warn.enabled, false);
493+
assert.strictEqual(consumer.error.enabled, false);
494+
assert.strictEqual(consumer.fatal.enabled, true);
495+
});
496+
});
497+
498+
describe('JSONConsumer stream options', () => {
499+
it('should accept a writable stream object', () => {
500+
const stream = new TestStream();
501+
const consumer = new JSONConsumer({ stream, level: 'info' });
502+
consumer.attach();
503+
const logger = new Logger({ level: 'info' });
504+
505+
logger.info('stream object test');
506+
consumer.flushSync();
507+
508+
assert.strictEqual(stream.logs.length, 1);
509+
assert.strictEqual(stream.logs[0].msg, 'stream object test');
510+
});
511+
512+
it('should throw for invalid stream type', () => {
513+
assert.throws(() => {
514+
new JSONConsumer({ stream: true, level: 'info' });
515+
}, {
516+
code: 'ERR_INVALID_ARG_TYPE',
517+
});
518+
});
519+
520+
it('should accept a file descriptor number', () => {
521+
// fd 1 is stdout - just verify no throw on construction
522+
const consumer = new JSONConsumer({ stream: 1, level: 'info' });
523+
assert.ok(consumer);
524+
});
525+
526+
it('should throw for invalid consumer level', () => {
527+
assert.throws(() => {
528+
new JSONConsumer({ level: 'invalid' });
529+
}, {
530+
code: 'ERR_INVALID_ARG_VALUE',
531+
});
532+
});
533+
});
534+
535+
describe('JSONConsumer flush and end', () => {
536+
it('should call flush with callback', (_, done) => {
537+
const stream = new TestStream();
538+
const consumer = new JSONConsumer({ stream, level: 'info' });
539+
consumer.flush(() => {
540+
done();
541+
});
542+
});
543+
544+
it('should call flushSync without error', () => {
545+
const stream = new TestStream();
546+
const consumer = new JSONConsumer({ stream, level: 'info' });
547+
consumer.flushSync();
548+
});
549+
550+
it('should call end without error', () => {
551+
const stream = new TestStream();
552+
const consumer = new JSONConsumer({ stream, level: 'info' });
553+
consumer.end();
554+
});
555+
});
556+
466557
describe('channels export', () => {
467558
it('should export channel objects for all levels', () => {
468559
assert.strictEqual(typeof channels, 'object');

test/parallel/test-logger-serializers.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,48 @@ describe('Logger serializers', () => {
177177
assert.strictEqual(log.err.cause.message, 'Root cause');
178178
assert.ok(log.err.cause.stack);
179179
});
180+
181+
it('should handle circular error cause', () => {
182+
const stream = new TestStream();
183+
const consumer = new JSONConsumer({ stream, level: 'info' });
184+
consumer.attach();
185+
186+
const logger = new Logger({ level: 'info' });
187+
188+
const error = new Error('Circular error');
189+
error.cause = error; // Self-referencing cause
190+
191+
logger.error(error);
192+
consumer.flushSync();
193+
194+
const log = stream.logs[0];
195+
assert.strictEqual(log.err.message, 'Circular error');
196+
assert.strictEqual(log.err.cause, '[Circular]');
197+
});
198+
199+
it('should handle deeply nested circular error causes', () => {
200+
const stream = new TestStream();
201+
const consumer = new JSONConsumer({ stream, level: 'info' });
202+
consumer.attach();
203+
204+
const logger = new Logger({ level: 'info' });
205+
206+
const err1 = new Error('Error 1');
207+
const err2 = new Error('Error 2');
208+
const err3 = new Error('Error 3');
209+
err1.cause = err2;
210+
err2.cause = err3;
211+
err3.cause = err1; // Circular back to err1
212+
213+
logger.error(err1);
214+
consumer.flushSync();
215+
216+
const log = stream.logs[0];
217+
assert.strictEqual(log.err.message, 'Error 1');
218+
assert.strictEqual(log.err.cause.message, 'Error 2');
219+
assert.strictEqual(log.err.cause.cause.message, 'Error 3');
220+
assert.strictEqual(log.err.cause.cause.cause, '[Circular]');
221+
});
180222
});
181223

182224
describe('serializer with fields parameter', () => {

0 commit comments

Comments
 (0)