Files
mongo/jstests/multiVersion/libs/mixed_version_fixture_test.js
Mariano Shaar 305b0d7d1f SERVER-95169 Add multiversion query test which stresses sharded scenarios (#29158)
GitOrigin-RevId: 273210da77561bdbdf251b75cf36dc9be510f6a3
2024-11-21 20:08:50 +00:00

59 lines
1.6 KiB
JavaScript

import "jstests/multiVersion/libs/multi_rs.js";
import {ReplSetTest} from "jstests/libs/replsettest.js";
export function testPerformUpgradeDowngradeReplSet({
setupFn,
whenFullyDowngraded,
whenSecondariesAreLatestBinary,
whenFullyUpgraded,
whenBinariesAreLatestAndFCVIsLastLTS
}) {
const lastLTSVersion = {binVersion: "last-lts"};
const latestVersion = {binVersion: "latest"};
const rst = new ReplSetTest({
name: jsTestName(),
nodes: [
{...lastLTSVersion},
{...lastLTSVersion},
],
});
rst.startSet();
rst.initiate(null, null, {initiateWithDefaultElectionTimeout: true});
let primaryConnection = rst.getPrimary();
const getAdminDB = () => primaryConnection.getDB("admin");
setupFn(primaryConnection);
whenFullyDowngraded(primaryConnection);
// Upgrade the secondaries only.
rst.upgradeSecondaries({...latestVersion});
primaryConnection = rst.getPrimary();
whenSecondariesAreLatestBinary(primaryConnection = rst.getPrimary());
// Upgrade the primaries.
rst.upgradeSet({...latestVersion});
primaryConnection = rst.getPrimary();
whenBinariesAreLatestAndFCVIsLastLTS(primaryConnection);
// Upgrade the FCV.
assert.commandWorked(
getAdminDB().runCommand({setFeatureCompatibilityVersion: latestFCV, confirm: true}));
whenFullyUpgraded(primaryConnection);
// Downgrade FCV without restarting.
assert.commandWorked(
getAdminDB().runCommand({setFeatureCompatibilityVersion: lastLTSFCV, confirm: true}));
whenBinariesAreLatestAndFCVIsLastLTS(primaryConnection);
rst.stopSet();
}