54 lines
2.2 KiB
JavaScript
54 lines
2.2 KiB
JavaScript
// Test that decimal usage is restricted when the featureCompatibilityVersion is 3.2.
|
|
|
|
(function() {
|
|
"use strict";
|
|
|
|
const conn = MongoRunner.runMongod({});
|
|
assert.neq(null, conn, "mongod was unable to start up");
|
|
|
|
const decimalDB = conn.getDB("decimal_feature_compatibility_version");
|
|
assert.commandWorked(decimalDB.dropDatabase());
|
|
assert.commandWorked(decimalDB.runCommand({create: "collection"}));
|
|
|
|
const adminDB = conn.getDB("admin");
|
|
|
|
// Ensure the featureCompatibilityVersion is 3.4.
|
|
assert.commandWorked(adminDB.runCommand({setFeatureCompatibilityVersion: "3.4"}));
|
|
let res = adminDB.runCommand({getParameter: 1, featureCompatibilityVersion: 1});
|
|
assert.commandWorked(res);
|
|
assert.eq("3.4", res.featureCompatibilityVersion);
|
|
|
|
// Decimals can be inserted when the featureCompatibilityVersion is 3.4.
|
|
assert.writeOK(decimalDB.collection.insert({a: NumberDecimal(2.0)}));
|
|
|
|
// Collection containing decimals is valid when the featureCompatibilityVersion is 3.4.
|
|
res = decimalDB.collection.validate({full: true});
|
|
assert.commandWorked(res);
|
|
assert.eq(true, res.valid, tojson(res));
|
|
|
|
// Ensure the featureCompatibilityVersion is 3.2.
|
|
assert.commandWorked(adminDB.runCommand({setFeatureCompatibilityVersion: "3.2"}));
|
|
res = adminDB.runCommand({getParameter: 1, featureCompatibilityVersion: 1});
|
|
assert.commandWorked(res);
|
|
assert.eq("3.2", res.featureCompatibilityVersion);
|
|
|
|
// Decimals cannot be inserted when the featureCompatibilityVersion is 3.2.
|
|
assert.writeErrorWithCode(decimalDB.collection.insert({a: NumberDecimal(2.0)}),
|
|
ErrorCodes.InvalidBSON);
|
|
|
|
// Decimals cannot be used in queries when the featureCompatibilityVersion is 3.2.
|
|
assert.throws(function() {
|
|
decimalDB.collection.findOne({a: NumberDecimal(2.0)});
|
|
});
|
|
|
|
// Decimals can be read when the featureCompatibilityVersion is 3.2.
|
|
assert.eq(decimalDB.collection.findOne().a, NumberDecimal(2.0));
|
|
|
|
// Collection containing decimals is invalid when the featureCompatibilityVersion is 3.2.
|
|
res = decimalDB.collection.validate({full: true});
|
|
assert.commandWorked(res);
|
|
assert.eq(false, res.valid, tojson(res));
|
|
|
|
MongoRunner.stopMongod(conn);
|
|
}());
|