Files
mongo/jstests/multiVersion/failIndexKeyTooLong_FCV40.js

65 lines
2.3 KiB
JavaScript

// @tags: [does_not_support_stepdowns, requires_non_retryable_writes, requires_fastcount]
// TODO SERVER-36386: Remove this test
(function() {
"use strict";
load("jstests/libs/feature_compatibility_version.js");
// Start the node with FCV 4.0
let conn = MongoRunner.runMongod({binVersion: "latest", cleanData: true});
assert.commandWorked(conn.adminCommand({setFeatureCompatibilityVersion: "4.0"}));
var db = conn.getDB('test');
var t = db.index_bigkeys_nofail;
t.drop();
var res = db.getSiblingDB('admin').runCommand({setParameter: 1, failIndexKeyTooLong: true});
var was = res.was;
assert.commandWorked(res);
var x = new Array(1025).join('x');
assert.commandWorked(t.ensureIndex({name: 1}));
assert.writeError(t.insert({name: x}));
assert.commandWorked(t.dropIndex({name: 1}));
assert.writeOK(t.insert({name: x}));
assert.commandFailed(t.ensureIndex({name: 1}));
t.drop();
db.getSiblingDB('admin').runCommand({setParameter: 1, failIndexKeyTooLong: false});
// inserts
assert.writeOK(t.insert({_id: 1, name: x}));
assert.commandWorked(t.ensureIndex({name: 1}));
assert.writeOK(t.insert({_id: 2, name: x}));
assert.writeOK(t.insert({_id: 3, name: x}));
assert.eq(t.count(), 3);
// updates (smaller and larger)
assert.writeOK(t.update({_id: 1}, {$set: {name: 'short'}}));
assert.writeOK(t.update({_id: 1}, {$set: {name: x}}));
assert.writeOK(t.update({_id: 1}, {$set: {name: x + 'even longer'}}));
// remove
assert.writeOK(t.remove({_id: 1}));
assert.eq(t.count(), 2);
db.getSiblingDB('admin').runCommand({setParameter: 1, failIndexKeyTooLong: true});
// can still delete even if key is oversized
assert.writeOK(t.remove({_id: 2}));
assert.eq(t.count(), 1);
// can still update to shorter, but not longer name.
assert.writeError(t.update({_id: 3}, {$set: {name: x + 'even longer'}}));
assert.writeOK(t.update({_id: 3}, {$set: {name: 'short'}}));
assert.writeError(t.update({_id: 3}, {$set: {name: x}}));
db.getSiblingDB('admin').runCommand({setParameter: 1, failIndexKeyTooLong: was});
// Explicitly drop the collection to avoid failures in post-test hooks that run dbHash and
// validate commands.
t.drop();
MongoRunner.stopMongod(conn);
}());