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
@@ -1105,3 +1105,69 @@ tests:
1105
1105
  fullDocument:
1106
1106
  x:
1107
1107
  $numberInt: "1"
1108
+ -
1109
+ # CursorNotFound is special-cased to be resumable regardless of server versions or error labels, so this test has
1110
+ # no maxWireVersion.
1111
+ description: "change stream resumes after CursorNotFound"
1112
+ minServerVersion: "4.2"
1113
+ failPoint:
1114
+ configureFailPoint: failCommand
1115
+ mode: { times: 1 }
1116
+ data:
1117
+ failCommands: ["getMore"]
1118
+ errorCode: 43
1119
+ closeConnection: false
1120
+ target: collection
1121
+ topology:
1122
+ - replicaset
1123
+ - sharded
1124
+ changeStreamPipeline: []
1125
+ changeStreamOptions: {}
1126
+ operations:
1127
+ -
1128
+ database: *database_name
1129
+ collection: *collection_name
1130
+ name: insertOne
1131
+ arguments:
1132
+ document:
1133
+ x: 1
1134
+ expectations:
1135
+ -
1136
+ command_started_event:
1137
+ command:
1138
+ aggregate: *collection_name
1139
+ cursor: {}
1140
+ pipeline:
1141
+ -
1142
+ $changeStream: {}
1143
+ command_name: aggregate
1144
+ database_name: *database_name
1145
+ -
1146
+ command_started_event:
1147
+ command:
1148
+ getMore: 42
1149
+ collection: *collection_name
1150
+ command_name: getMore
1151
+ database_name: *database_name
1152
+ -
1153
+ command_started_event:
1154
+ command:
1155
+ aggregate: *collection_name
1156
+ cursor: {}
1157
+ pipeline:
1158
+ -
1159
+ $changeStream: {}
1160
+ command_name: aggregate
1161
+ database_name: *database_name
1162
+ result:
1163
+ success:
1164
+ -
1165
+ _id: "42"
1166
+ documentKey: "42"
1167
+ operationType: insert
1168
+ ns:
1169
+ db: *database_name
1170
+ coll: *collection_name
1171
+ fullDocument:
1172
+ x:
1173
+ $numberInt: "1"
@@ -58,7 +58,6 @@ tests:
58
58
  arguments:
59
59
  document:
60
60
  x: 1
61
- # https://jira.mongodb.org/browse/SPEC-1462
62
61
  expectations: ~
63
62
  result:
64
63
  success:
@@ -6,10 +6,14 @@ operations:
6
6
  events:
7
7
  - type: ConnectionCheckOutStarted
8
8
  address: 42
9
+ - type: ConnectionCreated
10
+ connectionId: 1
11
+ address: 42
12
+ - type: ConnectionReady
13
+ connectionId: 1
14
+ address: 42
9
15
  - type: ConnectionCheckedOut
10
16
  connectionId: 1
11
17
  address: 42
12
18
  ignore:
13
19
  - ConnectionPoolCreated
14
- - ConnectionCreated
15
- - ConnectionReady
@@ -7,6 +7,9 @@ operations:
7
7
  - name: waitForEvent
8
8
  event: ConnectionCreated
9
9
  count: 3
10
+ - name: waitForEvent
11
+ event: ConnectionReady
12
+ count: 3
10
13
  - name: checkOut
11
14
  events:
12
15
  - type: ConnectionPoolCreated
@@ -49,3 +49,27 @@ tests:
49
49
  auth: ~
50
50
  options:
51
51
  wtimeoutms: 10
52
+ -
53
+ description: "Empty integer option values are ignored"
54
+ uri: "mongodb://localhost/?maxIdleTimeMS="
55
+ valid: true
56
+ warning: true
57
+ hosts:
58
+ -
59
+ type: "hostname"
60
+ host: "localhost"
61
+ port: ~
62
+ auth: ~
63
+ options: ~
64
+ -
65
+ description: "Empty boolean option value are ignored"
66
+ uri: "mongodb://localhost/?journal="
67
+ valid: true
68
+ warning: true
69
+ hosts:
70
+ -
71
+ type: "hostname"
72
+ host: "localhost"
73
+ port: ~
74
+ auth: ~
75
+ options: ~
@@ -0,0 +1,15 @@
1
+ # maxStalenessSeconds must be at least 90 seconds, even with no known servers.
2
+ ---
3
+ topology_description:
4
+ type: ReplicaSetNoPrimary
5
+ servers:
6
+ - &1
7
+ address: a:27017
8
+ type: Unknown
9
+ - &2
10
+ address: b:27017
11
+ type: Unknown
12
+ read_preference:
13
+ mode: Nearest
14
+ maxStalenessSeconds: 1 # Too small.
15
+ error: true
@@ -1,4 +1,4 @@
1
- # maxStalenessSeconds must be at least 90 seconds, even with no known servers.
1
+ # valid maxStalenessSeconds and no known servers results in an empty set of suitable servers
2
2
  ---
3
3
  topology_description:
4
4
  type: ReplicaSetNoPrimary
@@ -11,5 +11,6 @@ topology_description:
11
11
  type: Unknown
12
12
  read_preference:
13
13
  mode: Nearest
14
- maxStalenessSeconds: 1 # Too small.
15
- error: true
14
+ maxStalenessSeconds: 90
15
+ suitable_servers: []
16
+ in_latency_window: []
@@ -7,6 +7,7 @@ topology_description:
7
7
  - &1
8
8
  address: a:27017
9
9
  type: Unknown
10
+ maxWireVersion: 5
10
11
  read_preference:
11
12
  mode: Nearest
12
13
  maxStalenessSeconds: 1
@@ -0,0 +1,96 @@
1
+ # Test SDAM error handling.
2
+ runOn:
3
+ # General failCommand requirements (this file does not use appName
4
+ # with failCommand).
5
+ - minServerVersion: "4.0"
6
+ topology: ["replicaset"]
7
+ - minServerVersion: "4.2"
8
+ topology: ["sharded"]
9
+
10
+ database_name: &database_name "sdam-tests"
11
+ collection_name: &collection_name "cancel-server-check"
12
+
13
+ data: []
14
+
15
+ tests:
16
+ - description: Cancel server check
17
+ clientOptions:
18
+ retryWrites: true
19
+ heartbeatFrequencyMS: 10000
20
+ # Server selection timeout MUST be less than heartbeatFrequencyMS for
21
+ # this test. This setting ensures that the retried insert will fail
22
+ # after 5 seconds if the driver does not properly cancel the in progress
23
+ # check.
24
+ serverSelectionTimeoutMS: 5000
25
+ appname: cancelServerCheckTest
26
+ operations:
27
+ # Perform an operation to ensure the node is discovered.
28
+ - name: insertOne
29
+ object: collection
30
+ arguments:
31
+ document:
32
+ _id: 1
33
+ # Configure the next inserts to fail with a non-timeout network error.
34
+ # This should:
35
+ # 1) Mark the server Unknown
36
+ # 2) Clear the connection pool
37
+ # 3) Cancel the in progress isMaster check and close the Monitor
38
+ # connection
39
+ # 4) The write will be then we retried, server selection will request an
40
+ # immediate check, and block for ~500ms until the next Monitor check
41
+ # proceeds.
42
+ # 5) The write will succeed on the second attempt.
43
+ - name: configureFailPoint
44
+ object: testRunner
45
+ arguments:
46
+ failPoint:
47
+ configureFailPoint: failCommand
48
+ mode: { times: 1 }
49
+ data:
50
+ failCommands: ["insert"]
51
+ closeConnection: True
52
+ - name: insertOne
53
+ object: collection
54
+ arguments:
55
+ document:
56
+ _id: 2
57
+ result:
58
+ insertedId: 2
59
+ # The first error should mark the server Unknown and then clear the pool.
60
+ - name: waitForEvent
61
+ object: testRunner
62
+ arguments:
63
+ event: ServerMarkedUnknownEvent
64
+ count: 1
65
+ - name: waitForEvent
66
+ object: testRunner
67
+ arguments:
68
+ event: PoolClearedEvent
69
+ count: 1
70
+ # Perform another operation to ensure the node still selectable.
71
+ - name: insertOne
72
+ object: collection
73
+ arguments:
74
+ document:
75
+ _id: 3
76
+ result:
77
+ insertedId: 3
78
+ # Assert the server was marked Unknown and pool was cleared exactly once.
79
+ - name: assertEventCount
80
+ object: testRunner
81
+ arguments:
82
+ event: ServerMarkedUnknownEvent
83
+ count: 1
84
+ - name: assertEventCount
85
+ object: testRunner
86
+ arguments:
87
+ event: PoolClearedEvent
88
+ count: 1
89
+
90
+ # Order of operations is non-deterministic so we cannot check events.
91
+ outcome:
92
+ collection:
93
+ data:
94
+ - {_id: 1}
95
+ - {_id: 2}
96
+ - {_id: 3}
@@ -0,0 +1,88 @@
1
+ # Test SDAM error handling.
2
+ runOn:
3
+ # failCommand appName requirements
4
+ - minServerVersion: "4.4"
5
+
6
+ database_name: &database_name "sdam-tests"
7
+ collection_name: &collection_name "connectTimeoutMS"
8
+
9
+ data: []
10
+
11
+ tests:
12
+ - description: connectTimeoutMS=0
13
+ clientOptions:
14
+ retryWrites: false
15
+ connectTimeoutMS: 0
16
+ heartbeatFrequencyMS: 500
17
+ appname: connectTimeoutMS=0
18
+ operations:
19
+ # Perform an operation to ensure the node is discovered.
20
+ - name: insertMany
21
+ object: collection
22
+ arguments:
23
+ documents:
24
+ - _id: 1
25
+ - _id: 2
26
+ # Block the next streaming isMaster check for longer than
27
+ # heartbeatFrequencyMS to ensure that the connection timeout remains
28
+ # unlimited.
29
+ - name: configureFailPoint
30
+ object: testRunner
31
+ arguments:
32
+ failPoint:
33
+ configureFailPoint: failCommand
34
+ mode: { times: 2 }
35
+ data:
36
+ failCommands: ["isMaster"]
37
+ appName: connectTimeoutMS=0
38
+ blockConnection: true
39
+ blockTimeMS: 550
40
+ - name: wait
41
+ object: testRunner
42
+ arguments:
43
+ ms: 750
44
+ # Perform an operation to ensure the node is still selectable.
45
+ - name: insertMany
46
+ object: collection
47
+ arguments:
48
+ documents:
49
+ - _id: 3
50
+ - _id: 4
51
+ # Assert that the server was never marked Unknown and the pool was never
52
+ # cleared.
53
+ - name: assertEventCount
54
+ object: testRunner
55
+ arguments:
56
+ event: ServerMarkedUnknownEvent
57
+ count: 0
58
+ - name: assertEventCount
59
+ object: testRunner
60
+ arguments:
61
+ event: PoolClearedEvent
62
+ count: 0
63
+
64
+ expectations:
65
+ - command_started_event:
66
+ command:
67
+ insert: *collection_name
68
+ documents:
69
+ - _id: 1
70
+ - _id: 2
71
+ command_name: insert
72
+ database_name: *database_name
73
+ - command_started_event:
74
+ command:
75
+ insert: *collection_name
76
+ documents:
77
+ - _id: 3
78
+ - _id: 4
79
+ command_name: insert
80
+ database_name: *database_name
81
+
82
+ outcome:
83
+ collection:
84
+ data:
85
+ - {_id: 1}
86
+ - {_id: 2}
87
+ - {_id: 3}
88
+ - {_id: 4}
@@ -0,0 +1,83 @@
1
+ # Test SDAM error handling.
2
+ runOn:
3
+ # failCommand appName requirements
4
+ - minServerVersion: "4.4"
5
+
6
+ database_name: &database_name "sdam-tests"
7
+ collection_name: &collection_name "find-network-error"
8
+
9
+ data: &data
10
+ - {_id: 1}
11
+ - {_id: 2}
12
+
13
+ tests:
14
+ - description: Reset server and pool after network error on find
15
+ failPoint:
16
+ configureFailPoint: failCommand
17
+ mode: { times: 1 }
18
+ data:
19
+ failCommands: ["find"]
20
+ closeConnection: true
21
+ appName: findNetworkErrorTest
22
+ clientOptions:
23
+ retryWrites: false
24
+ retryReads: false
25
+ appname: findNetworkErrorTest
26
+ operations:
27
+ - name: find
28
+ object: collection
29
+ arguments:
30
+ filter:
31
+ _id: 1
32
+ error: true
33
+ - name: waitForEvent
34
+ object: testRunner
35
+ arguments:
36
+ event: ServerMarkedUnknownEvent
37
+ count: 1
38
+ - name: waitForEvent
39
+ object: testRunner
40
+ arguments:
41
+ event: PoolClearedEvent
42
+ count: 1
43
+ # Perform another operation to ensure the node is rediscovered.
44
+ - name: insertMany
45
+ object: collection
46
+ arguments:
47
+ documents:
48
+ - _id: 5
49
+ - _id: 6
50
+ # Assert the server was marked Unknown and pool was cleared exactly once.
51
+ - name: assertEventCount
52
+ object: testRunner
53
+ arguments:
54
+ event: ServerMarkedUnknownEvent
55
+ count: 1
56
+ - name: assertEventCount
57
+ object: testRunner
58
+ arguments:
59
+ event: PoolClearedEvent
60
+ count: 1
61
+
62
+ expectations:
63
+ - command_started_event:
64
+ command:
65
+ find: *collection_name
66
+ command_name: find
67
+ database_name: *database_name
68
+ - command_started_event:
69
+ command:
70
+ insert: *collection_name
71
+ documents:
72
+ - _id: 5
73
+ - _id: 6
74
+ command_name: insert
75
+ database_name: *database_name
76
+
77
+ outcome:
78
+ collection:
79
+ data:
80
+ - {_id: 1}
81
+ - {_id: 2}
82
+ - {_id: 5}
83
+ - {_id: 6}
@@ -0,0 +1,116 @@
1
+ # Test SDAM error handling.
2
+ runOn:
3
+ # failCommand appName requirements
4
+ - minServerVersion: "4.4"
5
+
6
+ database_name: &database_name "sdam-tests"
7
+ collection_name: &collection_name "find-shutdown-error"
8
+
9
+ data: []
10
+
11
+ tests:
12
+ - description: Concurrent shutdown error on find
13
+ clientOptions:
14
+ retryWrites: false
15
+ retryReads: false
16
+ heartbeatFrequencyMS: 500
17
+ appname: shutdownErrorFindTest
18
+ operations:
19
+ # Perform an operation to ensure the node is discovered.
20
+ - name: insertOne
21
+ object: collection
22
+ arguments:
23
+ document:
24
+ _id: 1
25
+ # Configure the next two finds to fail with a non-timeout shutdown
26
+ # errors. Block the connection for 500ms to ensure both operations check
27
+ # out connections from the same pool generation.
28
+ - name: configureFailPoint
29
+ object: testRunner
30
+ arguments:
31
+ failPoint:
32
+ configureFailPoint: failCommand
33
+ mode: { times: 2 }
34
+ data:
35
+ failCommands: ["find"]
36
+ appName: shutdownErrorFindTest
37
+ errorCode: 91
38
+ blockConnection: true
39
+ blockTimeMS: 500
40
+ # Start threads.
41
+ - name: startThread
42
+ object: testRunner
43
+ arguments:
44
+ name: thread1
45
+ - name: startThread
46
+ object: testRunner
47
+ arguments:
48
+ name: thread2
49
+ # Perform concurrent find operations. Both fail with shutdown errors.
50
+ - name: runOnThread
51
+ object: testRunner
52
+ arguments:
53
+ name: thread1
54
+ operation:
55
+ name: find
56
+ object: collection
57
+ arguments:
58
+ filter:
59
+ _id: 1
60
+ error: true
61
+ - name: runOnThread
62
+ object: testRunner
63
+ arguments:
64
+ name: thread2
65
+ operation:
66
+ name: find
67
+ object: collection
68
+ arguments:
69
+ filter:
70
+ _id: 1
71
+ error: true
72
+ # Stop threads.
73
+ - name: waitForThread
74
+ object: testRunner
75
+ arguments:
76
+ name: thread1
77
+ - name: waitForThread
78
+ object: testRunner
79
+ arguments:
80
+ name: thread2
81
+ # The first shutdown error should mark the server Unknown and then clear
82
+ # the pool.
83
+ - name: waitForEvent
84
+ object: testRunner
85
+ arguments:
86
+ event: ServerMarkedUnknownEvent
87
+ count: 1
88
+ - name: waitForEvent
89
+ object: testRunner
90
+ arguments:
91
+ event: PoolClearedEvent
92
+ count: 1
93
+ # Perform an operation to ensure the node is rediscovered.
94
+ - name: insertOne
95
+ object: collection
96
+ arguments:
97
+ document:
98
+ _id: 4
99
+ # Assert the server was marked Unknown and pool was cleared exactly once.
100
+ - name: assertEventCount
101
+ object: testRunner
102
+ arguments:
103
+ event: ServerMarkedUnknownEvent
104
+ count: 1
105
+ - name: assertEventCount
106
+ object: testRunner
107
+ arguments:
108
+ event: PoolClearedEvent
109
+ count: 1
110
+
111
+ # Order of operations is non-deterministic so we cannot check events.
112
+ outcome:
113
+ collection:
114
+ data:
115
+ - {_id: 1}
116
+ - {_id: 4}