diff options
Diffstat (limited to 'jstests/logpath.js')
| -rw-r--r-- | jstests/logpath.js | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/jstests/logpath.js b/jstests/logpath.js new file mode 100644 index 00000000000..6e0f1c64c85 --- /dev/null +++ b/jstests/logpath.js @@ -0,0 +1,108 @@ +// check replica set authentication + +var name = "logpath"; +var token = "logpath_token"; + +var dbdir = "/data/db/" + name + "/"; // this will work under windows as well as linux +var basedir = "/data/db/" + name + "files" + "/"; +var logdir = basedir + "logdir/"; +var testdir = basedir + "testdir/" +var sfile = _isWindows() ? "NUL:" : "/dev/null"; + +var logs = [token + "1", token + "2"]; +var port = allocatePorts(6); + +print("------ Creating directories"); + +// ensure log directory exists +assert(mkdir(basedir)); +assert(mkdir(logdir)); +assert(mkdir(testdir)); + +var cleanupFiles = function() { + var files = listFiles(logdir); + + for(f in files) { + var name = files[f].name; + + // mostly here for safety + if(name.indexOf(token) != -1) { + removeFile(name); + } + } +}; + +var logCount = function(fpattern, prefix) { + var files = listFiles(logdir); + var pat = RegExp(fpattern + (prefix ? "" : "$")); + var cnt = 0; + + for(f in files) { + if(pat.test(files[f].name)) { + cnt++; + } + } + + return cnt; +}; + +print("------ Cleaning up old files"); +cleanupFiles(); + +// log should not exist +assert.eq(logCount(logs[0]), 0); + +print("------ Start mongod with logpath set to new file"); +var m = MongoRunner.runMongod({ port: port[0], dbpath: dbdir, logpath: logdir + logs[0]}); + +// log should now exist (and no rotations should exist) +assert.eq(logCount(logs[0], true), 1); +stopMongod(port[0]); + +print("------ Start mongod with logpath set to existing file"); +m = MongoRunner.runMongod({ port: port[1], dbpath: dbdir, logpath: logdir + logs[0]}); + +// log should continue to exist +assert.eq(logCount(logs[0]), 1); + +// but now there should be a rotation file +assert.eq(logCount(logs[0], true), 2); +cleanupFiles(); + +stopMongod(port[1]); + +// Blocking on SERVER-5117: +// MongoRunner currently hangs if mongod fails to start so these tests don't work +if ( false ) { + // only run forking test on *nix (not supported on Windows) + if ( _isWindows() ) { + print("------ Skipping fork tests... (Windows)"); + + } else { + print("------ Start mongod with logpath set to new file, fork"); + var m = MongoRunner.runMongod({ port: port[2], dbpath: dbdir, logpath: logdir + logs[1], fork: true}); + + // log should now exist (and no rotations should exist) + assert.eq(logCount(logs[1], true), 1); + stopMongod(port[2]); + + print("------ Start mongod with logpath set to existing file, fork"); + m = MongoRunner.runMongod({ port: port[3], dbpath: dbdir, logpath: logdir + logs[1], fork: true}); + + // log should continue to exist + assert.eq(logCount(logs[1]), 1); + + // but now there should be a rotation file + assert.eq(logCount(logs[1], true), 2); + cleanupFiles(); + + stopMongod(port[3]); + } + + // the following tests depend on undefined behavior; assume that MongoRunner raises exception on error + print("------ Confirm that launch fails with directory"); + assert.throws(function() { MongoRunner.runMongod({ port: port[4], dbpath: dbdir, logpath: testdir }); }); + + print("------ Confirm that launch fails with special file"); + assert.throws(function() { MongoRunner.runMongod({ port: port[5], dbpath: dbdir, logpath: sfile }); }); +} |
