mongo 2.13.0.beta1 → 2.14.0

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 (339) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +1 -5
  4. data/Rakefile +50 -9
  5. data/lib/mongo.rb +13 -2
  6. data/lib/mongo/address.rb +1 -1
  7. data/lib/mongo/address/ipv4.rb +1 -1
  8. data/lib/mongo/address/ipv6.rb +1 -1
  9. data/lib/mongo/auth/aws/request.rb +31 -5
  10. data/lib/mongo/bulk_write.rb +18 -0
  11. data/lib/mongo/caching_cursor.rb +74 -0
  12. data/lib/mongo/client.rb +238 -31
  13. data/lib/mongo/cluster.rb +56 -20
  14. data/lib/mongo/cluster/sdam_flow.rb +13 -10
  15. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +3 -2
  16. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  17. data/lib/mongo/cluster/topology/single.rb +2 -2
  18. data/lib/mongo/collection.rb +66 -24
  19. data/lib/mongo/collection/view.rb +24 -20
  20. data/lib/mongo/collection/view/aggregation.rb +25 -4
  21. data/lib/mongo/collection/view/builder/find_command.rb +38 -18
  22. data/lib/mongo/collection/view/explainable.rb +27 -8
  23. data/lib/mongo/collection/view/iterable.rb +72 -12
  24. data/lib/mongo/collection/view/readable.rb +19 -3
  25. data/lib/mongo/collection/view/writable.rb +55 -5
  26. data/lib/mongo/crypt/encryption_io.rb +6 -6
  27. data/lib/mongo/cursor.rb +16 -3
  28. data/lib/mongo/database.rb +37 -4
  29. data/lib/mongo/database/view.rb +18 -3
  30. data/lib/mongo/distinguishing_semaphore.rb +55 -0
  31. data/lib/mongo/error.rb +5 -0
  32. data/lib/mongo/error/invalid_read_concern.rb +28 -0
  33. data/lib/mongo/error/invalid_server_auth_host.rb +22 -0
  34. data/lib/mongo/error/invalid_session.rb +2 -1
  35. data/lib/mongo/error/operation_failure.rb +11 -5
  36. data/lib/mongo/error/server_certificate_revoked.rb +22 -0
  37. data/lib/mongo/error/sessions_not_supported.rb +35 -0
  38. data/lib/mongo/error/unsupported_option.rb +14 -12
  39. data/lib/mongo/event/base.rb +6 -0
  40. data/lib/mongo/grid/file.rb +5 -0
  41. data/lib/mongo/grid/file/chunk.rb +2 -0
  42. data/lib/mongo/grid/fs_bucket.rb +15 -13
  43. data/lib/mongo/grid/stream/write.rb +9 -3
  44. data/lib/mongo/index/view.rb +3 -0
  45. data/lib/mongo/lint.rb +2 -1
  46. data/lib/mongo/logger.rb +3 -3
  47. data/lib/mongo/monitoring.rb +38 -0
  48. data/lib/mongo/monitoring/command_log_subscriber.rb +10 -2
  49. data/lib/mongo/monitoring/event/command_failed.rb +11 -0
  50. data/lib/mongo/monitoring/event/command_started.rb +37 -2
  51. data/lib/mongo/monitoring/event/command_succeeded.rb +11 -0
  52. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  53. data/lib/mongo/monitoring/event/server_description_changed.rb +27 -4
  54. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +9 -2
  55. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +9 -2
  56. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +9 -2
  57. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  58. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  59. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  60. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  61. data/lib/mongo/monitoring/publishable.rb +6 -3
  62. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +9 -1
  63. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  64. data/lib/mongo/operation.rb +2 -0
  65. data/lib/mongo/operation/aggregate/result.rb +9 -8
  66. data/lib/mongo/operation/collections_info/command.rb +5 -0
  67. data/lib/mongo/operation/collections_info/result.rb +18 -1
  68. data/lib/mongo/operation/delete/bulk_result.rb +2 -0
  69. data/lib/mongo/operation/delete/result.rb +3 -0
  70. data/lib/mongo/operation/explain/command.rb +4 -0
  71. data/lib/mongo/operation/explain/legacy.rb +4 -0
  72. data/lib/mongo/operation/explain/op_msg.rb +6 -0
  73. data/lib/mongo/operation/explain/result.rb +3 -0
  74. data/lib/mongo/operation/find/legacy/result.rb +2 -0
  75. data/lib/mongo/operation/find/result.rb +13 -0
  76. data/lib/mongo/operation/get_more/result.rb +3 -0
  77. data/lib/mongo/operation/indexes/result.rb +5 -0
  78. data/lib/mongo/operation/insert/bulk_result.rb +5 -0
  79. data/lib/mongo/operation/insert/result.rb +5 -0
  80. data/lib/mongo/operation/list_collections/result.rb +5 -0
  81. data/lib/mongo/operation/map_reduce/result.rb +10 -0
  82. data/lib/mongo/operation/parallel_scan/result.rb +4 -0
  83. data/lib/mongo/operation/result.rb +35 -6
  84. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
  85. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
  86. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +2 -0
  87. data/lib/mongo/operation/shared/executable.rb +1 -0
  88. data/lib/mongo/operation/shared/idable.rb +2 -1
  89. data/lib/mongo/operation/shared/limited.rb +1 -0
  90. data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
  91. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
  92. data/lib/mongo/operation/shared/sessions_supported.rb +1 -0
  93. data/lib/mongo/operation/shared/specifiable.rb +1 -0
  94. data/lib/mongo/operation/shared/write.rb +1 -0
  95. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
  96. data/lib/mongo/operation/update/legacy/result.rb +7 -0
  97. data/lib/mongo/operation/update/result.rb +8 -0
  98. data/lib/mongo/operation/users_info/result.rb +3 -0
  99. data/lib/mongo/protocol/message.rb +47 -10
  100. data/lib/mongo/protocol/msg.rb +34 -1
  101. data/lib/mongo/protocol/query.rb +36 -0
  102. data/lib/mongo/protocol/serializers.rb +5 -2
  103. data/lib/mongo/query_cache.rb +242 -0
  104. data/lib/mongo/retryable.rb +8 -1
  105. data/lib/mongo/server.rb +15 -4
  106. data/lib/mongo/server/app_metadata.rb +27 -3
  107. data/lib/mongo/server/connection.rb +4 -4
  108. data/lib/mongo/server/connection_base.rb +38 -12
  109. data/lib/mongo/server/connection_common.rb +2 -2
  110. data/lib/mongo/server/connection_pool.rb +3 -0
  111. data/lib/mongo/server/description.rb +13 -1
  112. data/lib/mongo/server/monitor.rb +76 -44
  113. data/lib/mongo/server/monitor/connection.rb +57 -9
  114. data/lib/mongo/server/pending_connection.rb +14 -4
  115. data/lib/mongo/server/push_monitor.rb +173 -0
  116. data/{spec/runners/transactions/context.rb → lib/mongo/server/push_monitor/connection.rb} +9 -14
  117. data/lib/mongo/server_selector.rb +0 -1
  118. data/lib/mongo/server_selector/base.rb +583 -1
  119. data/lib/mongo/server_selector/nearest.rb +1 -6
  120. data/lib/mongo/server_selector/primary.rb +1 -6
  121. data/lib/mongo/server_selector/primary_preferred.rb +7 -10
  122. data/lib/mongo/server_selector/secondary.rb +1 -6
  123. data/lib/mongo/server_selector/secondary_preferred.rb +1 -7
  124. data/lib/mongo/session.rb +7 -1
  125. data/lib/mongo/socket.rb +26 -12
  126. data/lib/mongo/socket/ocsp_cache.rb +97 -0
  127. data/lib/mongo/socket/ocsp_verifier.rb +368 -0
  128. data/lib/mongo/socket/ssl.rb +46 -25
  129. data/lib/mongo/socket/tcp.rb +1 -1
  130. data/lib/mongo/srv/monitor.rb +7 -13
  131. data/lib/mongo/srv/resolver.rb +14 -10
  132. data/lib/mongo/timeout.rb +2 -0
  133. data/lib/mongo/topology_version.rb +9 -0
  134. data/lib/mongo/uri.rb +21 -390
  135. data/lib/mongo/uri/options_mapper.rb +582 -0
  136. data/lib/mongo/uri/srv_protocol.rb +3 -2
  137. data/lib/mongo/utils.rb +73 -0
  138. data/lib/mongo/version.rb +1 -1
  139. data/spec/NOTES.aws-auth.md +12 -7
  140. data/spec/README.aws-auth.md +2 -2
  141. data/spec/README.md +63 -1
  142. data/spec/integration/awaited_ismaster_spec.rb +28 -0
  143. data/spec/integration/bson_symbol_spec.rb +4 -2
  144. data/spec/integration/bulk_write_spec.rb +67 -0
  145. data/spec/integration/change_stream_examples_spec.rb +6 -2
  146. data/spec/integration/change_stream_spec.rb +1 -1
  147. data/spec/integration/check_clean_slate_spec.rb +16 -0
  148. data/spec/integration/client_authentication_options_spec.rb +92 -28
  149. data/spec/integration/client_construction_spec.rb +1 -0
  150. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -5
  151. data/spec/integration/connect_single_rs_name_spec.rb +5 -2
  152. data/spec/integration/connection_pool_populator_spec.rb +4 -2
  153. data/spec/integration/connection_spec.rb +7 -4
  154. data/spec/integration/crud_spec.rb +4 -4
  155. data/spec/integration/cursor_reaping_spec.rb +54 -18
  156. data/spec/integration/docs_examples_spec.rb +6 -0
  157. data/spec/integration/fork_reconnect_spec.rb +56 -1
  158. data/spec/integration/grid_fs_bucket_spec.rb +48 -0
  159. data/spec/integration/heartbeat_events_spec.rb +4 -23
  160. data/spec/integration/ocsp_connectivity_spec.rb +26 -0
  161. data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
  162. data/spec/integration/ocsp_verifier_spec.rb +334 -0
  163. data/spec/integration/query_cache_spec.rb +1045 -0
  164. data/spec/integration/query_cache_transactions_spec.rb +190 -0
  165. data/spec/integration/read_concern_spec.rb +1 -1
  166. data/spec/integration/retryable_errors_spec.rb +1 -1
  167. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
  168. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +4 -2
  169. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +3 -3
  170. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +2 -2
  171. data/spec/integration/sdam_error_handling_spec.rb +122 -15
  172. data/spec/integration/sdam_events_spec.rb +80 -6
  173. data/spec/integration/sdam_prose_spec.rb +64 -0
  174. data/spec/integration/server_monitor_spec.rb +25 -1
  175. data/spec/integration/server_selection_spec.rb +36 -0
  176. data/spec/integration/size_limit_spec.rb +23 -5
  177. data/spec/integration/srv_monitoring_spec.rb +38 -3
  178. data/spec/integration/srv_spec.rb +56 -0
  179. data/spec/integration/ssl_uri_options_spec.rb +2 -2
  180. data/spec/integration/transactions_examples_spec.rb +17 -7
  181. data/spec/integration/zlib_compression_spec.rb +25 -0
  182. data/spec/lite_spec_helper.rb +20 -9
  183. data/spec/mongo/address_spec.rb +1 -1
  184. data/spec/mongo/auth/aws/request_region_spec.rb +42 -0
  185. data/spec/mongo/auth/aws/request_spec.rb +76 -0
  186. data/spec/mongo/auth/scram_spec.rb +1 -1
  187. data/spec/mongo/auth/user_spec.rb +1 -1
  188. data/spec/mongo/bulk_write_spec.rb +2 -2
  189. data/spec/mongo/caching_cursor_spec.rb +70 -0
  190. data/spec/mongo/client_construction_spec.rb +386 -3
  191. data/spec/mongo/client_encryption_spec.rb +16 -10
  192. data/spec/mongo/client_spec.rb +85 -3
  193. data/spec/mongo/cluster/topology/replica_set_spec.rb +53 -10
  194. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  195. data/spec/mongo/cluster/topology/single_spec.rb +19 -8
  196. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  197. data/spec/mongo/cluster/topology_spec.rb +1 -1
  198. data/spec/mongo/cluster_spec.rb +37 -35
  199. data/spec/mongo/collection/view/change_stream_resume_spec.rb +7 -7
  200. data/spec/mongo/collection/view/explainable_spec.rb +87 -4
  201. data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
  202. data/spec/mongo/collection/view/readable_spec.rb +36 -0
  203. data/spec/mongo/collection_spec.rb +572 -0
  204. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  205. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  206. data/spec/mongo/crypt/binary_spec.rb +1 -6
  207. data/spec/mongo/crypt/binding/binary_spec.rb +1 -6
  208. data/spec/mongo/crypt/binding/context_spec.rb +2 -7
  209. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -6
  210. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +2 -7
  211. data/spec/mongo/crypt/binding/status_spec.rb +1 -6
  212. data/spec/mongo/crypt/binding/version_spec.rb +1 -6
  213. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  214. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  215. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
  216. data/spec/mongo/crypt/status_spec.rb +1 -6
  217. data/spec/mongo/database_spec.rb +353 -8
  218. data/spec/mongo/distinguishing_semaphore_spec.rb +63 -0
  219. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  220. data/spec/mongo/error/operation_failure_spec.rb +40 -0
  221. data/spec/mongo/index/view_spec.rb +148 -2
  222. data/spec/mongo/logger_spec.rb +13 -11
  223. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  224. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -4
  225. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  226. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  227. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  228. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  229. data/spec/mongo/operation/delete/op_msg_spec.rb +3 -3
  230. data/spec/mongo/operation/insert/command_spec.rb +2 -2
  231. data/spec/mongo/operation/insert/op_msg_spec.rb +3 -3
  232. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  233. data/spec/mongo/operation/update/command_spec.rb +2 -2
  234. data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
  235. data/spec/mongo/protocol/msg_spec.rb +10 -0
  236. data/spec/mongo/query_cache_spec.rb +280 -0
  237. data/spec/mongo/semaphore_spec.rb +51 -0
  238. data/spec/mongo/server/app_metadata_shared.rb +82 -2
  239. data/spec/mongo/server/connection_auth_spec.rb +2 -2
  240. data/spec/mongo/server/connection_pool_spec.rb +7 -3
  241. data/spec/mongo/server/connection_spec.rb +15 -8
  242. data/spec/mongo/server/description_spec.rb +18 -0
  243. data/spec/mongo/server_selector/nearest_spec.rb +23 -23
  244. data/spec/mongo/server_selector/primary_preferred_spec.rb +26 -26
  245. data/spec/mongo/server_selector/primary_spec.rb +9 -9
  246. data/spec/mongo/server_selector/secondary_preferred_spec.rb +22 -22
  247. data/spec/mongo/server_selector/secondary_spec.rb +18 -18
  248. data/spec/mongo/server_selector_spec.rb +6 -6
  249. data/spec/mongo/session_spec.rb +35 -0
  250. data/spec/mongo/socket/ssl_spec.rb +4 -4
  251. data/spec/mongo/socket_spec.rb +1 -1
  252. data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
  253. data/spec/mongo/uri_option_parsing_spec.rb +11 -11
  254. data/spec/mongo/uri_spec.rb +68 -41
  255. data/spec/mongo/utils_spec.rb +39 -0
  256. data/spec/runners/auth.rb +3 -0
  257. data/spec/runners/change_streams/test.rb +3 -3
  258. data/spec/runners/cmap.rb +1 -1
  259. data/spec/runners/command_monitoring.rb +3 -34
  260. data/spec/runners/connection_string.rb +35 -124
  261. data/spec/runners/crud/context.rb +9 -5
  262. data/spec/runners/crud/operation.rb +59 -27
  263. data/spec/runners/crud/spec.rb +0 -8
  264. data/spec/runners/crud/test.rb +1 -1
  265. data/spec/runners/crud/test_base.rb +0 -19
  266. data/spec/runners/sdam.rb +2 -2
  267. data/spec/runners/server_selection.rb +242 -28
  268. data/spec/runners/transactions.rb +12 -12
  269. data/spec/runners/transactions/operation.rb +151 -25
  270. data/spec/runners/transactions/test.rb +62 -18
  271. data/spec/shared/LICENSE +20 -0
  272. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  273. data/spec/shared/lib/mrss/constraints.rb +303 -0
  274. data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
  275. data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
  276. data/spec/spec_helper.rb +3 -1
  277. data/spec/spec_tests/cmap_spec.rb +7 -3
  278. data/spec/spec_tests/command_monitoring_spec.rb +22 -12
  279. data/spec/spec_tests/crud_spec.rb +1 -1
  280. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +4 -9
  281. data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +66 -0
  282. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
  283. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
  284. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
  285. data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
  286. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml +15 -0
  287. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +4 -3
  288. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -0
  289. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +96 -0
  290. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +88 -0
  291. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +83 -0
  292. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +116 -0
  293. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +86 -0
  294. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +115 -0
  295. data/spec/spec_tests/data/sdam_integration/isMaster-command-error.yml +168 -0
  296. data/spec/spec_tests/data/sdam_integration/isMaster-network-error.yml +162 -0
  297. data/spec/spec_tests/data/sdam_integration/isMaster-timeout.yml +229 -0
  298. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +87 -0
  299. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
  300. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
  301. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
  302. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  303. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
  304. data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
  305. data/spec/spec_tests/data/uri_options/compression-options.yml +6 -3
  306. data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
  307. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
  308. data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
  309. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
  310. data/spec/spec_tests/max_staleness_spec.rb +4 -142
  311. data/spec/spec_tests/retryable_reads_spec.rb +2 -2
  312. data/spec/spec_tests/sdam_integration_spec.rb +13 -0
  313. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -2
  314. data/spec/spec_tests/server_selection_spec.rb +4 -116
  315. data/spec/spec_tests/uri_options_spec.rb +31 -33
  316. data/spec/stress/cleanup_spec.rb +17 -2
  317. data/spec/stress/connection_pool_stress_spec.rb +10 -8
  318. data/spec/stress/fork_reconnect_stress_spec.rb +1 -1
  319. data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
  320. data/spec/support/certificates/atlas-ocsp.crt +41 -0
  321. data/spec/support/client_registry.rb +1 -0
  322. data/spec/support/client_registry_macros.rb +11 -2
  323. data/spec/support/cluster_config.rb +4 -0
  324. data/spec/support/common_shortcuts.rb +45 -0
  325. data/spec/support/constraints.rb +6 -253
  326. data/spec/support/event_subscriber.rb +123 -33
  327. data/spec/support/keyword_struct.rb +26 -0
  328. data/spec/support/matchers.rb +16 -0
  329. data/spec/support/ocsp +1 -0
  330. data/spec/support/session_registry.rb +52 -0
  331. data/spec/support/shared/server_selector.rb +13 -1
  332. data/spec/support/spec_config.rb +60 -13
  333. data/spec/support/spec_setup.rb +1 -1
  334. data/spec/support/utils.rb +84 -1
  335. metadata +1027 -937
  336. metadata.gz.sig +0 -0
  337. data/lib/mongo/server_selector/selectable.rb +0 -560
  338. data/spec/runners/sdam_monitoring.rb +0 -89
  339. data/spec/support/lite_constraints.rb +0 -141
@@ -307,4 +307,39 @@ describe Mongo::Session do
307
307
  end
308
308
  end
309
309
  end
310
+
311
+ describe '#start_session' do
312
+ context 'when block doesn\'t raise an error' do
313
+ it 'closes the session after the block' do
314
+ block_session = nil
315
+ authorized_client.start_session do |session|
316
+ expect(session.ended?).to be false
317
+ block_session = session
318
+ end
319
+ expect(block_session.ended?).to be true
320
+ end
321
+ end
322
+
323
+ context 'when block raises an error' do
324
+ it 'closes the session after the block' do
325
+ block_session = nil
326
+ expect do
327
+ authorized_client.start_session do |session|
328
+ block_session = session
329
+ raise 'This is an error!'
330
+ end
331
+ end.to raise_error(StandardError, 'This is an error!')
332
+ expect(block_session.ended?).to be true
333
+ end
334
+ end
335
+
336
+ context 'when block returns value' do
337
+ it 'is returned by the function' do
338
+ res = authorized_client.start_session do |session|
339
+ 4
340
+ end
341
+ expect(res).to be 4
342
+ end
343
+ end
344
+ end
310
345
  end
@@ -246,7 +246,7 @@ describe Mongo::Socket::SSL, retry: 3 do
246
246
  it 'raises an error' do
247
247
  lambda do
248
248
  socket
249
- end.should raise_error(Mongo::Error::SocketError, /SSL handshake failed due to a hostname mismatch/)
249
+ end.should raise_error(Mongo::Error::SocketError, /TLS handshake failed due to a hostname mismatch/)
250
250
  end
251
251
  end
252
252
 
@@ -338,7 +338,7 @@ describe Mongo::Socket::SSL, retry: 3 do
338
338
  end
339
339
 
340
340
  context 'mri' do
341
- only_mri
341
+ require_mri
342
342
 
343
343
  context 'when a bad certificate is provided' do
344
344
 
@@ -625,7 +625,7 @@ describe Mongo::Socket::SSL, retry: 3 do
625
625
  context 'bundled with intermediate cert' do
626
626
 
627
627
  # https://github.com/jruby/jruby-openssl/issues/181
628
- only_mri
628
+ require_mri
629
629
 
630
630
  let(:ssl_options) do
631
631
  SpecConfig.instance.test_options.merge(
@@ -670,7 +670,7 @@ describe Mongo::Socket::SSL, retry: 3 do
670
670
  context 'bundled with intermediate cert' do
671
671
 
672
672
  # https://github.com/jruby/jruby-openssl/issues/181
673
- only_mri
673
+ require_mri
674
674
 
675
675
  let(:ssl_options) do
676
676
  SpecConfig.instance.test_options.merge(
@@ -48,7 +48,7 @@ describe Mongo::Socket do
48
48
  socket.send(:map_exceptions) do
49
49
  raise OpenSSL::SSL::SSLError.new('Test error')
50
50
  end
51
- end.to raise_error(Mongo::Error::SocketError, 'OpenSSL::SSL::SSLError: Test error (for fake-address) (MongoDB may not be configured with SSL support)')
51
+ end.to raise_error(Mongo::Error::SocketError, 'OpenSSL::SSL::SSLError: Test error (for fake-address) (MongoDB may not be configured with TLS support)')
52
52
  end
53
53
  end
54
54
 
@@ -567,8 +567,8 @@ describe Mongo::URI::SRVProtocol do
567
567
  'readPreference=secondary&maxStalenessSeconds=89'
568
568
  end
569
569
 
570
- it 'does not raise an exception until the read preference is used' do
571
- expect(client.read_preference).to eq(BSON::Document.new(mode: :secondary, max_staleness: 89))
570
+ it 'does not raise an exception and is omitted' do
571
+ expect(client.read_preference).to eq(BSON::Document.new(mode: :secondary))
572
572
  end
573
573
  end
574
574
  end
@@ -715,83 +715,114 @@ describe Mongo::URI::SRVProtocol do
715
715
  end
716
716
  end
717
717
 
718
+ # This context exactly duplicates the same one in uri_spec.rb
718
719
  context 'auth mechanism properties provided' do
719
720
 
721
+ shared_examples 'sets options in the expected manner' do
722
+ it 'preserves case in auth mechanism properties returned from URI' do
723
+ expect(uri.uri_options[:auth_mech_properties]).to eq(expected_uri_options)
724
+ end
725
+
726
+ it 'downcases auth mechanism properties keys in client options' do
727
+ client = new_local_client_nmio(string)
728
+ expect(client.options[:auth_mech_properties]).to eq(expected_client_options)
729
+ end
730
+ end
731
+
720
732
  context 'service_name' do
721
733
  let(:options) do
722
- "authMechanismProperties=SERVICE_NAME:#{service_name}"
734
+ "authMechanismProperties=SERVICE_name:#{service_name}"
723
735
  end
724
736
 
725
737
  let(:service_name) { 'foo' }
726
- let(:expected) { Mongo::Options::Redacted.new({ service_name: service_name }) }
727
738
 
728
- it 'sets the auth mechanism properties' do
729
- expect(uri.uri_options[:auth_mech_properties]).to eq(expected)
739
+ let(:expected_uri_options) do
740
+ Mongo::Options::Redacted.new(
741
+ SERVICE_name: service_name,
742
+ )
730
743
  end
731
744
 
732
- it 'sets the options on a client created with the uri' do
733
- expect(client.options[:auth_mech_properties]).to eq(expected)
745
+ let(:expected_client_options) do
746
+ Mongo::Options::Redacted.new(
747
+ service_name: service_name,
748
+ )
734
749
  end
750
+
751
+ include_examples 'sets options in the expected manner'
735
752
  end
736
753
 
737
754
  context 'canonicalize_host_name' do
738
755
  let(:options) do
739
- "authMechanismProperties=CANONICALIZE_HOST_NAME:#{canonicalize_host_name}"
756
+ "authMechanismProperties=CANONICALIZE_HOST_name:#{canonicalize_host_name}"
740
757
  end
758
+
741
759
  let(:canonicalize_host_name) { 'true' }
742
- let(:expected) { Mongo::Options::Redacted.new({ canonicalize_host_name: true }) }
743
760
 
744
- it 'sets the auth mechanism properties' do
745
- expect(uri.uri_options[:auth_mech_properties]).to eq(expected)
761
+ let(:expected_uri_options) do
762
+ Mongo::Options::Redacted.new(
763
+ CANONICALIZE_HOST_name: true,
764
+ )
746
765
  end
747
766
 
748
- it 'sets the options on a client created with the uri' do
749
- expect(client.options[:auth_mech_properties]).to eq(expected)
767
+ let(:expected_client_options) do
768
+ Mongo::Options::Redacted.new(
769
+ canonicalize_host_name: true,
770
+ )
750
771
  end
772
+
773
+ include_examples 'sets options in the expected manner'
751
774
  end
752
775
 
753
776
  context 'service_realm' do
754
777
  let(:options) do
755
- "authMechanismProperties=SERVICE_REALM:#{service_realm}"
778
+ "authMechanismProperties=SERVICE_realm:#{service_realm}"
756
779
  end
757
780
 
758
781
  let(:service_realm) { 'dumdum' }
759
- let(:expected) { Mongo::Options::Redacted.new({ service_realm: service_realm }) }
760
782
 
761
-
762
- it 'sets the auth mechanism properties' do
763
- expect(uri.uri_options[:auth_mech_properties]).to eq(expected)
783
+ let(:expected_uri_options) do
784
+ Mongo::Options::Redacted.new(
785
+ SERVICE_realm: service_realm,
786
+ )
764
787
  end
765
788
 
766
- it 'sets the options on a client created with the uri' do
767
- expect(client.options[:auth_mech_properties]).to eq(expected)
789
+ let(:expected_client_options) do
790
+ Mongo::Options::Redacted.new(
791
+ service_realm: service_realm,
792
+ )
768
793
  end
794
+
795
+ include_examples 'sets options in the expected manner'
769
796
  end
770
797
 
771
798
  context 'multiple properties' do
772
799
  let(:options) do
773
- "authMechanismProperties=SERVICE_REALM:#{service_realm}," +
774
- "CANONICALIZE_HOST_NAME:#{canonicalize_host_name}," +
775
- "SERVICE_NAME:#{service_name}"
800
+ "authMechanismProperties=SERVICE_realm:#{service_realm}," +
801
+ "CANONICALIZE_HOST_name:#{canonicalize_host_name}," +
802
+ "SERVICE_name:#{service_name}"
776
803
  end
777
804
 
778
805
  let(:service_name) { 'foo' }
779
806
  let(:canonicalize_host_name) { 'true' }
780
807
  let(:service_realm) { 'dumdum' }
781
808
 
782
- let(:expected) do
783
- Mongo::Options::Redacted.new({ service_name: service_name,
784
- canonicalize_host_name: true,
785
- service_realm: service_realm })
809
+ let(:expected_uri_options) do
810
+ Mongo::Options::Redacted.new(
811
+ SERVICE_name: service_name,
812
+ CANONICALIZE_HOST_name: true,
813
+ SERVICE_realm: service_realm,
814
+ )
786
815
  end
787
816
 
788
- it 'sets the auth mechanism properties' do
789
- expect(uri.uri_options[:auth_mech_properties]).to eq(expected)
817
+ let(:expected_client_options) do
818
+ Mongo::Options::Redacted.new(
819
+ service_name: service_name,
820
+ canonicalize_host_name: true,
821
+ service_realm: service_realm,
822
+ )
790
823
  end
791
824
 
792
- it 'sets the options on a client created with the uri' do
793
- expect(client.options[:auth_mech_properties]).to eq(expected)
794
- end
825
+ include_examples 'sets options in the expected manner'
795
826
  end
796
827
  end
797
828
 
@@ -199,37 +199,37 @@ describe Mongo::URI do
199
199
 
200
200
  context 'authMechanismProperties' do
201
201
 
202
- let(:string) { 'mongodb://example.com/?authmechanismproperties=SERVICE_REALM:foo,CANONICALIZE_HOST_NAME:TRUE' }
202
+ let(:string) { 'mongodb://example.com/?authmechanismproperties=SERVICE_realm:foo,CANONICALIZE_HOST_name:TRUE' }
203
203
 
204
204
  it_behaves_like 'parses successfully'
205
205
 
206
206
  it 'parses correctly' do
207
207
  expect(uri.uri_options[:auth_mech_properties]).to eq(BSON::Document.new(
208
- service_realm: 'foo',
209
- canonicalize_host_name: true,
208
+ SERVICE_realm: 'foo',
209
+ CANONICALIZE_HOST_name: true,
210
210
  ))
211
211
  end
212
212
 
213
213
  context 'canonicalize host name is false' do
214
214
 
215
- let(:string) { 'mongodb://example.com/?authmechanismproperties=SERVICE_REALM:foo,CANONICALIZE_HOST_NAME:false' }
215
+ let(:string) { 'mongodb://example.com/?authmechanismproperties=SERVICE_realm:foo,CANONICALIZE_HOST_name:false' }
216
216
 
217
217
  it 'parses correctly' do
218
218
  expect(uri.uri_options[:auth_mech_properties]).to eq(BSON::Document.new(
219
- service_realm: 'foo',
220
- canonicalize_host_name: false,
219
+ SERVICE_realm: 'foo',
220
+ CANONICALIZE_HOST_name: false,
221
221
  ))
222
222
  end
223
223
  end
224
224
 
225
225
  context 'canonicalize host name is true in mixed case' do
226
226
 
227
- let(:string) { 'mongodb://example.com/?authmechanismproperties=SERVICE_REALM:foo,CANONICALIZE_HOST_NAME:TrUe' }
227
+ let(:string) { 'mongodb://example.com/?authmechanismproperties=SERVICE_realm:foo,CANONICALIZE_HOST_name:TrUe' }
228
228
 
229
229
  it 'parses correctly' do
230
230
  expect(uri.uri_options[:auth_mech_properties]).to eq(BSON::Document.new(
231
- service_realm: 'foo',
232
- canonicalize_host_name: true,
231
+ SERVICE_realm: 'foo',
232
+ CANONICALIZE_HOST_name: true,
233
233
  ))
234
234
  end
235
235
  end
@@ -350,8 +350,8 @@ describe Mongo::URI do
350
350
 
351
351
  it_behaves_like 'parses successfully'
352
352
 
353
- it 'is converted to nil' do
354
- expect(uri.uri_options[:read]).to eq(BSON::Document.new(max_staleness: nil))
353
+ it 'is omitted' do
354
+ uri.uri_options.should_not have_key(:read)
355
355
  end
356
356
  end
357
357
  end
@@ -727,9 +727,9 @@ describe Mongo::URI do
727
727
  'readPreference=secondary&maxStalenessSeconds=89'
728
728
  end
729
729
 
730
- it 'does not raise an exception until the read preference is used' do
730
+ it 'does not raise an exception and drops the option' do
731
731
  client = new_local_client_nmio(string)
732
- expect(client.read_preference).to eq(BSON::Document.new(mode: :secondary, max_staleness: 89))
732
+ expect(client.read_preference).to eq(BSON::Document.new(mode: :secondary))
733
733
  end
734
734
  end
735
735
  end
@@ -854,16 +854,16 @@ describe Mongo::URI do
854
854
  context 'when a mapping value is missing' do
855
855
  let(:options) { "authMechanism=#{mechanism}&authMechanismProperties=SERVICE_NAME:,CANONICALIZE_HOST_NAME:" }
856
856
 
857
- it 'sets the options on a client created with the uri' do
858
- expect(client.options[:auth_mech_properties]).to eq({ 'canonicalize_host_name' => nil, 'service_name' => nil })
857
+ it 'sets the options to defaults' do
858
+ expect(client.options[:auth_mech_properties]).to eq({ 'service_name' => 'mongodb' })
859
859
  end
860
860
  end
861
861
 
862
862
  context 'when a mapping value is missing but another is present' do
863
863
  let(:options) { "authMechanism=#{mechanism}&authMechanismProperties=SERVICE_NAME:foo,CANONICALIZE_HOST_NAME:" }
864
864
 
865
- it 'sets the options on a client created with the uri' do
866
- expect(client.options[:auth_mech_properties]).to eq({ 'canonicalize_host_name' => nil, 'service_name' => 'foo' })
865
+ it 'only sets the present value' do
866
+ expect(client.options[:auth_mech_properties]).to eq({ 'service_name' => 'foo' })
867
867
  end
868
868
  end
869
869
  end
@@ -1013,84 +1013,111 @@ describe Mongo::URI do
1013
1013
 
1014
1014
  context 'auth mechanism properties provided' do
1015
1015
 
1016
+ shared_examples 'sets options in the expected manner' do
1017
+ it 'preserves case in auth mechanism properties returned from URI' do
1018
+ expect(uri.uri_options[:auth_mech_properties]).to eq(expected_uri_options)
1019
+ end
1020
+
1021
+ it 'downcases auth mechanism properties keys in client options' do
1022
+ client = new_local_client_nmio(string)
1023
+ expect(client.options[:auth_mech_properties]).to eq(expected_client_options)
1024
+ end
1025
+ end
1026
+
1016
1027
  context 'service_name' do
1017
1028
  let(:options) do
1018
- "authMechanismProperties=SERVICE_NAME:#{service_name}"
1029
+ "authMechanismProperties=SERVICE_name:#{service_name}"
1019
1030
  end
1031
+
1020
1032
  let(:service_name) { 'foo' }
1021
- let(:expected) { Mongo::Options::Redacted.new({ service_name: service_name }) }
1022
1033
 
1023
- it 'sets the auth mechanism properties' do
1024
- expect(uri.uri_options[:auth_mech_properties]).to eq(expected)
1034
+ let(:expected_uri_options) do
1035
+ Mongo::Options::Redacted.new(
1036
+ SERVICE_name: service_name,
1037
+ )
1025
1038
  end
1026
1039
 
1027
- it 'sets the options on a client created with the uri' do
1028
- client = new_local_client_nmio(string)
1029
- expect(client.options[:auth_mech_properties]).to eq(expected)
1040
+ let(:expected_client_options) do
1041
+ Mongo::Options::Redacted.new(
1042
+ service_name: service_name,
1043
+ )
1030
1044
  end
1045
+
1046
+ include_examples 'sets options in the expected manner'
1031
1047
  end
1032
1048
 
1033
1049
  context 'canonicalize_host_name' do
1034
1050
  let(:options) do
1035
- "authMechanismProperties=CANONICALIZE_HOST_NAME:#{canonicalize_host_name}"
1051
+ "authMechanismProperties=CANONICALIZE_HOST_name:#{canonicalize_host_name}"
1036
1052
  end
1053
+
1037
1054
  let(:canonicalize_host_name) { 'true' }
1038
- let(:expected) { Mongo::Options::Redacted.new({ canonicalize_host_name: true }) }
1039
1055
 
1040
- it 'sets the auth mechanism properties' do
1041
- expect(uri.uri_options[:auth_mech_properties]).to eq(expected)
1056
+ let(:expected_uri_options) do
1057
+ Mongo::Options::Redacted.new(
1058
+ CANONICALIZE_HOST_name: true,
1059
+ )
1042
1060
  end
1043
1061
 
1044
- it 'sets the options on a client created with the uri' do
1045
- client = new_local_client_nmio(string)
1046
- expect(client.options[:auth_mech_properties]).to eq(expected)
1062
+ let(:expected_client_options) do
1063
+ Mongo::Options::Redacted.new(
1064
+ canonicalize_host_name: true,
1065
+ )
1047
1066
  end
1067
+
1068
+ include_examples 'sets options in the expected manner'
1048
1069
  end
1049
1070
 
1050
1071
  context 'service_realm' do
1051
1072
  let(:options) do
1052
- "authMechanismProperties=SERVICE_REALM:#{service_realm}"
1073
+ "authMechanismProperties=SERVICE_realm:#{service_realm}"
1053
1074
  end
1054
1075
 
1055
1076
  let(:service_realm) { 'dumdum' }
1056
- let(:expected) { Mongo::Options::Redacted.new({ service_realm: service_realm }) }
1057
1077
 
1058
-
1059
- it 'sets the auth mechanism properties' do
1060
- expect(uri.uri_options[:auth_mech_properties]).to eq(expected)
1078
+ let(:expected_uri_options) do
1079
+ Mongo::Options::Redacted.new(
1080
+ SERVICE_realm: service_realm,
1081
+ )
1061
1082
  end
1062
1083
 
1063
- it 'sets the options on a client created with the uri' do
1064
- client = new_local_client_nmio(string)
1065
- expect(client.options[:auth_mech_properties]).to eq(expected)
1084
+ let(:expected_client_options) do
1085
+ Mongo::Options::Redacted.new(
1086
+ service_realm: service_realm,
1087
+ )
1066
1088
  end
1089
+
1090
+ include_examples 'sets options in the expected manner'
1067
1091
  end
1068
1092
 
1069
1093
  context 'multiple properties' do
1070
1094
  let(:options) do
1071
- "authMechanismProperties=SERVICE_REALM:#{service_realm}," +
1072
- "CANONICALIZE_HOST_NAME:#{canonicalize_host_name}," +
1073
- "SERVICE_NAME:#{service_name}"
1095
+ "authMechanismProperties=SERVICE_realm:#{service_realm}," +
1096
+ "CANONICALIZE_HOST_name:#{canonicalize_host_name}," +
1097
+ "SERVICE_name:#{service_name}"
1074
1098
  end
1075
1099
 
1076
1100
  let(:service_name) { 'foo' }
1077
1101
  let(:canonicalize_host_name) { 'true' }
1078
1102
  let(:service_realm) { 'dumdum' }
1079
1103
 
1080
- let(:expected) do
1081
- Mongo::Options::Redacted.new({ service_name: service_name,
1082
- canonicalize_host_name: true,
1083
- service_realm: service_realm })
1104
+ let(:expected_uri_options) do
1105
+ Mongo::Options::Redacted.new(
1106
+ SERVICE_name: service_name,
1107
+ CANONICALIZE_HOST_name: true,
1108
+ SERVICE_realm: service_realm,
1109
+ )
1084
1110
  end
1085
1111
 
1086
- it 'sets the auth mechanism properties' do
1087
- expect(uri.uri_options[:auth_mech_properties]).to eq(expected)
1112
+ let(:expected_client_options) do
1113
+ Mongo::Options::Redacted.new(
1114
+ service_name: service_name,
1115
+ canonicalize_host_name: true,
1116
+ service_realm: service_realm,
1117
+ )
1088
1118
  end
1089
1119
 
1090
- it 'sets the options on a client created with the uri' do
1091
- client = new_local_client_nmio(string)
1092
- expect(client.options[:auth_mech_properties]).to eq(expected)
1093
- end
1120
+ include_examples 'sets options in the expected manner'
1094
1121
  end
1095
1122
  end
1096
1123