libmongocrypt-helper 1.12.0.0.1001 → 1.13.2.0.1001

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. checksums.yaml +4 -4
  2. data/ext/libmongocrypt/libmongocrypt/CHANGELOG.md +19 -0
  3. data/ext/libmongocrypt/libmongocrypt/CMakeLists.txt +10 -0
  4. data/ext/libmongocrypt/libmongocrypt/CODEOWNERS +1 -4
  5. data/ext/libmongocrypt/libmongocrypt/CONTRIBUTING.md +14 -0
  6. data/ext/libmongocrypt/libmongocrypt/Earthfile +49 -50
  7. data/ext/libmongocrypt/libmongocrypt/README.md +8 -17
  8. data/ext/libmongocrypt/libmongocrypt/bindings/python/CHANGELOG.rst +6 -0
  9. data/ext/libmongocrypt/libmongocrypt/bindings/python/README.rst +1 -1
  10. data/ext/libmongocrypt/libmongocrypt/bindings/python/libmongocrypt-version.txt +1 -1
  11. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binding.py +39 -1
  12. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/mongocrypt.py +32 -0
  13. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/version.py +1 -1
  14. data/ext/libmongocrypt/libmongocrypt/bindings/python/release.sh +1 -1
  15. data/ext/libmongocrypt/libmongocrypt/bindings/python/sbom.json +8 -8
  16. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/compact/success/encrypted-field-config-map.json +0 -1
  17. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/encrypted-field-config-map.json +0 -2
  18. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_mongocrypt.py +11 -11
  19. data/ext/libmongocrypt/libmongocrypt/cmake/FetchMongoC.cmake +4 -2
  20. data/ext/libmongocrypt/libmongocrypt/cmake/ImportBSON.cmake +3 -5
  21. data/ext/libmongocrypt/libmongocrypt/doc/releasing.md +14 -27
  22. data/ext/libmongocrypt/libmongocrypt/etc/cyclonedx.sbom.json +9 -9
  23. data/ext/libmongocrypt/libmongocrypt/etc/format.sh +0 -2
  24. data/ext/libmongocrypt/libmongocrypt/etc/libbson-remove-GCC-diagnostic-in-functions.patch +158 -0
  25. data/ext/libmongocrypt/libmongocrypt/etc/libbson-remove-GCC-diagnostic-pragma.patch +3 -3
  26. data/ext/libmongocrypt/libmongocrypt/etc/purls.txt +1 -1
  27. data/ext/libmongocrypt/libmongocrypt/integrating.md +42 -11
  28. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_crypto_windows.c +2 -2
  29. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message.c +1 -1
  30. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message_private.h +2 -2
  31. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request.c +3 -3
  32. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kmip_reader_writer.c +5 -5
  33. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_assert.h +25 -8
  34. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_azure_online.c +2 -2
  35. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_gcp_online.c +3 -3
  36. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kms_request.c +12 -10
  37. data/ext/libmongocrypt/libmongocrypt/src/mc-efc-private.h +5 -0
  38. data/ext/libmongocrypt/libmongocrypt/src/mc-efc.c +35 -1
  39. data/ext/libmongocrypt/libmongocrypt/src/mc-fle-blob-subtype-private.h +4 -1
  40. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder-private.h +79 -0
  41. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder.c +226 -2
  42. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-v2.c +0 -1
  43. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload.c +0 -1
  44. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private-v2.h +34 -0
  45. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-v2.c +165 -1
  46. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload.c +0 -1
  47. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-private-v2.h +105 -7
  48. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-v2.c +381 -70
  49. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-tag-and-encrypted-metadata-block-private.h +7 -2
  50. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-tag-and-encrypted-metadata-block.c +17 -0
  51. data/ext/libmongocrypt/libmongocrypt/src/mc-schema-broker-private.h +126 -0
  52. data/ext/libmongocrypt/libmongocrypt/src/mc-schema-broker.c +1075 -0
  53. data/ext/libmongocrypt/libmongocrypt/src/mc-str-encode-string-sets-private.h +95 -0
  54. data/ext/libmongocrypt/libmongocrypt/src/mc-str-encode-string-sets.c +304 -0
  55. data/ext/libmongocrypt/libmongocrypt/src/mc-text-search-str-encode-private.h +45 -0
  56. data/ext/libmongocrypt/libmongocrypt/src/mc-text-search-str-encode.c +248 -0
  57. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens-private.h +112 -2
  58. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens.c +166 -2
  59. data/ext/libmongocrypt/libmongocrypt/src/mlib/windows-lean.h +2 -0
  60. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-buffer-private.h +11 -0
  61. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-buffer.c +36 -3
  62. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-decrypt.c +8 -4
  63. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-encrypt.c +430 -857
  64. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-private.h +5 -19
  65. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx.c +1 -1
  66. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking.c +516 -523
  67. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts-private.h +0 -4
  68. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-private.h +7 -12
  69. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-traverse-util.c +1 -1
  70. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-util.c +3 -1
  71. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.c +6 -9
  72. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.h +17 -0
  73. data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_dll.c +3 -1
  74. data/ext/libmongocrypt/libmongocrypt/src/unicode/case-fold-map.c +1434 -0
  75. data/ext/libmongocrypt/libmongocrypt/src/unicode/diacritic-fold-map.c +2884 -0
  76. data/ext/libmongocrypt/libmongocrypt/src/unicode/fold.c +139 -0
  77. data/ext/libmongocrypt/libmongocrypt/src/unicode/fold.h +58 -0
  78. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/payload.json +2 -2
  79. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/missing-key-id/collinfo.json +1 -0
  80. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/no-fields/collinfo.json +1 -0
  81. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/collinfo.json +1 -0
  82. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/collinfo.json +1 -1
  83. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/encrypted-payload-range-v2.json +20 -21
  84. data/ext/libmongocrypt/libmongocrypt/test/data/compact/missing-key-id/collinfo.json +2 -2
  85. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-fields/collinfo.json +1 -1
  86. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/collinfo.json +1 -1
  87. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/collinfo.json +1 -1
  88. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-field-config-map.json +0 -1
  89. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload-range-v2.json +20 -21
  90. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/omitted/cmd-to-mongocryptd.json +1 -2
  91. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/omitted/collinfo.json +2 -2
  92. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/omitted/encrypted-payload.json +2 -3
  93. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/omitted/mongocryptd-reply.json +1 -2
  94. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved/cmd-to-mongocryptd.json +1 -2
  95. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved/collinfo.json +2 -2
  96. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved/encrypted-payload.json +2 -3
  97. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved/mongocryptd-reply.json +1 -2
  98. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved_empty/cmd-to-mongocryptd.json +1 -2
  99. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved_empty/collinfo.json +2 -2
  100. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved_empty/mongocryptd-reply.json +1 -2
  101. data/ext/libmongocrypt/libmongocrypt/test/data/dollardb/preserved_fle1/collinfo.json +2 -1
  102. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-extraField.json +0 -1
  103. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-missingKeyId.json +0 -1
  104. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-oneField-badVersionSet.json +23 -0
  105. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-oneField-goodVersionSet.json +23 -0
  106. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-oneField.json +0 -1
  107. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-textSearchFields-badVersionSet.json +48 -0
  108. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-textSearchFields-goodVersionSet.json +48 -0
  109. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-textSearchFields.json +47 -0
  110. data/ext/libmongocrypt/libmongocrypt/test/data/efc/efc-twoFields.json +0 -1
  111. data/ext/libmongocrypt/libmongocrypt/test/data/encrypted-field-config-map.json +1 -3
  112. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE1DeterministicEncryptedValue.json +8 -0
  113. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE1EncryptionPlaceholder.json +8 -0
  114. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE1RandomEncryptedValue.json +8 -0
  115. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2EncryptionPlaceholder.json +8 -0
  116. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2EqualityIndexedValueV2.json +8 -0
  117. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2FindEqualityPayloadV2.json +8 -0
  118. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2IndexedEqualityEncryptedValue.json +8 -0
  119. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2IndexedEqualityEncryptedValueV2.json +8 -0
  120. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2IndexedRangeEncryptedValue.json +8 -0
  121. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2IndexedRangeEncryptedValueV2.json +8 -0
  122. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2InsertUpdatePayload-with-edges-V2.json +8 -0
  123. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2InsertUpdatePayload-with-edges.json +8 -0
  124. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-explicit/insert-indexed.json → explicit-decrypt/FLE2InsertUpdatePayload.json} +1 -1
  125. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2InsertUpdatePayloadV2.json +8 -0
  126. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2RangeIndexedValueV2.json +8 -0
  127. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2UnindexedEncryptedValue.json +8 -0
  128. data/ext/libmongocrypt/libmongocrypt/test/data/explicit-decrypt/FLE2UnindexedEncryptedValueV2.json +8 -0
  129. data/ext/libmongocrypt/libmongocrypt/test/data/find-with-encryptionInformation.json +0 -1
  130. data/ext/libmongocrypt/libmongocrypt/test/data/fle1-explain/with-csfle/collinfo.json +2 -1
  131. data/ext/libmongocrypt/libmongocrypt/test/data/fle1-explain/with-mongocryptd/collinfo.json +2 -1
  132. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-bad-str-encode-version/bad-collinfo.json +26 -0
  133. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-bad-str-encode-version/bad-create-cmd-mongocryptd-reply.json +51 -0
  134. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-bad-str-encode-version/bad-create-cmd-to-mongocryptd.json +45 -0
  135. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-bad-str-encode-version/bad-create-cmd.json +18 -0
  136. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-find-range/int32/encrypted-field-map.json → fle2-bad-str-encode-version/bad-encrypted-field-config-map.json} +7 -12
  137. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-insert → fle2-bad-str-encode-version}/encrypted-payload.json +4 -4
  138. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create/cmd-to-mongocryptd.json +1 -2
  139. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create/encrypted-field-config-map.json +1 -2
  140. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection/cmd-to-mongocryptd.json +44 -0
  141. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection/cmd.json +17 -0
  142. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-find-equality/encrypted-field-map.json → fle2-create-encrypted-collection/encrypted-field-config-map.json} +9 -8
  143. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection/encrypted-payload.json +17 -0
  144. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection/mongocryptd-reply.json +50 -0
  145. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-encrypted-fields-unset-str-encode-version/cmd-to-mongocryptd.json +45 -0
  146. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-encrypted-fields-unset-str-encode-version/mongocryptd-reply.json +51 -0
  147. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-with-str-encode-version/cmd-to-mongocryptd.json +46 -0
  148. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-with-str-encode-version/cmd.json +18 -0
  149. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-with-str-encode-version/encrypted-field-config-map.json +25 -0
  150. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-with-str-encode-version/encrypted-payload.json +18 -0
  151. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create-encrypted-collection-with-str-encode-version/mongocryptd-reply.json +52 -0
  152. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/collinfo.json +1 -1
  153. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/encrypted-field-config-map.json +0 -1
  154. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/encrypted-payload-v2.json +57 -59
  155. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/mongocryptd-reply.json +63 -64
  156. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/collinfo.json +1 -1
  157. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/encrypted-field-config-map.json +0 -1
  158. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/encrypted-payload-v2.json +64 -66
  159. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/mongocryptd-reply.json +69 -70
  160. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/collinfo.json +1 -1
  161. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/encrypted-payload.json +1 -2
  162. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-mongocryptd/cmd-to-mongocryptd.json +1 -2
  163. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-mongocryptd/collinfo.json +2 -2
  164. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-mongocryptd/encrypted-payload.json +2 -3
  165. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-mongocryptd/mongocryptd-reply.json +1 -2
  166. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-explicit/cmd-to-mongocryptd.json +0 -1
  167. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-explicit/cmd-to-mongod.json +0 -1
  168. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-explicit/reply-from-mongocryptd.json +0 -1
  169. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32/encrypted-field-map.json +0 -1
  170. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-text-search/cmd.json +9 -0
  171. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-find-range/date → fle2-insert-text-search}/encrypted-field-map.json +10 -9
  172. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-text-search/encrypted-payload.json +47 -0
  173. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-text-search/mongocryptd-reply.json +55 -0
  174. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-find-range/double → fle2-insert-text-search-with-str-encode-version}/encrypted-field-map.json +12 -10
  175. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-text-search-with-str-encode-version/encrypted-payload.json +47 -0
  176. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-text-search-with-str-encode-version/mongocryptd-reply.json +55 -0
  177. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-v2-with-str-encode-version/cmd.json +9 -0
  178. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-insert → fle2-insert-v2-with-str-encode-version}/encrypted-field-map.json +2 -2
  179. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-v2-with-str-encode-version/encrypted-payload.json +40 -0
  180. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-insert → fle2-insert-v2-with-str-encode-version}/mongocryptd-reply.json +2 -2
  181. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection/cmd-to-mongocryptd.json +55 -0
  182. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection/cmd.json +22 -0
  183. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection/encrypted-field-config-map.json +29 -0
  184. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection/encrypted-payload.json +23 -0
  185. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection/mongocryptd-reply.json +61 -0
  186. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection-with-str-encode-version/cmd-to-mongocryptd.json +56 -0
  187. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection-with-str-encode-version/cmd.json +23 -0
  188. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection-with-str-encode-version/encrypted-field-config-map.json +30 -0
  189. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection-with-str-encode-version/encrypted-payload.json +23 -0
  190. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-text-search-create-encrypted-collection-with-str-encode-version/mongocryptd-reply.json +62 -0
  191. data/ext/libmongocrypt/libmongocrypt/test/data/iev-v2/FLECrudTest-insertOneText.json +20 -0
  192. data/ext/libmongocrypt/libmongocrypt/test/data/iev-v2/FLECrudTest-insertOneTextLarge.json +930 -0
  193. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle/cmd-to-mongocryptd.json +60 -0
  194. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle/cmd.json +14 -0
  195. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle/collInfo-c1.json +39 -0
  196. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle/collInfo-c2.json +39 -0
  197. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-facet/cmd.json +20 -0
  198. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-mismatch/cmd.json +14 -0
  199. data/ext/libmongocrypt/libmongocrypt/{bindings/java/mongocrypt/src/test/resources/collection-info.json → test/data/lookup/csfle-mismatch/collInfo-c1.json} +13 -11
  200. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-mismatch/collInfo-c3.json +39 -0
  201. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-nested/cmd.json +24 -0
  202. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-only-schemaMap/cmd-to-mongocryptd.json +60 -0
  203. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-only-schemaMap/cmd.json +14 -0
  204. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-only-schemaMap/schemaMap.json +40 -0
  205. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-schemaMap/cmd-to-mongocryptd.json +60 -0
  206. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-schemaMap/cmd.json +14 -0
  207. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-schemaMap/collInfo-c1.json +39 -0
  208. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-schemaMap/schemaMap.json +21 -0
  209. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-self/cmd-to-mongocryptd.json +34 -0
  210. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-self/cmd.json +14 -0
  211. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-self/collInfo-c1.json +39 -0
  212. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-sibling/cmd-to-mongocryptd.json +49 -0
  213. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-sibling/cmd.json +14 -0
  214. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-sibling/collInfo-c1.json +39 -0
  215. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-sibling/collInfo-c2.json +29 -0
  216. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-sibling/reply-from-mongocryptd.json +18 -0
  217. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-unionWith/cmd.json +21 -0
  218. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-view/cmd.json +14 -0
  219. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-view/collInfo-c1.json +39 -0
  220. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/csfle-view/collInfo-v1.json +11 -0
  221. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/cmd-to-mongocryptd.json +65 -0
  222. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/cmd-to-mongod.json +26 -0
  223. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/cmd.json +19 -0
  224. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/collInfo-c1.json +39 -0
  225. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/collInfo-c2.json +39 -0
  226. data/ext/libmongocrypt/libmongocrypt/{bindings/java/mongocrypt/src/test/resources/keys/ABCDEFAB123498761234123456789012-local-document.json → test/data/lookup/mixed/csfle/csfle/key-doc.json} +4 -4
  227. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/csfle/reply-from-mongocryptd.json +33 -0
  228. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/cmd-to-mongocryptd.json +47 -0
  229. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/cmd-to-mongod.json +26 -0
  230. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/cmd.json +19 -0
  231. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/collInfo-c1.json +39 -0
  232. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/collInfo-c2.json +17 -0
  233. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/key-doc.json +30 -0
  234. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/no-schema/reply-from-mongocryptd.json +33 -0
  235. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/qe/cmd-to-mongocryptd.json +70 -0
  236. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/qe/cmd.json +19 -0
  237. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/qe/collInfo-c1.json +39 -0
  238. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/csfle/qe/collInfo-c2.json +42 -0
  239. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/cmd-to-mongocryptd.json +47 -0
  240. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/cmd-to-mongod.json +26 -0
  241. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/cmd.json +19 -0
  242. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/collInfo-c1.json +17 -0
  243. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/collInfo-c2.json +39 -0
  244. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/key-doc.json +30 -0
  245. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/csfle/reply-from-mongocryptd.json +33 -0
  246. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/cmd-to-mongocryptd.json +29 -0
  247. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/cmd-to-mongod.json +19 -0
  248. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/cmd.json +19 -0
  249. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/collInfo-c1.json +17 -0
  250. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/collInfo-c2.json +17 -0
  251. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/no-schema/reply-from-mongocryptd.json +26 -0
  252. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/cmd-to-mongocryptd.json +53 -0
  253. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/cmd-to-mongod.json +58 -0
  254. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/cmd.json +19 -0
  255. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/collInfo-c1.json +17 -0
  256. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/collInfo-c2.json +42 -0
  257. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/key-doc.json +30 -0
  258. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/no-schema/qe/reply-from-mongocryptd.json +65 -0
  259. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/csfle/cmd-to-mongocryptd.json +70 -0
  260. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/csfle/cmd.json +19 -0
  261. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/csfle/collInfo-c1.json +42 -0
  262. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/csfle/collInfo-c2.json +39 -0
  263. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/cmd-to-mongocryptd.json +53 -0
  264. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/cmd-to-mongod.json +56 -0
  265. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/cmd.json +19 -0
  266. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/collInfo-c1.json +42 -0
  267. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/collInfo-c2.json +17 -0
  268. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/key-doc.json +30 -0
  269. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/no-schema/reply-from-mongocryptd.json +63 -0
  270. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/cmd-to-mongocryptd.json +66 -0
  271. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/cmd-to-mongod.json +71 -0
  272. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/cmd.json +19 -0
  273. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/collInfo-c1.json +42 -0
  274. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/collInfo-c2.json +42 -0
  275. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/key-doc.json +30 -0
  276. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/mixed/qe/qe/reply-from-mongocryptd.json +78 -0
  277. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/cmd-to-mongocryptd.json +61 -0
  278. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/cmd-to-mongod.json +14 -0
  279. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/cmd.json +14 -0
  280. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/collInfo-c1.json +42 -0
  281. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/collInfo-c2.json +42 -0
  282. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe/reply-from-mongocryptd.json +68 -0
  283. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/cmd-to-mongocryptd.json +66 -0
  284. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/cmd-to-mongod.json +71 -0
  285. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/cmd.json +19 -0
  286. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/collInfo-c1.json +42 -0
  287. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-insert-unindexed/encrypted-field-map.json → lookup/qe-encryptedFieldsMap/encryptedFieldsMap.json} +6 -7
  288. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/key-doc.json +30 -0
  289. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-encryptedFieldsMap/reply-from-mongocryptd.json +78 -0
  290. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/cmd-to-mongocryptd.json +46 -0
  291. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/cmd-to-mongod.json +53 -0
  292. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/cmd.json +19 -0
  293. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/collInfo-c1.json +42 -0
  294. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/key-doc.json +30 -0
  295. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-self/reply-from-mongocryptd.json +58 -0
  296. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/cmd-to-mongocryptd.json +66 -0
  297. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/cmd-to-mongod.json +75 -0
  298. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/cmd.json +19 -0
  299. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/collInfo-c1.json +42 -0
  300. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/collInfo-c2.json +42 -0
  301. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/key-doc.json +30 -0
  302. data/ext/libmongocrypt/libmongocrypt/test/data/lookup/qe-with-payload/reply-from-mongocryptd.json +78 -0
  303. data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-create/mongocryptd-ismaster.json → mongocryptd-ismaster-17.json} +1 -1
  304. data/ext/libmongocrypt/libmongocrypt/test/data/mongocryptd-ismaster-26.json +12 -0
  305. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/collinfo-encryptedFields.json +42 -0
  306. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/collinfo-encryptedFields2.json +42 -0
  307. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/collinfo-jsonSchema.json +43 -0
  308. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/collinfo-noSchema.json +21 -0
  309. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/create-with-jsonSchema.json +24 -0
  310. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/encryptedFields.json +20 -0
  311. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/encryptedFields2.json +20 -0
  312. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/encryptedFieldsMap.json +42 -0
  313. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/jsonSchema.json +19 -0
  314. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/jsonSchema2.json +19 -0
  315. data/ext/libmongocrypt/libmongocrypt/test/data/schema-broker/schemaMap.json +40 -0
  316. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/mc.json +28 -2
  317. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/server.json +28 -2
  318. data/ext/libmongocrypt/libmongocrypt/test/test-mc-efc.c +70 -0
  319. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-encryption-placeholder.c +468 -0
  320. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-equality-payload-v2.c +20 -1
  321. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iev-v2.c +286 -24
  322. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iev.c +1 -1
  323. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup-v2.c +23 -1
  324. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup.c +24 -1
  325. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-uev.c +2 -2
  326. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-rfds.c +2 -2
  327. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-tag-and-encrypted-metadata-block.c +36 -1
  328. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-edge-generation.c +6 -7
  329. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-encoding.c +32 -33
  330. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-mincover.c +58 -66
  331. data/ext/libmongocrypt/libmongocrypt/test/test-mc-rangeopts.c +2 -2
  332. data/ext/libmongocrypt/libmongocrypt/test/test-mc-schema-broker.c +1124 -0
  333. data/ext/libmongocrypt/libmongocrypt/test/test-mc-text-search-str-encode.c +1207 -0
  334. data/ext/libmongocrypt/libmongocrypt/test/test-mc-tokens.c +144 -37
  335. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.c +13 -14
  336. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert.h +21 -4
  337. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-buffer.c +25 -0
  338. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cache.c +3 -2
  339. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-hooks.c +1 -1
  340. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto.c +37 -7
  341. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-csfle-lib.c +21 -0
  342. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-decrypt.c +226 -146
  343. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-encrypt.c +1330 -1200
  344. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kek.c +1 -1
  345. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-key-cache.c +6 -6
  346. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kms-responses.c +2 -2
  347. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-marking.c +744 -106
  348. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.c +119 -33
  349. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.h +27 -4
  350. data/ext/libmongocrypt/libmongocrypt/test/test-unicode-fold.c +97 -0
  351. data/lib/libmongocrypt_helper/version.rb +2 -2
  352. metadata +207 -157
  353. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/README.md +0 -36
  354. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/build.gradle.kts +0 -28
  355. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/java/com/mongodb/crypt/benchmark/BenchmarkRunner.java +0 -217
  356. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/resources/keyDocument.json +0 -24
  357. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/build.gradle.kts +0 -354
  358. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.jar +0 -0
  359. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.properties +0 -5
  360. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew +0 -234
  361. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew.bat +0 -89
  362. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/settings.gradle.kts +0 -1
  363. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/BinaryHolder.java +0 -45
  364. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPI.java +0 -1165
  365. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPIHelper.java +0 -96
  366. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CipherCallback.java +0 -92
  367. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/DisposableMemory.java +0 -31
  368. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/JULLogger.java +0 -130
  369. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/Logger.java +0 -144
  370. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/Loggers.java +0 -50
  371. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MacCallback.java +0 -60
  372. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MessageDigestCallback.java +0 -55
  373. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoAwsKmsProviderOptions.java +0 -104
  374. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCrypt.java +0 -100
  375. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptContext.java +0 -137
  376. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptContextImpl.java +0 -164
  377. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptException.java +0 -67
  378. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptImpl.java +0 -423
  379. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptOptions.java +0 -284
  380. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCrypts.java +0 -38
  381. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoDataKeyOptions.java +0 -125
  382. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoExplicitEncryptOptions.java +0 -227
  383. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoKeyDecryptor.java +0 -76
  384. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoKeyDecryptorImpl.java +0 -105
  385. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoLocalKmsProviderOptions.java +0 -83
  386. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoRewrapManyDataKeyOptions.java +0 -104
  387. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/SLF4JLogger.java +0 -110
  388. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/SecureRandomCallback.java +0 -51
  389. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/SigningRSAESPKCSCallback.java +0 -76
  390. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/package-info.java +0 -18
  391. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/jni-config.json +0 -180
  392. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/reflect-config.json +0 -134
  393. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/java/com/mongodb/crypt/capi/MongoCryptTest.java +0 -389
  394. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/command-reply.json +0 -13
  395. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/command.json +0 -6
  396. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/encrypted-command-reply.json +0 -16
  397. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/encrypted-command.json +0 -11
  398. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/encrypted-value.json +0 -6
  399. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/encrypted-payload.json +0 -26
  400. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/key-filter.json +0 -19
  401. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/rangeopts.json +0 -14
  402. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/value-to-encrypt.json +0 -20
  403. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/json-schema.json +0 -15
  404. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/key-document.json +0 -36
  405. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/key-filter-keyAltName.json +0 -14
  406. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/key-filter.json +0 -19
  407. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/kms-reply.txt +0 -6
  408. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/list-collections-filter.json +0 -3
  409. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/mongocryptd-command.json +0 -22
  410. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/mongocryptd-reply.json +0 -18
  411. data/ext/libmongocrypt/libmongocrypt/etc/silk-create-asset-group.sh +0 -70
  412. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/jsonSchema/cmd.json +0 -20
  413. data/ext/libmongocrypt/libmongocrypt/test/data/collection-info-no-schema.json +0 -19
  414. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/encrypted-field-config-map.json +0 -47
  415. data/ext/libmongocrypt/libmongocrypt/test/data/fle1-collMod/insert/cmd.json +0 -8
  416. data/ext/libmongocrypt/libmongocrypt/test/data/fle1-collMod/insert/collinfo.json +0 -9
  417. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-create/ismaster-to-mongocryptd.json +0 -3
  418. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/empty/encrypted-payload.json +0 -91
  419. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-delete/success/encrypted-payload.json +0 -98
  420. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/find-indexed-contentionFactor1.json +0 -8
  421. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/insert-indexed-contentionFactor1.json +0 -8
  422. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explicit/insert-indexed-same-user-and-index-key.json +0 -8
  423. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-equality/cmd.json +0 -6
  424. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-equality/encrypted-payload.json +0 -41
  425. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-equality/mongocryptd-reply.json +0 -19
  426. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date/cmd.json +0 -10
  427. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date/encrypted-payload.json +0 -42
  428. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/date/mongocryptd-reply.json +0 -50
  429. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128/cmd.json +0 -6
  430. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128/encrypted-field-map.json +0 -28
  431. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128/encrypted-payload.json +0 -42
  432. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128/mongocryptd-reply.json +0 -50
  433. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision/cmd.json +0 -6
  434. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision/encrypted-field-map.json +0 -31
  435. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision/encrypted-payload.json +0 -51
  436. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/decimal128-precision/mongocryptd-reply.json +0 -59
  437. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double/cmd.json +0 -8
  438. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double/encrypted-payload.json +0 -42
  439. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double/mongocryptd-reply.json +0 -50
  440. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision/cmd.json +0 -8
  441. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision/encrypted-field-map.json +0 -31
  442. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision/encrypted-payload.json +0 -45
  443. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/double-precision/mongocryptd-reply.json +0 -53
  444. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32/cmd.json +0 -8
  445. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32/encrypted-payload.json +0 -42
  446. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int32/mongocryptd-reply.json +0 -50
  447. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64/cmd.json +0 -8
  448. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64/encrypted-field-map.json +0 -28
  449. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64/encrypted-payload.json +0 -42
  450. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range/int64/mongocryptd-reply.json +0 -50
  451. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/double/encrypted-payload.json +0 -26
  452. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/double-precision/encrypted-payload.json +0 -26
  453. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32/encrypted-payload.json +0 -26
  454. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32-nominmax/encrypted-payload-v2.json +0 -26
  455. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-find-range-explicit/int32-openinterval/encrypted-payload.json +0 -16
  456. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date/cmd.json +0 -13
  457. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date/encrypted-field-map.json +0 -28
  458. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date/encrypted-payload.json +0 -45
  459. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/date/mongocryptd-reply.json +0 -53
  460. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128/cmd.json +0 -9
  461. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128/encrypted-field-map.json +0 -28
  462. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128/encrypted-payload.json +0 -45
  463. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128/mongocryptd-reply.json +0 -53
  464. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision/cmd.json +0 -9
  465. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision/encrypted-field-map.json +0 -31
  466. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision/encrypted-payload.json +0 -54
  467. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/decimal128-precision/mongocryptd-reply.json +0 -62
  468. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double/cmd.json +0 -11
  469. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double/encrypted-field-map.json +0 -28
  470. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double/encrypted-payload.json +0 -45
  471. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double/mongocryptd-reply.json +0 -53
  472. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision/cmd.json +0 -11
  473. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision/encrypted-field-map.json +0 -31
  474. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision/encrypted-payload.json +0 -48
  475. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/double-precision/mongocryptd-reply.json +0 -56
  476. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32/encrypted-payload.json +0 -45
  477. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int32/mongocryptd-reply.json +0 -53
  478. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64/cmd.json +0 -11
  479. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64/encrypted-field-map.json +0 -28
  480. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64/encrypted-payload.json +0 -45
  481. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range/int64/mongocryptd-reply.json +0 -53
  482. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double/encrypted-payload.json +0 -8
  483. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/double-precision/encrypted-payload.json +0 -8
  484. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/int32-nominmax/encrypted-payload-v2.json +0 -8
  485. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-range-explicit/sparsity-2/encrypted-payload.json +0 -8
  486. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-unindexed/cmd.json +0 -9
  487. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-unindexed/encrypted-payload.json +0 -14
  488. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-insert-unindexed/mongocryptd-reply.json +0 -46
  489. data/ext/libmongocrypt/libmongocrypt/test/data/schema.json +0 -19
  490. /data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-explicit/find-indexed.json → explicit-decrypt/FLE2FindEqualityPayload.json} +0 -0
  491. /data/ext/libmongocrypt/libmongocrypt/test/data/{fle2-insert → fle2-insert-text-search-with-str-encode-version}/cmd.json +0 -0
@@ -0,0 +1,1124 @@
1
+ /*
2
+ * Copyright 2018-present MongoDB, Inc.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #include "mc-schema-broker-private.h"
18
+
19
+ #include "test-mongocrypt.h"
20
+
21
+ static void test_mc_schema_broker_request(_mongocrypt_tester_t *tester) {
22
+ // Can request.
23
+ {
24
+ mongocrypt_status_t *status = mongocrypt_status_new();
25
+ mc_schema_broker_t *sb = mc_schema_broker_new();
26
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
27
+
28
+ // Check listCollections filter:
29
+ bson_t filter = BSON_INITIALIZER;
30
+ ASSERT_OK_STATUS(mc_schema_broker_append_listCollections_filter(sb, &filter, status), status);
31
+ ASSERT_EQUAL_BSON(TMP_BSON(BSON_STR({"name" : "coll"})), &filter);
32
+ bson_destroy(&filter);
33
+
34
+ mc_schema_broker_destroy(sb);
35
+ mongocrypt_status_destroy(status);
36
+ }
37
+
38
+ // Can request two collections.
39
+ {
40
+ mongocrypt_status_t *status = mongocrypt_status_new();
41
+ mc_schema_broker_t *sb = mc_schema_broker_new();
42
+ ASSERT(!mc_schema_broker_has_multiple_requests(sb));
43
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll1", status), status);
44
+ ASSERT(!mc_schema_broker_has_multiple_requests(sb));
45
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll2", status), status);
46
+ ASSERT(mc_schema_broker_has_multiple_requests(sb));
47
+
48
+ // Check listCollections filter:
49
+ bson_t filter = BSON_INITIALIZER;
50
+ ASSERT_OK_STATUS(mc_schema_broker_append_listCollections_filter(sb, &filter, status), status);
51
+ ASSERT_EQUAL_BSON(TMP_BSON(BSON_STR({"name" : {"$in" : [ "coll1", "coll2" ]}})), &filter);
52
+ bson_destroy(&filter);
53
+
54
+ mc_schema_broker_destroy(sb);
55
+ mongocrypt_status_destroy(status);
56
+ }
57
+
58
+ // Duplicates are ignored.
59
+ {
60
+ mongocrypt_status_t *status = mongocrypt_status_new();
61
+ mc_schema_broker_t *sb = mc_schema_broker_new();
62
+ ASSERT(!mc_schema_broker_has_multiple_requests(sb));
63
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll1", status), status);
64
+ ASSERT(!mc_schema_broker_has_multiple_requests(sb));
65
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll1", status), status);
66
+ ASSERT(!mc_schema_broker_has_multiple_requests(sb));
67
+
68
+ // Check listCollections filter:
69
+ bson_t filter = BSON_INITIALIZER;
70
+ ASSERT_OK_STATUS(mc_schema_broker_append_listCollections_filter(sb, &filter, status), status);
71
+ ASSERT_EQUAL_BSON(TMP_BSON(BSON_STR({"name" : "coll1"})), &filter);
72
+ bson_destroy(&filter);
73
+
74
+ mc_schema_broker_destroy(sb);
75
+ mongocrypt_status_destroy(status);
76
+ }
77
+
78
+ // Errors if requesting two collections on different databases.
79
+ {
80
+ mongocrypt_status_t *status = mongocrypt_status_new();
81
+ mc_schema_broker_t *sb = mc_schema_broker_new();
82
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db1", "coll1", status), status);
83
+ ASSERT_FAILS_STATUS(mc_schema_broker_request(sb, "db2", "coll2", status),
84
+ status,
85
+ "Cannot request schemas for different databases");
86
+
87
+ mc_schema_broker_destroy(sb);
88
+ mongocrypt_status_destroy(status);
89
+ }
90
+
91
+ // Does not include satisfied collections in listCollections filter.
92
+ {
93
+ mongocrypt_status_t *status = mongocrypt_status_new();
94
+ mc_schema_broker_t *sb = mc_schema_broker_new();
95
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll1", status), status);
96
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll2", status), status);
97
+
98
+ // Satisfy db.coll1:
99
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_schemaMap(sb, TMP_BSON(BSON_STR({"db.coll1" : {}})), status),
100
+ status);
101
+
102
+ // Check listCollections filter:
103
+ bson_t filter = BSON_INITIALIZER;
104
+ ASSERT_OK_STATUS(mc_schema_broker_append_listCollections_filter(sb, &filter, status), status);
105
+ ASSERT_EQUAL_BSON(TMP_BSON(BSON_STR({"name" : "coll2"})), &filter);
106
+ bson_destroy(&filter);
107
+
108
+ mc_schema_broker_destroy(sb);
109
+ mongocrypt_status_destroy(status);
110
+ }
111
+ }
112
+
113
+ static void test_mc_schema_broker_satisfy_from_collInfo(_mongocrypt_tester_t *tester) {
114
+ bson_t *collinfo_jsonSchema = TEST_FILE_AS_BSON("./test/data/schema-broker/collinfo-jsonSchema.json");
115
+
116
+ // Can satisfy with collinfo containing $jsonSchema.
117
+ {
118
+ mongocrypt_status_t *status = mongocrypt_status_new();
119
+ mc_schema_broker_t *sb = mc_schema_broker_new();
120
+ _mongocrypt_cache_t cache;
121
+ _mongocrypt_cache_collinfo_init(&cache);
122
+
123
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
124
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
125
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_jsonSchema, &cache, status), status);
126
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
127
+
128
+ // Check that collinfo is cached.
129
+ {
130
+ bson_t *cached_collinfo;
131
+ ASSERT(_mongocrypt_cache_get(&cache, "db.coll", (void **)&cached_collinfo));
132
+ ASSERT(cached_collinfo);
133
+ ASSERT_EQUAL_BSON(collinfo_jsonSchema, cached_collinfo);
134
+ bson_destroy(cached_collinfo);
135
+ }
136
+
137
+ _mongocrypt_cache_cleanup(&cache);
138
+ mc_schema_broker_destroy(sb);
139
+ mongocrypt_status_destroy(status);
140
+ }
141
+
142
+ // Can satisfy with collinfo containing encryptedFields.
143
+ {
144
+ bson_t *collinfo_encryptedFields = TEST_FILE_AS_BSON("./test/data/schema-broker/collinfo-encryptedFields.json");
145
+ mongocrypt_status_t *status = mongocrypt_status_new();
146
+ mc_schema_broker_t *sb = mc_schema_broker_new();
147
+ _mongocrypt_cache_t cache;
148
+ _mongocrypt_cache_collinfo_init(&cache);
149
+
150
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
151
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
152
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_encryptedFields, &cache, status), status);
153
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
154
+
155
+ // Check that collinfo is cached.
156
+ {
157
+ bson_t *cached_collinfo;
158
+ ASSERT(_mongocrypt_cache_get(&cache, "db.coll", (void **)&cached_collinfo));
159
+ ASSERT(cached_collinfo);
160
+ ASSERT_EQUAL_BSON(collinfo_encryptedFields, cached_collinfo);
161
+ bson_destroy(cached_collinfo);
162
+ }
163
+
164
+ _mongocrypt_cache_cleanup(&cache);
165
+ mc_schema_broker_destroy(sb);
166
+ mongocrypt_status_destroy(status);
167
+ }
168
+
169
+ // Can satisfy with collinfo containing no schema.
170
+ {
171
+ bson_t *collinfo_noSchema = TEST_FILE_AS_BSON("./test/data/schema-broker/collinfo-noSchema.json");
172
+ mongocrypt_status_t *status = mongocrypt_status_new();
173
+ mc_schema_broker_t *sb = mc_schema_broker_new();
174
+ _mongocrypt_cache_t cache;
175
+ _mongocrypt_cache_collinfo_init(&cache);
176
+
177
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
178
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
179
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_noSchema, &cache, status), status);
180
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
181
+
182
+ // Check that collinfo is cached.
183
+ {
184
+ bson_t *cached_collinfo;
185
+ ASSERT(_mongocrypt_cache_get(&cache, "db.coll", (void **)&cached_collinfo));
186
+ ASSERT(cached_collinfo);
187
+ ASSERT_EQUAL_BSON(collinfo_noSchema, cached_collinfo);
188
+ bson_destroy(cached_collinfo);
189
+ }
190
+
191
+ _mongocrypt_cache_cleanup(&cache);
192
+ mc_schema_broker_destroy(sb);
193
+ mongocrypt_status_destroy(status);
194
+ }
195
+
196
+ // Errors if attempting to satisfy a non-requested collection.
197
+ {
198
+ mongocrypt_status_t *status = mongocrypt_status_new();
199
+ mc_schema_broker_t *sb = mc_schema_broker_new();
200
+ _mongocrypt_cache_t cache;
201
+ _mongocrypt_cache_collinfo_init(&cache);
202
+
203
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "different", status), status);
204
+ ASSERT_FAILS_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_jsonSchema, &cache, status),
205
+ status,
206
+ "got unexpected collinfo result");
207
+
208
+ // Check that collinfo is cached.
209
+ {
210
+ bson_t *cached_collinfo;
211
+ ASSERT(_mongocrypt_cache_get(&cache, "db.coll", (void **)&cached_collinfo));
212
+ ASSERT(cached_collinfo);
213
+ ASSERT_EQUAL_BSON(collinfo_jsonSchema, cached_collinfo);
214
+ bson_destroy(cached_collinfo);
215
+ }
216
+
217
+ _mongocrypt_cache_cleanup(&cache);
218
+ mc_schema_broker_destroy(sb);
219
+ mongocrypt_status_destroy(status);
220
+ }
221
+
222
+ // Errors if attempting to satisfy an already satisfied collection.
223
+ {
224
+ mongocrypt_status_t *status = mongocrypt_status_new();
225
+ mc_schema_broker_t *sb = mc_schema_broker_new();
226
+ _mongocrypt_cache_t cache;
227
+ _mongocrypt_cache_collinfo_init(&cache);
228
+
229
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
230
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_jsonSchema, &cache, status), status);
231
+ ASSERT_FAILS_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_jsonSchema, &cache, status),
232
+ status,
233
+ "unexpected duplicate");
234
+
235
+ _mongocrypt_cache_cleanup(&cache);
236
+ mc_schema_broker_destroy(sb);
237
+ mongocrypt_status_destroy(status);
238
+ }
239
+
240
+ // Errors if attempting to satisfy with an empty document.
241
+ {
242
+ mongocrypt_status_t *status = mongocrypt_status_new();
243
+ mc_schema_broker_t *sb = mc_schema_broker_new();
244
+ _mongocrypt_cache_t cache;
245
+ _mongocrypt_cache_collinfo_init(&cache);
246
+
247
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
248
+ ASSERT_FAILS_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, TMP_BSON("{}"), &cache, status),
249
+ status,
250
+ "failed to find 'name'");
251
+ _mongocrypt_cache_cleanup(&cache);
252
+ mc_schema_broker_destroy(sb);
253
+ mongocrypt_status_destroy(status);
254
+ }
255
+
256
+ // Errors if attempting to satisfy with a view.
257
+ {
258
+ mongocrypt_status_t *status = mongocrypt_status_new();
259
+ mc_schema_broker_t *sb = mc_schema_broker_new();
260
+ _mongocrypt_cache_t cache;
261
+ _mongocrypt_cache_collinfo_init(&cache);
262
+
263
+ bson_t *collinfo_view = TEST_FILE_AS_BSON("./test/data/collection-info-view.json");
264
+
265
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "v", status), status);
266
+ ASSERT_FAILS_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_view, &cache, status),
267
+ status,
268
+ "cannot auto encrypt a view");
269
+ _mongocrypt_cache_cleanup(&cache);
270
+ mc_schema_broker_destroy(sb);
271
+ mongocrypt_status_destroy(status);
272
+ }
273
+
274
+ // Accepts a collinfo with siblings, like: {"$jsonSchema": {...}, "sibling": {...}}
275
+ {
276
+ mongocrypt_status_t *status = mongocrypt_status_new();
277
+ mc_schema_broker_t *sb = mc_schema_broker_new();
278
+ _mongocrypt_cache_t cache;
279
+ _mongocrypt_cache_collinfo_init(&cache);
280
+
281
+ bson_t *collinfo_siblings = TEST_FILE_AS_BSON("./test/data/collinfo-siblings.json");
282
+
283
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "test", "test", status), status);
284
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
285
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_siblings, &cache, status), status);
286
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
287
+
288
+ // Check that collinfo is cached.
289
+ {
290
+ bson_t *cached_collinfo;
291
+ ASSERT(_mongocrypt_cache_get(&cache, "test.test", (void **)&cached_collinfo));
292
+ ASSERT(cached_collinfo);
293
+ ASSERT_EQUAL_BSON(collinfo_siblings, cached_collinfo);
294
+ bson_destroy(cached_collinfo);
295
+ }
296
+ _mongocrypt_cache_cleanup(&cache);
297
+ mc_schema_broker_destroy(sb);
298
+ mongocrypt_status_destroy(status);
299
+ }
300
+ }
301
+
302
+ static void test_mc_schema_broker_satisfy_from_cache(_mongocrypt_tester_t *tester) {
303
+ bson_t *collinfo = TEST_FILE_AS_BSON("./test/data/schema-broker/collinfo-jsonSchema.json");
304
+
305
+ // Can satisfy.
306
+ {
307
+ mongocrypt_status_t *status = mongocrypt_status_new();
308
+
309
+ _mongocrypt_cache_t cache;
310
+ _mongocrypt_cache_collinfo_init(&cache);
311
+ ASSERT_OR_PRINT(_mongocrypt_cache_add_copy(&cache, "db.coll", collinfo, status), status);
312
+
313
+ mc_schema_broker_t *sb = mc_schema_broker_new();
314
+
315
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
316
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
317
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_cache(sb, &cache, status), status);
318
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
319
+
320
+ mc_schema_broker_destroy(sb);
321
+ mongocrypt_status_destroy(status);
322
+ _mongocrypt_cache_cleanup(&cache);
323
+ }
324
+
325
+ // Can satisfy with empty entry.
326
+ {
327
+ // An empty entry is cached when there is none on the server (e.g. the collection was not created on the server)
328
+ mongocrypt_status_t *status = mongocrypt_status_new();
329
+
330
+ _mongocrypt_cache_t cache;
331
+ _mongocrypt_cache_collinfo_init(&cache);
332
+ ASSERT_OR_PRINT(_mongocrypt_cache_add_copy(&cache, "db.coll", TMP_BSON("{}"), status), status);
333
+
334
+ mc_schema_broker_t *sb = mc_schema_broker_new();
335
+
336
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
337
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
338
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_cache(sb, &cache, status), status);
339
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
340
+
341
+ mc_schema_broker_destroy(sb);
342
+ mongocrypt_status_destroy(status);
343
+ _mongocrypt_cache_cleanup(&cache);
344
+ }
345
+
346
+ // Ignores if no entry.
347
+ {
348
+ // An empty entry is cached when there is none on the server (e.g. the collection was not created on the server)
349
+ mongocrypt_status_t *status = mongocrypt_status_new();
350
+
351
+ _mongocrypt_cache_t cache;
352
+ _mongocrypt_cache_collinfo_init(&cache);
353
+ ASSERT_OR_PRINT(_mongocrypt_cache_add_copy(&cache, "db.coll2", TMP_BSON("{}"), status), status);
354
+
355
+ mc_schema_broker_t *sb = mc_schema_broker_new();
356
+
357
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
358
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
359
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_cache(sb, &cache, status), status);
360
+ ASSERT(mc_schema_broker_need_more_schemas(sb)); // db.coll still not satisfied.
361
+
362
+ mc_schema_broker_destroy(sb);
363
+ mongocrypt_status_destroy(status);
364
+ _mongocrypt_cache_cleanup(&cache);
365
+ }
366
+
367
+ // Ignores already satisfied entry.
368
+ {
369
+ mongocrypt_status_t *status = mongocrypt_status_new();
370
+
371
+ _mongocrypt_cache_t cache;
372
+ _mongocrypt_cache_collinfo_init(&cache);
373
+ ASSERT_OR_PRINT(_mongocrypt_cache_add_copy(&cache, "db.coll", collinfo, status), status);
374
+
375
+ mc_schema_broker_t *sb = mc_schema_broker_new();
376
+
377
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
378
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
379
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo, &cache, status), status);
380
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
381
+ // Satisfy again. No error.
382
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_cache(sb, &cache, status), status);
383
+
384
+ mc_schema_broker_destroy(sb);
385
+ mongocrypt_status_destroy(status);
386
+ _mongocrypt_cache_cleanup(&cache);
387
+ }
388
+ }
389
+
390
+ static void test_mc_schema_broker_satisfy_from_schemaMap(_mongocrypt_tester_t *tester) {
391
+ bson_t *schemaMap = TEST_FILE_AS_BSON("./test/data/schema-broker/schemaMap.json");
392
+
393
+ // Can satisfy.
394
+ {
395
+ mongocrypt_status_t *status = mongocrypt_status_new();
396
+ mc_schema_broker_t *sb = mc_schema_broker_new();
397
+
398
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
399
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
400
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_schemaMap(sb, schemaMap, status), status);
401
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
402
+
403
+ mc_schema_broker_destroy(sb);
404
+ mongocrypt_status_destroy(status);
405
+ }
406
+
407
+ // Can satisfy multiple.
408
+ {
409
+ mongocrypt_status_t *status = mongocrypt_status_new();
410
+ mc_schema_broker_t *sb = mc_schema_broker_new();
411
+
412
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
413
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll2", status), status);
414
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
415
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_schemaMap(sb, schemaMap, status), status);
416
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
417
+
418
+ mc_schema_broker_destroy(sb);
419
+ mongocrypt_status_destroy(status);
420
+ }
421
+
422
+ // Does not satisfy with non-matching entry.
423
+ {
424
+ mongocrypt_status_t *status = mongocrypt_status_new();
425
+ mc_schema_broker_t *sb = mc_schema_broker_new();
426
+
427
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
428
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
429
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_schemaMap(sb, TMP_BSON("{'db.foo': {}}"), status), status);
430
+ ASSERT(mc_schema_broker_need_more_schemas(sb)); // Still not satisfied.
431
+
432
+ mc_schema_broker_destroy(sb);
433
+ mongocrypt_status_destroy(status);
434
+ }
435
+
436
+ // Can satisfy with empty entry.
437
+ {
438
+ mongocrypt_status_t *status = mongocrypt_status_new();
439
+ mc_schema_broker_t *sb = mc_schema_broker_new();
440
+
441
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
442
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
443
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_schemaMap(sb, TMP_BSON("{'db.coll': {}}"), status), status);
444
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
445
+
446
+ mc_schema_broker_destroy(sb);
447
+ mongocrypt_status_destroy(status);
448
+ }
449
+
450
+ // Ignores already satisfied entry.
451
+ {
452
+ mongocrypt_status_t *status = mongocrypt_status_new();
453
+ mc_schema_broker_t *sb = mc_schema_broker_new();
454
+
455
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
456
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
457
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_schemaMap(sb, schemaMap, status), status);
458
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
459
+ // Satisfy again. No error.
460
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_schemaMap(sb, schemaMap, status), status);
461
+
462
+ mc_schema_broker_destroy(sb);
463
+ mongocrypt_status_destroy(status);
464
+ }
465
+ }
466
+
467
+ static void test_mc_schema_broker_satisfy_from_encryptedFieldsMap(_mongocrypt_tester_t *tester) {
468
+ bson_t *encryptedFieldsMap = TEST_FILE_AS_BSON("./test/data/schema-broker/encryptedFieldsMap.json");
469
+
470
+ // Can satisfy.
471
+ {
472
+ mongocrypt_status_t *status = mongocrypt_status_new();
473
+ mc_schema_broker_t *sb = mc_schema_broker_new();
474
+
475
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
476
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
477
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
478
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
479
+
480
+ mc_schema_broker_destroy(sb);
481
+ mongocrypt_status_destroy(status);
482
+ }
483
+
484
+ // Can satisfy multiple.
485
+ {
486
+ mongocrypt_status_t *status = mongocrypt_status_new();
487
+ mc_schema_broker_t *sb = mc_schema_broker_new();
488
+
489
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
490
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll2", status), status);
491
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
492
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
493
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
494
+
495
+ mc_schema_broker_destroy(sb);
496
+ mongocrypt_status_destroy(status);
497
+ }
498
+
499
+ // Does not satisfy with non-matching entry.
500
+ {
501
+ mongocrypt_status_t *status = mongocrypt_status_new();
502
+ mc_schema_broker_t *sb = mc_schema_broker_new();
503
+
504
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
505
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
506
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, TMP_BSON("{'db.foo': {}}"), status),
507
+ status);
508
+ ASSERT(mc_schema_broker_need_more_schemas(sb)); // Still not satisfied.
509
+
510
+ mc_schema_broker_destroy(sb);
511
+ mongocrypt_status_destroy(status);
512
+ }
513
+
514
+ // Ignores already satisfied entry.
515
+ {
516
+ mongocrypt_status_t *status = mongocrypt_status_new();
517
+ mc_schema_broker_t *sb = mc_schema_broker_new();
518
+
519
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
520
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
521
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
522
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
523
+ // Satisfy again. No error.
524
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
525
+
526
+ mc_schema_broker_destroy(sb);
527
+ mongocrypt_status_destroy(status);
528
+ }
529
+
530
+ // Fails to satisfy with empty entry.
531
+ {
532
+ mongocrypt_status_t *status = mongocrypt_status_new();
533
+ mc_schema_broker_t *sb = mc_schema_broker_new();
534
+
535
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
536
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
537
+ ASSERT_FAILS_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, TMP_BSON("{'db.coll': {}}"), status),
538
+ status,
539
+ "unable to find 'fields'");
540
+
541
+ mc_schema_broker_destroy(sb);
542
+ mongocrypt_status_destroy(status);
543
+ }
544
+ }
545
+
546
+ static void test_mc_schema_broker_satisfy_remaining_with_empty_schemas(_mongocrypt_tester_t *tester) {
547
+ // Can satisfy.
548
+ {
549
+ mongocrypt_status_t *status = mongocrypt_status_new();
550
+ mc_schema_broker_t *sb = mc_schema_broker_new();
551
+ _mongocrypt_cache_t cache;
552
+ _mongocrypt_cache_collinfo_init(&cache);
553
+
554
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
555
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
556
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_remaining_with_empty_schemas(sb, &cache, status), status);
557
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
558
+
559
+ // Check that empty collinfo is cached.
560
+ {
561
+ bson_t *cached_collinfo;
562
+ ASSERT(_mongocrypt_cache_get(&cache, "db.coll", (void **)&cached_collinfo));
563
+ ASSERT(cached_collinfo);
564
+ ASSERT_EQUAL_BSON(TMP_BSON("{}"), cached_collinfo);
565
+ bson_destroy(cached_collinfo);
566
+ }
567
+
568
+ _mongocrypt_cache_cleanup(&cache);
569
+ mc_schema_broker_destroy(sb);
570
+ mongocrypt_status_destroy(status);
571
+ }
572
+ }
573
+
574
+ static void test_mc_schema_broker_add_schemas_to_cmd(_mongocrypt_tester_t *tester) {
575
+ bson_t *schemaMap = TEST_FILE_AS_BSON("./test/data/schema-broker/schemaMap.json");
576
+ bson_t *jsonSchema = TEST_FILE_AS_BSON("./test/data/schema-broker/jsonSchema.json");
577
+ bson_t *jsonSchema2 = TEST_FILE_AS_BSON("./test/data/schema-broker/jsonSchema2.json");
578
+ bson_t *collinfo_jsonSchema = TEST_FILE_AS_BSON("./test/data/schema-broker/collinfo-jsonSchema.json");
579
+ bson_t *encryptedFields = TEST_FILE_AS_BSON("./test/data/schema-broker/encryptedFields.json");
580
+ bson_t *encryptedFields2 = TEST_FILE_AS_BSON("./test/data/schema-broker/encryptedFields2.json");
581
+ bson_t *encryptedFieldsMap = TEST_FILE_AS_BSON("./test/data/schema-broker/encryptedFieldsMap.json");
582
+ bson_t *collinfo_encryptedFields2 = TEST_FILE_AS_BSON("./test/data/schema-broker/collinfo-encryptedFields2.json");
583
+
584
+ // Adds one JSON schema as jsonSchema.
585
+ {
586
+ mongocrypt_status_t *status = mongocrypt_status_new();
587
+ mc_schema_broker_t *sb = mc_schema_broker_new();
588
+
589
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
590
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
591
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_schemaMap(sb, schemaMap, status), status);
592
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
593
+
594
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
595
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_MONGOCRYPTD, status), status);
596
+ bson_t *expect =
597
+ TMP_BSONF(BSON_STR({"find" : "coll", "jsonSchema" : MC_BSON, "isRemoteSchema" : false}), jsonSchema);
598
+ ASSERT_EQUAL_BSON(expect, cmd);
599
+
600
+ mc_schema_broker_destroy(sb);
601
+ mongocrypt_status_destroy(status);
602
+ }
603
+
604
+ // Adds multiple JSON schemas as csfleEncryptionSchemas.
605
+ {
606
+ mongocrypt_status_t *status = mongocrypt_status_new();
607
+ mc_schema_broker_t *sb = mc_schema_broker_new();
608
+
609
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
610
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll2", status), status);
611
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
612
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_schemaMap(sb, schemaMap, status), status);
613
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
614
+
615
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
616
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_MONGOCRYPTD, status), status);
617
+ bson_t *expect = TMP_BSONF(BSON_STR({
618
+ "find" : "coll",
619
+ "csfleEncryptionSchemas" : {
620
+ "db.coll" : {"jsonSchema" : MC_BSON, "isRemoteSchema" : false},
621
+ "db.coll2" : {"jsonSchema" : MC_BSON, "isRemoteSchema" : false}
622
+ }
623
+ }),
624
+ jsonSchema,
625
+ jsonSchema2);
626
+
627
+ ASSERT_EQUAL_BSON(expect, cmd);
628
+ mc_schema_broker_destroy(sb);
629
+ mongocrypt_status_destroy(status);
630
+ }
631
+
632
+ // Adds an empty 'jsonSchema' when no schema is present.
633
+ {
634
+ mongocrypt_status_t *status = mongocrypt_status_new();
635
+ mc_schema_broker_t *sb = mc_schema_broker_new();
636
+
637
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
638
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
639
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_remaining_with_empty_schemas(sb, NULL, status), status);
640
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
641
+
642
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
643
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_MONGOCRYPTD, status), status);
644
+ bson_t *expect = TMP_BSON(BSON_STR({"find" : "coll", "jsonSchema" : {}, "isRemoteSchema" : true}));
645
+ ASSERT_EQUAL_BSON(expect, cmd);
646
+
647
+ mc_schema_broker_destroy(sb);
648
+ mongocrypt_status_destroy(status);
649
+ }
650
+
651
+ // Adds empty JSON schema in 'csfleEncryptionSchemas' when one collection has a JSON schema and other does not.
652
+ {
653
+ mongocrypt_status_t *status = mongocrypt_status_new();
654
+ mc_schema_broker_t *sb = mc_schema_broker_new();
655
+ _mongocrypt_cache_t cache;
656
+ _mongocrypt_cache_collinfo_init(&cache);
657
+
658
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
659
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll2", status), status);
660
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
661
+ // Satisfy db.coll with a schema:
662
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_jsonSchema, &cache, status), status);
663
+ // Satisfy db.coll2 with empty schema.
664
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_remaining_with_empty_schemas(sb, NULL, status), status);
665
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
666
+
667
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
668
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_MONGOCRYPTD, status), status);
669
+ bson_t *expect = TMP_BSONF(BSON_STR({
670
+ "find" : "coll",
671
+ "csfleEncryptionSchemas" : {
672
+ "db.coll" : {"jsonSchema" : MC_BSON, "isRemoteSchema" : true},
673
+ "db.coll2" : {"jsonSchema" : {}, "isRemoteSchema" : false}
674
+ }
675
+ }),
676
+ jsonSchema);
677
+ ASSERT_EQUAL_BSON(expect, cmd);
678
+
679
+ _mongocrypt_cache_cleanup(&cache);
680
+ mc_schema_broker_destroy(sb);
681
+ mongocrypt_status_destroy(status);
682
+ }
683
+
684
+ // Adds empty JSON schemas within 'csfleEncryptionSchemas' when no schema is present on any collection.
685
+ {
686
+ mongocrypt_status_t *status = mongocrypt_status_new();
687
+ mc_schema_broker_t *sb = mc_schema_broker_new();
688
+
689
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
690
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll2", status), status);
691
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
692
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_remaining_with_empty_schemas(sb, NULL, status), status);
693
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
694
+
695
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
696
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_MONGOCRYPTD, status), status);
697
+ bson_t *expect = TMP_BSON(BSON_STR({
698
+ "find" : "coll",
699
+ "csfleEncryptionSchemas" : {
700
+ "db.coll" : {"jsonSchema" : {}, "isRemoteSchema" : false},
701
+ "db.coll2" : {"jsonSchema" : {}, "isRemoteSchema" : false}
702
+ }
703
+ }));
704
+ ASSERT_EQUAL_BSON(expect, cmd);
705
+
706
+ mc_schema_broker_destroy(sb);
707
+ mongocrypt_status_destroy(status);
708
+ }
709
+
710
+ // Errors if mixing JSON schema with QE schema.
711
+ {
712
+ mongocrypt_status_t *status = mongocrypt_status_new();
713
+ mc_schema_broker_t *sb = mc_schema_broker_new();
714
+ _mongocrypt_cache_t cache;
715
+ _mongocrypt_cache_collinfo_init(&cache);
716
+
717
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
718
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll2", status), status);
719
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
720
+ // Satisfy db.coll with a JSON schema:
721
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_jsonSchema, &cache, status), status);
722
+ // Satisfy db.coll2 with an encryptedFields:
723
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_collinfo(sb, collinfo_encryptedFields2, &cache, status), status);
724
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
725
+
726
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
727
+ ASSERT_FAILS_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_MONGOCRYPTD, status),
728
+ status,
729
+ "'coll2' has an encryptedFields configured, but collection 'coll' has a JSON schema");
730
+ _mongocrypt_cache_cleanup(&cache);
731
+ mc_schema_broker_destroy(sb);
732
+ mongocrypt_status_destroy(status);
733
+ }
734
+
735
+ // Adds one QE schema with `encryptionInformation`.
736
+ {
737
+ mongocrypt_status_t *status = mongocrypt_status_new();
738
+ mc_schema_broker_t *sb = mc_schema_broker_new();
739
+
740
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
741
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
742
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
743
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
744
+
745
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
746
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_SERVER, status), status);
747
+ bson_t *expect = TMP_BSONF(
748
+ BSON_STR({"find" : "coll", "encryptionInformation" : {"type" : 1, "schema" : {"db.coll" : MC_BSON}}}),
749
+ encryptedFields);
750
+ ASSERT_EQUAL_BSON(expect, cmd);
751
+
752
+ mc_schema_broker_destroy(sb);
753
+ mongocrypt_status_destroy(status);
754
+ }
755
+
756
+ // Adds multiple QE schemas with `encryptionInformation`.
757
+ {
758
+ mongocrypt_status_t *status = mongocrypt_status_new();
759
+ mc_schema_broker_t *sb = mc_schema_broker_new();
760
+
761
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
762
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll2", status), status);
763
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
764
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
765
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
766
+
767
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
768
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_SERVER, status), status);
769
+ bson_t *expect =
770
+ TMP_BSONF(BSON_STR({
771
+ "find" : "coll",
772
+ "encryptionInformation" : {"type" : 1, "schema" : {"db.coll" : MC_BSON, "db.coll2" : MC_BSON}}
773
+ }),
774
+ encryptedFields,
775
+ encryptedFields2);
776
+ ASSERT_EQUAL_BSON(expect, cmd);
777
+
778
+ mc_schema_broker_destroy(sb);
779
+ mongocrypt_status_destroy(status);
780
+ }
781
+
782
+ // Does not add CSFLE schemas when command is targeted for mongod/mongos.
783
+ {
784
+ mongocrypt_status_t *status = mongocrypt_status_new();
785
+ mc_schema_broker_t *sb = mc_schema_broker_new();
786
+
787
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
788
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
789
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_schemaMap(sb, schemaMap, status), status);
790
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
791
+
792
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
793
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_SERVER, status), status);
794
+ bson_t *expect = TMP_BSON(BSON_STR({"find" : "coll"}));
795
+ ASSERT_EQUAL_BSON(expect, cmd);
796
+
797
+ mc_schema_broker_destroy(sb);
798
+ mongocrypt_status_destroy(status);
799
+ }
800
+
801
+ // Adds QE schema into nsInfo for bulkWrite.
802
+ {
803
+ mongocrypt_status_t *status = mongocrypt_status_new();
804
+ mc_schema_broker_t *sb = mc_schema_broker_new();
805
+
806
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
807
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
808
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
809
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
810
+
811
+ bson_t *cmd = TMP_BSON(BSON_STR({"bulkWrite" : "coll", "nsInfo" : [ {"ns" : "db.coll"} ]}));
812
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_SERVER, status), status);
813
+ bson_t *expect = TMP_BSONF(
814
+ BSON_STR({
815
+ "bulkWrite" : "coll",
816
+ "nsInfo" :
817
+ [ {"ns" : "db.coll", "encryptionInformation" : {"type" : 1, "schema" : {"db.coll" : MC_BSON}}} ]
818
+ }),
819
+ encryptedFields);
820
+ ASSERT_EQUAL_BSON(expect, cmd);
821
+
822
+ mc_schema_broker_destroy(sb);
823
+ mongocrypt_status_destroy(status);
824
+ }
825
+
826
+ // Adds empty encryptedFields when no collections have schemas and using the `bulkWrite` command.
827
+ {
828
+ mongocrypt_status_t *status = mongocrypt_status_new();
829
+ mc_schema_broker_t *sb = mc_schema_broker_new();
830
+
831
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
832
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
833
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_remaining_with_empty_schemas(sb, NULL, status), status);
834
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
835
+
836
+ bson_t *cmd = TMP_BSON(BSON_STR({"bulkWrite" : "coll", "nsInfo" : [ {"ns" : "db.coll"} ]}));
837
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_SERVER, status), status);
838
+ bson_t *expect = TMP_BSON(BSON_STR({
839
+ "bulkWrite" : "coll",
840
+ "nsInfo" : [ {
841
+ "ns" : "db.coll",
842
+ "encryptionInformation" : {
843
+ "type" : {"$numberInt" : "1"},
844
+ "schema" : {
845
+ "db.coll" : {
846
+ "escCollection" : "enxcol_.coll.esc",
847
+ "ecocCollection" : "enxcol_.coll.ecoc",
848
+ "fields" : []
849
+ }
850
+ }
851
+ }
852
+ } ]
853
+ }));
854
+ ASSERT_EQUAL_BSON(expect, cmd);
855
+
856
+ mc_schema_broker_destroy(sb);
857
+ mongocrypt_status_destroy(status);
858
+ }
859
+
860
+ // Adds at top-level for "explain" to mongocryptd.
861
+ {
862
+ mongocrypt_status_t *status = mongocrypt_status_new();
863
+ mc_schema_broker_t *sb = mc_schema_broker_new();
864
+
865
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
866
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
867
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
868
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
869
+
870
+ bson_t *cmd = TMP_BSON(BSON_STR({"explain" : {"find" : "coll"}}));
871
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_MONGOCRYPTD, status), status);
872
+ bson_t *expect = TMP_BSONF(BSON_STR({
873
+ "explain" : {"find" : "coll"},
874
+ "encryptionInformation" : {"type" : 1, "schema" : {"db.coll" : MC_BSON}}
875
+ }),
876
+ encryptedFields);
877
+ ASSERT_EQUAL_BSON(expect, cmd);
878
+
879
+ mc_schema_broker_destroy(sb);
880
+ mongocrypt_status_destroy(status);
881
+ }
882
+
883
+ // Adds nested in "explain" for mongod.
884
+ {
885
+ mongocrypt_status_t *status = mongocrypt_status_new();
886
+ mc_schema_broker_t *sb = mc_schema_broker_new();
887
+
888
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
889
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
890
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
891
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
892
+
893
+ bson_t *cmd = TMP_BSON(BSON_STR({"explain" : {"find" : "coll"}}));
894
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_SERVER, status), status);
895
+ bson_t *expect = TMP_BSONF(
896
+ BSON_STR({
897
+ "explain" : {"find" : "coll", "encryptionInformation" : {"type" : 1, "schema" : {"db.coll" : MC_BSON}}}
898
+ }),
899
+ encryptedFields);
900
+ ASSERT_EQUAL_BSON(expect, cmd);
901
+
902
+ mc_schema_broker_destroy(sb);
903
+ mongocrypt_status_destroy(status);
904
+ }
905
+
906
+ // Adds nested in "explain" for crypt_shared.
907
+ {
908
+ mongocrypt_status_t *status = mongocrypt_status_new();
909
+ mc_schema_broker_t *sb = mc_schema_broker_new();
910
+
911
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
912
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
913
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
914
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
915
+
916
+ bson_t *cmd = TMP_BSON(BSON_STR({"explain" : {"find" : "coll"}}));
917
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_CRYPT_SHARED, status), status);
918
+ bson_t *expect = TMP_BSONF(
919
+ BSON_STR({
920
+ "explain" : {"find" : "coll", "encryptionInformation" : {"type" : 1, "schema" : {"db.coll" : MC_BSON}}}
921
+ }),
922
+ encryptedFields);
923
+ ASSERT_EQUAL_BSON(expect, cmd);
924
+
925
+ mc_schema_broker_destroy(sb);
926
+ mongocrypt_status_destroy(status);
927
+ }
928
+
929
+ // Adds empty QE schema in 'encryptionInformation' when one collection has a QE schema and other does not.
930
+ {
931
+ mongocrypt_status_t *status = mongocrypt_status_new();
932
+ mc_schema_broker_t *sb = mc_schema_broker_new();
933
+
934
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
935
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "noschema", status), status);
936
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
937
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
938
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_remaining_with_empty_schemas(sb, NULL, status), status);
939
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
940
+
941
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
942
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_SERVER, status), status);
943
+ bson_t *expect = TMP_BSONF(BSON_STR({
944
+ "find" : "coll",
945
+ "encryptionInformation" : {
946
+ "type" : 1,
947
+ "schema" : {
948
+ "db.coll" : MC_BSON,
949
+ "db.noschema" : {
950
+ "escCollection" : "enxcol_.noschema.esc",
951
+ "ecocCollection" : "enxcol_.noschema.ecoc",
952
+ "fields" : []
953
+ }
954
+ }
955
+ }
956
+ }),
957
+ encryptedFields);
958
+ ASSERT_EQUAL_BSON(expect, cmd);
959
+
960
+ mc_schema_broker_destroy(sb);
961
+ mongocrypt_status_destroy(status);
962
+ }
963
+
964
+ // Applies default state collections for QE schema passed in encryptedFieldsMap.
965
+ {
966
+ mongocrypt_status_t *status = mongocrypt_status_new();
967
+ mc_schema_broker_t *sb = mc_schema_broker_new();
968
+
969
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
970
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
971
+ ASSERT_OK_STATUS(
972
+ mc_schema_broker_satisfy_from_encryptedFieldsMap(sb,
973
+ TMP_BSON(BSON_STR({"db.coll" : {"fields" : []}})),
974
+ status),
975
+ status);
976
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
977
+
978
+ bson_t *cmd = TMP_BSON(BSON_STR({"find" : "coll"}));
979
+ ASSERT_OK_STATUS(mc_schema_broker_add_schemas_to_cmd(sb, cmd, MC_CMD_SCHEMAS_FOR_SERVER, status), status);
980
+ bson_t *expect = TMP_BSONF(BSON_STR({
981
+ "find" : "coll",
982
+ "encryptionInformation" : {
983
+ "type" : 1,
984
+ "schema" : {
985
+ "db.coll" :
986
+ {"fields" : [], "escCollection" : "enxcol_.coll.esc", "ecocCollection" : "enxcol_.coll.ecoc"}
987
+ }
988
+ }
989
+ }));
990
+ ASSERT_EQUAL_BSON(expect, cmd);
991
+
992
+ mc_schema_broker_destroy(sb);
993
+ mongocrypt_status_destroy(status);
994
+ }
995
+
996
+ bson_destroy(encryptedFieldsMap);
997
+ }
998
+
999
+ static void test_mc_schema_broker_get_encryptedFields(_mongocrypt_tester_t *tester) {
1000
+ bson_t *encryptedFieldsMap = TEST_FILE_AS_BSON("./test/data/schema-broker/encryptedFieldsMap.json");
1001
+
1002
+ // Can find.
1003
+ {
1004
+ mongocrypt_status_t *status = mongocrypt_status_new();
1005
+ mc_schema_broker_t *sb = mc_schema_broker_new();
1006
+
1007
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
1008
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
1009
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
1010
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
1011
+
1012
+ const mc_EncryptedFieldConfig_t *efc = mc_schema_broker_get_encryptedFields(sb, "coll", status);
1013
+ ASSERT_OK_STATUS(efc, status);
1014
+ // Check one field of returned mc_EncryptedFieldConfig_t.
1015
+ ASSERT_STREQUAL(efc->fields->path, "encryptedIndexed");
1016
+ mc_schema_broker_destroy(sb);
1017
+ mongocrypt_status_destroy(status);
1018
+ }
1019
+
1020
+ // Reports error if not found.
1021
+ {
1022
+ mongocrypt_status_t *status = mongocrypt_status_new();
1023
+ mc_schema_broker_t *sb = mc_schema_broker_new();
1024
+
1025
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
1026
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
1027
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
1028
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
1029
+
1030
+ const mc_EncryptedFieldConfig_t *efc = mc_schema_broker_get_encryptedFields(sb, "does-not-exist", status);
1031
+ ASSERT_FAILS_STATUS(efc, status, "Expected encryptedFields");
1032
+ mc_schema_broker_destroy(sb);
1033
+ mongocrypt_status_destroy(status);
1034
+ }
1035
+ }
1036
+
1037
+ static void test_mc_schema_broker_satisfy_from_create_or_collMod(_mongocrypt_tester_t *tester) {
1038
+ bson_t *cmd = TEST_FILE_AS_BSON("./test/data/schema-broker/create-with-jsonSchema.json");
1039
+
1040
+ // Can satisfy.
1041
+ {
1042
+ mongocrypt_status_t *status = mongocrypt_status_new();
1043
+ mc_schema_broker_t *sb = mc_schema_broker_new();
1044
+
1045
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
1046
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
1047
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_create_or_collMod(sb, cmd, status), status);
1048
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
1049
+ mc_schema_broker_destroy(sb);
1050
+ mongocrypt_status_destroy(status);
1051
+ }
1052
+
1053
+ // Ignores schema for an unrequested collection.
1054
+ {
1055
+ mongocrypt_status_t *status = mongocrypt_status_new();
1056
+ mc_schema_broker_t *sb = mc_schema_broker_new();
1057
+
1058
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll2", status), status);
1059
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
1060
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_create_or_collMod(sb, cmd, status), status);
1061
+ ASSERT(mc_schema_broker_need_more_schemas(sb)); // Request for db.coll2 is still not satisfied.
1062
+ mc_schema_broker_destroy(sb);
1063
+ mongocrypt_status_destroy(status);
1064
+ }
1065
+
1066
+ // Ignores schema for an already-satisfied collection.
1067
+ {
1068
+ bson_t *encryptedFieldsMap = TEST_FILE_AS_BSON("./test/data/schema-broker/encryptedFieldsMap.json");
1069
+ mongocrypt_status_t *status = mongocrypt_status_new();
1070
+ mc_schema_broker_t *sb = mc_schema_broker_new();
1071
+
1072
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
1073
+ ASSERT(mc_schema_broker_need_more_schemas(sb));
1074
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
1075
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
1076
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_create_or_collMod(sb, cmd, status), status);
1077
+ ASSERT(!mc_schema_broker_need_more_schemas(sb));
1078
+ mc_schema_broker_destroy(sb);
1079
+ mongocrypt_status_destroy(status);
1080
+ }
1081
+ }
1082
+
1083
+ static void test_mc_schema_broker_has_any_qe_schemas(_mongocrypt_tester_t *tester) {
1084
+ bson_t *encryptedFieldsMap = TEST_FILE_AS_BSON("./test/data/schema-broker/encryptedFieldsMap.json");
1085
+
1086
+ // Works.
1087
+ {
1088
+ mongocrypt_status_t *status = mongocrypt_status_new();
1089
+ mc_schema_broker_t *sb = mc_schema_broker_new();
1090
+
1091
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
1092
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_from_encryptedFieldsMap(sb, encryptedFieldsMap, status), status);
1093
+ ASSERT(mc_schema_broker_has_any_qe_schemas(sb));
1094
+
1095
+ mc_schema_broker_destroy(sb);
1096
+ mongocrypt_status_destroy(status);
1097
+ }
1098
+
1099
+ // Returns false if no QE schema.
1100
+ {
1101
+ mongocrypt_status_t *status = mongocrypt_status_new();
1102
+ mc_schema_broker_t *sb = mc_schema_broker_new();
1103
+
1104
+ ASSERT_OK_STATUS(mc_schema_broker_request(sb, "db", "coll", status), status);
1105
+ ASSERT_OK_STATUS(mc_schema_broker_satisfy_remaining_with_empty_schemas(sb, NULL, status), status);
1106
+ ASSERT(!mc_schema_broker_has_any_qe_schemas(sb));
1107
+
1108
+ mc_schema_broker_destroy(sb);
1109
+ mongocrypt_status_destroy(status);
1110
+ }
1111
+ }
1112
+
1113
+ void _mongocrypt_tester_install_mc_schema_broker(_mongocrypt_tester_t *tester) {
1114
+ INSTALL_TEST(test_mc_schema_broker_request);
1115
+ INSTALL_TEST(test_mc_schema_broker_satisfy_from_collInfo);
1116
+ INSTALL_TEST(test_mc_schema_broker_satisfy_from_cache);
1117
+ INSTALL_TEST(test_mc_schema_broker_satisfy_from_schemaMap);
1118
+ INSTALL_TEST(test_mc_schema_broker_satisfy_from_encryptedFieldsMap);
1119
+ INSTALL_TEST(test_mc_schema_broker_satisfy_remaining_with_empty_schemas);
1120
+ INSTALL_TEST(test_mc_schema_broker_add_schemas_to_cmd);
1121
+ INSTALL_TEST(test_mc_schema_broker_get_encryptedFields);
1122
+ INSTALL_TEST(test_mc_schema_broker_satisfy_from_create_or_collMod);
1123
+ INSTALL_TEST(test_mc_schema_broker_has_any_qe_schemas);
1124
+ }