65 lines
2.3 KiB
JavaScript
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);
|
|
}());
|