libmongocrypt-helper 1.8.0.0.1001 → 1.11.0.0.1001

Sign up to get free protection for your applications and to get access to all the features.
Files changed (385) hide show
  1. checksums.yaml +4 -4
  2. data/ext/libmongocrypt/libmongocrypt/CHANGELOG.md +33 -0
  3. data/ext/libmongocrypt/libmongocrypt/CMakeLists.txt +12 -1
  4. data/ext/libmongocrypt/libmongocrypt/CODEOWNERS +1 -4
  5. data/ext/libmongocrypt/libmongocrypt/Earthfile +151 -3
  6. data/ext/libmongocrypt/libmongocrypt/README.md +36 -40
  7. data/ext/libmongocrypt/libmongocrypt/bindings/cs/CMakeLists.txt +1 -0
  8. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Driver.snk +0 -0
  9. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/AssemblyInfo.cs +2 -2
  10. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Binary.cs +16 -2
  11. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/CryptClientFactory.cs +8 -4
  12. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/Library.cs +10 -0
  13. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/LibraryLoader.cs +81 -44
  14. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt/MongoDB.Libmongocrypt.csproj +2 -1
  15. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test/MongoDB.Libmongocrypt.Test.csproj +2 -0
  16. data/ext/libmongocrypt/libmongocrypt/bindings/cs/MongoDB.Libmongocrypt.Test32/MongoDB.Libmongocrypt.Test32.csproj +2 -0
  17. data/ext/libmongocrypt/libmongocrypt/bindings/cs/README.md +3 -0
  18. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.cake +21 -26
  19. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.config +3 -0
  20. data/ext/libmongocrypt/libmongocrypt/bindings/cs/Scripts/build.sh +0 -0
  21. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/build.gradle.kts +28 -0
  22. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/java/com/mongodb/crypt/benchmark/BenchmarkRunner.java +217 -0
  23. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/benchmarks/src/main/resources/keyDocument.json +24 -0
  24. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/build.gradle.kts +21 -6
  25. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.jar +0 -0
  26. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradle/wrapper/gradle-wrapper.properties +1 -1
  27. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew +154 -108
  28. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/gradlew.bat +7 -18
  29. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/settings.gradle.kts +1 -0
  30. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPI.java +41 -6
  31. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CAPIHelper.java +5 -5
  32. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/CipherCallback.java +27 -1
  33. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoCryptImpl.java +34 -19
  34. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/java/com/mongodb/crypt/capi/MongoExplicitEncryptOptions.java +6 -4
  35. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/jni-config.json +180 -0
  36. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/main/resources/META-INF/native-image/reflect-config.json +134 -0
  37. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/java/com/mongodb/crypt/capi/MongoCryptTest.java +44 -2
  38. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/encrypted-payload.json +1 -1
  39. data/ext/libmongocrypt/libmongocrypt/bindings/java/mongocrypt/src/test/resources/fle2-find-range-explicit-v2/int32/rangeopts.json +3 -0
  40. data/ext/libmongocrypt/libmongocrypt/bindings/node/README.md +4 -900
  41. data/ext/libmongocrypt/libmongocrypt/bindings/python/CHANGELOG.rst +60 -0
  42. data/ext/libmongocrypt/libmongocrypt/bindings/python/README.rst +41 -20
  43. data/ext/libmongocrypt/libmongocrypt/bindings/python/RELEASE.rst +6 -24
  44. data/ext/libmongocrypt/libmongocrypt/bindings/python/build-manylinux-wheel.sh +4 -13
  45. data/ext/libmongocrypt/libmongocrypt/bindings/python/hatch_build.py +36 -0
  46. data/ext/libmongocrypt/libmongocrypt/bindings/python/libmongocrypt-version.txt +1 -0
  47. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/__init__.py +2 -2
  48. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/auto_encrypter.py +61 -0
  49. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/credentials.py +156 -0
  50. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/explicit_encrypter.py +156 -0
  51. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/asynchronous/state_machine.py +149 -0
  52. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/auto_encrypter.py +2 -46
  53. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binary.py +14 -17
  54. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/binding.py +107 -61
  55. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/compat.py +6 -4
  56. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/credentials.py +2 -121
  57. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/crypto.py +31 -20
  58. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/errors.py +2 -2
  59. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/explicit_encrypter.py +2 -233
  60. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/mongocrypt.py +168 -238
  61. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/options.py +265 -0
  62. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/state_machine.py +2 -141
  63. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/auto_encrypter.py +61 -0
  64. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/credentials.py +156 -0
  65. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/explicit_encrypter.py +156 -0
  66. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/synchronous/state_machine.py +149 -0
  67. data/ext/libmongocrypt/libmongocrypt/bindings/python/pymongocrypt/version.py +2 -2
  68. data/ext/libmongocrypt/libmongocrypt/bindings/python/pyproject.toml +118 -0
  69. data/ext/libmongocrypt/libmongocrypt/bindings/python/release.sh +97 -61
  70. data/ext/libmongocrypt/libmongocrypt/bindings/python/{test-requirements.txt → requirements-test.txt} +4 -1
  71. data/ext/libmongocrypt/libmongocrypt/bindings/python/requirements.txt +4 -0
  72. data/ext/libmongocrypt/libmongocrypt/bindings/python/sbom.json +76 -0
  73. data/ext/libmongocrypt/libmongocrypt/bindings/python/strip_header.py +6 -7
  74. data/ext/libmongocrypt/libmongocrypt/bindings/python/synchro.py +64 -0
  75. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/__init__.py +1 -0
  76. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/collection-info.json +1 -1
  77. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/command.json +1 -1
  78. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/compact/success/encrypted-payload.json +21 -21
  79. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/encrypted-command-reply.json +1 -1
  80. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/encrypted-field-config-map.json +1 -1
  81. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-range-explicit-v2/int32/encrypted-payload.json +1 -1
  82. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-range-explicit-v2/int32/rangeopts.json +3 -0
  83. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-rangePreview-explicit/int32/rangeopts.json +11 -0
  84. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/fle2-find-rangePreview-explicit/int32/value-to-encrypt.json +20 -0
  85. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document-azure.json +1 -1
  86. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document-gcp.json +1 -1
  87. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-document.json +1 -1
  88. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/key-filter.json +1 -1
  89. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/list-collections-filter.json +1 -1
  90. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/mongocryptd-command.json +1 -1
  91. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/mongocryptd-reply.json +1 -1
  92. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/data/schema-map.json +1 -1
  93. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/performance/keyDocument.json +24 -0
  94. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/performance/perf_test.py +165 -0
  95. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_binding.py +8 -12
  96. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_crypto.py +9 -11
  97. data/ext/libmongocrypt/libmongocrypt/bindings/python/test/test_mongocrypt.py +988 -340
  98. data/ext/libmongocrypt/libmongocrypt/bindings/python/update-sbom.sh +14 -0
  99. data/ext/libmongocrypt/libmongocrypt/cmake/FetchMongoC.cmake +19 -1
  100. data/ext/libmongocrypt/libmongocrypt/cmake/ImportBSON.cmake +23 -0
  101. data/ext/libmongocrypt/libmongocrypt/cmake/IntelDFP.cmake +19 -227
  102. data/ext/libmongocrypt/libmongocrypt/cmake/Patch.cmake +54 -0
  103. data/ext/libmongocrypt/libmongocrypt/doc/img/cli-icon.png +0 -0
  104. data/ext/libmongocrypt/libmongocrypt/doc/img/reference-targets.png +0 -0
  105. data/ext/libmongocrypt/libmongocrypt/doc/releasing.md +153 -0
  106. data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version.py +61 -28
  107. data/ext/libmongocrypt/libmongocrypt/etc/calc_release_version_selftest.sh +73 -0
  108. data/ext/libmongocrypt/libmongocrypt/etc/cyclonedx.sbom.json +108 -0
  109. data/ext/libmongocrypt/libmongocrypt/etc/format.sh +1 -1
  110. data/ext/libmongocrypt/libmongocrypt/etc/libbson-remove-GCC-diagnostic-pragma.patch +27 -0
  111. data/ext/libmongocrypt/libmongocrypt/etc/mongo-inteldfp-alpine-arm-fix.patch +17 -0
  112. data/ext/libmongocrypt/libmongocrypt/etc/packager.py +120 -91
  113. data/ext/libmongocrypt/libmongocrypt/etc/purls.txt +14 -0
  114. data/ext/libmongocrypt/libmongocrypt/etc/repo_config.yaml +56 -0
  115. data/ext/libmongocrypt/libmongocrypt/etc/silk-create-asset-group.sh +70 -0
  116. data/ext/libmongocrypt/libmongocrypt/etc/ssdlc_compliance_report.md +37 -0
  117. data/ext/libmongocrypt/libmongocrypt/etc/third_party_vulnerabilities.md +42 -0
  118. data/ext/libmongocrypt/libmongocrypt/integrating.md +18 -1
  119. data/ext/libmongocrypt/libmongocrypt/kms-message/CMakeLists.txt +11 -3
  120. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_gcp_request.c +1 -1
  121. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_reader_writer.c +17 -0
  122. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_reader_writer_private.h +6 -0
  123. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_request.c +211 -1
  124. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_response.c +163 -0
  125. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_kmip_tag_type_private.h +2 -1
  126. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message/kms_kmip_request.h +17 -0
  127. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_message/kms_kmip_response.h +6 -0
  128. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_port.c +3 -2
  129. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request.c +4 -2
  130. data/ext/libmongocrypt/libmongocrypt/kms-message/src/kms_request_str.c +2 -2
  131. data/ext/libmongocrypt/libmongocrypt/kms-message/test/test_kmip_reader_writer.c +23 -2
  132. data/ext/libmongocrypt/libmongocrypt/src/crypto/libcrypto.c +13 -10
  133. data/ext/libmongocrypt/libmongocrypt/src/mc-dec128.h +1 -1
  134. data/ext/libmongocrypt/libmongocrypt/src/mc-efc-private.h +16 -2
  135. data/ext/libmongocrypt/libmongocrypt/src/mc-efc.c +94 -6
  136. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder-private.h +15 -5
  137. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-encryption-placeholder.c +114 -53
  138. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-private-v2.h +1 -1
  139. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-private.h +1 -1
  140. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload-v2.c +2 -2
  141. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-equality-payload.c +2 -2
  142. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private-v2.h +21 -6
  143. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-private.h +5 -5
  144. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload-v2.c +38 -2
  145. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-find-range-payload.c +1 -1
  146. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private-v2.h +20 -7
  147. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-private.h +8 -8
  148. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-insert-update-payload-v2.c +89 -1
  149. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev-v2.c +3 -3
  150. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-payload-iev.c +1 -23
  151. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds-private.h +4 -3
  152. data/ext/libmongocrypt/libmongocrypt/src/mc-fle2-rfds.c +15 -12
  153. data/ext/libmongocrypt/libmongocrypt/src/mc-optional-private.h +11 -0
  154. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation-private.h +16 -6
  155. data/ext/libmongocrypt/libmongocrypt/src/mc-range-edge-generation.c +64 -22
  156. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding-private.h +23 -4
  157. data/ext/libmongocrypt/libmongocrypt/src/mc-range-encoding.c +359 -65
  158. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-generator.template.h +26 -14
  159. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover-private.h +17 -6
  160. data/ext/libmongocrypt/libmongocrypt/src/mc-range-mincover.c +31 -13
  161. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts-private.h +16 -3
  162. data/ext/libmongocrypt/libmongocrypt/src/mc-rangeopts.c +259 -63
  163. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens-private.h +40 -24
  164. data/ext/libmongocrypt/libmongocrypt/src/mc-tokens.c +57 -13
  165. data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.h +17 -0
  166. data/ext/libmongocrypt/libmongocrypt/src/mlib/int128.test.cpp +5 -0
  167. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-binary-private.h +0 -5
  168. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-buffer.c +5 -7
  169. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-key.c +1 -0
  170. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-oauth-private.h +16 -18
  171. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-cache-oauth.c +105 -76
  172. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-crypto.c +9 -3
  173. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-datakey.c +170 -89
  174. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-decrypt.c +5 -5
  175. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-encrypt.c +505 -124
  176. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx-private.h +31 -6
  177. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-ctx.c +81 -13
  178. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-dll-private.h +7 -0
  179. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kek-private.h +5 -1
  180. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kek.c +161 -103
  181. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker-private.h +2 -7
  182. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key-broker.c +191 -69
  183. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-key.c +1 -1
  184. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx-private.h +50 -15
  185. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-kms-ctx.c +365 -69
  186. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking-private.h +2 -1
  187. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-marking.c +200 -107
  188. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts-private.h +50 -5
  189. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-opts.c +591 -15
  190. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-private.h +6 -13
  191. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt-util.c +3 -2
  192. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.c +47 -234
  193. data/ext/libmongocrypt/libmongocrypt/src/mongocrypt.h +75 -24
  194. data/ext/libmongocrypt/libmongocrypt/src/os_posix/os_dll.c +18 -2
  195. data/ext/libmongocrypt/libmongocrypt/src/os_win/os_dll.c +4 -0
  196. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/bypassQueryAnalysis/payload.json +53 -0
  197. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/jsonSchema/cmd-to-mongocryptd.json +23 -0
  198. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/jsonSchema/cmd.json +20 -0
  199. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/cmd-to-mongocryptd.json +50 -0
  200. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/cmd.json +20 -0
  201. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/collinfo.json +44 -0
  202. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/encrypted-field-map.json +24 -0
  203. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/encrypted-payload-pattern.json +53 -0
  204. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/simple/mongocryptd-reply.json +62 -0
  205. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/cmd-to-mongocryptd.json +30 -0
  206. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/cmd.json +17 -0
  207. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/mongocryptd-reply.json +39 -0
  208. data/ext/libmongocrypt/libmongocrypt/test/data/bulkWrite/unencrypted/payload.json +21 -0
  209. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/missing-key-id/collinfo.json +20 -0
  210. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/no-fields/collinfo.json +9 -0
  211. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/no-fields/encrypted-payload.json +4 -0
  212. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/cmd.json +1 -0
  213. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/collinfo.json +63 -0
  214. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-field-config-map.json +61 -0
  215. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-payload-range-v2.json +37 -0
  216. data/ext/libmongocrypt/libmongocrypt/test/data/cleanup/success/encrypted-payload.json +29 -0
  217. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/cmd.json +1 -0
  218. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/collinfo.json +64 -0
  219. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/encrypted-payload-range-v2.json +105 -0
  220. data/ext/libmongocrypt/libmongocrypt/test/data/compact/anchor-pad/encrypted-payload.json +30 -0
  221. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/cmd.json +1 -0
  222. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/collinfo.json +49 -0
  223. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/encrypted-field-config-map.json +47 -0
  224. data/ext/libmongocrypt/libmongocrypt/test/data/compact/no-range/encrypted-payload.json +23 -0
  225. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/collinfo.json +15 -0
  226. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-field-config-map.json +10 -0
  227. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload-range-v2.json +104 -0
  228. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/encrypted-payload.json +6 -0
  229. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/collinfo.json +4 -4
  230. data/ext/libmongocrypt/libmongocrypt/test/data/fle2-explain/with-csfle/encrypted-payload.json +3 -3
  231. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/decrypt-response.txt +16 -0
  232. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/encrypt-response.txt +16 -0
  233. data/ext/libmongocrypt/libmongocrypt/test/data/kms-azure/oauth-response.txt +19 -0
  234. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/cmd.json +9 -0
  235. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/encrypted-field-map.json +19 -0
  236. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/encrypted-payload.json +62 -0
  237. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/find/mongocryptd-reply.json +69 -0
  238. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/cmd.json +11 -0
  239. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/encrypted-field-map.json +19 -0
  240. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/encrypted-payload.json +40 -0
  241. data/ext/libmongocrypt/libmongocrypt/test/data/no-trimFactor/insert/mongocryptd-reply.json +47 -0
  242. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_decimal128.cstruct +1 -1
  243. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_double.cstruct +8637 -7958
  244. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_int32.cstruct +5522 -1382
  245. data/ext/libmongocrypt/libmongocrypt/test/data/range-edge-generation/edges_int64.cstruct +5042 -1262
  246. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_decimal128.cstruct +1 -1
  247. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_decimal128_precision.cstruct +1 -1
  248. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_double.cstruct +1 -1
  249. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_double_precision.cstruct +2 -2
  250. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_int32.cstruct +1 -1
  251. data/ext/libmongocrypt/libmongocrypt/test/data/range-min-cover/mincover_int64.cstruct +1 -1
  252. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/cmd.json +8 -0
  253. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/encrypted-field-map.json +19 -0
  254. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/encrypted-payload.json +53 -0
  255. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-find-int32/mongocryptd-reply.json +58 -0
  256. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/cmd.json +11 -0
  257. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/encrypted-field-map.json +19 -0
  258. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/encrypted-payload.json +40 -0
  259. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/auto-insert-int32/mongocryptd-reply.json +45 -0
  260. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32/expected.json +26 -0
  261. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32/to-encrypt.json +20 -0
  262. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32-defaults/expected.json +26 -0
  263. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-find-int32-defaults/to-encrypt.json +20 -0
  264. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-double/expected.json +8 -0
  265. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-int32/expected.json +8 -0
  266. data/ext/libmongocrypt/libmongocrypt/test/data/range-sends-cryptoParams/explicit-insert-int32-defaults/expected.json +8 -0
  267. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/README.md +7 -4
  268. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/mc.json +9 -5
  269. data/ext/libmongocrypt/libmongocrypt/test/data/tokens/server.json +9 -5
  270. data/ext/libmongocrypt/libmongocrypt/test/example-state-machine.c +1 -0
  271. data/ext/libmongocrypt/libmongocrypt/test/test-gcp-auth.c +8 -8
  272. data/ext/libmongocrypt/libmongocrypt/test/test-mc-efc.c +6 -4
  273. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-find-range-payload-v2.c +43 -3
  274. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-payload-iup-v2.c +76 -0
  275. data/ext/libmongocrypt/libmongocrypt/test/test-mc-fle2-rfds.c +5 -5
  276. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-edge-generation.c +89 -14
  277. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-encoding.c +342 -76
  278. data/ext/libmongocrypt/libmongocrypt/test/test-mc-range-mincover.c +94 -12
  279. data/ext/libmongocrypt/libmongocrypt/test/test-mc-rangeopts.c +205 -7
  280. data/ext/libmongocrypt/libmongocrypt/test/test-mc-tokens.c +49 -23
  281. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.c +16 -19
  282. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-assert-match-bson.h +22 -1
  283. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cache-oauth.c +94 -11
  284. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-cleanup.c +374 -0
  285. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-compact.c +121 -42
  286. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-hooks.c +134 -4
  287. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-std-hooks.c +40 -0
  288. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-crypto-std-hooks.h +16 -0
  289. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-csfle-lib.c +11 -11
  290. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-decrypt.c +8 -5
  291. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-encrypt.c +922 -92
  292. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-rewrap-many-datakey.c +2 -2
  293. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-ctx-setopt.c +114 -12
  294. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-datakey.c +14 -9
  295. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-kms-ctx.c +424 -3
  296. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-log.c +1 -1
  297. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-marking.c +447 -28
  298. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-opts.c +42 -0
  299. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-traverse-util.c +30 -26
  300. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-util.c +7 -0
  301. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt-util.h +3 -0
  302. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.c +66 -14
  303. data/ext/libmongocrypt/libmongocrypt/test/test-mongocrypt.h +11 -0
  304. data/ext/libmongocrypt/libmongocrypt/test/test-named-kms-providers.c +2381 -0
  305. data/ext/libmongocrypt/libmongocrypt/test/util/HELP.autogen +3 -1
  306. data/ext/libmongocrypt/libmongocrypt/test/util/README.md +1 -0
  307. data/ext/libmongocrypt/libmongocrypt/test/util/csfle.c +4 -0
  308. data/ext/libmongocrypt/libmongocrypt/test/util/make_includes.py +1 -1
  309. data/ext/libmongocrypt/libmongocrypt/test/util/util.c +38 -3
  310. data/lib/libmongocrypt_helper/version.rb +2 -2
  311. metadata +112 -106
  312. checksums.yaml.gz.sig +0 -0
  313. data/ext/libmongocrypt/libmongocrypt/VERSION_CURRENT +0 -1
  314. data/ext/libmongocrypt/libmongocrypt/bindings/cs/cs.sln +0 -79
  315. data/ext/libmongocrypt/libmongocrypt/bindings/node/CHANGELOG.md +0 -105
  316. data/ext/libmongocrypt/libmongocrypt/bindings/node/LICENSE +0 -201
  317. data/ext/libmongocrypt/libmongocrypt/bindings/node/binding.gyp +0 -79
  318. data/ext/libmongocrypt/libmongocrypt/bindings/node/etc/README.hbs +0 -44
  319. data/ext/libmongocrypt/libmongocrypt/bindings/node/etc/build-static.sh +0 -36
  320. data/ext/libmongocrypt/libmongocrypt/bindings/node/index.d.ts +0 -641
  321. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/autoEncrypter.js +0 -420
  322. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/buffer_pool.js +0 -123
  323. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/clientEncryption.js +0 -821
  324. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/common.js +0 -98
  325. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/cryptoCallbacks.js +0 -87
  326. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/errors.js +0 -75
  327. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/index.js +0 -73
  328. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/mongocryptdManager.js +0 -66
  329. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/aws.js +0 -26
  330. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/azure.js +0 -178
  331. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/gcp.js +0 -24
  332. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/index.js +0 -54
  333. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/providers/utils.js +0 -39
  334. data/ext/libmongocrypt/libmongocrypt/bindings/node/lib/stateMachine.js +0 -492
  335. data/ext/libmongocrypt/libmongocrypt/bindings/node/package-lock.json +0 -15302
  336. data/ext/libmongocrypt/libmongocrypt/bindings/node/package.json +0 -100
  337. data/ext/libmongocrypt/libmongocrypt/bindings/node/src/mongocrypt.cc +0 -956
  338. data/ext/libmongocrypt/libmongocrypt/bindings/node/src/mongocrypt.h +0 -114
  339. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/autoEncrypter.test.js +0 -950
  340. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/buffer_pool.test.js +0 -91
  341. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/clientEncryption.test.js +0 -1093
  342. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/common.test.js +0 -94
  343. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/cryptoCallbacks.test.js +0 -240
  344. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/README.md +0 -5
  345. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/cmd.json +0 -6
  346. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/collection-info.json +0 -37
  347. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encrypted-document-nested.json +0 -8
  348. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encrypted-document.json +0 -11
  349. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/encryptedFields.json +0 -30
  350. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/key-document.json +0 -32
  351. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/key1-document.json +0 -30
  352. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/data/mongocryptd-reply.json +0 -18
  353. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/index.test.js +0 -45
  354. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/mongocryptdManager.test.js +0 -48
  355. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/providers/credentialsProvider.test.js +0 -551
  356. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/release.test.js +0 -66
  357. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/requirements.helper.js +0 -51
  358. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/stateMachine.test.js +0 -331
  359. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/tools/chai-addons.js +0 -8
  360. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/tools/mongodb_reporter.js +0 -325
  361. data/ext/libmongocrypt/libmongocrypt/bindings/node/test/types/index.test-d.ts +0 -63
  362. data/ext/libmongocrypt/libmongocrypt/bindings/python/setup.py +0 -89
  363. data/ext/libmongocrypt/libmongocrypt/debian/build_snapshot.sh +0 -79
  364. data/ext/libmongocrypt/libmongocrypt/debian/changelog +0 -105
  365. data/ext/libmongocrypt/libmongocrypt/debian/compat +0 -1
  366. data/ext/libmongocrypt/libmongocrypt/debian/control +0 -41
  367. data/ext/libmongocrypt/libmongocrypt/debian/copyright +0 -129
  368. data/ext/libmongocrypt/libmongocrypt/debian/gbp.conf +0 -23
  369. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt-dev.dirs +0 -2
  370. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt-dev.install +0 -5
  371. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt0.dirs +0 -1
  372. data/ext/libmongocrypt/libmongocrypt/debian/libmongocrypt0.install +0 -1
  373. data/ext/libmongocrypt/libmongocrypt/debian/rules +0 -46
  374. data/ext/libmongocrypt/libmongocrypt/debian/source/format +0 -1
  375. data/ext/libmongocrypt/libmongocrypt/debian/source/lintian-overrides +0 -3
  376. data/ext/libmongocrypt/libmongocrypt/debian/source/options +0 -1
  377. data/ext/libmongocrypt/libmongocrypt/debian/watch +0 -3
  378. data/ext/libmongocrypt/libmongocrypt/test/data/compact/success/mongocryptd-reply.json +0 -72
  379. data.tar.gz.sig +0 -1
  380. metadata.gz.sig +0 -0
  381. /data/ext/libmongocrypt/libmongocrypt/{bindings/node/test/data/kms-decrypt-reply.txt → test/data/kms-aws/decrypt-response.txt} +0 -0
  382. /data/ext/libmongocrypt/libmongocrypt/{bindings/node/test/data/kms-encrypt-reply.txt → test/data/kms-aws/encrypt-response.txt} +0 -0
  383. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/decrypt-response.txt +0 -0
  384. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/encrypt-response.txt +0 -0
  385. /data/ext/libmongocrypt/libmongocrypt/test/data/{gcp-auth → kms-gcp}/oauth-response.txt +0 -0
@@ -1,331 +0,0 @@
1
- 'use strict';
2
-
3
- const { EventEmitter, once } = require('events');
4
- const net = require('net');
5
- const tls = require('tls');
6
- const fs = require('fs');
7
- const { expect } = require('chai');
8
- const sinon = require('sinon');
9
- const mongodb = require('mongodb');
10
- const BSON = mongodb.BSON;
11
- const StateMachine = require('../lib/stateMachine')({ mongodb }).StateMachine;
12
-
13
- describe('StateMachine', function () {
14
- class MockRequest {
15
- constructor(message, bytesNeeded) {
16
- this._bytesNeeded = typeof bytesNeeded === 'number' ? bytesNeeded : 1024;
17
- this._message = message;
18
- this.endpoint = 'some.fake.host.com';
19
- this._kmsProvider = 'aws';
20
- }
21
-
22
- get message() {
23
- return this._message;
24
- }
25
-
26
- get bytesNeeded() {
27
- return this._bytesNeeded;
28
- }
29
-
30
- get kmsProvider() {
31
- return this._kmsProvider;
32
- }
33
-
34
- addResponse(buffer) {
35
- this._bytesNeeded -= buffer.length;
36
- }
37
- }
38
-
39
- describe('#markCommand', function () {
40
- let runCommandStub;
41
- let dbStub;
42
- let clientStub;
43
-
44
- beforeEach(function () {
45
- this.sinon = sinon.createSandbox();
46
- runCommandStub = this.sinon.stub().resolves({});
47
- dbStub = this.sinon.createStubInstance(mongodb.Db, {
48
- command: runCommandStub
49
- });
50
- clientStub = this.sinon.createStubInstance(mongodb.MongoClient, {
51
- db: dbStub
52
- });
53
- });
54
-
55
- const command = {
56
- encryptedFields: {},
57
- a: new BSON.Long('0'),
58
- b: new BSON.Int32(0)
59
- };
60
- const options = { promoteLongs: false, promoteValues: false };
61
- const serializedCommand = BSON.serialize(command);
62
- const stateMachine = new StateMachine({ bson: BSON });
63
- const callback = () => {};
64
-
65
- context('when executing the command', function () {
66
- it('does not promote values', function () {
67
- stateMachine.markCommand(clientStub, 'test.coll', serializedCommand, callback);
68
- expect(runCommandStub.calledWith(command, options)).to.be.true;
69
- });
70
- });
71
- });
72
-
73
- describe('kmsRequest', function () {
74
- class MockSocket extends EventEmitter {
75
- constructor(callback) {
76
- super();
77
- this.on('connect', callback);
78
- }
79
- write() {}
80
- destroy() {}
81
- end(callback) {
82
- Promise.resolve().then(callback);
83
- }
84
- }
85
-
86
- before(function () {
87
- this.sinon = sinon.createSandbox();
88
- });
89
-
90
- context('when handling standard kms requests', function () {
91
- beforeEach(function () {
92
- this.fakeSocket = undefined;
93
- this.sinon.stub(tls, 'connect').callsFake((options, callback) => {
94
- this.fakeSocket = new MockSocket(callback);
95
- return this.fakeSocket;
96
- });
97
- });
98
-
99
- it('should only resolve once bytesNeeded drops to zero', function (done) {
100
- const stateMachine = new StateMachine({ bson: BSON });
101
- const request = new MockRequest(Buffer.from('foobar'), 500);
102
- let status = 'pending';
103
- stateMachine
104
- .kmsRequest(request)
105
- .then(
106
- () => (status = 'resolved'),
107
- () => (status = 'rejected')
108
- )
109
- .catch(() => {});
110
-
111
- this.fakeSocket.emit('connect');
112
- setTimeout(() => {
113
- expect(status).to.equal('pending');
114
- expect(request.bytesNeeded).to.equal(500);
115
- expect(request.kmsProvider).to.equal('aws');
116
- this.fakeSocket.emit('data', Buffer.alloc(300));
117
- setTimeout(() => {
118
- expect(status).to.equal('pending');
119
- expect(request.bytesNeeded).to.equal(200);
120
- this.fakeSocket.emit('data', Buffer.alloc(200));
121
- setTimeout(() => {
122
- expect(status).to.equal('resolved');
123
- expect(request.bytesNeeded).to.equal(0);
124
- done();
125
- });
126
- });
127
- });
128
- });
129
- });
130
-
131
- context('when tls options are provided', function () {
132
- context('when the options are insecure', function () {
133
- [
134
- 'tlsInsecure',
135
- 'tlsAllowInvalidCertificates',
136
- 'tlsAllowInvalidHostnames',
137
- 'tlsDisableOCSPEndpointCheck',
138
- 'tlsDisableCertificateRevocationCheck'
139
- ].forEach(function (option) {
140
- context(`when the option is ${option}`, function () {
141
- const stateMachine = new StateMachine({
142
- bson: BSON,
143
- tlsOptions: { aws: { [option]: true } }
144
- });
145
- const request = new MockRequest(Buffer.from('foobar'), 500);
146
-
147
- it('rejects with the validation error', function (done) {
148
- stateMachine.kmsRequest(request).catch(err => {
149
- expect(err.message).to.equal(`Insecure TLS options prohibited for aws: ${option}`);
150
- done();
151
- });
152
- });
153
- });
154
- });
155
- });
156
-
157
- context('when the options are secure', function () {
158
- context('when providing tlsCertificateKeyFile', function () {
159
- const stateMachine = new StateMachine({
160
- bson: BSON,
161
- tlsOptions: { aws: { tlsCertificateKeyFile: 'test.pem' } }
162
- });
163
- const request = new MockRequest(Buffer.from('foobar'), -1);
164
- const buffer = Buffer.from('foobar');
165
- let connectOptions;
166
-
167
- it('sets the cert and key options in the tls connect options', function (done) {
168
- this.sinon.stub(fs, 'readFileSync').callsFake(fileName => {
169
- expect(fileName).to.equal('test.pem');
170
- return buffer;
171
- });
172
- this.sinon.stub(tls, 'connect').callsFake((options, callback) => {
173
- connectOptions = options;
174
- this.fakeSocket = new MockSocket(callback);
175
- return this.fakeSocket;
176
- });
177
- stateMachine.kmsRequest(request).then(function () {
178
- expect(connectOptions.cert).to.equal(buffer);
179
- expect(connectOptions.key).to.equal(buffer);
180
- done();
181
- });
182
- this.fakeSocket.emit('data', Buffer.alloc(0));
183
- });
184
- });
185
-
186
- context('when providing tlsCAFile', function () {
187
- const stateMachine = new StateMachine({
188
- bson: BSON,
189
- tlsOptions: { aws: { tlsCAFile: 'test.pem' } }
190
- });
191
- const request = new MockRequest(Buffer.from('foobar'), -1);
192
- const buffer = Buffer.from('foobar');
193
- let connectOptions;
194
-
195
- it('sets the ca options in the tls connect options', function (done) {
196
- this.sinon.stub(fs, 'readFileSync').callsFake(fileName => {
197
- expect(fileName).to.equal('test.pem');
198
- return buffer;
199
- });
200
- this.sinon.stub(tls, 'connect').callsFake((options, callback) => {
201
- connectOptions = options;
202
- this.fakeSocket = new MockSocket(callback);
203
- return this.fakeSocket;
204
- });
205
- stateMachine.kmsRequest(request).then(function () {
206
- expect(connectOptions.ca).to.equal(buffer);
207
- done();
208
- });
209
- this.fakeSocket.emit('data', Buffer.alloc(0));
210
- });
211
- });
212
-
213
- context('when providing tlsCertificateKeyFilePassword', function () {
214
- const stateMachine = new StateMachine({
215
- bson: BSON,
216
- tlsOptions: { aws: { tlsCertificateKeyFilePassword: 'test' } }
217
- });
218
- const request = new MockRequest(Buffer.from('foobar'), -1);
219
- let connectOptions;
220
-
221
- it('sets the passphrase option in the tls connect options', function (done) {
222
- this.sinon.stub(tls, 'connect').callsFake((options, callback) => {
223
- connectOptions = options;
224
- this.fakeSocket = new MockSocket(callback);
225
- return this.fakeSocket;
226
- });
227
- stateMachine.kmsRequest(request).then(function () {
228
- expect(connectOptions.passphrase).to.equal('test');
229
- done();
230
- });
231
- this.fakeSocket.emit('data', Buffer.alloc(0));
232
- });
233
- });
234
- });
235
- });
236
-
237
- afterEach(function () {
238
- this.sinon.restore();
239
- });
240
- });
241
-
242
- describe('Socks5 support', function () {
243
- let socks5srv;
244
- let hasTlsConnection;
245
- let withUsernamePassword;
246
-
247
- beforeEach(async () => {
248
- hasTlsConnection = false;
249
- socks5srv = net.createServer(async socket => {
250
- if (withUsernamePassword) {
251
- expect(await once(socket, 'data')).to.deep.equal([Buffer.from('05020002', 'hex')]);
252
- socket.write(Buffer.from('0502', 'hex'));
253
- expect(await once(socket, 'data')).to.deep.equal([
254
- Buffer.concat([
255
- Buffer.from('0103', 'hex'),
256
- Buffer.from('foo'),
257
- Buffer.from('03', 'hex'),
258
- Buffer.from('bar')
259
- ])
260
- ]);
261
- socket.write(Buffer.from('0100', 'hex'));
262
- } else {
263
- expect(await once(socket, 'data')).to.deep.equal([Buffer.from('050100', 'hex')]);
264
- socket.write(Buffer.from('0500', 'hex'));
265
- }
266
- expect(await once(socket, 'data')).to.deep.equal([
267
- Buffer.concat([
268
- Buffer.from('0501000312', 'hex'),
269
- Buffer.from('some.fake.host.com'),
270
- Buffer.from('01bb', 'hex')
271
- ])
272
- ]);
273
- socket.write(Buffer.from('0500007f0000010100', 'hex'));
274
- expect((await once(socket, 'data'))[0][1]).to.equal(3); // TLS handshake version byte
275
- hasTlsConnection = true;
276
- socket.end();
277
- });
278
- socks5srv.listen(0);
279
- await once(socks5srv, 'listening');
280
- });
281
-
282
- afterEach(() => {
283
- socks5srv.close();
284
- });
285
-
286
- it('should create HTTPS connections through a Socks5 proxy (no proxy auth)', async function () {
287
- const stateMachine = new StateMachine({
288
- bson: BSON,
289
- proxyOptions: {
290
- proxyHost: 'localhost',
291
- proxyPort: socks5srv.address().port
292
- }
293
- });
294
-
295
- const request = new MockRequest(Buffer.from('foobar'), 500);
296
- try {
297
- await stateMachine.kmsRequest(request);
298
- } catch (err) {
299
- expect(err.name).to.equal('MongoCryptError');
300
- expect(err.originalError.code).to.equal('ECONNRESET');
301
- expect(hasTlsConnection).to.equal(true);
302
- return;
303
- }
304
- expect.fail('missed exception');
305
- });
306
-
307
- it('should create HTTPS connections through a Socks5 proxy (username/password auth)', async function () {
308
- withUsernamePassword = true;
309
- const stateMachine = new StateMachine({
310
- bson: BSON,
311
- proxyOptions: {
312
- proxyHost: 'localhost',
313
- proxyPort: socks5srv.address().port,
314
- proxyUsername: 'foo',
315
- proxyPassword: 'bar'
316
- }
317
- });
318
-
319
- const request = new MockRequest(Buffer.from('foobar'), 500);
320
- try {
321
- await stateMachine.kmsRequest(request);
322
- } catch (err) {
323
- expect(err.name).to.equal('MongoCryptError');
324
- expect(err.originalError.code).to.equal('ECONNRESET');
325
- expect(hasTlsConnection).to.equal(true);
326
- return;
327
- }
328
- expect.fail('missed exception');
329
- });
330
- });
331
- });
@@ -1,8 +0,0 @@
1
- 'use strict';
2
-
3
- // configure chai
4
- const chai = require('chai');
5
- chai.use(require('sinon-chai'));
6
- chai.use(require('chai-subset'));
7
-
8
- chai.config.truncateThreshold = 0;
@@ -1,325 +0,0 @@
1
- //@ts-check
2
- 'use strict';
3
- const mocha = require('mocha');
4
- const chalk = require('chalk');
5
-
6
- chalk.level = 3;
7
-
8
- const {
9
- EVENT_RUN_BEGIN,
10
- EVENT_RUN_END,
11
- EVENT_TEST_FAIL,
12
- EVENT_TEST_PASS,
13
- EVENT_SUITE_BEGIN,
14
- EVENT_SUITE_END,
15
- EVENT_TEST_PENDING,
16
- EVENT_TEST_BEGIN,
17
- EVENT_TEST_END
18
- } = mocha.Runner.constants;
19
-
20
- const fs = require('fs');
21
- const os = require('os');
22
-
23
- /**
24
- * @typedef {object} MongoMochaSuiteExtension
25
- * @property {Date} timestamp - suite start date
26
- * @property {string} stdout - capture of stdout
27
- * @property {string} stderr - capture of stderr
28
- * @property {MongoMochaTest} test - capture of stderr
29
- * @typedef {object} MongoMochaTestExtension
30
- * @property {Date} startTime - test start date
31
- * @property {Date} endTime - test end date
32
- * @property {number} elapsedTime - difference between end and start
33
- * @property {Error} [error] - The possible error from a test
34
- * @property {true} [skipped] - Set if test was skipped
35
- * @typedef {MongoMochaSuiteExtension & Mocha.Suite} MongoMochaSuite
36
- * @typedef {MongoMochaTestExtension & Mocha.Test} MongoMochaTest
37
- */
38
-
39
- // Turn this on if you have to debug this custom reporter!
40
- let REPORT_TO_STDIO = false;
41
-
42
- function captureStream(stream) {
43
- var oldWrite = stream.write;
44
- var buf = '';
45
- stream.write = function (chunk) {
46
- buf += chunk.toString(); // chunk is a String or Buffer
47
- oldWrite.apply(stream, arguments);
48
- };
49
-
50
- return {
51
- unhook: function unhook() {
52
- stream.write = oldWrite;
53
- return buf;
54
- },
55
- captured: function () {
56
- return buf;
57
- }
58
- };
59
- }
60
-
61
- /**
62
- * @param {Mocha.Runner} runner
63
- * @this {any}
64
- */
65
- class MongoDBMochaReporter extends mocha.reporters.Spec {
66
- constructor(runner) {
67
- super(runner);
68
- /** @type {Map<string, {suite: MongoMochaSuite, stdout?: any, stderr?: any}>} */
69
- this.suites = new Map();
70
- this.xunitWritten = false;
71
- runner.on(EVENT_RUN_BEGIN, () => this.start());
72
- runner.on(EVENT_RUN_END, () => this.end());
73
- runner.on(EVENT_SUITE_BEGIN, suite => this.onSuite(suite));
74
- runner.on(EVENT_TEST_BEGIN, test => this.onTest(test));
75
- runner.on(EVENT_TEST_PASS, test => this.pass(test));
76
- runner.on(EVENT_TEST_FAIL, (test, error) => this.fail(test, error));
77
- runner.on(EVENT_TEST_PENDING, test => this.pending(test));
78
- runner.on(EVENT_SUITE_END, suite => this.suiteEnd(suite));
79
- runner.on(EVENT_TEST_END, test => this.testEnd(test));
80
-
81
- process.on('SIGINT', () => this.end(true));
82
- }
83
- start() {}
84
-
85
- end(ctrlC) {
86
- try {
87
- if (ctrlC) console.log('emergency exit!');
88
- const output = { testSuites: [] };
89
-
90
- for (const [id, [className, { suite }]] of [...this.suites.entries()].entries()) {
91
- let totalSuiteTime = 0;
92
- let testCases = [];
93
- let failureCount = 0;
94
-
95
- const tests = /** @type {MongoMochaTest[]}*/ (suite.tests);
96
- for (const test of tests) {
97
- let time = test.elapsedTime / 1000;
98
- time = Number.isNaN(time) ? 0 : time;
99
-
100
- totalSuiteTime += time;
101
- failureCount += test.state === 'failed' ? 1 : 0;
102
-
103
- /** @type {string | Date | number} */
104
- let startTime = test.startTime;
105
- startTime = startTime ? startTime.toISOString() : 0;
106
-
107
- /** @type {string | Date | number} */
108
- let endTime = test.endTime;
109
- endTime = endTime ? endTime.toISOString() : 0;
110
-
111
- let error = test.error;
112
- let failure = error
113
- ? {
114
- type: error.constructor.name,
115
- message: error.message,
116
- stack: error.stack
117
- }
118
- : undefined;
119
-
120
- let skipped = !!test.skipped;
121
-
122
- testCases.push({
123
- name: test.title,
124
- className,
125
- time,
126
- startTime,
127
- endTime,
128
- skipped,
129
- failure
130
- });
131
- }
132
-
133
- /** @type {string | Date | number} */
134
- let timestamp = suite.timestamp;
135
- timestamp = timestamp ? timestamp.toISOString().split('.')[0] : '';
136
-
137
- output.testSuites.push({
138
- package: suite.file.includes('integration') ? 'Integration' : 'Unit',
139
- id,
140
- name: className,
141
- timestamp,
142
- hostname: os.hostname(),
143
- tests: suite.tests.length,
144
- failures: failureCount,
145
- errors: '0',
146
- time: totalSuiteTime,
147
- testCases,
148
- stdout: suite.stdout,
149
- stderr: suite.stderr
150
- });
151
- }
152
-
153
- if (!this.xunitWritten) {
154
- fs.writeFileSync('xunit.xml', outputToXML(output), { encoding: 'utf8' });
155
- }
156
- this.xunitWritten = true;
157
- console.log(chalk.bold('wrote xunit.xml'));
158
- } catch (error) {
159
- console.error(chalk.red(`Failed to output xunit report! ${error}`));
160
- } finally {
161
- if (ctrlC) process.exit(1);
162
- }
163
- }
164
-
165
- /**
166
- * @param {MongoMochaSuite} suite
167
- */
168
- onSuite(suite) {
169
- if (suite.root) return;
170
- if (!this.suites.has(suite.fullTitle())) {
171
- suite.timestamp = new Date();
172
- this.suites.set(suite.fullTitle(), {
173
- suite,
174
- stdout: captureStream(process.stdout),
175
- stderr: captureStream(process.stderr)
176
- });
177
- } else {
178
- console.warn(`${chalk.yellow('WARNING:')} ${suite.fullTitle()} started twice`);
179
- }
180
- }
181
-
182
- /**
183
- * @param {MongoMochaSuite} suite
184
- */
185
- suiteEnd(suite) {
186
- if (suite.root) return;
187
- const currentSuite = this.suites.get(suite.fullTitle());
188
- if (!currentSuite) {
189
- console.error('Suite never started >:(');
190
- process.exit(1);
191
- }
192
- if (currentSuite.stdout || currentSuite.stderr) {
193
- suite.stdout = currentSuite.stdout.unhook();
194
- suite.stderr = currentSuite.stderr.unhook();
195
- delete currentSuite.stdout;
196
- delete currentSuite.stderr;
197
- }
198
- }
199
-
200
- /**
201
- * @param {MongoMochaTest} test
202
- */
203
- onTest(test) {
204
- test.startTime = new Date();
205
- }
206
-
207
- /**
208
- * @param {MongoMochaTest} test
209
- */
210
- testEnd(test) {
211
- test.endTime = new Date();
212
- test.elapsedTime = Number(test.endTime) - Number(test.startTime);
213
- }
214
-
215
- /**
216
- * @param {MongoMochaTest} test
217
- */
218
- pass(test) {
219
- if (REPORT_TO_STDIO) console.log(chalk.green(`✔ ${test.fullTitle()}`));
220
- }
221
-
222
- /**
223
- * @param {MongoMochaTest} test
224
- * @param {Error} error
225
- */
226
- fail(test, error) {
227
- if (REPORT_TO_STDIO) console.log(chalk.red(`⨯ ${test.fullTitle()} -- ${error.message}`));
228
- test.error = error;
229
- }
230
-
231
- /**
232
- * @param {MongoMochaTest & {skipReason?: string}} test
233
- */
234
- pending(test) {
235
- if (REPORT_TO_STDIO) console.log(chalk.cyan(`↬ ${test.fullTitle()}`));
236
- if (typeof test.skipReason === 'string') {
237
- console.log(chalk.cyan(`${' '.repeat(test.titlePath().length + 1)}↬ ${test.skipReason}`));
238
- }
239
- test.skipped = true;
240
- }
241
- }
242
-
243
- module.exports = MongoDBMochaReporter;
244
-
245
- function replaceIllegalXMLCharacters(string) {
246
- // prettier-ignore
247
- return String(string)
248
- .split('"').join('"')
249
- .split('<').join('﹤')
250
- .split('>').join('﹥')
251
- .split('&').join('﹠');
252
- }
253
-
254
- const ANSI_ESCAPE_REGEX =
255
- // eslint-disable-next-line no-control-regex
256
- /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
257
- function outputToXML(output) {
258
- function cdata(str) {
259
- return `<![CDATA[${String(str)
260
- .split(ANSI_ESCAPE_REGEX)
261
- .join('')
262
- .split(']]>')
263
- .join('\\]\\]\\>')}]]>`;
264
- }
265
-
266
- function makeTag(name, attributes, selfClose, content) {
267
- const attributesString = Object.entries(attributes || {})
268
- .map(([k, v]) => `${k}="${replaceIllegalXMLCharacters(v)}"`)
269
- .join(' ');
270
- let tag = `<${name}${attributesString ? ' ' + attributesString : ''}`;
271
- if (selfClose) return tag + '/>\n';
272
- else tag += '>';
273
- if (content) return tag + content + `</${name}>`;
274
- return tag;
275
- }
276
-
277
- let s =
278
- '<?xml version="1.0" encoding="UTF-8"?>\n<?xml-model href="./test/tools/reporter/xunit.xsd" ?>\n<testsuites>\n';
279
-
280
- for (const suite of output.testSuites) {
281
- s += makeTag('testsuite', {
282
- package: suite.package,
283
- id: suite.id,
284
- name: suite.name,
285
- timestamp: suite.timestamp,
286
- hostname: suite.hostname,
287
- tests: suite.tests,
288
- failures: suite.failures,
289
- errors: suite.errors,
290
- time: suite.time
291
- });
292
- s += '\n\t' + makeTag('properties') + '</properties>\n'; // can put metadata here?
293
- for (const test of suite.testCases) {
294
- s +=
295
- '\t' +
296
- makeTag(
297
- 'testcase',
298
- {
299
- name: test.name,
300
- classname: test.className,
301
- time: test.time,
302
- start: test.startTime,
303
- end: test.endTime
304
- },
305
- !test.failure && !test.skipped
306
- );
307
- if (test.failure) {
308
- s +=
309
- '\n\t\t' +
310
- makeTag('failure', { type: test.failure.type }, false, cdata(test.failure.stack)) +
311
- '\n';
312
- s += `\t</testcase>\n`;
313
- }
314
- if (test.skipped) {
315
- s += makeTag('skipped', {}, true);
316
- s += `\t</testcase>\n`;
317
- }
318
- }
319
- s += '\t' + makeTag('system-out', {}, false, cdata(suite.stdout)) + '\n';
320
- s += '\t' + makeTag('system-err', {}, false, cdata(suite.stderr)) + '\n';
321
- s += `</testsuite>\n`;
322
- }
323
-
324
- return s + '</testsuites>\n';
325
- }