/** * These tests check the version comparison logic in the multiversion test support code. * * In particular, it tests that the shell version (returned by version()) compares equal to * "latest", not equal to "last-lts", and x.y compares equal to x.y.z, but that x.w does * not. */ // Checking UUID consistency involves talking to a shard node, which in this test is shutdown TestData.skipCheckingUUIDsConsistentAcrossCluster = true; (function() { "use strict"; function assertBinVersionsEqual(v1, v2) { assert(MongoRunner.areBinVersionsTheSame(v1, v2), "Expected \"" + v1 + "\" to equal \"" + v2 + "\""); } function assertBinVersionsNotEqual(v1, v2) { assert(!MongoRunner.areBinVersionsTheSame(v1, v2), "Expected \"" + v1 + "\" not to equal \"" + v2 + "\""); } function assertBinVersionComparesHigher(v1, v2) { assert.eq(1, MongoRunner.compareBinVersions(v1, v2), "Expected \"" + v1 + "\" to compare higher than \"" + v2 + "\""); } function assertBinVersionComparesLower(v1, v2) { assert.eq(-1, MongoRunner.compareBinVersions(v1, v2), "Expected \"" + v1 + "\" to compare lower than \"" + v2 + "\""); } function assertBinVersionComparesEqual(v1, v2) { assert.eq(0, MongoRunner.compareBinVersions(v1, v2), "Expected \"" + v1 + "\" to compare equal to \"" + v2 + "\""); } // "latest" is the same version as the shell, "last-lts" is not. assertBinVersionsEqual("latest", version()); assertBinVersionsEqual("", "latest"); assertBinVersionsEqual("", version()); assertBinVersionComparesEqual("latest", version()); assertBinVersionComparesEqual("", "latest"); assertBinVersionComparesEqual("", version()); assertBinVersionsNotEqual("latest", "last-lts"); assertBinVersionsNotEqual("last-lts", version()); assertBinVersionsNotEqual("latest", "last-continuous"); assertBinVersionsNotEqual("last-continuous", version()); assertBinVersionComparesHigher("latest", "last-lts"); assertBinVersionComparesLower("last-lts", version()); assertBinVersionComparesHigher("latest", "last-continuous"); assertBinVersionComparesLower("last-continuous", version()); if (lastContinuousFCV === lastLTSFCV) { assertBinVersionComparesEqual("last-lts", "last-continuous"); } // 3.2 means 3.2.z for any value of z. It does not mean 3.0 or 3.0.w. assertBinVersionsEqual("3.2", "3.2.4"); assertBinVersionsEqual("3.2.4", "3.2"); assertBinVersionsNotEqual("3.2", "3.0"); assertBinVersionsNotEqual("3.0.9", "3.2.9"); assertBinVersionComparesEqual("3.2", "3.2.4"); assertBinVersionComparesEqual("3.2.4", "3.2"); assertBinVersionComparesHigher("3.2", "3.0"); assertBinVersionComparesLower("3.0.9", "3.2.9"); assertBinVersionsEqual("3.4", "3.4.0-abcd"); assertBinVersionsEqual("3.4.0", "3.4.0-abcd"); assertBinVersionComparesEqual("3.4", "3.4.0-abcd"); assertBinVersionComparesEqual("3.4.0", "3.4.0-abcd"); assertBinVersionComparesHigher("3.6.0", "3.4.0-abcd"); assertBinVersionComparesHigher("4.0.0", "3.6.99-abcd"); assertBinVersionComparesHigher("3.4.1", "3.4.0-abcd"); assertBinVersionComparesLower("3.4.0-abc", "3.4.1-xyz"); // Prohibit versions that don't have at least two components (3 is no good, 3.2 is). assert.throws(MongoRunner.areBinVersionsTheSame, ["3", "3.2"]); assert.throws(MongoRunner.areBinVersionsTheSame, ["3.2", "3"]); // Throw an error when versions differ only by githash. assert.throws(MongoRunner.compareBinVersions, ["3.4.1-abc", "3.4.1-xyz"]); }());