mirror of https://github.com/mongodb/mongo
66 lines
2.5 KiB
JavaScript
66 lines
2.5 KiB
JavaScript
/**
|
|
* Tests for handling of the JSON Schema 'encrypt' keyword.
|
|
*
|
|
* @tags: [
|
|
* requires_non_retryable_commands,
|
|
* ]
|
|
*/
|
|
(function() {
|
|
"use strict";
|
|
|
|
load("jstests/libs/assert_schema_match.js");
|
|
|
|
const coll = db.jstests_schema_encrypt;
|
|
const encryptedBinDataElement = BinData(6, "AAAAAAAAAAAAAAAAAAAAAAAAAAAA");
|
|
const nonEncryptedBinDataElement = BinData(0, "AAAAAAAAAAAAAAAAAAAAAAAAAAAA");
|
|
|
|
// Only elements of type BinData with subtype '6' should match.
|
|
assertSchemaMatch(coll, {properties: {bin: {encrypt: {}}}}, {bin: encryptedBinDataElement}, true);
|
|
assertSchemaMatch(coll, {properties: {bin: {encrypt: {}}}}, {bin: {}}, false);
|
|
assertSchemaMatch(
|
|
coll, {properties: {bin: {encrypt: {}}}}, {bin: nonEncryptedBinDataElement}, false);
|
|
// Nested in object.
|
|
assertSchemaMatch(coll,
|
|
{properties: {obj: {type: 'object', properties: {a: {encrypt: {}}}}}},
|
|
{obj: {a: encryptedBinDataElement}},
|
|
true);
|
|
assertSchemaMatch(coll,
|
|
{properties: {obj: {type: 'object', properties: {a: {encrypt: {}}}}}},
|
|
{obj: {a: {}}},
|
|
false);
|
|
assertSchemaMatch(coll,
|
|
{properties: {obj: {type: 'object', properties: {a: {encrypt: {}}}}}},
|
|
{obj: {a: nonEncryptedBinDataElement}},
|
|
false);
|
|
|
|
// Nested in array.
|
|
assertSchemaMatch(coll,
|
|
{properties: {arr: {type: 'array', items: {encrypt: {}}}}},
|
|
{arr: [encryptedBinDataElement, encryptedBinDataElement]},
|
|
true);
|
|
assertSchemaMatch(
|
|
coll, {properties: {arr: {type: 'array', items: {encrypt: {}}}}}, {arr: [{}, {}]}, false);
|
|
assertSchemaMatch(coll,
|
|
{properties: {arr: {type: 'array', items: {encrypt: {}}}}},
|
|
{arr: [encryptedBinDataElement, nonEncryptedBinDataElement]},
|
|
false);
|
|
|
|
// If array is not specified, should not traverse array of encrypted BinData's.
|
|
assertSchemaMatch(coll,
|
|
{properties: {bin: {encrypt: {}}}},
|
|
{bin: [encryptedBinDataElement, encryptedBinDataElement]},
|
|
false);
|
|
|
|
// Encrypt alongside type/bsontype should fail to parse.
|
|
assert.commandFailedWithCode(
|
|
coll.runCommand(
|
|
{find: "coll", filter: {$jsonSchema: {properties: {bin: {encrypt: {}, type: 'object'}}}}}),
|
|
ErrorCodes.FailedToParse);
|
|
|
|
assert.commandFailedWithCode(coll.runCommand({
|
|
find: "coll",
|
|
filter: {$jsonSchema: {properties: {bin: {encrypt: {}, bsonType: 'object'}}}}
|
|
}),
|
|
ErrorCodes.FailedToParse);
|
|
}());
|