summaryrefslogtreecommitdiff
path: root/jstests/logpath.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/logpath.js')
-rw-r--r--jstests/logpath.js108
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 }); });
+}