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
@@ -635,7 +635,7 @@ describe Mongo::Client do
635
635
  root_authorized_client.options.merge(heartbeat_frequency: 100, monitoring: true)
636
636
  end
637
637
 
638
- let(:subscriber) { EventSubscriber.new }
638
+ let(:subscriber) { Mrss::EventSubscriber.new }
639
639
 
640
640
  let(:client) do
641
641
  ClientRegistry.instance.new_local_client(
@@ -939,13 +939,15 @@ describe Mongo::Client do
939
939
  end
940
940
 
941
941
  context 'monitoring present' do
942
+ require_topology :single, :replica_set, :sharded
943
+
942
944
  let(:client) do
943
945
  authorized_client
944
946
  end
945
947
 
946
948
  it 'does not indicate lack of monitoring' do
947
- client.summary.should =~ /servers=.*(STANDALONE|PRIMARY|MONGOS)/
948
- client.summary.should_not =~ /servers=.*(STANDALONE|PRIMARY|MONGOS).*NO-MONITORING/
949
+ client.summary.should =~ /servers=.*(?:STANDALONE|PRIMARY|MONGOS)/
950
+ client.summary.should_not =~ /servers=.*(?:STANDALONE|PRIMARY|MONGOS).*NO-MONITORING/
949
951
  end
950
952
  end
951
953
 
@@ -957,7 +959,7 @@ describe Mongo::Client do
957
959
  end
958
960
 
959
961
  it 'does not indicate lack of monitoring' do
960
- client.summary.should =~ /servers=.*(STANDALONE|PRIMARY|MONGOS).*NO-MONITORING/
962
+ client.summary.should =~ /servers=.*(STANDALONE|PRIMARY|MONGOS|\bLB\b).*NO-MONITORING/
961
963
  end
962
964
  end
963
965
  end
@@ -5,16 +5,18 @@ require 'spec_helper'
5
5
 
6
6
  describe Mongo::Cluster::CursorReaper do
7
7
 
8
+ let(:cluster) { double('cluster') }
9
+
8
10
  before do
9
11
  authorized_collection.drop
10
12
  end
11
13
 
12
14
  let(:reaper) do
13
- described_class.new
15
+ described_class.new(cluster)
14
16
  end
15
17
 
16
- let(:active_cursors) do
17
- reaper.instance_variable_get(:@active_cursors)
18
+ let(:active_cursor_ids) do
19
+ reaper.instance_variable_get(:@active_cursor_ids)
18
20
  end
19
21
 
20
22
  describe '#intialize' do
@@ -24,16 +26,29 @@ describe Mongo::Cluster::CursorReaper do
24
26
  end
25
27
 
26
28
  it 'initializes a set for the list of active cursors' do
27
- expect(reaper.instance_variable_get(:@active_cursors)).to be_a(Set)
29
+ expect(reaper.instance_variable_get(:@active_cursor_ids)).to be_a(Set)
28
30
  end
29
31
  end
30
32
 
31
33
  describe '#schedule_kill_cursor' do
32
34
 
33
- let(:server) { double('server') }
35
+ let(:address) { Mongo::Address.new('localhost') }
36
+ let(:server) do
37
+ double('server').tap do |server|
38
+ allow(server).to receive(:address).and_return(address)
39
+ end
40
+ end
34
41
  let(:cursor_id) { 1 }
35
- let(:op_spec_1) { double('op_spec_1') }
36
- let(:op_spec_2) { double('op_spec_2') }
42
+ let(:cursor_kill_spec_1) do
43
+ Mongo::Cursor::KillSpec.new(
44
+ cursor_id: cursor_id, coll_name: 'c', db_name: 'd', service_id: nil,
45
+ )
46
+ end
47
+ let(:cursor_kill_spec_2) do
48
+ Mongo::Cursor::KillSpec.new(
49
+ cursor_id: cursor_id, coll_name: 'c', db_name: 'q', service_id: nil,
50
+ )
51
+ end
37
52
  let(:to_kill) { reaper.instance_variable_get(:@to_kill)}
38
53
 
39
54
  context 'when the cursor is on the list of active cursors' do
@@ -45,36 +60,36 @@ describe Mongo::Cluster::CursorReaper do
45
60
  context 'when there is not a list already for the server' do
46
61
 
47
62
  before do
48
- reaper.schedule_kill_cursor(cursor_id, op_spec_1, server)
63
+ reaper.schedule_kill_cursor(cursor_kill_spec_1, server)
49
64
  end
50
65
 
51
66
  it 'initializes the list of op specs to a set' do
52
- expect(to_kill.keys).to eq([ server ])
53
- expect(to_kill[server]).to eq(Set.new([op_spec_1]))
67
+ expect(to_kill.keys).to eq([ address.seed ])
68
+ expect(to_kill[address.seed]).to eq(Set.new([cursor_kill_spec_1]))
54
69
  end
55
70
  end
56
71
 
57
72
  context 'when there is a list of ops already for the server' do
58
73
 
59
74
  before do
60
- reaper.schedule_kill_cursor(cursor_id, op_spec_1, server)
61
- reaper.schedule_kill_cursor(cursor_id, op_spec_2, server)
75
+ reaper.schedule_kill_cursor(cursor_kill_spec_1, server)
76
+ reaper.schedule_kill_cursor(cursor_kill_spec_2, server)
62
77
  end
63
78
 
64
79
  it 'adds the op to the server list' do
65
- expect(to_kill.keys).to eq([ server ])
66
- expect(to_kill[server]).to contain_exactly(op_spec_1, op_spec_2)
80
+ expect(to_kill.keys).to eq([ address.seed ])
81
+ expect(to_kill[address.seed]).to contain_exactly(cursor_kill_spec_1, cursor_kill_spec_2)
67
82
  end
68
83
 
69
84
  context 'when the same op is added more than once' do
70
85
 
71
86
  before do
72
- reaper.schedule_kill_cursor(cursor_id, op_spec_2, server)
87
+ reaper.schedule_kill_cursor(cursor_kill_spec_2, server)
73
88
  end
74
89
 
75
90
  it 'does not allow duplicates ops for a server' do
76
- expect(to_kill.keys).to eq([ server ])
77
- expect(to_kill[server]).to contain_exactly(op_spec_1, op_spec_2)
91
+ expect(to_kill.keys).to eq([ address.seed ])
92
+ expect(to_kill[address.seed]).to contain_exactly(cursor_kill_spec_1, cursor_kill_spec_2)
78
93
  end
79
94
  end
80
95
  end
@@ -83,7 +98,7 @@ describe Mongo::Cluster::CursorReaper do
83
98
  context 'when the cursor is not on the list of active cursors' do
84
99
 
85
100
  before do
86
- reaper.schedule_kill_cursor(cursor_id, op_spec_1, server)
101
+ reaper.schedule_kill_cursor(cursor_kill_spec_1, server)
87
102
  end
88
103
 
89
104
  it 'does not add the kill cursors op spec to the list' do
@@ -131,7 +146,7 @@ describe Mongo::Cluster::CursorReaper do
131
146
  end
132
147
 
133
148
  it 'registers the cursor id as active' do
134
- expect(active_cursors).to eq(Set.new([2]))
149
+ expect(active_cursor_ids).to eq(Set.new([2]))
135
150
  end
136
151
  end
137
152
  end
@@ -146,7 +161,7 @@ describe Mongo::Cluster::CursorReaper do
146
161
  end
147
162
 
148
163
  it 'removes the cursor id' do
149
- expect(active_cursors.size).to eq(0)
164
+ expect(active_cursor_ids.size).to eq(0)
150
165
  end
151
166
  end
152
167
  end
@@ -174,7 +189,7 @@ describe Mongo::Cluster::CursorReaper do
174
189
  around do |example|
175
190
  authorized_collection.insert_many(docs)
176
191
  periodic_executor.stop!
177
- cluster.schedule_kill_cursor(cursor.id, cursor.send(:kill_cursors_op_spec),
192
+ cluster.schedule_kill_cursor(cursor.kill_spec,
178
193
  cursor.instance_variable_get(:@server))
179
194
  periodic_executor.flush
180
195
  example.run
@@ -5,8 +5,10 @@ require 'spec_helper'
5
5
 
6
6
  describe Mongo::Cluster::PeriodicExecutor do
7
7
 
8
+ let(:cluster) { double('cluster') }
9
+
8
10
  let(:executor) do
9
- described_class.new
11
+ described_class.new(cluster)
10
12
  end
11
13
 
12
14
  describe '#log_warn' do
@@ -41,6 +41,34 @@ describe Mongo::Cluster do
41
41
  end
42
42
  end
43
43
 
44
+ context 'when topology is load-balanced' do
45
+ require_topology :load_balanced
46
+
47
+ it 'emits SDAM events' do
48
+ allow(monitoring).to receive(:succeeded)
49
+
50
+ register_cluster(
51
+ described_class.new(
52
+ SpecConfig.instance.addresses,
53
+ monitoring,
54
+ SpecConfig.instance.test_options
55
+ )
56
+ )
57
+
58
+ expect(monitoring).to have_received(:succeeded).with(
59
+ Mongo::Monitoring::TOPOLOGY_OPENING, any_args
60
+ )
61
+ expect(monitoring).to have_received(:succeeded).with(
62
+ Mongo::Monitoring::TOPOLOGY_CHANGED, any_args
63
+ ).twice
64
+ expect(monitoring).to have_received(:succeeded).with(
65
+ Mongo::Monitoring::SERVER_OPENING, any_args
66
+ )
67
+ expect(monitoring).to have_received(:succeeded).with(
68
+ Mongo::Monitoring::SERVER_DESCRIPTION_CHANGED, any_args
69
+ )
70
+ end
71
+ end
44
72
  end
45
73
 
46
74
  describe '#==' do
@@ -334,7 +362,7 @@ describe Mongo::Cluster do
334
362
  end
335
363
 
336
364
  let(:monitoring) { Mongo::Monitoring.new }
337
- let(:subscriber) { EventSubscriber.new }
365
+ let(:subscriber) { Mrss::EventSubscriber.new }
338
366
 
339
367
  it 'publishes server closed event once' do
340
368
  monitoring.subscribe(Mongo::Monitoring::SERVER_CLOSED, subscriber)
@@ -425,7 +453,7 @@ describe Mongo::Cluster do
425
453
  end
426
454
 
427
455
  let(:primary_candidates) do
428
- if cluster.single?
456
+ if cluster.single? || cluster.load_balanced?
429
457
  cluster.servers
430
458
  elsif cluster.sharded?
431
459
  cluster.servers
@@ -611,7 +639,17 @@ describe Mongo::Cluster do
611
639
  monitoring_io: false, server_selection_timeout: 0.183))
612
640
  end
613
641
 
614
- it_behaves_like 'does not support sessions'
642
+ context 'in load-balanced topology' do
643
+ require_topology :load_balanced
644
+
645
+ it_behaves_like 'supports sessions'
646
+ end
647
+
648
+ context 'not in load-balanced topology' do
649
+ require_topology :single, :replica_set, :sharded
650
+
651
+ it_behaves_like 'does not support sessions'
652
+ end
615
653
  end
616
654
 
617
655
  context 'when client has contacted servers and then disconnected' do
@@ -761,6 +799,9 @@ describe Mongo::Cluster do
761
799
  let(:default_address) { SpecConfig.instance.addresses.first }
762
800
 
763
801
  context 'cluster has unknown servers' do
802
+ # Servers are never unknown in load-balanced topology.
803
+ require_topology :single, :replica_set, :sharded
804
+
764
805
  it 'includes unknown servers' do
765
806
  cluster.servers_list.each do |server|
766
807
  expect(server).to be_unknown
@@ -235,7 +235,7 @@ describe Mongo::Collection::View::Aggregation do
235
235
  { session: session }
236
236
  end
237
237
 
238
- let(:subscriber) { EventSubscriber.new }
238
+ let(:subscriber) { Mrss::EventSubscriber.new }
239
239
 
240
240
  let(:client) do
241
241
  authorized_client.tap do |client|
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
  # encoding: utf-8
3
3
 
4
+ # TODO convert, move or delete these tests as part of RUBY-2706.
5
+
6
+ =begin
4
7
  require 'lite_spec_helper'
5
8
 
6
9
  describe Mongo::Collection::View::Builder::FindCommand do
@@ -522,3 +525,4 @@ describe Mongo::Collection::View::Builder::FindCommand do
522
525
  end
523
526
  end
524
527
  end
528
+ =end
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
  # encoding: utf-8
3
3
 
4
+ # TODO convert, move or delete these tests as part of RUBY-2706.
5
+
6
+ =begin
4
7
  require 'spec_helper'
5
8
 
6
9
  describe Mongo::Collection::View::Builder::OpQuery do
@@ -155,3 +158,4 @@ describe Mongo::Collection::View::Builder::OpQuery do
155
158
  end
156
159
  end
157
160
  end
161
+ =end
@@ -242,7 +242,7 @@ describe Mongo::Collection::View::MapReduce do
242
242
  Mongo::Collection::View.new(client[TEST_COLL], selector, view_options)
243
243
  end
244
244
 
245
- let(:subscriber) { EventSubscriber.new }
245
+ let(:subscriber) { Mrss::EventSubscriber.new }
246
246
 
247
247
  let(:client) do
248
248
  authorized_client.tap do |client|
@@ -5,7 +5,7 @@ require 'spec_helper'
5
5
 
6
6
  describe Mongo::Collection do
7
7
 
8
- let(:subscriber) { EventSubscriber.new }
8
+ let(:subscriber) { Mrss::EventSubscriber.new }
9
9
 
10
10
  let(:client) do
11
11
  authorized_client.tap do |client|
@@ -1894,6 +1894,11 @@ describe Mongo::Collection do
1894
1894
  context 'when a session supporting causal consistency is used' do
1895
1895
  require_wired_tiger
1896
1896
 
1897
+ before do
1898
+ collection.drop
1899
+ collection.create
1900
+ end
1901
+
1897
1902
  let(:cursors) do
1898
1903
  collection.parallel_scan(2, session: session)
1899
1904
  end
@@ -4352,7 +4357,7 @@ describe Mongo::Collection do
4352
4357
  expect(command[:writeConcern]).to_not be_nil
4353
4358
  expect(command[:writeConcern][:w]).to eq(1)
4354
4359
  expect(command[:upsert]).to be(true)
4355
- expect(command[:bypassDocumentValidation]).to be_nil
4360
+ expect(command[:bypassDocumentValidation]).to be false
4356
4361
  expect(command[:maxTimeMS]).to eq(200)
4357
4362
  end
4358
4363
  end
@@ -5,7 +5,7 @@ require 'spec_helper'
5
5
 
6
6
  describe Mongo::Collection do
7
7
 
8
- let(:subscriber) { EventSubscriber.new }
8
+ let(:subscriber) { Mrss::EventSubscriber.new }
9
9
 
10
10
  let(:client) do
11
11
  authorized_client.tap do |client|
@@ -5,7 +5,7 @@ require 'spec_helper'
5
5
 
6
6
  describe Mongo::Collection do
7
7
 
8
- let(:subscriber) { EventSubscriber.new }
8
+ let(:subscriber) { Mrss::EventSubscriber.new }
9
9
 
10
10
  let(:client) do
11
11
  authorized_client.tap do |client|
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
  # encoding: utf-8
3
3
 
4
+ # TODO convert, move or delete these tests as part of RUBY-2706.
5
+
6
+ =begin
4
7
  require 'spec_helper'
5
8
 
6
9
  describe Mongo::Cursor::Builder::GetMoreCommand do
@@ -189,3 +192,4 @@ describe Mongo::Cursor::Builder::GetMoreCommand do
189
192
  end
190
193
  end
191
194
  end
195
+ =end
@@ -1,6 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
  # encoding: utf-8
3
3
 
4
+ # TODO convert, move or delete these tests as part of RUBY-2706.
5
+
6
+ =begin
4
7
  require 'spec_helper'
5
8
 
6
9
  describe Mongo::Cursor::Builder::OpGetMore do
@@ -62,3 +65,4 @@ describe Mongo::Cursor::Builder::OpGetMore do
62
65
  end
63
66
  end
64
67
  end
68
+ =end
@@ -80,6 +80,8 @@ describe Mongo::Cursor do
80
80
  end
81
81
 
82
82
  context 'server is unknown' do
83
+ require_topology :single, :replica_set, :sharded
84
+
83
85
  let(:server) do
84
86
  view.send(:server_selector).select_server(authorized_client.cluster).tap do |server|
85
87
  authorized_client.cluster.disconnect!
@@ -329,8 +331,7 @@ describe Mongo::Cursor do
329
331
 
330
332
  before do
331
333
  authorized_collection.insert_many(documents)
332
- cluster.schedule_kill_cursor(cursor.id,
333
- cursor.send(:kill_cursors_op_spec),
334
+ cluster.schedule_kill_cursor(cursor.kill_spec,
334
335
  cursor.instance_variable_get(:@server))
335
336
  end
336
337
 
@@ -429,7 +430,7 @@ describe Mongo::Cursor do
429
430
 
430
431
  it 'removes the cursor id from the active cursors tracked by the cluster cursor manager' do
431
432
  enum.next
432
- expect(cursor_reaper.instance_variable_get(:@active_cursors)).not_to include(cursor_id)
433
+ expect(cursor_reaper.instance_variable_get(:@active_cursor_ids)).not_to include(cursor_id)
433
434
  end
434
435
  end
435
436
  end
@@ -437,7 +438,7 @@ describe Mongo::Cursor do
437
438
  context 'when an implicit session is used' do
438
439
  min_server_fcv '3.6'
439
440
 
440
- let(:subscriber) { EventSubscriber.new }
441
+ let(:subscriber) { Mrss::EventSubscriber.new }
441
442
 
442
443
  let(:subscribed_client) do
443
444
  authorized_client.tap do |client|
@@ -555,8 +556,17 @@ describe Mongo::Cursor do
555
556
  db_name: SpecConfig.instance.test_db, coll_name: TEST_COLL }
556
557
  end
557
558
 
559
+ let(:conn_desc) do
560
+ double('connection description').tap do |cd|
561
+ allow(cd).to receive(:service_id).and_return(nil)
562
+ end
563
+ end
564
+
558
565
  let(:reply) do
559
- Mongo::Operation::Find.new(query_spec).tap do |reply|
566
+ double('reply').tap do |reply|
567
+ allow(reply).to receive(:is_a?).with(Mongo::Operation::Result).and_return(true)
568
+ allow(reply).to receive(:namespace)
569
+ allow(reply).to receive(:connection_description).and_return(conn_desc)
560
570
  allow(reply).to receive(:cursor_id).and_return(42)
561
571
  end
562
572
  end