summaryrefslogtreecommitdiff
path: root/jstests/core/apply_ops_index_collation.js
blob: 19f7d8fd6a1ee743a13c80afbf83d65f4c8a1dc2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
 * Tests creation of indexes using applyOps for collections with a non-simple default collation.
 * Indexes created through applyOps should be built exactly according to their index spec, without
 * inheriting the collection default collation, since this is how the oplog entries are replicated.
 *
 * @tags: [
 *   # Cannot implicitly shard accessed collections because of
 *   # collection existing when none expected.
 *   assumes_no_implicit_collection_creation_after_drop,
 *   requires_non_retryable_commands,
 *   # applyOps is not supported on mongos
 *   assumes_against_mongod_not_mongos,
 *   # applyOps uses the oplog that require replication support
 *   requires_replication,
 *   # Tenant migrations don't support applyOps.
 *   tenant_migration_incompatible,
 * ]
 */

(function() {
"use strict";

load("jstests/libs/index_catalog_helpers.js");
load('jstests/libs/uuid_util.js');

const coll = db.apply_ops_index_collation;
coll.drop();
assert.commandWorked(db.createCollection(coll.getName(), {collation: {locale: "fr_CA"}}));
const uuid = getUUIDFromListCollections(db, coll.getName());

// An index created using a createIndexes-style oplog entry with a non-simple collation does not
// inherit the collection default collation.
let res = db.adminCommand({
    applyOps: [{
        op: "c",
        ns: coll.getFullName(),
        ui: uuid,
        o: {
            createIndexes: coll.getFullName(),
            indexes: [{
                v: 2,
                key: {a: 1},
                name: "a_1_en",
                collation: {
                    locale: "en_US",
                    caseLevel: false,
                    caseFirst: "off",
                    strength: 3,
                    numericOrdering: false,
                    alternate: "non-ignorable",
                    maxVariable: "punct",
                    normalization: false,
                    backwards: false,
                    version: "57.1"
                }
            }],
        }
    }]
});

// It is not possible to test createIndexes in applyOps because that command is not accepted by
// applyOps in that mode.
assert.commandFailedWithCode(res, ErrorCodes.CommandNotSupported);
})();