summaryrefslogtreecommitdiff
path: root/jstests/core/shell/shellkillop.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/shell/shellkillop.js')
-rw-r--r--jstests/core/shell/shellkillop.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/jstests/core/shell/shellkillop.js b/jstests/core/shell/shellkillop.js
new file mode 100644
index 00000000000..0ac2ad681ed
--- /dev/null
+++ b/jstests/core/shell/shellkillop.js
@@ -0,0 +1,64 @@
+baseName = "jstests_shellkillop";
+
+// 'retry' should be set to true in contexts where an exception should cause the test to be retried
+// rather than to fail.
+retry = false;
+
+function testShellAutokillop() {
+ if (true) { // toggle to disable test
+ db[baseName].drop();
+
+ print("shellkillop.js insert data");
+ for (i = 0; i < 100000; ++i) {
+ db[baseName].insert({i: 1});
+ }
+ assert.eq(100000, db[baseName].count());
+
+ // mongo --autokillop suppressed the ctrl-c "do you want to kill current operation" message
+ // it's just for testing purposes and thus not in the shell help
+ var evalStr = "print('SKO subtask started'); db." + baseName +
+ ".update( {}, {$set:{i:'abcdefghijkl'}}, false, true ); db." + baseName + ".count();";
+ print("shellkillop.js evalStr:" + evalStr);
+ spawn = startMongoProgramNoConnect(
+ "mongo", "--autokillop", "--port", myPort(), "--eval", evalStr);
+
+ sleep(100);
+ retry = true;
+ assert(db[baseName].find({i: 'abcdefghijkl'}).count() < 100000,
+ "update ran too fast, test won't be valid");
+ retry = false;
+
+ stopMongoProgramByPid(spawn);
+
+ sleep(100);
+
+ print("count abcdefghijkl:" + db[baseName].find({i: 'abcdefghijkl'}).count());
+
+ var inprog = db.currentOp().inprog;
+ for (i in inprog) {
+ if (inprog[i].ns == "test." + baseName)
+ throw Error("shellkillop.js op is still running: " + tojson(inprog[i]));
+ }
+
+ retry = true;
+ assert(db[baseName].find({i: 'abcdefghijkl'}).count() < 100000,
+ "update ran too fast, test was not valid");
+ retry = false;
+ }
+}
+
+for (var nTries = 0; nTries < 10 && retry; ++nTries) {
+ try {
+ testShellAutokillop();
+ } catch (e) {
+ if (!retry) {
+ throw e;
+ }
+ printjson(e);
+ print("retrying...");
+ }
+}
+
+assert(!retry, "retried too many times");
+
+print("shellkillop.js SUCCESS");