cocalc/src / smc-project / node_modules / broadway / node_modules / winston / test / transports / transport.js
50663 viewsvar assert = require('assert'),1winston = require('../../lib/winston'),2helpers = require('../helpers');34module.exports = function (transport, options) {5var logger = transport instanceof winston.Logger6? transport7: new winston.Logger({8transports: [9new transport(options)10]11});1213// hack to fix transports that don't log14// any unit of time smaller than seconds15var common = require('../../lib/winston/common');16common.timestamp = function() {17return new Date().toISOString();18};1920var transport = logger.transports[logger._names[0]];2122var out = {23'topic': logger,24'when passed valid options': {25'should have the proper methods defined': function () {26switch (transport.name) {27case 'console':28helpers.assertConsole(transport);29break;30case 'file':31helpers.assertFile(transport);32break;33case 'webhook':34helpers.assertWebhook(transport);35break;36case 'couchdb':37helpers.assertCouchdb(transport);38break;39}40assert.isFunction(transport.log);41}42},43'the log() method': helpers.testNpmLevels(transport,44'should respond with true', function (ign, err, logged) {45assert.isNull(err);46assert.isNotNull(logged);47}48),49'the stream() method': {50'using no options': {51'topic': function () {52if (!transport.stream) return;5354logger.log('info', 'hello world', {});5556var cb = this.callback,57j = 10,58i = 10,59results = [],60stream = logger.stream();6162stream.on('log', function (log) {63results.push(log);64results.stream = stream;65if (!--j) cb(null, results);66});6768stream.on('error', function () {});6970while (i--) logger.log('info', 'hello world ' + i, {});71},72'should stream logs': function (err, results) {73if (!transport.stream) return;74assert.isNull(err);75results.forEach(function (log) {76assert.ok(log.message.indexOf('hello world') === 077|| log.message.indexOf('test message') === 0);78});79results.stream.destroy();80}81},82'using the `start` option': {83'topic': function () {84if (!transport.stream) return;8586var cb = this.callback,87stream = logger.stream({ start: 0 });8889stream.on('log', function (log) {90log.stream = stream;91if (cb) cb(null, log);92cb = null;93});94},95'should stream logs': function (err, log) {96if (!transport.stream) return;97assert.isNull(err);98assert.isNotNull(log.message);99log.stream.destroy();100}101}102},103'after the logs have flushed': {104topic: function () {105setTimeout(this.callback, 1000);106},107'the query() method': {108'using basic querying': {109'topic': function () {110if (!transport.query) return;111var cb = this.callback;112logger.log('info', 'hello world', {}, function () {113logger.query(cb);114});115},116'should return matching results': function (err, results) {117if (!transport.query) return;118assert.isNull(err);119results = results[transport.name];120while (!Array.isArray(results)) {121results = results[Object.keys(results).pop()];122}123var log = results.pop();124assert.ok(log.message.indexOf('hello world') === 0125|| log.message.indexOf('test message') === 0);126}127},128'using the `rows` option': {129'topic': function () {130if (!transport.query) return;131var cb = this.callback;132logger.log('info', 'hello world', {}, function () {133logger.query({ rows: 1 }, cb);134});135},136'should return one result': function (err, results) {137if (!transport.query) return;138assert.isNull(err);139results = results[transport.name];140while (!Array.isArray(results)) {141results = results[Object.keys(results).pop()];142}143assert.equal(results.length, 1);144}145},146'using `fields` and `order` option': {147'topic': function () {148if (!transport.query) return;149var cb = this.callback;150logger.log('info', 'hello world', {}, function () {151logger.query({ order: 'asc', fields: ['timestamp'] }, cb);152});153},154'should return matching results': function (err, results) {155if (!transport.query) return;156assert.isNull(err);157results = results[transport.name];158while (!Array.isArray(results)) {159results = results[Object.keys(results).pop()];160}161assert.equal(Object.keys(results[0]).length, 1);162assert.ok(new Date(results.shift().timestamp)163< new Date(results.pop().timestamp));164}165},166'using the `from` and `until` option': {167'topic': function () {168if (!transport.query) return;169var cb = this.callback;170var start = new Date - 100 * 1000;171var end = new Date + 100 * 1000;172logger.query({ from: start, until: end }, cb);173},174'should return matching results': function (err, results) {175if (!transport.query) return;176assert.isNull(err);177results = results[transport.name];178while (!Array.isArray(results)) {179results = results[Object.keys(results).pop()];180}181assert.ok(results.length >= 1);182}183},184'using a bad `from` and `until` option': {185'topic': function () {186if (!transport.query) return;187var cb = this.callback;188logger.log('info', 'bad from and until', {}, function () {189var now = new Date + 1000000;190logger.query({ from: now, until: now }, cb);191});192},193'should return no results': function (err, results) {194if (!transport.query) return;195assert.isNull(err);196results = results[transport.name];197while (!Array.isArray(results)) {198results = results[Object.keys(results).pop()];199}200results = [results.filter(function(log) {201return log.message === 'bad from and until';202}).pop()];203assert.isUndefined(results[0]);204}205}206}207}208};209210return out;211};212213214