90 lines
2.9 KiB
JavaScript
90 lines
2.9 KiB
JavaScript
/**
|
|
* Tests the 'confirm: true' parameter in setFeatureCompatibilityVersion.
|
|
*/
|
|
|
|
import {ReplSetTest} from "jstests/libs/replsettest.js";
|
|
import {ShardingTest} from "jstests/libs/shardingtest.js";
|
|
|
|
let dbpath = MongoRunner.dataPath + "feature_compatibility_version_confirm";
|
|
resetDbpath(dbpath);
|
|
|
|
const latest = "latest";
|
|
|
|
function runTest(conn, downgradeVersion, configSvrPrimary = null) {
|
|
const downgradeFCV = binVersionToFCV(downgradeVersion);
|
|
|
|
const checkFCVConn = configSvrPrimary !== null ? configSvrPrimary : conn;
|
|
checkFCV(checkFCVConn, latestFCV);
|
|
|
|
// Fail when downgrading the node if 'confirm: true' is not specified.
|
|
assert.commandFailedWithCode(conn.runCommand({setFeatureCompatibilityVersion: downgradeFCV}),
|
|
7369100);
|
|
checkFCV(checkFCVConn, latestFCV);
|
|
|
|
// Successfully downgrade if 'confirm: true' is specified.
|
|
assert.commandWorked(
|
|
conn.runCommand({setFeatureCompatibilityVersion: downgradeFCV, confirm: true}));
|
|
checkFCV(checkFCVConn, downgradeFCV);
|
|
|
|
// Fail when upgrading the node if 'confirm: true' is not specified.
|
|
assert.commandFailedWithCode(conn.runCommand({setFeatureCompatibilityVersion: latestFCV}),
|
|
7369100);
|
|
checkFCV(checkFCVConn, downgradeFCV);
|
|
|
|
// Successfully upgrade if 'confirm: true' is specified.
|
|
assert.commandWorked(
|
|
conn.runCommand({setFeatureCompatibilityVersion: latestFCV, confirm: true}));
|
|
checkFCV(checkFCVConn, latestFCV);
|
|
}
|
|
|
|
function runStandaloneTest(downgradeVersion) {
|
|
jsTestLog("Running standalone downgrade test");
|
|
|
|
// Spin up a standalone with latest FCV.
|
|
const conn = MongoRunner.runMongod({dbpath: dbpath, binVersion: latest});
|
|
assert.neq(null, conn, "mongod was unable to start up");
|
|
const adminDB = conn.getDB("admin");
|
|
runTest(adminDB, downgradeVersion);
|
|
|
|
MongoRunner.stopMongod(conn);
|
|
}
|
|
|
|
function runReplicaSetTest(downgradeVersion) {
|
|
jsTestLog("Running replica set downgrade test");
|
|
|
|
// Spin up a replica set with latest FCV.
|
|
const rst = new ReplSetTest({nodes: 3, nodeOptions: {binVersion: latest}});
|
|
rst.startSet();
|
|
rst.initiate();
|
|
|
|
const primary = rst.getPrimary();
|
|
const adminDB = primary.getDB("admin");
|
|
runTest(adminDB, downgradeVersion);
|
|
|
|
rst.stopSet();
|
|
}
|
|
|
|
function runShardingTest(downgradeVersion) {
|
|
jsTestLog("Running sharded cluster downgrade test");
|
|
|
|
// Spin up a sharded cluster with latest FCV.
|
|
const st = new ShardingTest({shards: 2});
|
|
const conn = st.s;
|
|
const adminDB = conn.getDB("admin");
|
|
const configSvrPrimaryConn = st.configRS.getPrimary().getDB("admin");
|
|
|
|
runTest(adminDB, downgradeVersion, configSvrPrimaryConn);
|
|
|
|
st.stop();
|
|
}
|
|
|
|
runStandaloneTest('last-lts');
|
|
runReplicaSetTest('last-lts');
|
|
runShardingTest('last-lts');
|
|
|
|
if (lastLTSFCV != lastContinuousFCV) {
|
|
runStandaloneTest('last-continuous');
|
|
runReplicaSetTest('last-continuous');
|
|
runShardingTest('last-continuous');
|
|
}
|