diff options
Diffstat (limited to 'vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/configureNoLevels-test.js')
-rw-r--r-- | vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/configureNoLevels-test.js | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/configureNoLevels-test.js b/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/configureNoLevels-test.js new file mode 100644 index 00000000..55bd987b --- /dev/null +++ b/vnfmarket/src/main/webapp/vnfmarket/node_modules/log4js/test/configureNoLevels-test.js @@ -0,0 +1,173 @@ +"use strict"; +// This test shows unexpected behaviour for log4js.configure() in log4js-node@0.4.3 and earlier: +// 1) log4js.configure(), log4js.configure(null), +// log4js.configure({}), log4js.configure(<some object with no levels prop>) +// all set all loggers levels to trace, even if they were previously set to something else. +// 2) log4js.configure({levels:{}}), log4js.configure({levels: {foo: +// bar}}) leaves previously set logger levels intact. +// + +// Basic set up +var vows = require('vows'); +var assert = require('assert'); +var toLevel = require('../lib/levels').toLevel; + +// uncomment one or other of the following to see progress (or not) while running the tests +// var showProgress = console.log; +var showProgress = function() {}; + + +// Define the array of levels as string to iterate over. +var strLevels= ['Trace','Debug','Info','Warn','Error','Fatal']; + +// setup the configurations we want to test +var configs = { + 'nop': 'nop', // special case where the iterating vows generator will not call log4js.configure + 'is undefined': undefined, + 'is null': null, + 'is empty': {}, + 'has no levels': {foo: 'bar'}, + 'has null levels': {levels: null}, + 'has empty levels': {levels: {}}, + 'has random levels': {levels: {foo: 'bar'}}, + 'has some valid levels': {levels: {A: 'INFO'}} +}; + +// Set up the basic vows batches for this test +var batches = []; + + +function getLoggerName(level) { + return level+'-logger'; +} + +// the common vows top-level context, whether log4js.configure is called or not +// just making sure that the code is common, +// so that there are no spurious errors in the tests themselves. +function getTopLevelContext(nop, configToTest, name) { + return { + topic: function() { + var log4js = require('../lib/log4js'); + // create loggers for each level, + // keeping the level in the logger's name for traceability + strLevels.forEach(function(l) { + log4js.getLogger(getLoggerName(l)).setLevel(l); + }); + + if (!nop) { + showProgress('** Configuring log4js with', configToTest); + log4js.configure(configToTest); + } + else { + showProgress('** Not configuring log4js'); + } + return log4js; + } + }; +} + +showProgress('Populating batch object...'); + +function checkForMismatch(topic) { + var er = topic.log4js.levels.toLevel(topic.baseLevel) + .isLessThanOrEqualTo(topic.log4js.levels.toLevel(topic.comparisonLevel)); + + assert.equal( + er, + topic.expectedResult, + 'Mismatch: for setLevel(' + topic.baseLevel + + ') was expecting a comparison with ' + topic.comparisonLevel + + ' to be ' + topic.expectedResult + ); +} + +function checkExpectedResult(topic) { + var result = topic.log4js + .getLogger(getLoggerName(topic.baseLevel)) + .isLevelEnabled(topic.log4js.levels.toLevel(topic.comparisonLevel)); + + assert.equal( + result, + topic.expectedResult, + 'Failed: ' + getLoggerName(topic.baseLevel) + + '.isLevelEnabled( ' + topic.comparisonLevel + ' ) returned ' + result + ); +} + +function setupBaseLevelAndCompareToOtherLevels(baseLevel) { + var baseLevelSubContext = 'and checking the logger whose level was set to '+baseLevel ; + var subContext = { topic: baseLevel }; + batch[context][baseLevelSubContext] = subContext; + + // each logging level has strLevels sub-contexts, + // to exhaustively test all the combinations of + // setLevel(baseLevel) and isLevelEnabled(comparisonLevel) per config + strLevels.forEach(compareToOtherLevels(subContext)); +} + +function compareToOtherLevels(subContext) { + var baseLevel = subContext.topic; + + return function (comparisonLevel) { + var comparisonLevelSubContext = 'with isLevelEnabled('+comparisonLevel+')'; + + // calculate this independently of log4js, but we'll add a vow + // later on to check that we're not mismatched with log4js + var expectedResult = strLevels.indexOf(baseLevel) <= strLevels.indexOf(comparisonLevel); + + // the topic simply gathers all the parameters for the vow + // into an object, to simplify the vow's work. + subContext[comparisonLevelSubContext] = { + topic: function(baseLevel, log4js) { + return { + comparisonLevel: comparisonLevel, + baseLevel: baseLevel, + log4js: log4js, + expectedResult: expectedResult + }; + } + }; + + var vow = 'should return '+expectedResult; + subContext[comparisonLevelSubContext][vow] = checkExpectedResult; + + // the extra vow to check the comparison between baseLevel and + // comparisonLevel we performed earlier matches log4js' + // comparison too + var subSubContext = subContext[comparisonLevelSubContext]; + subSubContext['finally checking for comparison mismatch with log4js'] = checkForMismatch; + }; +} + +// Populating the batches programmatically, as there are +// (configs.length x strLevels.length x strLevels.length) = 324 +// possible test combinations +for (var cfg in configs) { + var configToTest = configs[cfg]; + var nop = configToTest === 'nop'; + var context; + if (nop) { + context = 'Setting up loggers with initial levels, then NOT setting a configuration,'; + } + else { + context = 'Setting up loggers with initial levels, then setting a configuration which '+cfg+','; + } + + showProgress('Setting up the vows batch and context for '+context); + // each config to be tested has its own vows batch with a single top-level context + var batch={}; + batch[context]= getTopLevelContext(nop, configToTest, context); + batches.push(batch); + + // each top-level context has strLevels sub-contexts, one per logger + // which has set to a specific level in the top-level context's topic + strLevels.forEach(setupBaseLevelAndCompareToOtherLevels); +} + +showProgress('Running tests'); +var v = vows.describe('log4js.configure(), with or without a "levels" property'); + +batches.forEach(function(batch) {v=v.addBatch(batch);}); + +v.export(module); + |