summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Swanson <charlie.swanson@mongodb.com>2019-05-31 12:39:16 -0400
committerCharlie Swanson <charlie.swanson@mongodb.com>2019-05-31 15:55:17 -0400
commit160dbb352cae76307016f42934902d74e7879e5a (patch)
treeae9db9ba51e4557a92ebefa0f63e01e3d1e13a29
parent3c408fe353aef12c427eced6bd2129be4435eb6c (diff)
downloadmongo-160dbb352cae76307016f42934902d74e7879e5a.tar.gz
SERVER-41428 Robustify update_min_max_examples.js
-rw-r--r--jstests/core/update_min_max_examples.js118
1 files changed, 62 insertions, 56 deletions
diff --git a/jstests/core/update_min_max_examples.js b/jstests/core/update_min_max_examples.js
index 7bcb6197f93..62e870147bf 100644
--- a/jstests/core/update_min_max_examples.js
+++ b/jstests/core/update_min_max_examples.js
@@ -1,65 +1,71 @@
// Basic examples for $min/$max
-var res;
-var coll = db.update_min_max;
-coll.drop();
+(function() {
+ "use strict";
-// $min for number
-coll.insert({_id: 1, a: 2});
-res = coll.update({_id: 1}, {$min: {a: 1}});
-assert.writeOK(res);
-assert.eq(coll.findOne({_id: 1}).a, 1);
+ let res;
+ const coll = db.update_min_max;
+ coll.drop();
-// $max for number
-coll.insert({_id: 2, a: 2});
-res = coll.update({_id: 2}, {$max: {a: 1}});
-assert.writeOK(res);
-assert.eq(coll.findOne({_id: 2}).a, 2);
+ // $min for number
+ coll.insert({_id: 1, a: 2});
+ res = coll.update({_id: 1}, {$min: {a: 1}});
+ assert.writeOK(res);
+ assert.eq(coll.findOne({_id: 1}).a, 1);
-// $min for Date
-coll.insert({_id: 3, a: new Date()});
-var origDoc = coll.findOne({_id: 3});
-sleep(2);
-res = coll.update({_id: 3}, {$min: {a: new Date()}});
-assert.writeOK(res);
-assert.eq(coll.findOne({_id: 3}).a, origDoc.a);
+ // $max for number
+ coll.insert({_id: 2, a: 2});
+ res = coll.update({_id: 2}, {$max: {a: 1}});
+ assert.writeOK(res);
+ assert.eq(coll.findOne({_id: 2}).a, 2);
-// $max for Date
-coll.insert({_id: 4, a: new Date()});
-sleep(2);
-var newDate = new Date();
-res = coll.update({_id: 4}, {$max: {a: newDate}});
-assert.writeOK(res);
-assert.eq(coll.findOne({_id: 4}).a, newDate);
+ // $min for Date
+ let date = new Date();
+ coll.insert({_id: 3, a: date});
+ // setMilliseconds() will roll over to change seconds if necessary.
+ date.setMilliseconds(date.getMilliseconds() + 2);
+ // Test that we have advanced the date and it's no longer the same as the one we inserted.
+ assert.eq(null, coll.findOne({_id: 3, a: date}));
+ const origDoc = coll.findOne({_id: 3});
+ assert.commandWorked(coll.update({_id: 3}, {$min: {a: date}}));
+ assert.eq(coll.findOne({_id: 3}).a, origDoc.a);
-// $max for small number
-coll.insert({_id: 5, a: 1e-15});
-// Slightly bigger than 1e-15.
-var biggerval = 0.000000000000001000000000000001;
-res = coll.update({_id: 5}, {$max: {a: biggerval}});
-assert.writeOK(res);
-assert.eq(coll.findOne({_id: 5}).a, biggerval);
+ // $max for Date
+ coll.insert({_id: 4, a: date});
+ // setMilliseconds() will roll over to change seconds if necessary.
+ date.setMilliseconds(date.getMilliseconds() + 2);
+ // Test that we have advanced the date and it's no longer the same as the one we inserted.
+ assert.eq(null, coll.findOne({_id: 4, a: date}));
+ res = coll.update({_id: 4}, {$max: {a: date}});
+ assert.writeOK(res);
+ assert.eq(coll.findOne({_id: 4}).a, date);
-// $min for a small number
-coll.insert({_id: 6, a: biggerval});
-res = coll.update({_id: 6}, {$min: {a: 1e-15}});
-assert.writeOK(res);
-assert.eq(coll.findOne({_id: 6}).a, 1e-15);
+ // $max for small number
+ coll.insert({_id: 5, a: 1e-15});
+ // Slightly bigger than 1e-15.
+ const biggerval = 0.000000000000001000000000000001;
+ res = coll.update({_id: 5}, {$max: {a: biggerval}});
+ assert.writeOK(res);
+ assert.eq(coll.findOne({_id: 5}).a, biggerval);
-// $max with positional operator
-var insertdoc = {_id: 7, y: [{a: 2}, {a: 6}, {a: [9, 1, 1]}]};
-coll.insert(insertdoc);
-res = coll.update({_id: 7, "y.a": 6}, {$max: {"y.$.a": 7}});
-assert.writeOK(res);
-insertdoc.y[1].a = 7;
-assert.docEq(coll.findOne({_id: 7}), insertdoc);
+ // $min for a small number
+ coll.insert({_id: 6, a: biggerval});
+ res = coll.update({_id: 6}, {$min: {a: 1e-15}});
+ assert.writeOK(res);
+ assert.eq(coll.findOne({_id: 6}).a, 1e-15);
-// $min with positional operator
-insertdoc = {
- _id: 8,
- y: [{a: 2}, {a: 6}, {a: [9, 1, 1]}]
-};
-coll.insert(insertdoc);
-res = coll.update({_id: 8, "y.a": 6}, {$min: {"y.$.a": 5}});
-assert.writeOK(res);
-insertdoc.y[1].a = 5;
-assert.docEq(coll.findOne({_id: 8}), insertdoc);
+ // $max with positional operator
+ let insertdoc = {_id: 7, y: [{a: 2}, {a: 6}, {a: [9, 1, 1]}]};
+ coll.insert(insertdoc);
+ res = coll.update({_id: 7, "y.a": 6}, {$max: {"y.$.a": 7}});
+ assert.writeOK(res);
+ insertdoc.y[1].a = 7;
+ assert.docEq(coll.findOne({_id: 7}), insertdoc);
+
+ // $min with positional operator
+ insertdoc = {_id: 8, y: [{a: 2}, {a: 6}, {a: [9, 1, 1]}]};
+ coll.insert(insertdoc);
+ res = coll.update({_id: 8, "y.a": 6}, {$min: {"y.$.a": 5}});
+ assert.writeOK(res);
+ insertdoc.y[1].a = 5;
+ assert.docEq(coll.findOne({_id: 8}), insertdoc);
+}());