Files
mongo/jstests/core/update_replace.js
2016-03-09 12:18:14 -05:00

53 lines
1.6 KiB
JavaScript

// This test checks validation of the replaced doc (on the server) for dots, $prefix and _id
// Create a new connection object so it won't affect the global connection when we modify
// it's settings.
var conn = new Mongo(db.getMongo().host);
conn.forceWriteMode(db.getMongo().writeMode());
t = conn.getDB(db.getName()).jstests_update_replace;
t.drop();
var myDB = t.getDB();
var res;
// Bypass validation in shell so we can test the server.
conn._skipValidation = true;
// Should not allow "." in field names
res = t.save({_id: 1, "a.a": 1});
assert(res.hasWriteError(), "a.a");
// Should not allow "." in field names, embedded
res = t.save({_id: 1, a: {"a.a": 1}});
assert(res.hasWriteError(), "a: a.a");
// Should not allow "$"-prefixed field names, caught before "." check
res = t.save({_id: 1, $a: {"a.a": 1}});
assert(res.hasWriteError(), "$a: a.a");
// Should not allow "$"-prefixed field names
res = t.save({_id: 1, $a: 1});
assert(res.hasWriteError(), "$a");
// _id validation checks
// Should not allow regex _id
res = t.save({_id: /a/});
assert(res.hasWriteError(), "_id regex");
// Should not allow regex _id, even if not first
res = t.save({a: 2, _id: /a/});
assert(res.hasWriteError(), "a _id regex");
// Should not allow array _id
res = t.save({_id: [9]});
assert(res.hasWriteError(), "_id array");
// This is fine since _id isn't a top level field
res = t.save({a: {_id: [9]}});
assert(!res.hasWriteError(), "embedded _id array");
// This is fine since _id isn't a top level field
res = t.save({b: 1, a: {_id: [9]}});
assert(!res.hasWriteError(), "b embedded _id array");