80 lines
2.6 KiB
JavaScript
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);
|