53 lines
1.5 KiB
JavaScript
53 lines
1.5 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");
|