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
@@ -0,0 +1,63 @@
1
+ require 'lite_spec_helper'
2
+
3
+ describe Mongo::DistinguishingSemaphore do
4
+ let(:semaphore) do
5
+ described_class.new
6
+ end
7
+
8
+ it 'waits until signaled' do
9
+ result = nil
10
+
11
+ consumer = Thread.new do
12
+ result = semaphore.wait(3)
13
+ end
14
+
15
+ # Context switch to start the thread
16
+ sleep 0.1
17
+
18
+ start_time = Time.now
19
+ semaphore.signal
20
+ consumer.join
21
+
22
+ (Time.now - start_time).should < 1
23
+
24
+ result.should be true
25
+ end
26
+
27
+ it 'waits until broadcast' do
28
+ result = nil
29
+
30
+ consumer = Thread.new do
31
+ result = semaphore.wait(3)
32
+ end
33
+
34
+ # Context switch to start the thread
35
+ sleep 0.1
36
+
37
+ start_time = Time.now
38
+ semaphore.broadcast
39
+ consumer.join
40
+
41
+ (Time.now - start_time).should < 1
42
+
43
+ result.should be true
44
+ end
45
+
46
+ it 'times out' do
47
+ result = nil
48
+
49
+ consumer = Thread.new do
50
+ result = semaphore.wait(2)
51
+ end
52
+
53
+ # Context switch to start the thread
54
+ sleep 0.1
55
+
56
+ start_time = Time.now
57
+ consumer.join
58
+
59
+ (Time.now - start_time).should > 1
60
+
61
+ result.should be false
62
+ end
63
+ end
@@ -16,7 +16,7 @@ describe Mongo::Error::NoServerAvailable do
16
16
  end
17
17
 
18
18
  it 'is correct' do
19
- expect(error.message).to eq('No primary server is available in cluster: #<Cluster topology=Unknown[127.0.0.1:27017] servers=[#<Server address=127.0.0.1:27017 UNKNOWN>]> with timeout=30, LT=0.015')
19
+ expect(error.message).to eq('No primary server is available in cluster: #<Cluster topology=Unknown[127.0.0.1:27017] servers=[#<Server address=127.0.0.1:27017 UNKNOWN NO-MONITORING>]> with timeout=30, LT=0.015')
20
20
  end
21
21
 
22
22
  context 'when cluster is nil' do
@@ -227,6 +227,46 @@ describe Mongo::Error::OperationFailure do
227
227
  end
228
228
  end
229
229
 
230
+ context 'when the error code is 43 (CursorNotFound)' do
231
+ let(:error) { Mongo::Error::OperationFailure.new(nil, result, code: 43, code_name: 'CursorNotFound') }
232
+ let(:result) do
233
+ Mongo::Operation::GetMore::Result.new(
234
+ Mongo::Protocol::Message.new, description)
235
+ end
236
+
237
+ context 'wire protocol < 9' do
238
+ let(:description) do
239
+ Mongo::Server::Description.new('',
240
+ 'minWireVersion' => 0,
241
+ 'maxWireVersion' => 8,
242
+ )
243
+ end
244
+
245
+ it 'returns true' do
246
+ # CursorNotFound exceptions are resumable even if they don't have
247
+ # a ResumableChangeStreamError label because the server is not aware
248
+ # of the cursor id, and thus cannot determine if it is a change stream.
249
+ expect(error.change_stream_resumable?).to be true
250
+ end
251
+ end
252
+
253
+ context 'wire protocol >= 9' do
254
+ let(:description) do
255
+ Mongo::Server::Description.new('',
256
+ 'minWireVersion' => 0,
257
+ 'maxWireVersion' => 9,
258
+ )
259
+ end
260
+
261
+ it 'returns true' do
262
+ # CursorNotFound exceptions are resumable even if they don't have
263
+ # a ResumableChangeStreamError label because the server is not aware
264
+ # of the cursor id, and thus cannot determine if it is a change stream.
265
+ expect(error.change_stream_resumable?).to be true
266
+ end
267
+ end
268
+ end
269
+
230
270
  context 'not a getMore response' do
231
271
  let(:result) do
232
272
  Mongo::Operation::Result.new(
@@ -261,7 +261,7 @@ describe Mongo::Index::View do
261
261
  context 'when commit quorum options are specified' do
262
262
  require_topology :replica_set, :sharded
263
263
  context 'on server versions >= 4.4' do
264
- min_server_fcv '4.3'
264
+ min_server_fcv '4.4'
265
265
 
266
266
  let(:subscriber) { EventSubscriber.new }
267
267
 
@@ -325,6 +325,81 @@ describe Mongo::Index::View do
325
325
  end
326
326
  end
327
327
 
328
+ context 'when hidden is specified' do
329
+ let(:index) { view.get('with_hidden_1') }
330
+
331
+ context 'on server versions <= 3.2' do
332
+ # DRIVERS-1220 Server versions 3.2 and older do not perform any option
333
+ # checking on index creation. The server will allow the user to create
334
+ # the index with the hidden option, but the server does not support this
335
+ # option and will not use it.
336
+ max_server_fcv '3.2'
337
+
338
+ let!(:result) do
339
+ view.create_many({ key: { with_hidden: 1 }, hidden: true })
340
+ end
341
+
342
+ it 'returns ok' do
343
+ expect(result).to be_successful
344
+ end
345
+
346
+ it 'creates an index' do
347
+ expect(index).to_not be_nil
348
+ end
349
+ end
350
+
351
+ context 'on server versions between 3.4 and 4.2' do
352
+ max_server_fcv '4.2'
353
+ min_server_fcv '3.4'
354
+
355
+ it 'raises an exception' do
356
+ expect do
357
+ view.create_many({ key: { with_hidden: 1 }, hidden: true })
358
+ end.to raise_error(/The field 'hidden' is not valid for an index specification/)
359
+ end
360
+ end
361
+
362
+ context 'on server versions >= 4.4' do
363
+ min_server_fcv '4.4'
364
+
365
+ context 'when hidden is true' do
366
+ let!(:result) do
367
+ view.create_many({ key: { with_hidden: 1 }, hidden: true })
368
+ end
369
+
370
+ it 'returns ok' do
371
+ expect(result).to be_successful
372
+ end
373
+
374
+ it 'creates an index' do
375
+ expect(index).to_not be_nil
376
+ end
377
+
378
+ it 'applies the hidden option to the index' do
379
+ expect(index['hidden']).to be true
380
+ end
381
+ end
382
+
383
+ context 'when hidden is false' do
384
+ let!(:result) do
385
+ view.create_many({ key: { with_hidden: 1 }, hidden: false })
386
+ end
387
+
388
+ it 'returns ok' do
389
+ expect(result).to be_successful
390
+ end
391
+
392
+ it 'creates an index' do
393
+ expect(index).to_not be_nil
394
+ end
395
+
396
+ it 'does not apply the hidden option to the index' do
397
+ expect(index['hidden']).to be_nil
398
+ end
399
+ end
400
+ end
401
+ end
402
+
328
403
  context 'when collation is specified' do
329
404
  min_server_fcv '3.4'
330
405
 
@@ -773,10 +848,81 @@ describe Mongo::Index::View do
773
848
  end
774
849
  end
775
850
 
851
+ context 'when providing hidden option' do
852
+ let(:index) { view.get('with_hidden_1') }
853
+
854
+ context 'on server versions <= 3.2' do
855
+ # DRIVERS-1220 Server versions 3.2 and older do not perform any option
856
+ # checking on index creation. The server will allow the user to create
857
+ # the index with the hidden option, but the server does not support this
858
+ # option and will not use it.
859
+ max_server_fcv '3.2'
860
+
861
+ let!(:result) do
862
+ view.create_one({ 'with_hidden' => 1 }, { hidden: true })
863
+ end
864
+
865
+ it 'returns ok' do
866
+ expect(result).to be_successful
867
+ end
868
+
869
+ it 'creates an index' do
870
+ expect(index).to_not be_nil
871
+ end
872
+ end
873
+
874
+ context 'on server versions between 3.4 and 4.2' do
875
+ max_server_fcv '4.2'
876
+ min_server_fcv '3.4'
877
+
878
+ it 'raises an exception' do
879
+ expect do
880
+ view.create_one({ 'with_hidden' => 1 }, { hidden: true })
881
+ end.to raise_error(/The field 'hidden' is not valid for an index specification/)
882
+ end
883
+ end
884
+
885
+ context 'on server versions >= 4.4' do
886
+ min_server_fcv '4.4'
887
+
888
+ context 'when hidden is true' do
889
+ let!(:result) { view.create_one({ 'with_hidden' => 1 }, { hidden: true }) }
890
+
891
+ it 'returns ok' do
892
+ expect(result).to be_successful
893
+ end
894
+
895
+ it 'creates an index' do
896
+ expect(index).to_not be_nil
897
+ end
898
+
899
+ it 'applies the hidden option to the index' do
900
+ expect(index['hidden']).to be true
901
+ end
902
+ end
903
+
904
+ context 'when hidden is false' do
905
+ let!(:result) { view.create_one({ 'with_hidden' => 1 }, { hidden: false }) }
906
+
907
+ it 'returns ok' do
908
+ expect(result).to be_successful
909
+ end
910
+
911
+ it 'creates an index' do
912
+ expect(index).to_not be_nil
913
+ end
914
+
915
+ it 'does not apply the hidden option to the index' do
916
+ expect(index['hidden']).to be_nil
917
+ end
918
+ end
919
+ end
920
+ end
921
+
776
922
  context 'when providing commit_quorum option' do
777
923
  require_topology :replica_set, :sharded
778
924
  context 'on server versions >= 4.4' do
779
- min_server_fcv '4.3'
925
+ min_server_fcv '4.4'
780
926
 
781
927
  let(:subscriber) { EventSubscriber.new }
782
928
 
@@ -6,6 +6,16 @@ describe Mongo::Logger do
6
6
  described_class.logger
7
7
  end
8
8
 
9
+ around do |example|
10
+ saved_logger = Mongo::Logger.logger
11
+
12
+ begin
13
+ example.run
14
+ ensure
15
+ Mongo::Logger.logger = saved_logger
16
+ end
17
+ end
18
+
9
19
  describe '.logger' do
10
20
 
11
21
  context 'when no logger has been set' do
@@ -18,25 +28,21 @@ describe Mongo::Logger do
18
28
  Mongo::Logger.logger = nil
19
29
  end
20
30
 
21
- after do
22
- Mongo::Logger.logger = test_logger
23
- end
24
-
25
31
  it 'returns the default logger' do
26
- expect(logger.level).to eq(Logger::DEBUG)
32
+ expect(logger.level).to eq(Logger::INFO)
27
33
  end
28
34
  end
29
35
 
30
36
  context 'when a logger has been set' do
31
37
 
32
38
  let(:info) do
33
- Logger.new($stdout).tap do |log|
39
+ Logger.new(STDOUT).tap do |log|
34
40
  log.level = Logger::INFO
35
41
  end
36
42
  end
37
43
 
38
44
  let(:debug) do
39
- Logger.new($stdout).tap do |log|
45
+ Logger.new(STDOUT).tap do |log|
40
46
  log.level = Logger::DEBUG
41
47
  end
42
48
  end
@@ -45,10 +51,6 @@ describe Mongo::Logger do
45
51
  described_class.logger = debug
46
52
  end
47
53
 
48
- after do
49
- described_class.logger = info
50
- end
51
-
52
54
  it 'returns the provided logger' do
53
55
  expect(logger.level).to eq(Logger::DEBUG)
54
56
  end
@@ -24,7 +24,7 @@ describe Mongo::Monitoring::Event::ServerClosed do
24
24
  end
25
25
 
26
26
  describe '#summary' do
27
- skip_if_linting
27
+ require_no_linting
28
28
 
29
29
  it 'renders correctly' do
30
30
  expect(topology).to receive(:server_descriptions).and_return({
@@ -27,12 +27,9 @@ describe Mongo::Monitoring::Event::ServerDescriptionChanged do
27
27
  end
28
28
 
29
29
  describe '#summary' do
30
- skip_if_linting
31
30
 
32
31
  it 'renders correctly' do
33
- expect(topology).to receive(:server_descriptions).and_return({
34
- '127.0.0.1:27017' => Mongo::Server::Description.new(Mongo::Address.new('127.0.0.1:27017'))})
35
- expect(event.summary).to eq("#<ServerDescriptionChanged address=127.0.0.1:27017 topology=Unknown[127.0.0.1:27017] prev=#{previous_desc.inspect} new=#{updated_desc.inspect}>")
32
+ expect(event.summary).to eq("#<ServerDescriptionChanged address=127.0.0.1:27017 prev=UNKNOWN new=UNKNOWN>")
36
33
  end
37
34
  end
38
35
  end
@@ -24,7 +24,7 @@ describe Mongo::Monitoring::Event::ServerOpening do
24
24
  end
25
25
 
26
26
  describe '#summary' do
27
- skip_if_linting
27
+ require_no_linting
28
28
 
29
29
  it 'renders correctly' do
30
30
  expect(topology).to receive(:server_descriptions).and_return({
@@ -28,7 +28,7 @@ describe Mongo::Monitoring::Event::TopologyChanged do
28
28
  end
29
29
 
30
30
  describe '#summary' do
31
- skip_if_linting
31
+ require_no_linting
32
32
 
33
33
  it 'renders correctly' do
34
34
  expect(prev_topology).to receive(:server_descriptions).and_return({
@@ -24,7 +24,7 @@ describe Mongo::Monitoring::Event::TopologyClosed do
24
24
  end
25
25
 
26
26
  describe '#summary' do
27
- skip_if_linting
27
+ require_no_linting
28
28
 
29
29
  it 'renders correctly' do
30
30
  expect(topology).to receive(:server_descriptions).and_return({
@@ -24,7 +24,7 @@ describe Mongo::Monitoring::Event::TopologyOpening do
24
24
  end
25
25
 
26
26
  describe '#summary' do
27
- skip_if_linting
27
+ require_no_linting
28
28
 
29
29
  it 'renders correctly' do
30
30
  expect(topology).to receive(:server_descriptions).and_return({
@@ -72,7 +72,7 @@ describe Mongo::Operation::Delete::OpMsg do
72
72
 
73
73
  describe 'write concern' do
74
74
  # https://jira.mongodb.org/browse/RUBY-2224
75
- skip_if_linting
75
+ require_no_linting
76
76
 
77
77
  context 'when write concern is not specified' do
78
78
 
@@ -99,7 +99,7 @@ describe Mongo::Operation::Delete::OpMsg do
99
99
 
100
100
  describe '#message' do
101
101
  # https://jira.mongodb.org/browse/RUBY-2224
102
- skip_if_linting
102
+ require_no_linting
103
103
 
104
104
  context 'when the server supports OP_MSG' do
105
105
 
@@ -152,7 +152,7 @@ describe Mongo::Operation::Delete::OpMsg do
152
152
 
153
153
  context 'when an implicit session is created and the topology is then updated and the server does not support sessions' do
154
154
  # Mocks on features are incompatible with linting
155
- skip_if_linting
155
+ require_no_linting
156
156
 
157
157
  let(:expected_global_args) do
158
158
  global_args.dup.tap do |args|
@@ -63,7 +63,7 @@ describe Mongo::Operation::Insert::Command do
63
63
 
64
64
  describe 'write concern' do
65
65
  # https://jira.mongodb.org/browse/RUBY-2224
66
- skip_if_linting
66
+ require_no_linting
67
67
 
68
68
  context 'when write concern is not specified' do
69
69
 
@@ -90,7 +90,7 @@ describe Mongo::Operation::Insert::Command do
90
90
 
91
91
  describe '#message' do
92
92
  # https://jira.mongodb.org/browse/RUBY-2224
93
- skip_if_linting
93
+ require_no_linting
94
94
 
95
95
  context 'when the server does not support OP_MSG' do
96
96
  max_server_version '3.4'