From 47d885797a2dd0d3cd879305ca813a0bd951c378 Mon Sep 17 00:00:00 2001 From: compulim Date: Fri, 12 Sep 2014 11:57:46 +0800 Subject: [PATCH] Tests for open/stress fix --- test/transports/file-open-test.js | 61 +++++++++++++++++++++++ test/transports/file-stress-test.js | 76 +++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 test/transports/file-open-test.js create mode 100644 test/transports/file-stress-test.js diff --git a/test/transports/file-open-test.js b/test/transports/file-open-test.js new file mode 100644 index 000000000..503b953f4 --- /dev/null +++ b/test/transports/file-open-test.js @@ -0,0 +1,61 @@ +/* + * file-open-test.js: Tests for File transport "open" event + * + * (C) 2014 William Wong + * MIT LICENSE + * + */ + +!function (assert, fs, os, path, vows, winston) { + 'use strict'; + + vows.describe('winston/transports/file').addBatch({ + 'An instance of the File Transport': { + topic: function () { + var callback = this.callback.bind(this), + logPath = path.resolve(process.cwd(), '../fixtures/logs/file-open-test.log'); + + try { + fs.unlinkSync(logPath); + } catch (ex) { + if (ex && ex.code !== 'ENOENT') { return callback(ex); } + } + + var fileTransport = new (winston.transports.File)({ + filename: logPath + }), + logger = new (winston.Logger)({ + transports: [fileTransport] + }), + timeline = {}; + + fileTransport.open(function () { + timeline.open = Date.now(); + + setTimeout(function () { + logger.info('Hello, World!', function () { + timeline.logged = Date.now(); + }); + }, 100); + + setTimeout(function () { + callback(null, timeline); + }, 1000); + }); + }, + 'should fire "open" event': function (results) { + assert.isTrue(!!results.open); + }, + 'should fire "logged" event': function (results) { + assert.isTrue(!!results.logged); + } + } + }).export(module); +}( + require('assert'), + require('fs'), + require('os'), + require('path'), + require('vows'), + require('../../lib/winston') +); \ No newline at end of file diff --git a/test/transports/file-stress-test.js b/test/transports/file-stress-test.js new file mode 100644 index 000000000..bec307b6c --- /dev/null +++ b/test/transports/file-stress-test.js @@ -0,0 +1,76 @@ +/* + * file-stress-test.js: Tests for stressing File transport + * + * (C) 2014 William Wong + * MIT LICENSE + * + */ + +!function (assert, fs, os, path, vows, winston) { + 'use strict'; + + vows.describe('winston/transports/file').addBatch({ + 'A stressed instance of the File Transport': { + topic: function () { + var callback = this.callback.bind(this), + logPath = path.resolve(process.cwd(), '../fixtures/logs/file-stress-test.log'); + + try { + fs.unlinkSync(logPath); + } catch (ex) { + if (ex && ex.code !== 'ENOENT') { return callback(ex); } + } + + var fileTransport = new (winston.transports.File)({ + filename: logPath + }), + logger = new (winston.Logger)({ + transports: [fileTransport] + }); + + fileTransport.on('open', function () { + setTimeout(function () { + clearInterval(interval); + + logger.query({ order: 'asc' }, function (err, results) { + callback(null, results); + }); + }, 100); + }); + + var logIndex = 0, + interval = setInterval(function () { + logger.info(++logIndex); + stress(200); + }, 0); + + logger.info(++logIndex); + stress(200); + + function stress(duration) { + var startTime = Date.now(); + + while (Date.now() - startTime < duration) { + Math.sqrt(Math.PI); + } + } + }, + 'should not skip any log lines': function (results) { + var testIndex = 0; + + results.file.forEach(function (log) { + if (+log.message !== ++testIndex) { + throw new Error('Number skipped'); + } + }); + } + } + }).export(module); +}( + require('assert'), + require('fs'), + require('os'), + require('path'), + require('vows'), + require('../../lib/winston') +); \ No newline at end of file