1{
2  "runOn": [
3    {
4      "minServerVersion": "4.1.10"
5    }
6  ],
7  "database_name": "default",
8  "collection_name": "default",
9  "data": [
10    {
11      "_id": 1,
12      "encrypted_string": {
13        "$binary": {
14          "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==",
15          "subType": "06"
16        }
17      }
18    }
19  ],
20  "json_schema": {
21    "properties": {
22      "encrypted_w_altname": {
23        "encrypt": {
24          "keyId": "/altname",
25          "bsonType": "string",
26          "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
27        }
28      },
29      "encrypted_string": {
30        "encrypt": {
31          "keyId": [
32            {
33              "$binary": {
34                "base64": "AAAAAAAAAAAAAAAAAAAAAA==",
35                "subType": "04"
36              }
37            }
38          ],
39          "bsonType": "string",
40          "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
41        }
42      },
43      "random": {
44        "encrypt": {
45          "keyId": [
46            {
47              "$binary": {
48                "base64": "AAAAAAAAAAAAAAAAAAAAAA==",
49                "subType": "04"
50              }
51            }
52          ],
53          "bsonType": "string",
54          "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Random"
55        }
56      },
57      "encrypted_string_equivalent": {
58        "encrypt": {
59          "keyId": [
60            {
61              "$binary": {
62                "base64": "AAAAAAAAAAAAAAAAAAAAAA==",
63                "subType": "04"
64              }
65            }
66          ],
67          "bsonType": "string",
68          "algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"
69        }
70      }
71    },
72    "bsonType": "object"
73  },
74  "key_vault_data": [
75    {
76      "status": 1,
77      "_id": {
78        "$binary": {
79          "base64": "AAAAAAAAAAAAAAAAAAAAAA==",
80          "subType": "04"
81        }
82      },
83      "masterKey": {
84        "provider": "aws",
85        "key": "arn:aws:kms:us-east-1:579766882180:key/89fcc2c4-08b0-4bd9-9f25-e30687b580d0",
86        "region": "us-east-1"
87      },
88      "updateDate": {
89        "$date": {
90          "$numberLong": "1552949630483"
91        }
92      },
93      "keyMaterial": {
94        "$binary": {
95          "base64": "AQICAHhQNmWG2CzOm1dq3kWLM+iDUZhEqnhJwH9wZVpuZ94A8gEqnsxXlR51T5EbEVezUqqKAAAAwjCBvwYJKoZIhvcNAQcGoIGxMIGuAgEAMIGoBgkqhkiG9w0BBwEwHgYJYIZIAWUDBAEuMBEEDHa4jo6yp0Z18KgbUgIBEIB74sKxWtV8/YHje5lv5THTl0HIbhSwM6EqRlmBiFFatmEWaeMk4tO4xBX65eq670I5TWPSLMzpp8ncGHMmvHqRajNBnmFtbYxN3E3/WjxmdbOOe+OXpnGJPcGsftc7cB2shRfA4lICPnE26+oVNXT6p0Lo20nY5XC7jyCO",
96          "subType": "00"
97        }
98      },
99      "creationDate": {
100        "$date": {
101          "$numberLong": "1552949630483"
102        }
103      },
104      "keyAltNames": [
105        "altname",
106        "another_altname"
107      ]
108    }
109  ],
110  "tests": [
111    {
112      "description": "Aggregate with deterministic encryption",
113      "skipReason": "SERVER-39395",
114      "clientOptions": {
115        "autoEncryptOpts": {
116          "kmsProviders": {
117            "aws": {}
118          }
119        }
120      },
121      "operations": [
122        {
123          "name": "aggregate",
124          "arguments": {
125            "pipeline": [
126              {
127                "$match": {
128                  "encrypted_string": "457-55-5642"
129                }
130              }
131            ]
132          },
133          "result": [
134            {
135              "_id": 1,
136              "encrypted_string": "string0"
137            }
138          ]
139        }
140      ],
141      "expectations": [
142        {
143          "command_started_event": {
144            "command": {
145              "listCollections": 1,
146              "filter": {
147                "name": "default"
148              }
149            },
150            "command_name": "listCollections"
151          }
152        },
153        {
154          "command_started_event": {
155            "command": {
156              "find": "datakeys",
157              "filter": {
158                "$or": [
159                  {
160                    "_id": {
161                      "$in": [
162                        {
163                          "$binary": {
164                            "base64": "AAAAAAAAAAAAAAAAAAAAAA==",
165                            "subType": "04"
166                          }
167                        }
168                      ]
169                    }
170                  },
171                  {
172                    "keyAltNames": {
173                      "$in": []
174                    }
175                  }
176                ]
177              },
178              "$db": "keyvault",
179              "readConcern": {
180                "level": "majority"
181              }
182            },
183            "command_name": "find"
184          }
185        },
186        {
187          "command_started_event": {
188            "command": {
189              "aggregate": "default",
190              "pipeline": [
191                {
192                  "$match": {
193                    "encrypted_string": "457-55-5642"
194                  }
195                }
196              ]
197            },
198            "command_name": "aggregate"
199          }
200        }
201      ],
202      "outcome": {
203        "collection": {
204          "data": [
205            {
206              "_id": 1,
207              "encrypted_string": {
208                "$binary": {
209                  "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==",
210                  "subType": "06"
211                }
212              }
213            }
214          ]
215        }
216      }
217    },
218    {
219      "description": "Aggregate with empty pipeline",
220      "skipReason": "SERVER-40829 hides agg support behind enableTestCommands flag.",
221      "clientOptions": {
222        "autoEncryptOpts": {
223          "kmsProviders": {
224            "aws": {}
225          }
226        }
227      },
228      "operations": [
229        {
230          "name": "aggregate",
231          "arguments": {
232            "pipeline": []
233          },
234          "result": [
235            {
236              "_id": 1,
237              "encrypted_string": "string0"
238            }
239          ]
240        }
241      ],
242      "expectations": [
243        {
244          "command_started_event": {
245            "command": {
246              "listCollections": 1,
247              "filter": {
248                "name": "default"
249              }
250            },
251            "command_name": "listCollections"
252          }
253        },
254        {
255          "command_started_event": {
256            "command": {
257              "aggregate": "default",
258              "pipeline": [],
259              "cursor": {}
260            },
261            "command_name": "aggregate"
262          }
263        },
264        {
265          "command_started_event": {
266            "command": {
267              "find": "datakeys",
268              "filter": {
269                "$or": [
270                  {
271                    "_id": {
272                      "$in": [
273                        {
274                          "$binary": {
275                            "base64": "AAAAAAAAAAAAAAAAAAAAAA==",
276                            "subType": "04"
277                          }
278                        }
279                      ]
280                    }
281                  },
282                  {
283                    "keyAltNames": {
284                      "$in": []
285                    }
286                  }
287                ]
288              },
289              "$db": "keyvault",
290              "readConcern": {
291                "level": "majority"
292              }
293            },
294            "command_name": "find"
295          }
296        }
297      ],
298      "outcome": {
299        "collection": {
300          "data": [
301            {
302              "_id": 1,
303              "encrypted_string": {
304                "$binary": {
305                  "base64": "AQAAAAAAAAAAAAAAAAAAAAACwj+3zkv2VM+aTfk60RqhXq6a/77WlLwu/BxXFkL7EppGsju/m8f0x5kBDD3EZTtGALGXlym5jnpZAoSIkswHoA==",
306                  "subType": "06"
307                }
308              }
309            }
310          ]
311        }
312      }
313    },
314    {
315      "description": "Aggregate should fail with random encryption",
316      "skipReason": "SERVER-39395",
317      "clientOptions": {
318        "autoEncryptOpts": {
319          "kmsProviders": {
320            "aws": {}
321          }
322        }
323      },
324      "operations": [
325        {
326          "name": "aggregate",
327          "arguments": {
328            "pipeline": [
329              {
330                "$match": {
331                  "random": "abc"
332                }
333              }
334            ]
335          },
336          "result": {
337            "errorContains": "Cannot query on fields encrypted with the randomized encryption"
338          }
339        }
340      ]
341    },
342    {
343      "description": "Database aggregate should fail",
344      "clientOptions": {
345        "autoEncryptOpts": {
346          "kmsProviders": {
347            "aws": {}
348          }
349        }
350      },
351      "operations": [
352        {
353          "name": "aggregate",
354          "object": "database",
355          "arguments": {
356            "pipeline": [
357              {
358                "$currentOp": {
359                  "allUsers": false,
360                  "idleConnections": false,
361                  "localOps": true
362                }
363              },
364              {
365                "$match": {
366                  "command.aggregate": {
367                    "$eq": 1
368                  }
369                }
370              },
371              {
372                "$project": {
373                  "command": 1
374                }
375              },
376              {
377                "$project": {
378                  "command.lsid": 0
379                }
380              }
381            ]
382          },
383          "result": {
384            "errorContains": "non-collection command not supported for auto encryption: aggregate"
385          }
386        }
387      ]
388    }
389  ]
390}
391