1# Test correctness results.
2# Does not include command monitoring expectations or outcome assertions to make tests more readable.
3
4# Requires libmongocrypt 1.8.0.
5runOn:
6 - minServerVersion: "7.0.0"
7 # Skip QEv2 (also referred to as FLE2v2) tests on Serverless. Unskip once Serverless enables the QEv2 protocol.
8 # FLE 2 Encrypted collections are not supported on standalone.
9 topology: [ "replicaset", "sharded", "load-balanced" ]
10 # Skip tests for "rangePreview" algorithm on Server 8.0+. Server 8.0 drops "rangePreview" and adds "range".
11 maxServerVersion: "7.99.99"
12database_name: &database_name "default"
13collection_name: &collection_name "default"
14data: []
15encrypted_fields: &encrypted_fields {'fields': [{'keyId': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'path': 'encryptedInt', 'bsonType': 'int', 'queries': {'queryType': 'rangePreview', 'contention': {'$numberLong': '0'}, 'sparsity': {'$numberLong': '1'}, 'min': {'$numberInt': '0'}, 'max': {'$numberInt': '200'}}}]}
16key_vault_data: [ {'_id': {'$binary': {'base64': 'EjRWeBI0mHYSNBI0VniQEg==', 'subType': '04'}}, 'keyMaterial': {'$binary': {'base64': 'sHe0kz57YW7v8g9VP9sf/+K1ex4JqKc5rf/URX3n3p8XdZ6+15uXPaSayC6adWbNxkFskuMCOifDoTT+rkqMtFkDclOy884RuGGtUysq3X7zkAWYTKi8QAfKkajvVbZl2y23UqgVasdQu3OVBQCrH/xY00nNAs/52e958nVjBuzQkSb1T8pKJAyjZsHJ60+FtnfafDZSTAIBJYn7UWBCwQ==', 'subType': '00'}}, 'creationDate': {'$date': {'$numberLong': '1648914851981'}}, 'updateDate': {'$date': {'$numberLong': '1648914851981'}}, 'status': {'$numberInt': '0'}, 'masterKey': {'provider': 'local'}} ]
17tests:
18 - description: "Find with $gt"
19 clientOptions:
20 autoEncryptOpts:
21 kmsProviders:
22 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
23 operations:
24 - name: insertOne
25 arguments:
26 document: &doc0 { _id: 0, encryptedInt: { $numberInt: "0" } }
27 - name: insertOne
28 arguments:
29 document: &doc1 { _id: 1, encryptedInt: { $numberInt: "1" } }
30 - name: find
31 arguments:
32 filter: { encryptedInt: { $gt: { $numberInt: "0" } }}
33 result: [*doc1]
34
35 - description: "Find with $gte"
36 clientOptions:
37 autoEncryptOpts:
38 kmsProviders:
39 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
40 operations:
41 - name: insertOne
42 arguments: { document: *doc0 }
43 - name: insertOne
44 arguments: { document: *doc1 }
45 - name: find
46 arguments:
47 filter: { encryptedInt: { $gte: { $numberInt: "0" } }}
48 # sort so results from range queries are ordered.
49 sort: { _id: 1 }
50 result: [*doc0, *doc1]
51
52 - description: "Find with $gt with no results"
53 clientOptions:
54 autoEncryptOpts:
55 kmsProviders:
56 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
57 operations:
58 - name: insertOne
59 arguments: { document: *doc0 }
60 - name: insertOne
61 arguments: { document: *doc1 }
62 - name: find
63 arguments:
64 filter: { encryptedInt: { $gt: { $numberInt: "1" } }}
65 result: []
66
67 - description: "Find with $lt"
68 clientOptions:
69 autoEncryptOpts:
70 kmsProviders:
71 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
72 operations:
73 - name: insertOne
74 arguments: { document: *doc0 }
75 - name: insertOne
76 arguments: { document: *doc1 }
77 - name: find
78 arguments:
79 filter: { encryptedInt: { $lt: { $numberInt: "1" } }}
80 result: [*doc0]
81
82 - description: "Find with $lte"
83 clientOptions:
84 autoEncryptOpts:
85 kmsProviders:
86 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
87 operations:
88 - name: insertOne
89 arguments: { document: *doc0 }
90 - name: insertOne
91 arguments: { document: *doc1 }
92 - name: find
93 arguments:
94 filter: { encryptedInt: { $lte: { $numberInt: "1" } }}
95 # sort so results from range queries are ordered.
96 sort: { _id: 1 }
97 result: [*doc0, *doc1]
98
99 - description: "Find with $lt below min"
100 clientOptions:
101 autoEncryptOpts:
102 kmsProviders:
103 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
104 operations:
105 - name: insertOne
106 arguments: { document: *doc0 }
107 - name: insertOne
108 arguments: { document: *doc1 }
109 - name: find
110 arguments:
111 filter: { encryptedInt: { $lt: { $numberInt: "0" } }}
112 result:
113 errorContains: must be greater than the range minimum
114
115 - description: "Find with $gt above max"
116 clientOptions:
117 autoEncryptOpts:
118 kmsProviders:
119 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
120 operations:
121 - name: insertOne
122 arguments: { document: *doc0 }
123 - name: insertOne
124 arguments: { document: *doc1 }
125 - name: find
126 arguments:
127 filter: { encryptedInt: { $gt: { $numberInt: "200" } }}
128 result:
129 errorContains: must be less than the range maximum
130
131 - description: "Find with $gt and $lt"
132 clientOptions:
133 autoEncryptOpts:
134 kmsProviders:
135 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
136 operations:
137 - name: insertOne
138 arguments: { document: *doc0 }
139 - name: insertOne
140 arguments: { document: *doc1 }
141 - name: find
142 arguments:
143 filter: { encryptedInt: { $gt: { $numberInt: "0" }, $lt: { $numberInt: "2"} }}
144 result: [*doc1]
145
146 - description: "Find with equality"
147 clientOptions:
148 autoEncryptOpts:
149 kmsProviders:
150 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
151 operations:
152 - name: insertOne
153 arguments: { document: *doc0 }
154 - name: insertOne
155 arguments: { document: *doc1 }
156 - name: find
157 arguments:
158 filter: { encryptedInt: { $numberInt: "0" } }
159 result: [*doc0]
160 - name: find
161 arguments:
162 filter: { encryptedInt: { $numberInt: "1" } }
163 result: [*doc1]
164
165 - description: "Find with full range"
166 clientOptions:
167 autoEncryptOpts:
168 kmsProviders:
169 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
170 operations:
171 - name: insertOne
172 arguments: { document: *doc0 }
173 - name: insertOne
174 arguments: { document: *doc1 }
175 - name: find
176 arguments:
177 filter: { encryptedInt: { $gte: {$numberInt: "0"}, $lte: {$numberInt: "200"} } }
178 # sort so results from range queries are ordered.
179 sort: { _id: 1 }
180 result: [*doc0, *doc1]
181
182 - description: "Find with $in"
183 clientOptions:
184 autoEncryptOpts:
185 kmsProviders:
186 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
187 operations:
188 - name: insertOne
189 arguments: { document: *doc0 }
190 - name: insertOne
191 arguments: { document: *doc1 }
192 - name: find
193 arguments:
194 filter: { encryptedInt: { $in: [ {$numberInt: "0"} ] } }
195 result: [*doc0]
196
197 - description: "Insert out of range"
198 clientOptions:
199 autoEncryptOpts:
200 kmsProviders:
201 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
202 operations:
203 - name: insertOne
204 arguments:
205 document: { _id: 0, encryptedInt: { $numberInt: "-1" }}
206 result:
207 errorContains: value must be greater than or equal to the minimum value
208
209 - description: "Insert min and max"
210 clientOptions:
211 autoEncryptOpts:
212 kmsProviders:
213 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
214 operations:
215 - name: insertOne
216 arguments:
217 document: *doc0
218 - name: insertOne
219 arguments:
220 document: &doc200 { _id: 200, encryptedInt: { $numberInt: "200" }}
221 - name: find
222 arguments:
223 filter: {}
224 # sort so results from range queries are ordered.
225 sort: { _id: 1 }
226 result: [*doc0, *doc200]
227
228 - description: "Aggregate with $gte"
229 clientOptions:
230 autoEncryptOpts:
231 kmsProviders:
232 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
233 operations:
234 - name: insertOne
235 arguments: { document: *doc0 }
236 - name: insertOne
237 arguments: { document: *doc1 }
238 - name: aggregate
239 arguments:
240 pipeline:
241 - { $match: { encryptedInt: { $gte: { $numberInt: "0" } }} }
242 # sort so results from range queries are ordered.
243 - { $sort: { _id: 1 }}
244
245 result: [*doc0, *doc1]
246
247 - description: "Aggregate with $gt with no results"
248 clientOptions:
249 autoEncryptOpts:
250 kmsProviders:
251 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
252 operations:
253 - name: insertOne
254 arguments: { document: *doc0 }
255 - name: insertOne
256 arguments: { document: *doc1 }
257 - name: aggregate
258 arguments:
259 pipeline:
260 - { $match: { encryptedInt: { $gt: { $numberInt: "1" } }} }
261 result: []
262
263 - description: "Aggregate with $lt"
264 clientOptions:
265 autoEncryptOpts:
266 kmsProviders:
267 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
268 operations:
269 - name: insertOne
270 arguments: { document: *doc0 }
271 - name: insertOne
272 arguments: { document: *doc1 }
273 - name: aggregate
274 arguments:
275 pipeline:
276 - { $match: { encryptedInt: { $lt: { $numberInt: "1" } }} }
277 result: [*doc0]
278
279 - description: "Aggregate with $lte"
280 clientOptions:
281 autoEncryptOpts:
282 kmsProviders:
283 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
284 operations:
285 - name: insertOne
286 arguments: { document: *doc0 }
287 - name: insertOne
288 arguments: { document: *doc1 }
289 - name: aggregate
290 arguments:
291 pipeline:
292 - { $match: { encryptedInt: { $lte: { $numberInt: "1" } }} }
293 # sort so results from range queries are ordered.
294 - { $sort: { _id: 1 }}
295 result: [*doc0, *doc1]
296
297 - description: "Aggregate with $lt below min"
298 clientOptions:
299 autoEncryptOpts:
300 kmsProviders:
301 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
302 operations:
303 - name: insertOne
304 arguments: { document: *doc0 }
305 - name: insertOne
306 arguments: { document: *doc1 }
307 - name: aggregate
308 arguments:
309 pipeline:
310 - { $match: { encryptedInt: { $lt: { $numberInt: "0" } }} }
311 result:
312 errorContains: must be greater than the range minimum
313
314 - description: "Aggregate with $gt above max"
315 clientOptions:
316 autoEncryptOpts:
317 kmsProviders:
318 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
319 operations:
320 - name: insertOne
321 arguments: { document: *doc0 }
322 - name: insertOne
323 arguments: { document: *doc1 }
324 - name: aggregate
325 arguments:
326 pipeline:
327 - { $match: { encryptedInt: { $gt: { $numberInt: "200" } }} }
328 result:
329 errorContains: must be less than the range maximum
330
331 - description: "Aggregate with $gt and $lt"
332 clientOptions:
333 autoEncryptOpts:
334 kmsProviders:
335 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
336 operations:
337 - name: insertOne
338 arguments: { document: *doc0 }
339 - name: insertOne
340 arguments: { document: *doc1 }
341 - name: aggregate
342 arguments:
343 pipeline:
344 - { $match: { encryptedInt: { $gt: { $numberInt: "0" }, $lt: { $numberInt: "2"} }} }
345 result: [*doc1]
346
347 - description: "Aggregate with equality"
348 clientOptions:
349 autoEncryptOpts:
350 kmsProviders:
351 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
352 operations:
353 - name: insertOne
354 arguments: { document: *doc0 }
355 - name: insertOne
356 arguments: { document: *doc1 }
357 - name: aggregate
358 arguments:
359 pipeline:
360 - { $match: { encryptedInt: { $numberInt: "0" } } }
361 result: [*doc0]
362 - name: aggregate
363 arguments:
364 pipeline:
365 - { $match: { encryptedInt: { $numberInt: "1" } } }
366 result: [*doc1]
367
368 - description: "Aggregate with full range"
369 clientOptions:
370 autoEncryptOpts:
371 kmsProviders:
372 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
373 operations:
374 - name: insertOne
375 arguments: { document: *doc0 }
376 - name: insertOne
377 arguments: { document: *doc1 }
378 - name: aggregate
379 arguments:
380 pipeline:
381 - { $match: { encryptedInt: { $gte: {$numberInt: "0"}, $lte: {$numberInt: "200"} } } }
382 # sort so results from range queries are ordered.
383 - { $sort: { _id: 1 }}
384 result: [*doc0, *doc1]
385
386 - description: "Aggregate with $in"
387 clientOptions:
388 autoEncryptOpts:
389 kmsProviders:
390 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
391 operations:
392 - name: insertOne
393 arguments: { document: *doc0 }
394 - name: insertOne
395 arguments: { document: *doc1 }
396 - name: aggregate
397 arguments:
398 pipeline:
399 - { $match: { encryptedInt: { $in: [ {$numberInt: "0"} ] } } }
400 result: [*doc0]
401
402 - description: "Wrong type: Insert Double"
403 clientOptions:
404 autoEncryptOpts:
405 kmsProviders:
406 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
407 operations:
408 - name: insertOne
409 arguments: { document: { _id: 0, encryptedInt: { $numberDouble: "0" }} }
410 result:
411 # Expect an error from mongocryptd.
412 errorContains: "cannot encrypt element"
413
414 - description: "Wrong type: Find Double"
415 clientOptions:
416 autoEncryptOpts:
417 kmsProviders:
418 local: {'key': {'$binary': {'base64': 'Mng0NCt4ZHVUYUJCa1kxNkVyNUR1QURhZ2h2UzR2d2RrZzh0cFBwM3R6NmdWMDFBMUN3YkQ5aXRRMkhGRGdQV09wOGVNYUMxT2k3NjZKelhaQmRCZGJkTXVyZG9uSjFk', 'subType': '00'}}}
419 operations:
420 - name: find
421 arguments:
422 filter: { encryptedInt: { $gte: { $numberDouble: "0" } }}
423 result:
424 # expect an error from libmongocrypt.
425 errorContains: "field type is not supported"
View as plain text