mongo 2.11.6 → 2.12.0.rc0

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 (327) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +2 -2
  3. data.tar.gz.sig +0 -0
  4. data/CONTRIBUTING.md +1 -1
  5. data/lib/mongo.rb +3 -0
  6. data/lib/mongo/address.rb +13 -2
  7. data/lib/mongo/auth.rb +1 -0
  8. data/lib/mongo/auth/credential_cache.rb +51 -0
  9. data/lib/mongo/auth/scram/conversation.rb +20 -16
  10. data/lib/mongo/auth/user.rb +0 -8
  11. data/lib/mongo/auth/user/view.rb +4 -4
  12. data/lib/mongo/background_thread.rb +1 -1
  13. data/lib/mongo/bulk_write.rb +5 -5
  14. data/lib/mongo/client.rb +126 -11
  15. data/lib/mongo/client_encryption.rb +103 -0
  16. data/lib/mongo/cluster.rb +2 -2
  17. data/lib/mongo/cluster/reapers/cursor_reaper.rb +18 -6
  18. data/lib/mongo/cluster/sdam_flow.rb +54 -58
  19. data/lib/mongo/cluster/srv_monitor.rb +1 -1
  20. data/lib/mongo/collection.rb +3 -3
  21. data/lib/mongo/collection/view.rb +1 -1
  22. data/lib/mongo/collection/view/aggregation.rb +1 -1
  23. data/lib/mongo/collection/view/change_stream.rb +12 -3
  24. data/lib/mongo/collection/view/iterable.rb +14 -5
  25. data/lib/mongo/collection/view/map_reduce.rb +2 -2
  26. data/lib/mongo/collection/view/readable.rb +7 -9
  27. data/lib/mongo/collection/view/writable.rb +7 -7
  28. data/lib/mongo/crypt.rb +33 -0
  29. data/lib/mongo/crypt/auto_decryption_context.rb +42 -0
  30. data/lib/mongo/crypt/auto_encrypter.rb +169 -0
  31. data/lib/mongo/crypt/auto_encryption_context.rb +44 -0
  32. data/lib/mongo/crypt/binary.rb +155 -0
  33. data/lib/mongo/crypt/binding.rb +1162 -0
  34. data/lib/mongo/crypt/context.rb +135 -0
  35. data/lib/mongo/crypt/data_key_context.rb +162 -0
  36. data/lib/mongo/crypt/encryption_io.rb +283 -0
  37. data/lib/mongo/crypt/explicit_decryption_context.rb +40 -0
  38. data/lib/mongo/crypt/explicit_encrypter.rb +117 -0
  39. data/lib/mongo/crypt/explicit_encryption_context.rb +89 -0
  40. data/lib/mongo/crypt/handle.rb +293 -0
  41. data/lib/mongo/crypt/hooks.rb +90 -0
  42. data/lib/mongo/crypt/kms_context.rb +67 -0
  43. data/lib/mongo/crypt/status.rb +131 -0
  44. data/lib/mongo/cursor.rb +64 -32
  45. data/lib/mongo/database.rb +13 -6
  46. data/lib/mongo/database/view.rb +13 -4
  47. data/lib/mongo/dbref.rb +9 -2
  48. data/lib/mongo/error.rb +5 -1
  49. data/lib/mongo/error/crypt_error.rb +31 -0
  50. data/lib/mongo/error/{failed_stringprep_validation.rb → failed_string_prep_validation.rb} +0 -0
  51. data/lib/mongo/error/invalid_cursor_operation.rb +27 -0
  52. data/lib/mongo/error/kms_error.rb +22 -0
  53. data/lib/mongo/error/max_bson_size.rb +14 -3
  54. data/lib/mongo/error/mongocryptd_spawn_error.rb +22 -0
  55. data/lib/mongo/error/no_server_available.rb +8 -3
  56. data/lib/mongo/error/operation_failure.rb +1 -0
  57. data/lib/mongo/grid/file.rb +0 -5
  58. data/lib/mongo/grid/file/chunk.rb +0 -2
  59. data/lib/mongo/grid/file/info.rb +2 -1
  60. data/lib/mongo/grid/fs_bucket.rb +13 -15
  61. data/lib/mongo/grid/stream/write.rb +3 -9
  62. data/lib/mongo/index/view.rb +3 -3
  63. data/lib/mongo/monitoring/event/command_started.rb +6 -1
  64. data/lib/mongo/operation/collections_info.rb +6 -3
  65. data/lib/mongo/operation/delete/op_msg.rb +1 -1
  66. data/lib/mongo/operation/find/op_msg.rb +4 -1
  67. data/lib/mongo/operation/get_more/op_msg.rb +4 -1
  68. data/lib/mongo/operation/insert/command.rb +2 -2
  69. data/lib/mongo/operation/insert/legacy.rb +2 -2
  70. data/lib/mongo/operation/insert/op_msg.rb +3 -3
  71. data/lib/mongo/operation/result.rb +36 -27
  72. data/lib/mongo/operation/shared/executable.rb +10 -8
  73. data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
  74. data/lib/mongo/operation/shared/op_msg_or_command.rb +2 -2
  75. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +2 -2
  76. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +2 -2
  77. data/lib/mongo/operation/shared/write.rb +17 -10
  78. data/lib/mongo/operation/update/op_msg.rb +1 -1
  79. data/lib/mongo/protocol/compressed.rb +6 -5
  80. data/lib/mongo/protocol/insert.rb +3 -1
  81. data/lib/mongo/protocol/message.rb +72 -8
  82. data/lib/mongo/protocol/msg.rb +191 -37
  83. data/lib/mongo/protocol/query.rb +7 -9
  84. data/lib/mongo/protocol/serializers.rb +6 -2
  85. data/lib/mongo/server.rb +10 -4
  86. data/lib/mongo/server/connection.rb +20 -9
  87. data/lib/mongo/server/connection_base.rb +81 -12
  88. data/lib/mongo/server/connection_common.rb +61 -0
  89. data/lib/mongo/server/connection_pool.rb +37 -1
  90. data/lib/mongo/server/description.rb +9 -11
  91. data/lib/mongo/server/monitor.rb +2 -0
  92. data/lib/mongo/server/monitor/connection.rb +3 -18
  93. data/lib/mongo/server/pending_connection.rb +2 -1
  94. data/lib/mongo/session.rb +2 -2
  95. data/lib/mongo/session/session_pool.rb +8 -3
  96. data/lib/mongo/socket.rb +29 -16
  97. data/lib/mongo/socket/ssl.rb +23 -8
  98. data/lib/mongo/socket/tcp.rb +12 -3
  99. data/lib/mongo/timeout.rb +49 -0
  100. data/lib/mongo/uri.rb +30 -1
  101. data/lib/mongo/version.rb +1 -1
  102. data/mongo.gemspec +1 -1
  103. data/spec/README.md +134 -7
  104. data/spec/integration/auth_spec.rb +53 -0
  105. data/spec/integration/{client_options_spec.rb → client_authentication_options_spec.rb} +10 -10
  106. data/spec/integration/client_construction_spec.rb +76 -1
  107. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +351 -0
  108. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +301 -0
  109. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +71 -0
  110. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +76 -0
  111. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +216 -0
  112. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +600 -0
  113. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +183 -0
  114. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +74 -0
  115. data/spec/integration/client_side_encryption/client_close_spec.rb +59 -0
  116. data/spec/integration/client_side_encryption/corpus_spec.rb +228 -0
  117. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +132 -0
  118. data/spec/integration/client_side_encryption/data_key_spec.rb +163 -0
  119. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +114 -0
  120. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +137 -0
  121. data/spec/integration/client_side_encryption/views_spec.rb +42 -0
  122. data/spec/integration/client_update_spec.rb +120 -0
  123. data/spec/integration/command_monitoring_spec.rb +3 -1
  124. data/spec/integration/command_spec.rb +44 -10
  125. data/spec/integration/connection_spec.rb +57 -0
  126. data/spec/integration/reconnect_spec.rb +7 -6
  127. data/spec/integration/size_limit_spec.rb +94 -0
  128. data/spec/integration/srv_monitoring_spec.rb +14 -6
  129. data/spec/lite_spec_helper.rb +31 -22
  130. data/spec/mongo/auth/cr_spec.rb +8 -0
  131. data/spec/mongo/auth/ldap_spec.rb +5 -1
  132. data/spec/mongo/auth/scram/conversation_spec.rb +5 -6
  133. data/spec/mongo/auth/scram/negotiation_spec.rb +74 -75
  134. data/spec/mongo/auth/scram_spec.rb +45 -35
  135. data/spec/mongo/auth/x509_spec.rb +5 -1
  136. data/spec/mongo/client_construction_spec.rb +206 -3
  137. data/spec/mongo/client_encryption_spec.rb +408 -0
  138. data/spec/mongo/cluster/cursor_reaper_spec.rb +12 -8
  139. data/spec/mongo/cluster/socket_reaper_spec.rb +14 -3
  140. data/spec/mongo/collection/view/aggregation_spec.rb +0 -2
  141. data/spec/mongo/collection/view/change_stream_spec.rb +7 -7
  142. data/spec/mongo/collection/view/map_reduce_spec.rb +3 -3
  143. data/spec/mongo/collection/view_spec.rb +1 -1
  144. data/spec/mongo/collection_spec.rb +4 -33
  145. data/spec/mongo/crypt/auto_decryption_context_spec.rb +90 -0
  146. data/spec/mongo/crypt/auto_encrypter_spec.rb +182 -0
  147. data/spec/mongo/crypt/auto_encryption_context_spec.rb +107 -0
  148. data/spec/mongo/crypt/binary_spec.rb +115 -0
  149. data/spec/mongo/crypt/binding/binary_spec.rb +56 -0
  150. data/spec/mongo/crypt/binding/context_spec.rb +257 -0
  151. data/spec/mongo/crypt/binding/helpers_spec.rb +46 -0
  152. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +144 -0
  153. data/spec/mongo/crypt/binding/status_spec.rb +99 -0
  154. data/spec/mongo/crypt/binding/version_spec.rb +22 -0
  155. data/spec/mongo/crypt/binding_unloaded_spec.rb +20 -0
  156. data/spec/mongo/crypt/data_key_context_spec.rb +213 -0
  157. data/spec/mongo/crypt/encryption_io_spec.rb +136 -0
  158. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +72 -0
  159. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +170 -0
  160. data/spec/mongo/crypt/handle_spec.rb +198 -0
  161. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +108 -0
  162. data/spec/mongo/crypt/status_spec.rb +152 -0
  163. data/spec/mongo/cursor_spec.rb +24 -4
  164. data/spec/mongo/database_spec.rb +20 -0
  165. data/spec/mongo/error/crypt_error_spec.rb +26 -0
  166. data/spec/mongo/error/max_bson_size_spec.rb +35 -0
  167. data/spec/mongo/error/no_server_available_spec.rb +11 -1
  168. data/spec/mongo/error/operation_failure_spec.rb +6 -6
  169. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  170. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  171. data/spec/mongo/operation/command_spec.rb +3 -3
  172. data/spec/mongo/operation/create_index_spec.rb +3 -3
  173. data/spec/mongo/operation/create_user_spec.rb +3 -3
  174. data/spec/mongo/operation/delete/bulk_spec.rb +6 -6
  175. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -6
  176. data/spec/mongo/operation/delete_spec.rb +7 -7
  177. data/spec/mongo/operation/drop_index_spec.rb +2 -2
  178. data/spec/mongo/operation/find/legacy_spec.rb +1 -1
  179. data/spec/mongo/operation/get_more_spec.rb +1 -1
  180. data/spec/mongo/operation/indexes_spec.rb +1 -1
  181. data/spec/mongo/operation/insert/bulk_spec.rb +7 -7
  182. data/spec/mongo/operation/insert/op_msg_spec.rb +3 -6
  183. data/spec/mongo/operation/insert_spec.rb +12 -12
  184. data/spec/mongo/operation/map_reduce_spec.rb +2 -2
  185. data/spec/mongo/operation/remove_user_spec.rb +3 -3
  186. data/spec/mongo/operation/update/bulk_spec.rb +6 -6
  187. data/spec/mongo/operation/update/op_msg_spec.rb +3 -6
  188. data/spec/mongo/operation/update_spec.rb +7 -7
  189. data/spec/mongo/operation/update_user_spec.rb +1 -1
  190. data/spec/mongo/protocol/compressed_spec.rb +2 -3
  191. data/spec/mongo/protocol/delete_spec.rb +9 -8
  192. data/spec/mongo/protocol/get_more_spec.rb +9 -8
  193. data/spec/mongo/protocol/insert_spec.rb +9 -8
  194. data/spec/mongo/protocol/kill_cursors_spec.rb +6 -5
  195. data/spec/mongo/protocol/msg_spec.rb +57 -53
  196. data/spec/mongo/protocol/query_spec.rb +12 -12
  197. data/spec/mongo/protocol/registry_spec.rb +1 -1
  198. data/spec/mongo/protocol/reply_spec.rb +1 -1
  199. data/spec/mongo/protocol/update_spec.rb +10 -9
  200. data/spec/mongo/server/connection_pool_spec.rb +1 -1
  201. data/spec/mongo/server/connection_spec.rb +28 -7
  202. data/spec/mongo/socket_spec.rb +1 -1
  203. data/spec/mongo/timeout_spec.rb +85 -0
  204. data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
  205. data/spec/mongo/uri_spec.rb +52 -5
  206. data/spec/mongo/write_concern_spec.rb +13 -1
  207. data/spec/{support → runners}/auth.rb +14 -1
  208. data/spec/{support → runners}/change_streams.rb +1 -1
  209. data/spec/{support → runners}/change_streams/operation.rb +0 -0
  210. data/spec/{support → runners}/cmap.rb +1 -1
  211. data/spec/{support → runners}/cmap/verifier.rb +0 -0
  212. data/spec/{support → runners}/command_monitoring.rb +0 -0
  213. data/spec/runners/connection_string.rb +358 -4
  214. data/spec/{support → runners}/crud.rb +9 -9
  215. data/spec/{support → runners}/crud/context.rb +0 -0
  216. data/spec/{support → runners}/crud/operation.rb +7 -3
  217. data/spec/{support → runners}/crud/outcome.rb +0 -0
  218. data/spec/{support → runners}/crud/requirement.rb +1 -1
  219. data/spec/{support → runners}/crud/spec.rb +12 -1
  220. data/spec/{support → runners}/crud/test.rb +0 -0
  221. data/spec/{support → runners}/crud/test_base.rb +0 -0
  222. data/spec/{support → runners}/crud/verifier.rb +10 -12
  223. data/spec/{support → runners}/gridfs.rb +0 -0
  224. data/spec/{support → runners}/sdam_monitoring.rb +0 -0
  225. data/spec/{support → runners}/server_discovery_and_monitoring.rb +0 -0
  226. data/spec/{support → runners}/server_selection.rb +0 -0
  227. data/spec/{support → runners}/server_selection_rtt.rb +0 -0
  228. data/spec/{support → runners}/transactions.rb +4 -4
  229. data/spec/{support → runners}/transactions/context.rb +0 -0
  230. data/spec/{support → runners}/transactions/operation.rb +0 -0
  231. data/spec/{support → runners}/transactions/spec.rb +0 -0
  232. data/spec/{support → runners}/transactions/test.rb +37 -5
  233. data/spec/spec_helper.rb +0 -5
  234. data/spec/spec_tests/auth_spec.rb +3 -3
  235. data/spec/spec_tests/client_side_encryption_spec.rb +13 -0
  236. data/spec/spec_tests/connection_string_spec.rb +1 -1
  237. data/spec/spec_tests/data/auth/connection-string.yml +13 -0
  238. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +134 -0
  239. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +526 -0
  240. data/spec/spec_tests/data/client_side_encryption/badSchema.yml +73 -0
  241. data/spec/spec_tests/data/client_side_encryption/basic.yml +116 -0
  242. data/spec/spec_tests/data/client_side_encryption/bulk.yml +85 -0
  243. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +100 -0
  244. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +42 -0
  245. data/spec/spec_tests/data/client_side_encryption/count.yml +61 -0
  246. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +59 -0
  247. data/spec/spec_tests/data/client_side_encryption/delete.yml +105 -0
  248. data/spec/spec_tests/data/client_side_encryption/distinct.yml +73 -0
  249. data/spec/spec_tests/data/client_side_encryption/explain.yml +64 -0
  250. data/spec/spec_tests/data/client_side_encryption/find.yml +119 -0
  251. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +57 -0
  252. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +57 -0
  253. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +57 -0
  254. data/spec/spec_tests/data/client_side_encryption/getMore.yml +68 -0
  255. data/spec/spec_tests/data/client_side_encryption/insert.yml +102 -0
  256. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +71 -0
  257. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +54 -0
  258. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +72 -0
  259. data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +69 -0
  260. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +20 -0
  261. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +49 -0
  262. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +61 -0
  263. data/spec/spec_tests/data/client_side_encryption/types.yml +527 -0
  264. data/spec/spec_tests/data/client_side_encryption/unsupportedCommand.yml +25 -0
  265. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +77 -0
  266. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +168 -0
  267. data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +1 -4
  268. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +21 -0
  269. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +2 -4
  270. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +1 -1
  271. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +73 -0
  272. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +1 -2
  273. data/spec/spec_tests/data/sdam/rs/repeated.yml +101 -0
  274. data/spec/spec_tests/data/sdam/rs/{primary_address_change.yml → ruby_primary_address_change.yml} +2 -0
  275. data/spec/spec_tests/data/sdam/rs/{secondary_wrong_set_name_with_primary_second.yml → ruby_secondary_wrong_set_name_with_primary_second.yml} +0 -0
  276. data/spec/spec_tests/data/sdam/sharded/ruby_discovered_single_mongos.yml +27 -0
  277. data/spec/spec_tests/data/sdam/sharded/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
  278. data/spec/spec_tests/data/sdam/sharded/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
  279. data/spec/spec_tests/data/sdam/single/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
  280. data/spec/spec_tests/data/sdam/single/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
  281. data/spec/spec_tests/data/sdam_monitoring/{replica_set_with_primary_change.yml → replica_set_primary_address_change.yml} +27 -5
  282. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +26 -74
  283. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +20 -16
  284. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +73 -0
  285. data/spec/spec_tests/data/transactions/pin-mongos.yml +2 -3
  286. data/spec/spec_tests/data/uri_options/auth-options.yml +10 -0
  287. data/spec/spec_tests/data/uri_options/tls-options.yml +75 -4
  288. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  289. data/spec/spec_tests/uri_options_spec.rb +6 -8
  290. data/spec/stress/connection_pool_timing_spec.rb +6 -3
  291. data/spec/support/certificates/README.md +4 -0
  292. data/spec/support/certificates/server-second-level-bundle.pem +77 -77
  293. data/spec/support/certificates/server-second-level.crt +52 -52
  294. data/spec/support/certificates/server-second-level.key +25 -25
  295. data/spec/support/certificates/server-second-level.pem +77 -77
  296. data/spec/support/client_registry.rb +19 -3
  297. data/spec/support/cluster_config.rb +9 -1
  298. data/spec/support/common_shortcuts.rb +12 -0
  299. data/spec/support/constraints.rb +16 -0
  300. data/spec/support/crypt.rb +140 -0
  301. data/spec/support/crypt/corpus/corpus-key-aws.json +33 -0
  302. data/spec/support/crypt/corpus/corpus-key-local.json +31 -0
  303. data/spec/support/crypt/corpus/corpus-schema.json +2057 -0
  304. data/spec/support/crypt/corpus/corpus.json +3657 -0
  305. data/spec/support/crypt/corpus/corpus_encrypted.json +4152 -0
  306. data/spec/support/crypt/data_keys/key_document_aws.json +34 -0
  307. data/spec/support/crypt/data_keys/key_document_local.json +31 -0
  308. data/spec/support/crypt/external/external-key.json +31 -0
  309. data/spec/support/crypt/external/external-schema.json +19 -0
  310. data/spec/support/crypt/limits/limits-doc.json +102 -0
  311. data/spec/support/crypt/limits/limits-key.json +31 -0
  312. data/spec/support/crypt/limits/limits-schema.json +1405 -0
  313. data/spec/support/crypt/schema_maps/schema_map_aws.json +17 -0
  314. data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  315. data/spec/support/crypt/schema_maps/schema_map_local.json +18 -0
  316. data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +12 -0
  317. data/spec/support/lite_constraints.rb +17 -1
  318. data/spec/support/matchers.rb +19 -0
  319. data/spec/support/shared/protocol.rb +2 -0
  320. data/spec/support/spec_config.rb +43 -13
  321. data/spec/support/utils.rb +132 -10
  322. metadata +277 -81
  323. metadata.gz.sig +0 -0
  324. data/spec/integration/grid_fs_bucket_spec.rb +0 -48
  325. data/spec/integration/zlib_compression_spec.rb +0 -25
  326. data/spec/spec_tests/data/sdam/sharded/single_mongos.yml +0 -33
  327. data/spec/support/connection_string.rb +0 -354
metadata.gz.sig CHANGED
Binary file
@@ -1,48 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'GridFS bucket integration' do
4
- let(:fs) do
5
- authorized_client.database.fs
6
- end
7
-
8
- describe 'UTF-8 string write' do
9
- let(:data) { "hello\u2210" }
10
-
11
- before do
12
- data.length.should_not == data.bytesize
13
- end
14
-
15
- shared_examples 'round-trips' do
16
- it 'round-trips' do
17
- stream = fs.open_upload_stream('test') do |stream|
18
- stream.write(data_to_write)
19
- end
20
-
21
- actual = nil
22
- fs.open_download_stream(stream.file_id) do |stream|
23
- actual = stream.read
24
- end
25
-
26
- actual.encoding.name.should == 'ASCII-8BIT'
27
- actual.should == data.dup.force_encoding('binary')
28
- end
29
- end
30
-
31
- context 'in binary encoding' do
32
- let(:data_to_write) do
33
- data.force_encoding('binary').freeze
34
- end
35
-
36
- it_behaves_like 'round-trips'
37
- end
38
-
39
- context 'in UTF-8 encoding' do
40
- let(:data_to_write) do
41
- data.encoding.name.should == 'UTF-8'
42
- data.freeze
43
- end
44
-
45
- it_behaves_like 'round-trips'
46
- end
47
- end
48
- end
@@ -1,25 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe 'Zlib compression' do
4
- require_compression
5
-
6
- before do
7
- authorized_client['test'].drop
8
- end
9
-
10
- context 'when client has zlib compressor option enabled' do
11
- it 'compresses the message to the server' do
12
- # Double check that the client has zlib compression enabled
13
- expect(authorized_client.options[:compressors]).to include('zlib')
14
-
15
- expect(Mongo::Protocol::Compressed).to receive(:new).twice.and_call_original
16
- expect(Zlib::Deflate).to receive(:deflate).twice.and_call_original
17
- expect(Zlib::Inflate).to receive(:inflate).twice.and_call_original
18
-
19
- authorized_client['test'].insert_one(_id: 1, text: 'hello world')
20
- document = authorized_client['test'].find(_id: 1).first
21
-
22
- expect(document['text']).to eq('hello world')
23
- end
24
- end
25
- end
@@ -1,33 +0,0 @@
1
- description: "Single mongos"
2
-
3
- uri: "mongodb://a"
4
-
5
- phases: [
6
-
7
- {
8
- responses: [
9
-
10
- ["a:27017", {
11
-
12
- ok: 1,
13
- ismaster: true,
14
- msg: "isdbgrid"
15
- }]
16
- ],
17
-
18
- outcome: {
19
-
20
- servers: {
21
-
22
- "a:27017": {
23
-
24
- type: "Mongos",
25
- setName:
26
- }
27
- },
28
-
29
- topologyType: "Sharded",
30
- setName:
31
- }
32
- }
33
- ]
@@ -1,354 +0,0 @@
1
- # Copyright (C) 2014-2019 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- RSpec::Matchers.define :have_hosts do |test, hosts|
16
-
17
- match do |cl|
18
-
19
- def find_server(client, host)
20
- client.cluster.servers_list.detect do |s|
21
- if host.port
22
- s.address.host == host.host && s.address.port == host.port
23
- else
24
- s.address.host == host.host
25
- end
26
- end
27
- end
28
-
29
- def match_host?(server, host)
30
- server.address.host == host.host
31
- end
32
-
33
- def match_port?(server, host)
34
- server.address.port == host.port || !host.port
35
- end
36
-
37
- def match_address_family?(server, host)
38
- address_family(server) == host.address_family
39
- end
40
-
41
- def address_family(server)
42
- server.address.socket(2)
43
- server.address.instance_variable_get(:@resolver).class
44
- end
45
-
46
- hosts.all? do |host|
47
- server = find_server(cl, host)
48
- server &&
49
- match_host?(server, host) &&
50
- match_port?(server, host) #&&
51
- #match_address_family?(server, host)
52
- end
53
- end
54
-
55
- failure_message do |client|
56
- "With URI: #{test.uri_string}\n" +
57
- "Expected client hosts: #{client.cluster.instance_variable_get(:@servers)} " +
58
- "to match #{hosts}"
59
- end
60
- end
61
-
62
- RSpec::Matchers.define :match_auth do |test|
63
-
64
- def match_database?(client, auth)
65
- client.options[:database] == auth.database || !auth.database
66
- end
67
-
68
- def match_password?(client, auth)
69
- client.options[:password] == auth.password ||
70
- client.options[:password].nil? && auth.password == ''
71
- end
72
-
73
- match do |client|
74
- auth = test.auth
75
- return true unless auth
76
- client.options[:user] == auth.username &&
77
- match_password?(client, auth) &&
78
- match_database?(client, auth)
79
- end
80
-
81
- failure_message do |client|
82
- "With URI: #{test.uri_string}\n" +
83
- "Expected that test auth: #{test.auth} would match client auth: #{client.options}"
84
- end
85
- end
86
-
87
- RSpec::Matchers.define :match_options do |test|
88
-
89
- match do |client|
90
- options = test.options
91
- return true unless options
92
- options.match?(client.options)
93
- end
94
-
95
- failure_message do |client|
96
- "With URI: #{test.uri_string}\n" +
97
- "Expected that test options: #{test.options.options} would match client options: #{client.options}"
98
- end
99
- end
100
-
101
- module Mongo
102
- module ConnectionString
103
-
104
- class Spec
105
-
106
- attr_reader :description
107
-
108
- # Instantiate the new spec.
109
- #
110
- # @param [ String ] test_path The path to the file.
111
- #
112
- # @since 2.0.0
113
- def initialize(test_path)
114
- @spec = YAML.load(File.read(test_path))
115
- @description = File.basename(test_path)
116
- end
117
-
118
- def tests
119
- @tests ||= @spec['tests'].collect do |spec|
120
- Test.new(spec)
121
- end
122
- end
123
- end
124
-
125
- class Test
126
- include RSpec::Core::Pending
127
-
128
- attr_reader :description
129
- attr_reader :uri_string
130
-
131
- def initialize(spec)
132
- @spec = spec
133
- @description = @spec['description']
134
- @uri_string = @spec['uri']
135
- end
136
-
137
- def valid?
138
- @spec['valid']
139
- end
140
-
141
- def warn?
142
- @spec['warning']
143
- end
144
-
145
- def hosts
146
- @hosts ||= (@spec['hosts'] || []).collect do |host|
147
- Host.new(host)
148
- end
149
- end
150
-
151
- def seeds
152
- if @spec['seeds']
153
- @seeds ||= (@spec['seeds'] || []).collect do |host|
154
- Host.new(host)
155
- end
156
- else
157
- nil
158
- end
159
- end
160
-
161
- def options
162
- @options ||= Options.new(@spec['options']) if @spec['options']
163
- end
164
-
165
- def client
166
- @client ||= ClientRegistry.instance.new_local_client(@spec['uri'], monitoring_io: false)
167
- rescue Mongo::Error::LintError => e
168
- if e.message =~ /arbitraryButStillValid/
169
- skip 'Test uses a read concern that fails linter'
170
- end
171
- end
172
-
173
- def uri
174
- @uri ||= Mongo::URI.get(@spec['uri'])
175
- end
176
-
177
- def auth
178
- @auth ||= Auth.new(@spec['auth']) if @spec['auth']
179
- end
180
-
181
- def raise_error?
182
- @spec['error']
183
- end
184
-
185
- def read_concern_expectation
186
- @spec['readConcern']
187
- end
188
-
189
- def write_concern_expectation
190
- @spec['writeConcern']
191
- end
192
- end
193
-
194
- class Host
195
-
196
- MAPPING = {
197
- 'ipv4' => Mongo::Address::IPv4,
198
- 'ipv6' => Mongo::Address::IPv6,
199
- 'unix' => Mongo::Address::Unix
200
- }
201
-
202
- attr_reader :host
203
- attr_reader :port
204
-
205
- def initialize(spec)
206
- if spec.is_a?(Hash)
207
- # Connection string spec tests
208
- @spec = spec
209
- @host = @spec['host']
210
- @port = @spec['port']
211
- else
212
- # DNS seed list spec tests
213
- address = Mongo::Address.new(spec)
214
- @host = address.host
215
- @port = address.port
216
- end
217
- end
218
-
219
- def address_family
220
- MAPPING[@spec['type']]
221
- end
222
- end
223
-
224
- class Auth
225
-
226
- attr_reader :username
227
- attr_reader :password
228
- attr_reader :database
229
-
230
- def initialize(spec)
231
- @spec = spec
232
- @username = @spec['username']
233
- @password = @spec['password']
234
- @database = @spec['db']
235
- end
236
-
237
- def to_s
238
- "username: #{username}, password: #{password}, database: #{database}"
239
- end
240
- end
241
-
242
- class Options
243
-
244
- MAPPINGS = {
245
- # Replica Set Options
246
- 'replicaset' => :replica_set,
247
-
248
- # Timeout Options
249
- 'connecttimeoutms' => :connect_timeout,
250
- 'sockettimeoutms' => :socket_timeout,
251
- 'serverselectiontimeoutms' => :server_selection_timeout,
252
- 'localthresholdms' => :local_threshold,
253
- 'heartbeatfrequencyms' => :heartbeat_frequency,
254
- 'maxidletimems' => :max_idle_time,
255
-
256
- # Write Options
257
- 'journal' => [:write_concern, 'j'],
258
- 'w' => [:write_concern, 'w'],
259
- 'wtimeoutms' => [:write_concern, 'wtimeout'],
260
-
261
- # Read Options
262
- 'readpreference' => ['read', 'mode'],
263
- 'readpreferencetags' => ['read', 'tag_sets'],
264
- 'maxstalenessseconds' => ['read', 'max_staleness'],
265
-
266
- # Pool Options
267
- 'minpoolsize' => :min_pool_size,
268
- 'maxpoolsize' => :max_pool_size,
269
-
270
- # Security Options
271
- 'tls' => :ssl,
272
- 'tlsallowinvalidcertificates' => :ssl_verify_certificate,
273
- 'tlsallowinvalidhostnames' => :ssl_verify_hostname,
274
- 'tlscafile' => :ssl_ca_cert,
275
- 'tlscertificatekeyfile' => :ssl_cert,
276
- 'tlscertificatekeyfilepassword' => :ssl_key_pass_phrase,
277
- 'tlsinsecure' => :ssl_verify,
278
-
279
- # Auth Options
280
- 'authsource' => :auth_source,
281
- 'authmechanism' => :auth_mech,
282
- 'authmechanismproperties' => :auth_mech_properties,
283
-
284
- # Client Options
285
- 'appname' => :app_name,
286
- 'readconcernlevel' => [:read_concern, 'level'],
287
- 'retrywrites' => :retry_writes,
288
- 'zlibcompressionlevel' => :zlib_compression_level,
289
- }
290
-
291
- attr_reader :options
292
-
293
- def initialize(options)
294
- @options = options
295
- end
296
-
297
- def match?(opts)
298
- @options.all? do |k, v|
299
- k = k.downcase
300
-
301
- expected =
302
- case k
303
- when 'authmechanism'
304
- Mongo::URI::AUTH_MECH_MAP[v].downcase.to_s
305
- when 'authmechanismproperties'
306
- v.reduce({}) do |new_v, prop|
307
- prop_key = prop.first.downcase
308
- prop_val = prop.last == 'true' ? true : prop.last
309
- new_v[prop_key] = prop_val
310
-
311
- new_v
312
- end
313
- when 'compressors'
314
- v.dup.tap do |compressors|
315
- # The Ruby driver doesn't support snappy
316
- compressors.delete('snappy')
317
- end
318
- when 'readpreference'
319
- Mongo::URI::READ_MODE_MAP[v.downcase].to_s
320
- when 'tlsallowinvalidcertificates', 'tlsallowinvalidhostnames', 'tlsinsecure'
321
- !v
322
- else
323
- if k.end_with?('ms') && k != 'wtimeoutms'
324
- v / 1000.0
325
- elsif v.is_a?(String)
326
- v.downcase
327
- else
328
- v
329
- end
330
- end
331
-
332
- actual =
333
- case MAPPINGS[k]
334
- when nil
335
- opts[k]
336
- when Array
337
- opts[MAPPINGS[k].first][MAPPINGS[k].last]
338
- else
339
- opts[MAPPINGS[k]]
340
- end
341
-
342
- if actual.is_a?(Symbol)
343
- actual = actual.to_s
344
- end
345
- if actual.is_a?(String)
346
- actual = actual.downcase
347
- end
348
-
349
- expected == actual
350
- end
351
- end
352
- end
353
- end
354
- end