...

Text file src/go.mongodb.org/mongo-driver/testdata/client-side-encryption/legacy/badQueries.yml

Documentation: go.mongodb.org/mongo-driver/testdata/client-side-encryption/legacy

     1runOn:
     2  - minServerVersion: "4.1.10"
     3database_name: &database_name "default"
     4collection_name: &collection_name "default"
     5
     6data:
     7  - &doc0_encrypted { _id: 1, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==', 'subType': '06'}} }
     8  - &doc1_encrypted { _id: 2, encrypted_string: {'$binary': {'base64': 'AQAAAAAAAAAAAAAAAAAAAAACDdw4KFz3ZLquhsbt7RmDjD0N67n0uSXx7IGnQNCLeIKvot6s/ouI21Eo84IOtb6lhwUNPlSEBNY0/hbszWAKJg==', 'subType': '06'}} }
     9json_schema: {'properties': {'encrypted_w_altname': {'encrypt': {'keyId': '/altname', 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Random'}}, 'encrypted_string': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}, 'random': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Random'}}, 'encrypted_string_equivalent': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}, 'bsonType': 'object'}
    10key_vault_data: [{'status': 1, '_id': {'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}, 'masterKey': {'provider': 'aws', 'key': 'arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0', 'region': 'us-east-1'}, 'updateDate': {'$date': {'$numberLong': '1552949630483'}}, 'keyMaterial': {'$binary': {'base64': 'AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gEqnsxXlR51T5EbEVezUqqKAAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDHa4jo6yp0Z18KgbUgIBEIB74sKxWtV8/YHje5lv5THTl0HIbhSwM6EqRlmBiFFatmEWaeMk4tO4xBX65eq670I5TWPSLMzpp8ncGHMmvHqRajNBnmFtbYxN3E3/WjxmdbOOe+OXpnGJPcGsftc7cB2shRfA4lICPnE26+oVNXT6p0Lo20nY5XC7jyCO', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1552949630483'}}, 'keyAltNames': ['altname', 'another_altname']}]
    11
    12# TODO: I could see an argument against having these tests of mongocryptd as part
    13# of driver tests. When mongocryptd introduces support for these operators, these
    14# tests will fail. But it's also easy enough to remove these tests when that happens.
    15
    16tests:
    17  - description: "$text unconditionally fails"
    18    clientOptions:
    19      autoEncryptOpts:
    20        kmsProviders:
    21          aws: {} # Credentials filled in from environment.
    22    operations:
    23      - name: find
    24        arguments:
    25          filter:
    26            { $text: { $search: "search text" } }
    27        result:
    28          errorContains: "Unsupported match expression operator for encryption"
    29  - description: "$where unconditionally fails"
    30    clientOptions:
    31      autoEncryptOpts:
    32        kmsProviders:
    33          aws: {} # Credentials filled in from environment.
    34    operations:
    35      - name: find
    36        arguments:
    37          filter:
    38            { $where: { $code: "function() { return true }" } }
    39        result:
    40          errorContains: "Unsupported match expression operator for encryption"
    41  - description: "$bit operators succeed on unencrypted, error on encrypted"
    42    clientOptions:
    43      autoEncryptOpts:
    44        kmsProviders:
    45          aws: {} # Credentials filled in from environment.
    46    operations:
    47      - name: find
    48        arguments:
    49          filter: { unencrypted: { $bitsAllClear: 35 }}
    50        result: []
    51      - name: find
    52        arguments:
    53          filter: { encrypted_string: { $bitsAllClear: 35 }}
    54        result:
    55          errorContains: "Invalid match expression operator on encrypted field"
    56      - name: find
    57        arguments:
    58          filter: { unencrypted: { $bitsAllSet: 35 }}
    59        result: []
    60      - name: find
    61        arguments:
    62          filter: { encrypted_string: { $bitsAllSet: 35 }}
    63        result:
    64          errorContains: "Invalid match expression operator on encrypted field"
    65      - name: find
    66        arguments:
    67          filter: { unencrypted: { $bitsAnyClear: 35 }}
    68        result: []
    69      - name: find
    70        arguments:
    71          filter: { encrypted_string: { $bitsAnyClear: 35 }}
    72        result:
    73          errorContains: "Invalid match expression operator on encrypted field"
    74      - name: find
    75        arguments:
    76          filter: { unencrypted: { $bitsAnySet: 35 }}
    77        result: []
    78      - name: find
    79        arguments:
    80          filter: { encrypted_string: { $bitsAnySet: 35 }}
    81        result:
    82          errorContains: "Invalid match expression operator on encrypted field"
    83  - description: "geo operators succeed on unencrypted, error on encrypted"
    84    clientOptions:
    85      autoEncryptOpts:
    86        kmsProviders:
    87          aws: {} # Credentials filled in from environment.
    88    operations:
    89      - name: find
    90        arguments:
    91          filter: { unencrypted: { $near: [0,0] }}
    92        result:
    93          # Still an error because no geo index, but from mongod - not mongocryptd.
    94          errorContains: "unable to find index"
    95      - name: find
    96        arguments:
    97          filter: { encrypted_string: { $near: [0,0] }}
    98        result:
    99          errorContains: "Invalid match expression operator on encrypted field"
   100      - name: find
   101        arguments:
   102          filter: { unencrypted: { $nearSphere: [0,0] }}
   103        result:
   104          # Still an error because no geo index, but from mongod - not mongocryptd.
   105          errorContains: "unable to find index"
   106      - name: find
   107        arguments:
   108          filter: { encrypted_string: { $nearSphere: [0,0] }}
   109        result:
   110          errorContains: "Invalid match expression operator on encrypted field"
   111      - name: find
   112        arguments:
   113          filter: { unencrypted: { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [[ [0,0], [1,0], [1,1], [0,0] ]] }} }}
   114        result: []
   115      - name: find
   116        arguments:
   117          filter: { encrypted_string: { $geoIntersects: { $geometry: { type: "Polygon", coordinates: [[ [0,0], [1,0], [1,1], [0,0] ]] }} }}
   118        result:
   119          errorContains: "Invalid match expression operator on encrypted field"
   120      - name: find
   121        arguments:
   122          filter: { unencrypted: { $geoWithin: { $geometry: { type: "Polygon", coordinates: [[ [0,0], [1,0], [1,1], [0,0] ]] }} }}
   123        result: []
   124      - name: find
   125        arguments:
   126          filter: { encrypted_string: { $geoWithin: { $geometry: { type: "Polygon", coordinates: [[ [0,0], [1,0], [1,1], [0,0] ]] }} }}
   127        result:
   128          errorContains: "Invalid match expression operator on encrypted field"
   129  - description: "inequality operators succeed on unencrypted, error on encrypted"
   130    clientOptions:
   131      autoEncryptOpts:
   132        kmsProviders:
   133          aws: {} # Credentials filled in from environment.
   134    operations:
   135      - name: find
   136        arguments:
   137          filter: { unencrypted: { $gt: 1 }}
   138        result: []
   139      - name: find
   140        arguments:
   141          filter: { encrypted_string: { $gt: 1 }}
   142        result:
   143          errorContains: "Invalid match expression operator on encrypted field"
   144      - name: find
   145        arguments:
   146          filter: { unencrypted: { $lt: 1 }}
   147        result: []
   148      - name: find
   149        arguments:
   150          filter: { encrypted_string: { $lt: 1 }}
   151        result:
   152          errorContains: "Invalid match expression operator on encrypted field"
   153      - name: find
   154        arguments:
   155          filter: { unencrypted: { $gte: 1 }}
   156        result: []
   157      - name: find
   158        arguments:
   159          filter: { encrypted_string: { $gte: 1 }}
   160        result:
   161          errorContains: "Invalid match expression operator on encrypted field"
   162      - name: find
   163        arguments:
   164          filter: { unencrypted: { $lte: 1 }}
   165        result: []
   166      - name: find
   167        arguments:
   168          filter: { encrypted_string: { $lte: 1 }}
   169        result:
   170          errorContains: "Invalid match expression operator on encrypted field"
   171  - description: "other misc operators succeed on unencrypted, error on encrypted"
   172    clientOptions:
   173      autoEncryptOpts:
   174        kmsProviders:
   175          aws: {} # Credentials filled in from environment.
   176    operations:
   177      - name: find
   178        arguments:
   179          filter: { unencrypted: { $mod: [3, 1] }}
   180        result: []
   181      - name: find
   182        arguments:
   183          filter: { encrypted_string: { $mod: [3, 1] }}
   184        result:
   185          errorContains: "Invalid match expression operator on encrypted field"
   186      - name: find
   187        arguments:
   188          filter: { unencrypted: { $regex: "pattern", $options: "" }}
   189        result: []
   190      - name: find
   191        arguments:
   192          filter: { encrypted_string: { $regex: "pattern", $options: "" }}
   193        result:
   194          errorContains: "Invalid match expression operator on encrypted field"
   195      - name: find
   196        arguments:
   197          filter: { unencrypted: { $size: 2 }}
   198        result: []
   199      - name: find
   200        arguments:
   201          filter: { encrypted_string: { $size: 2 }}
   202        result:
   203          errorContains: "Invalid match expression operator on encrypted field"
   204      - name: find
   205        arguments:
   206          filter: { unencrypted: { $type: 2 }}
   207        result: []
   208      - name: find
   209        arguments:
   210          filter: { encrypted_string: { $type: 2 }}
   211        result:
   212          errorContains: "Invalid match expression operator on encrypted field"
   213      - name: find
   214        arguments:
   215          filter: { unencrypted: { $eq: null }}
   216        result:
   217          - &doc0 { _id: 1, encrypted_string: "string0" }
   218          - &doc1 { _id: 2, encrypted_string: "string1" }
   219      - name: find
   220        arguments:
   221          filter: { encrypted_string: { $eq: null }}
   222        result:
   223          errorContains: "Illegal equality to null predicate for encrypted field"
   224      - name: find
   225        arguments:
   226          filter: { unencrypted: { $in: [null] }}
   227        result:
   228          - *doc0
   229          - *doc1
   230      - name: find
   231        arguments:
   232          filter: { encrypted_string: { $in: [null] }}
   233        result:
   234          errorContains: "Illegal equality to null inside $in against an encrypted field"
   235  - description: "$addToSet succeeds on unencrypted, error on encrypted"
   236    clientOptions:
   237      autoEncryptOpts:
   238        kmsProviders:
   239          aws: {} # Credentials filled in from environment.
   240    operations:
   241      - name: updateOne
   242        arguments:
   243          filter: { }
   244          update: { $addToSet: { "unencrypted": ["a"]}}
   245        result:
   246          matchedCount: 1
   247          modifiedCount: 1
   248          upsertedCount: 0
   249      - name: updateOne
   250        arguments:
   251          filter: { }
   252          update: { $addToSet: { "encrypted_string": ["a"]}}
   253        result:
   254          errorContains: "$addToSet not allowed on encrypted values"
   255  - description: "$inc succeeds on unencrypted, error on encrypted"
   256    clientOptions:
   257      autoEncryptOpts:
   258        kmsProviders:
   259          aws: {} # Credentials filled in from environment.
   260    operations:
   261      - name: updateOne
   262        arguments:
   263          filter: { }
   264          update: { $inc: { "unencrypted": 1}}
   265        result:
   266          matchedCount: 1
   267          modifiedCount: 1
   268          upsertedCount: 0
   269      - name: updateOne
   270        arguments:
   271          filter: { }
   272          update: { $inc: { "encrypted_string": 1}}
   273        result:
   274          errorContains: "$inc and $mul not allowed on encrypted values"
   275  - description: "$mul succeeds on unencrypted, error on encrypted"
   276    clientOptions:
   277      autoEncryptOpts:
   278        kmsProviders:
   279          aws: {} # Credentials filled in from environment.
   280    operations:
   281      - name: updateOne
   282        arguments:
   283          filter: { }
   284          update: { $mul: { "unencrypted": 1}}
   285        result:
   286          matchedCount: 1
   287          modifiedCount: 1
   288          upsertedCount: 0
   289      - name: updateOne
   290        arguments:
   291          filter: { }
   292          update: { $mul: { "encrypted_string": 1}}
   293        result:
   294          errorContains: "$inc and $mul not allowed on encrypted values"
   295  - description: "$max succeeds on unencrypted, error on encrypted"
   296    clientOptions:
   297      autoEncryptOpts:
   298        kmsProviders:
   299          aws: {} # Credentials filled in from environment.
   300    operations:
   301      - name: updateOne
   302        arguments:
   303          filter: { }
   304          update: { $max: { "unencrypted": 1}}
   305        result:
   306          matchedCount: 1
   307          modifiedCount: 1
   308          upsertedCount: 0
   309      - name: updateOne
   310        arguments:
   311          filter: { }
   312          update: { $max: { "encrypted_string": 1}}
   313        result:
   314          errorContains: "$max and $min not allowed on encrypted values"
   315  - description: "$min succeeds on unencrypted, error on encrypted"
   316    clientOptions:
   317      autoEncryptOpts:
   318        kmsProviders:
   319          aws: {} # Credentials filled in from environment.
   320    operations:
   321      - name: updateOne
   322        arguments:
   323          filter: { }
   324          update: { $min: { "unencrypted": 1}}
   325        result:
   326          matchedCount: 1
   327          modifiedCount: 1
   328          upsertedCount: 0
   329      - name: updateOne
   330        arguments:
   331          filter: { }
   332          update: { $min: { "encrypted_string": 1}}
   333        result:
   334          errorContains: "$max and $min not allowed on encrypted values"
   335  - description: "$currentDate succeeds on unencrypted, error on encrypted"
   336    clientOptions:
   337      autoEncryptOpts:
   338        kmsProviders:
   339          aws: {} # Credentials filled in from environment.
   340    operations:
   341      - name: updateOne
   342        arguments:
   343          filter: { }
   344          update: { $currentDate: { "unencrypted": true}}
   345        result:
   346          matchedCount: 1
   347          modifiedCount: 1
   348          upsertedCount: 0
   349      - name: updateOne
   350        arguments:
   351          filter: { }
   352          update: { $currentDate: { "encrypted_string": true }}
   353        result:
   354          errorContains: "$currentDate not allowed on encrypted values"
   355  - description: "$pop succeeds on unencrypted, error on encrypted"
   356    clientOptions:
   357      autoEncryptOpts:
   358        kmsProviders:
   359          aws: {} # Credentials filled in from environment.
   360    operations:
   361      - name: updateOne
   362        arguments:
   363          filter: { }
   364          update: { $pop: { "unencrypted": 1}}
   365        result:
   366          matchedCount: 1
   367          modifiedCount: 0
   368          upsertedCount: 0
   369      - name: updateOne
   370        arguments:
   371          filter: { }
   372          update: { $pop: { "encrypted_string": 1 }}
   373        result:
   374          errorContains: "$pop not allowed on encrypted values"
   375  - description: "$pull succeeds on unencrypted, error on encrypted"
   376    clientOptions:
   377      autoEncryptOpts:
   378        kmsProviders:
   379          aws: {} # Credentials filled in from environment.
   380    operations:
   381      - name: updateOne
   382        arguments:
   383          filter: { }
   384          update: { $pull: { "unencrypted": 1}}
   385        result:
   386          matchedCount: 1
   387          modifiedCount: 0
   388          upsertedCount: 0
   389      - name: updateOne
   390        arguments:
   391          filter: { }
   392          update: { $pull: { "encrypted_string": 1 }}
   393        result:
   394          errorContains: "$pull not allowed on encrypted values"
   395  - description: "$pullAll succeeds on unencrypted, error on encrypted"
   396    clientOptions:
   397      autoEncryptOpts:
   398        kmsProviders:
   399          aws: {} # Credentials filled in from environment.
   400    operations:
   401      - name: updateOne
   402        arguments:
   403          filter: { }
   404          update: { $pullAll: { "unencrypted": [1] }}
   405        result:
   406          matchedCount: 1
   407          modifiedCount: 0
   408          upsertedCount: 0
   409      - name: updateOne
   410        arguments:
   411          filter: { }
   412          update: { $pullAll: { "encrypted_string": [1] }}
   413        result:
   414          errorContains: "$pullAll not allowed on encrypted values"
   415  - description: "$push succeeds on unencrypted, error on encrypted"
   416    clientOptions:
   417      autoEncryptOpts:
   418        kmsProviders:
   419          aws: {} # Credentials filled in from environment.
   420    operations:
   421      - name: updateOne
   422        arguments:
   423          filter: { }
   424          update: { $push: { "unencrypted": 1}}
   425        result:
   426          matchedCount: 1
   427          modifiedCount: 1
   428          upsertedCount: 0
   429      - name: updateOne
   430        arguments:
   431          filter: { }
   432          update: { $push: { "encrypted_string": 1 }}
   433        result:
   434          errorContains: "$push not allowed on encrypted values"
   435  - description: "array filters on encrypted fields does not error in mongocryptd, but errors in mongod"
   436    clientOptions:
   437      autoEncryptOpts:
   438        kmsProviders:
   439          aws: {} # Credentials filled in from environment.
   440    operations:
   441      - name: updateOne
   442        arguments:
   443          filter: { }
   444          update: { $set : { "encrypted_string.$[i].x": 1 }}
   445          arrayFilters: [{ i.x: 1 }]
   446        result:
   447          errorContains: "Array update operations not allowed on encrypted values"
   448  - description: "positional operator succeeds on unencrypted, errors on encrypted"
   449    clientOptions:
   450      autoEncryptOpts:
   451        kmsProviders:
   452          aws: {} # Credentials filled in from environment.
   453    operations:
   454      - name: updateOne
   455        arguments:
   456          filter: { "unencrypted": 1 }
   457          update: { $set : { "unencrypted.$": 1 }}
   458        result:
   459          matchedCount: 0
   460          modifiedCount: 0
   461          upsertedCount: 0
   462      - name: updateOne
   463        arguments:
   464          filter: { "encrypted_string": "abc" }
   465          update: { $set : { "encrypted_string.$": "abc" }}
   466        result:
   467          errorContains: "Cannot encrypt fields below '$' positional update operator"
   468  - description: "an update that would produce an array on an encrypted field errors"
   469    clientOptions:
   470      autoEncryptOpts:
   471        kmsProviders:
   472          aws: {} # Credentials filled in from environment.
   473    operations:
   474      - name: updateOne
   475        arguments:
   476          filter: { }
   477          update: { $set : { "encrypted_string": [1,2] }}
   478        result:
   479          # DRIVERS-2272: The expected error message changed in mongocryptd 6.0. Before it was:
   480          # "Cannot encrypt element of type array because schema requires that type is one of: [ string ]"
   481          # After it is:
   482          # "Cannot encrypt element of type: array"
   483          # Only check for the common prefix.
   484          errorContains: "Cannot encrypt element of type"
   485  - description: "an insert with encrypted field on _id errors"
   486    clientOptions:
   487      autoEncryptOpts:
   488        kmsProviders:
   489          aws: {} # Credentials filled in from environment.
   490        schemaMap:
   491          "default.default": {'properties': {'_id': {'encrypt': {'keyId': [{'$binary': {'base64': 'AAAAAAAAAAAAAAAAAAAAAA==', 'subType': '04'}}], 'bsonType': 'string', 'algorithm': 'AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic'}}}}
   492    operations:
   493      - name: insertOne
   494        arguments:
   495          document: { _id: 1 }
   496        result:
   497          errorContains: "Invalid schema containing the 'encrypt' keyword."
   498  - description: "an insert with an array value for an encrypted field fails"
   499    clientOptions:
   500      autoEncryptOpts:
   501        kmsProviders:
   502          aws: {} # Credentials filled in from environment.
   503    operations:
   504      - name: insertOne
   505        arguments:
   506          document: { encrypted_string: [ "123", "456"] }
   507        result:
   508          # DRIVERS-2272: The expected error message changed in mongocryptd 6.0. Before it was:
   509          # "Cannot encrypt element of type array because schema requires that type is one of: [ string ]"
   510          # After it is:
   511          # "Cannot encrypt element of type: array"
   512          # Only check for the common prefix.
   513          errorContains: "Cannot encrypt element of type"
   514  - description: "an insert with a Timestamp(0,0) value in the top-level fails"
   515    clientOptions:
   516      autoEncryptOpts:
   517        kmsProviders:
   518          aws: {} # Credentials filled in from environment.
   519    operations:
   520      - name: insertOne
   521        arguments:
   522          document: { random: {"$timestamp": {"t": 0, "i": 0 }} }
   523        result:
   524          errorContains: "A command that inserts cannot supply Timestamp(0, 0) for an encrypted"
   525  - description: "distinct with the key referring to a field where the keyID is a JSON Pointer errors"
   526    clientOptions:
   527      autoEncryptOpts:
   528        kmsProviders:
   529          aws: {} # Credentials filled in from environment.
   530    operations:
   531      - name: distinct
   532        arguments:
   533          filter: {}
   534          fieldName: "encrypted_w_altname"
   535        result:
   536          errorContains: "The distinct key is not allowed to be marked for encryption with a non-UUID keyId"

View as plain text