mongo 2.15.0 → 2.16.0.alpha1

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 (328) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +1 -1
  3. data/README.md +1 -1
  4. data/lib/mongo/bulk_write.rb +2 -2
  5. data/lib/mongo/client.rb +45 -5
  6. data/lib/mongo/cluster/periodic_executor.rb +4 -3
  7. data/lib/mongo/cluster/reapers/cursor_reaper.rb +76 -43
  8. data/lib/mongo/cluster/sdam_flow.rb +9 -3
  9. data/lib/mongo/cluster/topology/base.rb +13 -9
  10. data/lib/mongo/cluster/topology/load_balanced.rb +102 -0
  11. data/lib/mongo/cluster/topology.rb +28 -8
  12. data/lib/mongo/cluster.rb +136 -51
  13. data/lib/mongo/collection/view/aggregation.rb +5 -10
  14. data/lib/mongo/collection/view/builder/aggregation.rb +6 -5
  15. data/lib/mongo/collection/view/builder/map_reduce.rb +12 -49
  16. data/lib/mongo/collection/view/builder.rb +0 -4
  17. data/lib/mongo/collection/view/iterable.rb +58 -24
  18. data/lib/mongo/collection/view/map_reduce.rb +39 -15
  19. data/lib/mongo/collection/view/readable.rb +60 -51
  20. data/lib/mongo/collection/view/writable.rb +178 -175
  21. data/lib/mongo/collection/view.rb +15 -21
  22. data/lib/mongo/collection.rb +13 -13
  23. data/lib/mongo/cursor/kill_spec.rb +38 -0
  24. data/lib/mongo/cursor.rb +72 -31
  25. data/lib/mongo/database/view.rb +1 -1
  26. data/lib/mongo/error/bad_load_balancer_target.rb +26 -0
  27. data/lib/mongo/error/missing_service_id.rb +26 -0
  28. data/lib/mongo/error/no_service_connection_available.rb +49 -0
  29. data/lib/mongo/error/notable.rb +7 -0
  30. data/lib/mongo/error.rb +3 -0
  31. data/lib/mongo/grid/fs_bucket.rb +21 -2
  32. data/lib/mongo/id.rb +7 -5
  33. data/lib/mongo/index/view.rb +22 -41
  34. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +7 -4
  35. data/lib/mongo/monitoring/event/command_failed.rb +1 -1
  36. data/lib/mongo/monitoring/event/command_started.rb +2 -0
  37. data/lib/mongo/monitoring/publishable.rb +2 -2
  38. data/lib/mongo/operation/aggregate/command.rb +8 -0
  39. data/lib/mongo/operation/context.rb +19 -1
  40. data/lib/mongo/operation/count/command.rb +6 -0
  41. data/lib/mongo/operation/count/op_msg.rb +6 -0
  42. data/lib/mongo/operation/create/command.rb +7 -1
  43. data/lib/mongo/operation/create/op_msg.rb +7 -0
  44. data/lib/mongo/operation/create_index/command.rb +17 -1
  45. data/lib/mongo/operation/create_index/op_msg.rb +17 -4
  46. data/lib/mongo/operation/delete/command.rb +6 -3
  47. data/lib/mongo/operation/delete/legacy.rb +9 -2
  48. data/lib/mongo/operation/delete/op_msg.rb +8 -1
  49. data/lib/mongo/operation/distinct/command.rb +6 -0
  50. data/lib/mongo/operation/distinct/op_msg.rb +7 -0
  51. data/lib/mongo/operation/explain/command.rb +13 -1
  52. data/lib/mongo/operation/explain/legacy.rb +12 -5
  53. data/lib/mongo/operation/explain/op_msg.rb +9 -1
  54. data/lib/mongo/operation/find/builder/command.rb +110 -0
  55. data/lib/mongo/{collection/view → operation/find}/builder/flags.rb +10 -14
  56. data/lib/mongo/operation/find/builder/legacy.rb +123 -0
  57. data/lib/mongo/{collection/view → operation/find}/builder/modifiers.rb +31 -25
  58. data/lib/mongo/{cursor → operation/find}/builder.rb +4 -4
  59. data/lib/mongo/operation/find/command.rb +9 -0
  60. data/lib/mongo/operation/find/legacy.rb +10 -1
  61. data/lib/mongo/operation/find/op_msg.rb +12 -0
  62. data/lib/mongo/operation/find.rb +1 -0
  63. data/lib/mongo/operation/get_more/command.rb +1 -0
  64. data/lib/mongo/operation/get_more/command_builder.rb +38 -0
  65. data/lib/mongo/operation/get_more/op_msg.rb +1 -0
  66. data/lib/mongo/operation/get_more.rb +1 -0
  67. data/lib/mongo/operation/kill_cursors/command.rb +8 -0
  68. data/lib/mongo/operation/kill_cursors/command_builder.rb +35 -0
  69. data/lib/mongo/operation/kill_cursors/legacy.rb +2 -1
  70. data/lib/mongo/operation/kill_cursors/op_msg.rb +10 -0
  71. data/lib/mongo/operation/kill_cursors.rb +1 -0
  72. data/lib/mongo/operation/map_reduce/command.rb +8 -0
  73. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  74. data/lib/mongo/operation/shared/executable.rb +15 -1
  75. data/lib/mongo/operation/shared/polymorphic_operation.rb +1 -1
  76. data/lib/mongo/operation/shared/read_preference_supported.rb +3 -1
  77. data/lib/mongo/operation/shared/response_handling.rb +1 -0
  78. data/lib/mongo/operation/shared/sessions_supported.rb +12 -12
  79. data/lib/mongo/operation/shared/specifiable.rb +11 -29
  80. data/lib/mongo/operation/shared/validatable.rb +87 -0
  81. data/lib/mongo/operation/shared/write.rb +1 -1
  82. data/lib/mongo/operation/update/command.rb +6 -3
  83. data/lib/mongo/operation/update/legacy.rb +19 -11
  84. data/lib/mongo/operation/update/op_msg.rb +7 -4
  85. data/lib/mongo/operation/write_command/command.rb +51 -0
  86. data/lib/mongo/operation/write_command/op_msg.rb +43 -0
  87. data/lib/mongo/operation/write_command.rb +32 -0
  88. data/lib/mongo/operation.rb +10 -0
  89. data/lib/mongo/protocol/query.rb +35 -18
  90. data/lib/mongo/server/connection.rb +25 -3
  91. data/lib/mongo/server/connection_base.rb +12 -1
  92. data/lib/mongo/server/connection_common.rb +38 -1
  93. data/lib/mongo/server/connection_pool/generation_manager.rb +71 -0
  94. data/lib/mongo/server/connection_pool.rb +100 -27
  95. data/lib/mongo/server/description/features.rb +17 -16
  96. data/lib/mongo/server/description/load_balancer.rb +33 -0
  97. data/lib/mongo/server/description.rb +85 -6
  98. data/lib/mongo/server/monitor/connection.rb +5 -6
  99. data/lib/mongo/server/monitor.rb +2 -1
  100. data/lib/mongo/server/pending_connection.rb +47 -31
  101. data/lib/mongo/server/push_monitor.rb +6 -0
  102. data/lib/mongo/server.rb +73 -26
  103. data/lib/mongo/server_selector/base.rb +5 -1
  104. data/lib/mongo/session/session_pool.rb +11 -0
  105. data/lib/mongo/session.rb +21 -1
  106. data/lib/mongo/socket/ocsp_verifier.rb +6 -37
  107. data/lib/mongo/uri/options_mapper.rb +1 -0
  108. data/lib/mongo/uri/srv_protocol.rb +6 -8
  109. data/lib/mongo/uri.rb +18 -0
  110. data/lib/mongo/utils.rb +0 -7
  111. data/lib/mongo/version.rb +1 -1
  112. data/mongo.gemspec +1 -1
  113. data/spec/integration/auth_spec.rb +31 -1
  114. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  115. data/spec/integration/bulk_write_spec.rb +1 -1
  116. data/spec/integration/change_stream_spec.rb +3 -3
  117. data/spec/integration/client_construction_spec.rb +54 -0
  118. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +1 -1
  119. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +1 -1
  120. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +1 -1
  121. data/spec/integration/client_side_encryption/data_key_spec.rb +1 -1
  122. data/spec/integration/client_spec.rb +2 -0
  123. data/spec/integration/command_monitoring_spec.rb +1 -1
  124. data/spec/integration/command_spec.rb +1 -1
  125. data/spec/integration/connection_spec.rb +52 -35
  126. data/spec/integration/crud_spec.rb +174 -1
  127. data/spec/integration/cursor_pinning_spec.rb +121 -0
  128. data/spec/integration/cursor_reaping_spec.rb +8 -4
  129. data/spec/integration/fork_reconnect_spec.rb +1 -5
  130. data/spec/integration/get_more_spec.rb +1 -1
  131. data/spec/integration/heartbeat_events_spec.rb +1 -1
  132. data/spec/integration/map_reduce_spec.rb +77 -0
  133. data/spec/integration/query_cache_spec.rb +47 -2
  134. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  135. data/spec/integration/read_concern_spec.rb +1 -1
  136. data/spec/integration/read_preference_spec.rb +1 -1
  137. data/spec/integration/reconnect_spec.rb +30 -12
  138. data/spec/integration/retryable_errors_spec.rb +1 -1
  139. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  140. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  141. data/spec/integration/sdam_error_handling_spec.rb +5 -3
  142. data/spec/integration/sdam_events_spec.rb +35 -19
  143. data/spec/integration/sdam_prose_spec.rb +1 -1
  144. data/spec/integration/server_monitor_spec.rb +1 -0
  145. data/spec/integration/server_selector_spec.rb +22 -5
  146. data/spec/integration/server_spec.rb +2 -0
  147. data/spec/integration/srv_monitoring_spec.rb +1 -1
  148. data/spec/integration/step_down_spec.rb +1 -1
  149. data/spec/integration/transaction_pinning_spec.rb +120 -0
  150. data/spec/integration/versioned_api_examples_spec.rb +45 -0
  151. data/spec/integration/x509_auth_spec.rb +1 -1
  152. data/spec/lite_spec_helper.rb +1 -2
  153. data/spec/mongo/address/unix_spec.rb +1 -0
  154. data/spec/mongo/auth/cr_spec.rb +2 -3
  155. data/spec/mongo/auth/ldap_spec.rb +2 -3
  156. data/spec/mongo/auth/scram_spec.rb +2 -3
  157. data/spec/mongo/auth/user/view_spec.rb +1 -1
  158. data/spec/mongo/auth/x509_spec.rb +2 -3
  159. data/spec/mongo/bulk_write_spec.rb +3 -3
  160. data/spec/mongo/client_construction_spec.rb +259 -28
  161. data/spec/mongo/client_spec.rb +6 -4
  162. data/spec/mongo/cluster/cursor_reaper_spec.rb +36 -21
  163. data/spec/mongo/cluster/periodic_executor_spec.rb +3 -1
  164. data/spec/mongo/cluster_spec.rb +44 -3
  165. data/spec/mongo/collection/view/aggregation_spec.rb +1 -1
  166. data/spec/mongo/collection/view/builder/find_command_spec.rb +4 -0
  167. data/spec/mongo/collection/view/builder/op_query_spec.rb +4 -0
  168. data/spec/mongo/collection/view/map_reduce_spec.rb +1 -1
  169. data/spec/mongo/collection_crud_spec.rb +7 -2
  170. data/spec/mongo/collection_ddl_spec.rb +1 -1
  171. data/spec/mongo/collection_spec.rb +1 -1
  172. data/spec/mongo/cursor/builder/get_more_command_spec.rb +4 -0
  173. data/spec/mongo/cursor/builder/op_get_more_spec.rb +4 -0
  174. data/spec/mongo/cursor_spec.rb +15 -5
  175. data/spec/mongo/database_spec.rb +15 -15
  176. data/spec/mongo/error/operation_failure_heavy_spec.rb +1 -1
  177. data/spec/mongo/grid/fs_bucket_spec.rb +18 -12
  178. data/spec/mongo/grid/stream/write_spec.rb +3 -9
  179. data/spec/mongo/grid/stream_spec.rb +1 -1
  180. data/spec/mongo/index/view_spec.rb +2 -2
  181. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
  182. data/spec/mongo/{collection/view → operation/find}/builder/flags_spec.rb +2 -2
  183. data/spec/mongo/{collection/view → operation/find}/builder/modifiers_spec.rb +2 -2
  184. data/spec/mongo/operation/find/legacy_spec.rb +1 -0
  185. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  186. data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
  187. data/spec/mongo/operation/kill_cursors_spec.rb +4 -1
  188. data/spec/mongo/operation/read_preference_legacy_spec.rb +4 -0
  189. data/spec/mongo/operation/read_preference_op_msg_spec.rb +2 -0
  190. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  191. data/spec/mongo/operation/update/op_msg_spec.rb +1 -1
  192. data/spec/mongo/query_cache_spec.rb +6 -2
  193. data/spec/mongo/server/connection_common_spec.rb +62 -11
  194. data/spec/mongo/server/connection_pool_spec.rb +73 -7
  195. data/spec/mongo/server/connection_spec.rb +138 -43
  196. data/spec/mongo/server/description_spec.rb +1 -1
  197. data/spec/mongo/server/monitor_spec.rb +4 -3
  198. data/spec/mongo/session/session_pool_spec.rb +42 -10
  199. data/spec/mongo/session_transaction_spec.rb +15 -30
  200. data/spec/mongo/socket/unix_spec.rb +1 -0
  201. data/spec/mongo/uri_option_parsing_spec.rb +38 -5
  202. data/spec/runners/change_streams/test.rb +1 -1
  203. data/spec/runners/cmap.rb +1 -1
  204. data/spec/runners/connection_string.rb +7 -3
  205. data/spec/runners/crud/operation.rb +5 -3
  206. data/spec/runners/crud/requirement.rb +1 -0
  207. data/spec/runners/crud.rb +1 -1
  208. data/spec/runners/sdam.rb +2 -1
  209. data/spec/runners/transactions/test.rb +2 -2
  210. data/spec/runners/unified/assertions.rb +2 -3
  211. data/spec/runners/unified/event_subscriber.rb +2 -2
  212. data/spec/runners/unified/test.rb +3 -0
  213. data/spec/runners/unified.rb +1 -1
  214. data/spec/shared/lib/mrss/constraints.rb +11 -5
  215. data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
  216. data/spec/shared/lib/mrss/server_version_registry.rb +17 -12
  217. data/spec/shared/share/Dockerfile.erb +2 -1
  218. data/spec/shared/shlib/server.sh +70 -20
  219. data/spec/spec_tests/change_streams_spec.rb +1 -1
  220. data/spec/spec_tests/cmap_spec.rb +4 -1
  221. data/spec/spec_tests/command_monitoring_spec.rb +2 -2
  222. data/spec/spec_tests/data/command_monitoring/find.yml +9 -9
  223. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +2 -1
  224. data/spec/spec_tests/data/crud/read/aggregate-out.yml +1 -0
  225. data/spec/spec_tests/data/crud/read/count-collation.yml +2 -1
  226. data/spec/spec_tests/data/crud/read/distinct-collation.yml +2 -1
  227. data/spec/spec_tests/data/crud/read/find-collation.yml +2 -1
  228. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +2 -1
  229. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +2 -1
  230. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +2 -1
  231. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +3 -2
  232. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +2 -1
  233. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +3 -2
  234. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +3 -2
  235. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +2 -1
  236. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +2 -1
  237. data/spec/spec_tests/data/load_balancers/event-monitoring.yml +99 -0
  238. data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +36 -0
  239. data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +56 -0
  240. data/spec/spec_tests/data/load_balancers/server-selection.yml +50 -0
  241. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +1 -1
  242. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +1 -1
  243. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +1 -1
  244. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +1 -1
  245. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +1 -1
  246. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +1 -1
  247. data/spec/spec_tests/data/retryable_reads/mapReduce.yml +3 -1
  248. data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +25 -0
  249. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +2 -0
  250. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +2 -0
  251. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +3 -1
  252. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +3 -1
  253. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +2 -0
  254. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +2 -0
  255. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +2 -0
  256. data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
  257. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +13 -0
  258. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +6 -0
  259. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +5 -0
  260. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +10 -0
  261. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-false.yml +0 -0
  262. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-true.yml +0 -0
  263. data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +15 -0
  264. data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +10 -0
  265. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/longer-parent-in-return.yml +0 -0
  266. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/misformatted-option.yml +0 -0
  267. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/no-results.yml +0 -0
  268. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/not-enough-parts.yml +0 -0
  269. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-result-default-port.yml +0 -0
  270. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record-multiple-strings.yml +0 -0
  271. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record.yml +0 -0
  272. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch1.yml +0 -0
  273. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch2.yml +0 -0
  274. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch3.yml +0 -0
  275. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch4.yml +0 -0
  276. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch5.yml +0 -0
  277. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-too-short.yml +0 -0
  278. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-wrong.yml +0 -0
  279. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-default-port.yml +0 -0
  280. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-nonstandard-port.yml +0 -0
  281. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-txt-records.yml +0 -0
  282. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-not-allowed-option.yml +0 -0
  283. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-ssl-option.yml +0 -0
  284. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-uri-option.yml +0 -0
  285. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-unallowed-option.yml +0 -0
  286. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +13 -0
  287. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +12 -0
  288. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-port.yml +0 -0
  289. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-two-hosts.yml +0 -0
  290. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +2 -0
  291. data/spec/spec_tests/data/transactions/retryable-abort.yml +2 -0
  292. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +2 -0
  293. data/spec/spec_tests/data/transactions/retryable-commit.yml +2 -0
  294. data/spec/spec_tests/data/transactions/retryable-writes.yml +2 -0
  295. data/spec/spec_tests/data/uri_options/connection-options.yml +60 -0
  296. data/spec/spec_tests/load_balancers_spec.rb +15 -0
  297. data/spec/spec_tests/retryable_reads_spec.rb +2 -2
  298. data/spec/spec_tests/retryable_writes_spec.rb +1 -1
  299. data/spec/spec_tests/sdam_integration_spec.rb +1 -1
  300. data/spec/spec_tests/sdam_monitoring_spec.rb +10 -5
  301. data/spec/spec_tests/sdam_spec.rb +1 -1
  302. data/spec/spec_tests/seed_list_discovery_spec.rb +118 -0
  303. data/spec/spec_tests/uri_options_spec.rb +4 -4
  304. data/spec/stress/fork_reconnect_stress_spec.rb +1 -5
  305. data/spec/stress/push_monitor_close_spec.rb +44 -0
  306. data/spec/support/certificates/atlas-ocsp-ca.crt +82 -90
  307. data/spec/support/certificates/atlas-ocsp.crt +127 -122
  308. data/spec/support/common_shortcuts.rb +2 -3
  309. data/spec/support/matchers.rb +13 -0
  310. data/spec/support/shared/auth_context.rb +16 -0
  311. data/spec/support/shared/session.rb +2 -2
  312. data/spec/support/spec_config.rb +9 -10
  313. data/spec/support/using_hash.rb +31 -0
  314. data/spec/support/utils.rb +1 -1
  315. data.tar.gz.sig +2 -4
  316. metadata +1050 -1004
  317. metadata.gz.sig +0 -0
  318. data/lib/mongo/collection/view/builder/find_command.rb +0 -173
  319. data/lib/mongo/collection/view/builder/op_query.rb +0 -94
  320. data/lib/mongo/cursor/builder/get_more_command.rb +0 -80
  321. data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -111
  322. data/lib/mongo/cursor/builder/op_get_more.rb +0 -64
  323. data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -106
  324. data/lib/mongo/server/context.rb +0 -72
  325. data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -66
  326. data/spec/runners/unified/using_hash.rb +0 -34
  327. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +0 -79
  328. data/spec/support/event_subscriber.rb +0 -221
@@ -0,0 +1,13 @@
1
+ uri: "mongodb+srv://test1.test.build.10gen.cc/adminDB?replicaSet=repl0"
2
+ seeds:
3
+ - localhost.test.build.10gen.cc:27017
4
+ - localhost.test.build.10gen.cc:27018
5
+ hosts:
6
+ - localhost:27017
7
+ - localhost:27018
8
+ - localhost:27019
9
+ options:
10
+ replicaSet: repl0
11
+ ssl: true
12
+ parsed_options:
13
+ auth_database: adminDB
@@ -0,0 +1,12 @@
1
+ uri: "mongodb+srv://auser:apass@test1.test.build.10gen.cc/?replicaSet=repl0"
2
+ seeds:
3
+ - localhost.test.build.10gen.cc:27017
4
+ - localhost.test.build.10gen.cc:27018
5
+ hosts:
6
+ - localhost:27017
7
+ - localhost:27018
8
+ - localhost:27019
9
+ parsed_options:
10
+ user: auser
11
+ password: apass
12
+ comment: Should preserve auth credentials
@@ -2,6 +2,8 @@ runOn:
2
2
  -
3
3
  minServerVersion: "4.3.1"
4
4
  topology: ["replicaset", "sharded"]
5
+ # https://jira.mongodb.org/browse/RUBY-2776
6
+ serverless: forbid
5
7
 
6
8
  database_name: &database_name "transaction-tests"
7
9
  collection_name: &collection_name "test"
@@ -5,6 +5,8 @@ runOn:
5
5
  -
6
6
  minServerVersion: "4.1.8"
7
7
  topology: ["sharded"]
8
+ # https://jira.mongodb.org/browse/RUBY-2776
9
+ serverless: forbid
8
10
 
9
11
  database_name: &database_name "transaction-tests"
10
12
  collection_name: &collection_name "test"
@@ -2,6 +2,8 @@ runOn:
2
2
  -
3
3
  minServerVersion: "4.3.1"
4
4
  topology: ["replicaset", "sharded"]
5
+ # https://jira.mongodb.org/browse/RUBY-2776
6
+ serverless: forbid
5
7
 
6
8
  database_name: &database_name "transaction-tests"
7
9
  collection_name: &collection_name "test"
@@ -5,6 +5,8 @@ runOn:
5
5
  -
6
6
  minServerVersion: "4.1.8"
7
7
  topology: ["sharded"]
8
+ # https://jira.mongodb.org/browse/RUBY-2776
9
+ serverless: forbid
8
10
 
9
11
  database_name: &database_name "transaction-tests"
10
12
  collection_name: &collection_name "test"
@@ -5,6 +5,8 @@ runOn:
5
5
  -
6
6
  minServerVersion: "4.1.8"
7
7
  topology: ["sharded"]
8
+ # https://jira.mongodb.org/browse/RUBY-2776
9
+ serverless: forbid
8
10
 
9
11
  database_name: &database_name "transaction-tests"
10
12
  collection_name: &collection_name "test"
@@ -147,3 +147,63 @@ tests:
147
147
  hosts: ~
148
148
  auth: ~
149
149
  options: {}
150
+ -
151
+ description: loadBalanced=true
152
+ uri: "mongodb://example.com/?loadBalanced=true"
153
+ valid: true
154
+ warning: false
155
+ hosts: ~
156
+ auth: ~
157
+ options:
158
+ loadBalanced: true
159
+ -
160
+ description: loadBalanced=true with directConnection=false
161
+ uri: "mongodb://example.com/?loadBalanced=true&directConnection=false"
162
+ valid: true
163
+ warning: false
164
+ hosts: ~
165
+ auth: ~
166
+ options:
167
+ loadBalanced: true
168
+ directConnection: false
169
+ -
170
+ description: loadBalanced=false
171
+ uri: "mongodb://example.com/?loadBalanced=false"
172
+ valid: true
173
+ warning: false
174
+ hosts: ~
175
+ auth: ~
176
+ options:
177
+ loadBalanced: false
178
+ -
179
+ description: Invalid loadBalanced value
180
+ uri: "mongodb://example.com/?loadBalanced=1"
181
+ valid: true
182
+ warning: true
183
+ hosts: ~
184
+ auth: ~
185
+ options: {}
186
+ -
187
+ description: loadBalanced=true with multiple hosts causes an error
188
+ uri: "mongodb://example1,example2/?loadBalanced=true"
189
+ valid: false
190
+ warning: false
191
+ hosts: ~
192
+ auth: ~
193
+ options: {}
194
+ -
195
+ description: loadBalanced=true with directConnection=true causes an error
196
+ uri: "mongodb://example.com/?loadBalanced=true&directConnection=true"
197
+ valid: false
198
+ warning: false
199
+ hosts: ~
200
+ auth: ~
201
+ options: {}
202
+ -
203
+ description: loadBalanced=true with replicaSet causes an error
204
+ uri: "mongodb://example.com/?loadBalanced=true&replicaSet=replset"
205
+ valid: false
206
+ warning: false
207
+ hosts: ~
208
+ auth: ~
209
+ options: {}
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require 'spec_helper'
5
+
6
+ require 'runners/unified'
7
+
8
+ base = "#{CURRENT_PATH}/spec_tests/data/load_balancers"
9
+ LOAD_BALANCER_TESTS = Dir.glob("#{base}/**/*.yml").sort
10
+
11
+ describe 'Load balancer spec tests' do
12
+ require_topology :load_balanced
13
+
14
+ define_unified_spec_tests(base, LOAD_BALANCER_TESTS)
15
+ end
@@ -7,7 +7,7 @@ require 'runners/crud'
7
7
 
8
8
  describe 'Retryable reads spec tests' do
9
9
  require_wired_tiger
10
- require_no_multi_shard
10
+ require_no_multi_mongos
11
11
 
12
12
  define_crud_spec_tests(RETRYABLE_READS_TESTS) do |spec, req, test|
13
13
  let(:client) do
@@ -19,7 +19,7 @@ describe 'Retryable reads spec tests' do
19
19
  end
20
20
 
21
21
  describe 'Retryable reads spec tests - legacy' do
22
- require_no_multi_shard
22
+ require_no_multi_mongos
23
23
 
24
24
  define_crud_spec_tests(RETRYABLE_READS_TESTS) do |spec, req, test|
25
25
  let(:client_options) do
@@ -7,7 +7,7 @@ require 'runners/crud'
7
7
 
8
8
  describe 'Retryable writes spec tests' do
9
9
  require_wired_tiger
10
- require_no_multi_shard
10
+ require_no_multi_mongos
11
11
 
12
12
  # Do not run these tests when write retries are disabled globally -
13
13
  # the tests won't work in that case and testing them with retries enabled
@@ -9,7 +9,7 @@ require 'runners/transactions'
9
9
  SDAM_INTEGRATION_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/sdam_integration/*.yml").sort
10
10
 
11
11
  describe 'SDAM integration tests' do
12
- require_no_multi_shard
12
+ require_no_multi_mongos
13
13
  require_wired_tiger
14
14
 
15
15
  define_transactions_spec_tests(SDAM_INTEGRATION_TESTS)
@@ -16,7 +16,7 @@ describe 'SDAM Monitoring' do
16
16
  context("#{spec.description} (#{file.sub(%r'.*/data/sdam_monitoring/', '')})") do
17
17
 
18
18
  before(:all) do
19
- @subscriber = PhasedEventSubscriber.new
19
+ @subscriber = Mrss::PhasedEventSubscriber.new
20
20
  sdam_proc = lambda do |client|
21
21
  client.subscribe(Mongo::Monitoring::SERVER_OPENING, @subscriber)
22
22
  client.subscribe(Mongo::Monitoring::SERVER_CLOSED, @subscriber)
@@ -39,8 +39,13 @@ describe 'SDAM Monitoring' do
39
39
  # Since we set monitoring_io: false, servers are not monitored
40
40
  # by the cluster. Start monitoring on them manually (this publishes
41
41
  # the server opening event but, again due to monitoring_io being
42
- # false, does not do network I/O or change server status)>
43
- server.start_monitoring
42
+ # false, does not do network I/O or change server status).
43
+ #
44
+ # If the server is a load balancer, it doesn't normally get monitored
45
+ # so don't start here either.
46
+ unless server.load_balancer?
47
+ server.start_monitoring
48
+ end
44
49
  end
45
50
  end
46
51
 
@@ -53,7 +58,7 @@ describe 'SDAM Monitoring' do
53
58
  context("Phase: #{phase_index + 1}") do
54
59
 
55
60
  before(:all) do
56
- phase.responses.each do |response|
61
+ phase.responses&.each do |response|
57
62
  # For each response in the phase, we need to change that server's description.
58
63
  server = find_server(@client, response.address)
59
64
  server ||= @servers_cache[response.address.to_s]
@@ -68,7 +73,7 @@ describe 'SDAM Monitoring' do
68
73
  result['minWireVersion'] ||= 0
69
74
  result['maxWireVersion'] ||= 0
70
75
  new_description = Mongo::Server::Description.new(
71
- server.description.address, result, 0.5)
76
+ server.description.address, result, average_round_trip_time: 0.5)
72
77
  @client.cluster.run_sdam_flow(server.description, new_description)
73
78
  end
74
79
  @subscriber.phase_finished(phase_index)
@@ -98,7 +98,7 @@ describe 'Server Discovery and Monitoring' do
98
98
  result['minWireVersion'] ||= 0
99
99
  result['maxWireVersion'] ||= 0
100
100
  new_description = Mongo::Server::Description.new(
101
- server.description.address, result, 0.5)
101
+ server.description.address, result, average_round_trip_time: 0.5)
102
102
  @client.cluster.run_sdam_flow(server.description, new_description)
103
103
  end
104
104
 
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
4
+ require 'lite_spec_helper'
5
+
6
+ require 'support/using_hash'
7
+ require 'runners/connection_string'
8
+
9
+ SEED_LIST_DISCOVERY_TESTS = Dir.glob("#{CURRENT_PATH}/spec_tests/data/seed_list_discovery/**/*.yml").sort
10
+
11
+ describe 'DNS Seedlist Discovery' do
12
+ require_external_connectivity
13
+
14
+ include Mongo::ConnectionString
15
+
16
+ SEED_LIST_DISCOVERY_TESTS.each do |test_path|
17
+
18
+ spec = YAML.load(File.read(test_path))
19
+
20
+ test = Mongo::ConnectionString::Test.new(spec)
21
+
22
+ context(File.basename(test_path)) do
23
+
24
+ if test.raise_error?
25
+ context 'the uri is invalid' do
26
+
27
+ let(:valid_errors) do
28
+ [
29
+ Mongo::Error::InvalidTXTRecord,
30
+ Mongo::Error::NoSRVRecords,
31
+ Mongo::Error::InvalidURI,
32
+ Mongo::Error::MismatchedDomain,
33
+ # This is unfortunate. RUBY-2624
34
+ ArgumentError,
35
+ ]
36
+ end
37
+
38
+ let(:error) do
39
+ begin
40
+ test.client
41
+ rescue => ex
42
+ end
43
+ ex
44
+ end
45
+
46
+ it 'raises an error' do
47
+ expect(valid_errors).to include(error.class)
48
+ end
49
+ end
50
+
51
+ else
52
+
53
+ context 'the uri is valid' do
54
+
55
+ it 'does not raise an exception' do
56
+ expect(test.uri).to be_a(Mongo::URI::SRVProtocol)
57
+ end
58
+
59
+ if test.seeds
60
+ # DNS seed list tests specify both seeds and hosts.
61
+ # To get the hosts, the client must do SDAM (as required in the
62
+ # spec tests' description), but this isn't testing DNS seed list -
63
+ # it is testing SDAM. Plus, all of the hosts are always the same.
64
+ # If seed list is given in the expectations, just test the seed
65
+ # list and not the expanded hosts.
66
+ it 'creates a client with the correct seeds' do
67
+ expect(test.client).to have_hosts(test, test.seeds)
68
+ end
69
+ else
70
+ it 'creates a client with the correct hosts' do
71
+ expect(test.client).to have_hosts(test, test.hosts)
72
+ end
73
+ end
74
+
75
+ if test.expected_options
76
+ it 'creates a client with the correct uri options' do
77
+ mapped = Mongo::URI::OptionsMapper.new.ruby_to_smc(test.client.options)
78
+ # Connection string spec tests do not use canonical URI option names
79
+ actual = Utils.downcase_keys(mapped)
80
+ expected = Utils.downcase_keys(test.expected_options)
81
+ # SRV tests use ssl URI option instead of tls one
82
+ if expected.key?('ssl') && !expected.key?('tls')
83
+ expected['tls'] = expected.delete('ssl')
84
+ end
85
+ # The client object contains auth source in options which
86
+ # isn't asserted in some tests.
87
+ if actual.key?('authsource') && !expected.key?('authsource')
88
+ actual.delete('authsource')
89
+ end
90
+ actual.should == expected
91
+ end
92
+ end
93
+
94
+ if test.non_uri_options
95
+ it 'creates a client with the correct non-uri options' do
96
+ opts = UsingHash[test.non_uri_options]
97
+ if user = opts.use('user')
98
+ test.client.options[:user].should == user
99
+ end
100
+ if password = opts.use('password')
101
+ test.client.options[:password].should == password
102
+ end
103
+ if db = opts.use('db')
104
+ test.client.database.name.should == db
105
+ end
106
+ if auth_source = opts.use('auth_database')
107
+ Mongo::Auth::User.new(test.client.options).auth_source == auth_source
108
+ end
109
+ unless opts.empty?
110
+ raise "Unhandled keys: #{opts}"
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -52,8 +52,8 @@ describe 'URI options' do
52
52
  expect(test.client).to match_auth(test)
53
53
  end
54
54
 
55
- if test.options
56
- if test.options['compressors'] && test.options['compressors'].include?('snappy')
55
+ if opts = test.expected_options
56
+ if opts['compressors'] && opts['compressors'].include?('snappy')
57
57
  before do
58
58
  unless ENV.fetch('BUNDLE_GEMFILE', '') =~ /snappy/
59
59
  skip "This test requires snappy compression"
@@ -61,7 +61,7 @@ describe 'URI options' do
61
61
  end
62
62
  end
63
63
 
64
- if test.options['compressors'] && test.options['compressors'].include?('zstd')
64
+ if opts['compressors'] && opts['compressors'].include?('zstd')
65
65
  before do
66
66
  unless ENV.fetch('BUNDLE_GEMFILE', '') =~ /zstd/
67
67
  skip "This test requires zstd compression"
@@ -72,7 +72,7 @@ describe 'URI options' do
72
72
  it 'creates a client with the correct options' do
73
73
  mapped = Mongo::URI::OptionsMapper.new.ruby_to_smc(test.client.options)
74
74
  expected = Mongo::ConnectionString.adjust_expected_mongo_client_options(
75
- test.options,
75
+ opts,
76
76
  )
77
77
  mapped.should == expected
78
78
  end
@@ -10,11 +10,7 @@ describe 'fork reconnect' do
10
10
  # On multi-shard sharded clusters a succeeding write request does not
11
11
  # guarantee that the next operation will succeed (since it could be sent to
12
12
  # another shard with a dead connection).
13
- require_no_multi_shard
14
-
15
- # On Ruby 2.3 $?.exitstatus is sometimes nil after Process.wait returns which
16
- # is not supposed to happen.
17
- ruby_version_gte '2.4'
13
+ require_no_multi_mongos
18
14
 
19
15
  require_stress
20
16