Files
mongo/jstests/multiVersion/targetedTestsLastLtsFeatures/fle2_text_search_preview.js
Gabriel Marks 53fc2efe45 SERVER-65769 Enable featureFlagQETextSearchPreview (#37952)
GitOrigin-RevId: f3285a3829eb90aabf21b9468c006cdc2624818c
2025-07-02 18:42:29 +00:00

80 lines
2.6 KiB
JavaScript

/**
* Test downgrade to incompatible versions is blocked if substringPreview,
* suffixPreview, or prefixPreview query types are being used in a FLE2 collection.
*/
import "jstests/multiVersion/libs/multi_rs.js";
import {EncryptedClient} from "jstests/fle2/libs/encrypted_client_util.js";
import {
PrefixField,
SubstringField,
SuffixAndPrefixField,
SuffixField
} from "jstests/fle2/libs/qe_text_search_util.js";
import {ReplSetTest} from "jstests/libs/replsettest.js";
const dbName = 'qe_text_downgrade_test';
const substrField = new SubstringField(20, 2, 10, false, false, 1);
const suffixField = new SuffixField(2, 5, true, false, 1);
const prefixField = new PrefixField(2, 5, false, true, 1);
const comboField = new SuffixAndPrefixField(2, 5, 2, 5, false, false, 1);
function testBinaryDowngrade(queryTypeConfig) {
jsTestLog("Testing downgrade from latest to last-lts");
const rst = new ReplSetTest({nodes: 2});
rst.startSet();
rst.initiate();
const conn = rst.getPrimary();
const client = new EncryptedClient(conn, dbName);
const edb = client.getDB();
const adminDB = conn.getDB('admin');
assert.commandWorked(client.createEncryptionCollection("basic_equality_and_range", {
encryptedFields: {
"fields": [
{path: "first", bsonType: "string", queries: {queryType: "equality"}},
{
path: "second",
bsonType: "int",
queries: {queryType: "range", sparsity: 1, trimFactor: 0}
}
]
}
}));
assert.commandWorked(client.createEncryptionCollection("basic_text", {
encryptedFields: {
"fields": [{
path: "first",
bsonType: "string",
queries: queryTypeConfig.createQueryTypeDescriptor()
}]
}
}));
// Downgrade should fail because of basic_text
assert.commandFailedWithCode(
adminDB.runCommand(
{setFeatureCompatibilityVersion: lastLTSFCV, confirm: true, writeConcern: {w: 1}}),
ErrorCodes.CannotDowngrade);
// Drop basic_text
edb.basic_text.drop();
assert.commandWorked(adminDB.runCommand(
{setFeatureCompatibilityVersion: lastLTSFCV, confirm: true, writeConcern: {w: 1}}));
// Downgrade should now succeed
jsTestLog("Starting binary downgrade to last LTS");
rst.upgradeSet({binVersion: 'last-lts', setParameter: {}});
jsTestLog("Finished binary downgrade to last LTS");
rst.stopSet();
}
testBinaryDowngrade(substrField);
testBinaryDowngrade(suffixField);
testBinaryDowngrade(prefixField);
testBinaryDowngrade(comboField);