// Tests for accessing logLevel server parameter using getParameter/setParameter commands // and shell helpers. old = db.adminCommand( { "getParameter" : "*" } ) tmp1 = db.adminCommand( { "setParameter" : 1 , "logLevel" : 5 } ) tmp2 = db.adminCommand( { "setParameter" : 1 , "logLevel" : old.logLevel } ) now = db.adminCommand( { "getParameter" : "*" } ) assert.eq( old , now , "A" ) assert.eq( old.logLevel , tmp1.was , "B" ) assert.eq( 5 , tmp2.was , "C" ) // // component verbosity // // verbosity for log component hierarchy printjson(old.logComponentVerbosity); assert.neq( undefined, old.logComponentVerbosity, "log component verbosity not available" ); assert.eq( old.logLevel, old.logComponentVerbosity.verbosity, "default component verbosity should match logLevel" ); assert.neq( undefined, old.logComponentVerbosity.storage.journal.verbosity, "journal verbosity not available" ); // Non-object log component verbosity should be rejected. assert.commandFailed(db.adminCommand( { "setParameter" : 1 , logComponentVerbosity : "not an object" } ) ); // Non-numeric verbosity for component should be rejected. assert.commandFailed( db.adminCommand( { "setParameter" : 1 , logComponentVerbosity : { storage : { journal : { verbosity : "not a number" } } } } ) ); // Invalid component shall be rejected assert.commandFailed( db.adminCommand( { "setParameter" : 1 , logComponentVerbosity : { NoSuchComponent : { verbosity : 2 } } } ) ); // Set multiple component log levels at once. (function () { assert.commandWorked( db.adminCommand( { "setParameter" : 1 , logComponentVerbosity : { verbosity : 2, accessControl : { verbosity : 0 }, storage : { verbosity : 3, journal : { verbosity : 5 } } } } ) ); var result = assert.commandWorked( db.adminCommand( { "getParameter": 1, logComponentVerbosity : 1} )).logComponentVerbosity; assert.eq( 2, result.verbosity ); assert.eq( 0, result.accessControl.verbosity ); assert.eq( 3, result.storage.verbosity ); assert.eq( 5, result.storage.journal.verbosity ); })(); // Set multiple component log levels at once. // Unrecognized field names not mapping to a log component shall be rejected // No changes shall apply. (function () { assert.commandFailed( db.adminCommand( { "setParameter" : 1 , logComponentVerbosity : { verbosity : 6, accessControl : { verbosity : 5 }, storage : { verbosity : 4, journal : { verbosity : 6 } }, NoSuchComponent : { verbosity : 2 }, extraField : 123 } } ) ); var result = assert.commandWorked( db.adminCommand( { "getParameter": 1, logComponentVerbosity : 1} )).logComponentVerbosity; assert.eq( 2, result.verbosity ); assert.eq( 0, result.accessControl.verbosity ); assert.eq( 3, result.storage.verbosity ); assert.eq( 5, result.storage.journal.verbosity ); })(); // Clear verbosity for default and journal. (function () { assert.commandWorked( db.adminCommand( { "setParameter" : 1 , logComponentVerbosity : { verbosity: -1, storage : { journal : { verbosity : -1 } } } } ) ); var result = assert.commandWorked( db.adminCommand( { "getParameter": 1, logComponentVerbosity : 1} )).logComponentVerbosity; assert.eq( 0, result.verbosity ); assert.eq( 0, result.accessControl.verbosity ); assert.eq( 3, result.storage.verbosity ); assert.eq( -1, result.storage.journal.verbosity ); })(); // Set accessControl verbosity using numerical level instead of // subdocument with 'verbosity' field. (function () { assert.commandWorked( db.adminCommand( { "setParameter" : 1, logComponentVerbosity : { accessControl : 5 } } ) ); var result = assert.commandWorked( db.adminCommand( { "getParameter": 1, logComponentVerbosity : 1} )).logComponentVerbosity; assert.eq( 5, result.accessControl.verbosity ); })(); // Restore old verbosity values. assert.commandWorked( db.adminCommand( { "setParameter" : 1 , logComponentVerbosity : old.logComponentVerbosity } ) );