mongo 2.15.1 → 2.16.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (326) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  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 +42 -18
  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 +62 -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.rb +73 -26
  102. data/lib/mongo/server_selector/base.rb +5 -1
  103. data/lib/mongo/session/session_pool.rb +11 -0
  104. data/lib/mongo/session.rb +21 -1
  105. data/lib/mongo/socket/ocsp_verifier.rb +6 -37
  106. data/lib/mongo/uri/options_mapper.rb +1 -0
  107. data/lib/mongo/uri/srv_protocol.rb +6 -8
  108. data/lib/mongo/uri.rb +18 -0
  109. data/lib/mongo/utils.rb +0 -7
  110. data/lib/mongo/version.rb +1 -1
  111. data/mongo.gemspec +1 -1
  112. data/spec/integration/auth_spec.rb +31 -1
  113. data/spec/integration/awaited_ismaster_spec.rb +1 -1
  114. data/spec/integration/bulk_write_spec.rb +1 -1
  115. data/spec/integration/change_stream_spec.rb +3 -3
  116. data/spec/integration/client_construction_spec.rb +54 -0
  117. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +1 -1
  118. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +1 -1
  119. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +1 -1
  120. data/spec/integration/client_side_encryption/data_key_spec.rb +1 -1
  121. data/spec/integration/client_spec.rb +2 -0
  122. data/spec/integration/command_monitoring_spec.rb +1 -1
  123. data/spec/integration/command_spec.rb +1 -1
  124. data/spec/integration/connection_spec.rb +52 -35
  125. data/spec/integration/crud_spec.rb +174 -1
  126. data/spec/integration/cursor_pinning_spec.rb +121 -0
  127. data/spec/integration/cursor_reaping_spec.rb +8 -4
  128. data/spec/integration/fork_reconnect_spec.rb +1 -5
  129. data/spec/integration/get_more_spec.rb +1 -1
  130. data/spec/integration/heartbeat_events_spec.rb +1 -1
  131. data/spec/integration/map_reduce_spec.rb +77 -0
  132. data/spec/integration/query_cache_spec.rb +2 -2
  133. data/spec/integration/query_cache_transactions_spec.rb +1 -1
  134. data/spec/integration/read_concern_spec.rb +1 -1
  135. data/spec/integration/read_preference_spec.rb +1 -1
  136. data/spec/integration/reconnect_spec.rb +30 -12
  137. data/spec/integration/retryable_errors_spec.rb +1 -1
  138. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +1 -1
  139. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -1
  140. data/spec/integration/sdam_error_handling_spec.rb +5 -3
  141. data/spec/integration/sdam_events_spec.rb +35 -19
  142. data/spec/integration/sdam_prose_spec.rb +1 -1
  143. data/spec/integration/server_monitor_spec.rb +1 -0
  144. data/spec/integration/server_selector_spec.rb +22 -5
  145. data/spec/integration/server_spec.rb +2 -0
  146. data/spec/integration/srv_monitoring_spec.rb +1 -1
  147. data/spec/integration/step_down_spec.rb +1 -1
  148. data/spec/integration/transaction_pinning_spec.rb +120 -0
  149. data/spec/integration/versioned_api_examples_spec.rb +45 -0
  150. data/spec/integration/x509_auth_spec.rb +1 -1
  151. data/spec/lite_spec_helper.rb +1 -2
  152. data/spec/mongo/address/unix_spec.rb +1 -0
  153. data/spec/mongo/auth/cr_spec.rb +2 -3
  154. data/spec/mongo/auth/ldap_spec.rb +2 -3
  155. data/spec/mongo/auth/scram_spec.rb +2 -3
  156. data/spec/mongo/auth/user/view_spec.rb +1 -1
  157. data/spec/mongo/auth/x509_spec.rb +2 -3
  158. data/spec/mongo/bulk_write_spec.rb +3 -3
  159. data/spec/mongo/client_construction_spec.rb +259 -28
  160. data/spec/mongo/client_spec.rb +6 -4
  161. data/spec/mongo/cluster/cursor_reaper_spec.rb +36 -21
  162. data/spec/mongo/cluster/periodic_executor_spec.rb +3 -1
  163. data/spec/mongo/cluster_spec.rb +44 -3
  164. data/spec/mongo/collection/view/aggregation_spec.rb +1 -1
  165. data/spec/mongo/collection/view/builder/find_command_spec.rb +4 -0
  166. data/spec/mongo/collection/view/builder/op_query_spec.rb +4 -0
  167. data/spec/mongo/collection/view/map_reduce_spec.rb +1 -1
  168. data/spec/mongo/collection_crud_spec.rb +7 -2
  169. data/spec/mongo/collection_ddl_spec.rb +1 -1
  170. data/spec/mongo/collection_spec.rb +1 -1
  171. data/spec/mongo/cursor/builder/get_more_command_spec.rb +4 -0
  172. data/spec/mongo/cursor/builder/op_get_more_spec.rb +4 -0
  173. data/spec/mongo/cursor_spec.rb +15 -5
  174. data/spec/mongo/database_spec.rb +15 -15
  175. data/spec/mongo/error/operation_failure_heavy_spec.rb +1 -1
  176. data/spec/mongo/grid/fs_bucket_spec.rb +18 -12
  177. data/spec/mongo/grid/stream/write_spec.rb +3 -9
  178. data/spec/mongo/grid/stream_spec.rb +1 -1
  179. data/spec/mongo/index/view_spec.rb +2 -2
  180. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -1
  181. data/spec/mongo/{collection/view → operation/find}/builder/flags_spec.rb +2 -2
  182. data/spec/mongo/{collection/view → operation/find}/builder/modifiers_spec.rb +2 -2
  183. data/spec/mongo/operation/find/legacy_spec.rb +1 -0
  184. data/spec/mongo/operation/insert/bulk_spec.rb +1 -1
  185. data/spec/mongo/operation/insert/op_msg_spec.rb +1 -1
  186. data/spec/mongo/operation/kill_cursors_spec.rb +4 -1
  187. data/spec/mongo/operation/read_preference_legacy_spec.rb +4 -0
  188. data/spec/mongo/operation/read_preference_op_msg_spec.rb +2 -0
  189. data/spec/mongo/operation/update/bulk_spec.rb +1 -1
  190. data/spec/mongo/operation/update/op_msg_spec.rb +1 -1
  191. data/spec/mongo/query_cache_spec.rb +6 -2
  192. data/spec/mongo/server/connection_common_spec.rb +62 -11
  193. data/spec/mongo/server/connection_pool_spec.rb +73 -7
  194. data/spec/mongo/server/connection_spec.rb +138 -43
  195. data/spec/mongo/server/description_spec.rb +1 -1
  196. data/spec/mongo/server/monitor_spec.rb +4 -3
  197. data/spec/mongo/session/session_pool_spec.rb +42 -10
  198. data/spec/mongo/session_transaction_spec.rb +15 -30
  199. data/spec/mongo/socket/unix_spec.rb +1 -0
  200. data/spec/mongo/uri_option_parsing_spec.rb +38 -5
  201. data/spec/runners/change_streams/test.rb +1 -1
  202. data/spec/runners/cmap.rb +1 -1
  203. data/spec/runners/connection_string.rb +7 -3
  204. data/spec/runners/crud/operation.rb +5 -3
  205. data/spec/runners/crud/requirement.rb +1 -0
  206. data/spec/runners/crud.rb +1 -1
  207. data/spec/runners/sdam.rb +2 -1
  208. data/spec/runners/transactions/test.rb +2 -2
  209. data/spec/runners/unified/assertions.rb +2 -3
  210. data/spec/runners/unified/event_subscriber.rb +2 -2
  211. data/spec/runners/unified/test.rb +3 -0
  212. data/spec/runners/unified.rb +1 -1
  213. data/spec/shared/lib/mrss/constraints.rb +11 -5
  214. data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
  215. data/spec/shared/lib/mrss/server_version_registry.rb +17 -12
  216. data/spec/shared/share/Dockerfile.erb +2 -1
  217. data/spec/shared/shlib/server.sh +70 -20
  218. data/spec/spec_tests/change_streams_spec.rb +1 -1
  219. data/spec/spec_tests/cmap_spec.rb +4 -1
  220. data/spec/spec_tests/command_monitoring_spec.rb +2 -2
  221. data/spec/spec_tests/data/command_monitoring/find.yml +9 -9
  222. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +2 -1
  223. data/spec/spec_tests/data/crud/read/aggregate-out.yml +1 -0
  224. data/spec/spec_tests/data/crud/read/count-collation.yml +2 -1
  225. data/spec/spec_tests/data/crud/read/distinct-collation.yml +2 -1
  226. data/spec/spec_tests/data/crud/read/find-collation.yml +2 -1
  227. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +2 -1
  228. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +2 -1
  229. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +2 -1
  230. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +3 -2
  231. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +2 -1
  232. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +3 -2
  233. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +3 -2
  234. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +2 -1
  235. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +2 -1
  236. data/spec/spec_tests/data/load_balancers/event-monitoring.yml +99 -0
  237. data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +36 -0
  238. data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +56 -0
  239. data/spec/spec_tests/data/load_balancers/server-selection.yml +50 -0
  240. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +1 -1
  241. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +1 -1
  242. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +1 -1
  243. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +1 -1
  244. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +1 -1
  245. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +1 -1
  246. data/spec/spec_tests/data/retryable_reads/mapReduce.yml +3 -1
  247. data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +25 -0
  248. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +2 -0
  249. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +2 -0
  250. data/spec/spec_tests/data/sdam_integration/hello-command-error.yml +3 -1
  251. data/spec/spec_tests/data/sdam_integration/hello-network-error.yml +3 -1
  252. data/spec/spec_tests/data/sdam_integration/hello-timeout.yml +2 -0
  253. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +2 -0
  254. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +2 -0
  255. data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +65 -0
  256. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +13 -0
  257. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +6 -0
  258. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +5 -0
  259. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +10 -0
  260. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-false.yml +0 -0
  261. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/direct-connection-true.yml +0 -0
  262. data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +15 -0
  263. data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +10 -0
  264. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/longer-parent-in-return.yml +0 -0
  265. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/misformatted-option.yml +0 -0
  266. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/no-results.yml +0 -0
  267. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/not-enough-parts.yml +0 -0
  268. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-result-default-port.yml +0 -0
  269. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record-multiple-strings.yml +0 -0
  270. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/one-txt-record.yml +0 -0
  271. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch1.yml +0 -0
  272. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch2.yml +0 -0
  273. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch3.yml +0 -0
  274. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch4.yml +0 -0
  275. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/parent-part-mismatch5.yml +0 -0
  276. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-too-short.yml +0 -0
  277. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/returned-parent-wrong.yml +0 -0
  278. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-default-port.yml +0 -0
  279. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-results-nonstandard-port.yml +0 -0
  280. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/two-txt-records.yml +0 -0
  281. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-not-allowed-option.yml +0 -0
  282. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-ssl-option.yml +0 -0
  283. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-overridden-uri-option.yml +0 -0
  284. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/txt-record-with-unallowed-option.yml +0 -0
  285. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +13 -0
  286. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +12 -0
  287. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-port.yml +0 -0
  288. data/spec/spec_tests/data/{dns_seedlist_discovery → seed_list_discovery/replica-set}/uri-with-two-hosts.yml +0 -0
  289. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +2 -0
  290. data/spec/spec_tests/data/transactions/retryable-abort.yml +2 -0
  291. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +2 -0
  292. data/spec/spec_tests/data/transactions/retryable-commit.yml +2 -0
  293. data/spec/spec_tests/data/transactions/retryable-writes.yml +2 -0
  294. data/spec/spec_tests/data/uri_options/connection-options.yml +60 -0
  295. data/spec/spec_tests/load_balancers_spec.rb +15 -0
  296. data/spec/spec_tests/retryable_reads_spec.rb +2 -2
  297. data/spec/spec_tests/retryable_writes_spec.rb +1 -1
  298. data/spec/spec_tests/sdam_integration_spec.rb +1 -1
  299. data/spec/spec_tests/sdam_monitoring_spec.rb +10 -5
  300. data/spec/spec_tests/sdam_spec.rb +1 -1
  301. data/spec/spec_tests/seed_list_discovery_spec.rb +118 -0
  302. data/spec/spec_tests/uri_options_spec.rb +4 -4
  303. data/spec/stress/fork_reconnect_stress_spec.rb +1 -5
  304. data/spec/support/certificates/atlas-ocsp-ca.crt +82 -90
  305. data/spec/support/certificates/atlas-ocsp.crt +127 -122
  306. data/spec/support/common_shortcuts.rb +2 -3
  307. data/spec/support/matchers.rb +13 -0
  308. data/spec/support/shared/auth_context.rb +16 -0
  309. data/spec/support/shared/session.rb +2 -2
  310. data/spec/support/spec_config.rb +9 -10
  311. data/spec/support/using_hash.rb +31 -0
  312. data/spec/support/utils.rb +1 -1
  313. data.tar.gz.sig +0 -0
  314. metadata +120 -76
  315. metadata.gz.sig +0 -0
  316. data/lib/mongo/collection/view/builder/find_command.rb +0 -173
  317. data/lib/mongo/collection/view/builder/op_query.rb +0 -94
  318. data/lib/mongo/cursor/builder/get_more_command.rb +0 -80
  319. data/lib/mongo/cursor/builder/kill_cursors_command.rb +0 -111
  320. data/lib/mongo/cursor/builder/op_get_more.rb +0 -64
  321. data/lib/mongo/cursor/builder/op_kill_cursors.rb +0 -106
  322. data/lib/mongo/server/context.rb +0 -72
  323. data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +0 -66
  324. data/spec/runners/unified/using_hash.rb +0 -34
  325. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +0 -79
  326. data/spec/support/event_subscriber.rb +0 -221
@@ -10,21 +10,21 @@ set_fcv() {
10
10
 
11
11
  add_uri_option() {
12
12
  opt=$1
13
-
13
+
14
14
  if ! echo $MONGODB_URI |sed -e s,//,, |grep -q /; then
15
15
  MONGODB_URI="$MONGODB_URI/"
16
16
  fi
17
-
17
+
18
18
  if ! echo $MONGODB_URI |grep -q '?'; then
19
19
  MONGODB_URI="$MONGODB_URI?"
20
20
  fi
21
-
21
+
22
22
  MONGODB_URI="$MONGODB_URI&$opt"
23
23
  }
24
24
 
25
25
  prepare_server() {
26
26
  arch=$1
27
-
27
+
28
28
  if test -n "$USE_OPT_MONGODB"; then
29
29
  export BINDIR=/opt/mongodb/bin
30
30
  export PATH=$BINDIR:$PATH
@@ -39,7 +39,7 @@ prepare_server() {
39
39
  else
40
40
  download_version="$MONGODB_VERSION"
41
41
  fi
42
-
42
+
43
43
  url=`$(dirname $0)/get-mongodb-download-url $download_version $arch`
44
44
 
45
45
  prepare_server_from_url $url
@@ -80,7 +80,7 @@ install_mlaunch_pip() {
80
80
  # mlaunch is preinstalled in the docker image, do not install it here
81
81
  return
82
82
  fi
83
-
83
+
84
84
  python -V || true
85
85
  python3 -V || true
86
86
  pythonpath="$MONGO_ORCHESTRATION_HOME"/python
@@ -96,20 +96,20 @@ install_mlaunch_git() {
96
96
  python3 -V || true
97
97
  which pip || true
98
98
  which pip3 || true
99
-
99
+
100
100
  if false; then
101
101
  if ! virtualenv --version; then
102
102
  python3 `which pip3` install --user virtualenv
103
103
  export PATH=$HOME/.local/bin:$PATH
104
104
  virtualenv --version
105
105
  fi
106
-
106
+
107
107
  venvpath="$MONGO_ORCHESTRATION_HOME"/venv
108
108
  virtualenv -p python3 $venvpath
109
109
  . $venvpath/bin/activate
110
-
110
+
111
111
  pip3 install psutil pymongo
112
-
112
+
113
113
  git clone $repo mlaunch
114
114
  cd mlaunch
115
115
  git checkout origin/$branch
@@ -118,13 +118,13 @@ install_mlaunch_git() {
118
118
  else
119
119
  pip install --user 'virtualenv==13'
120
120
  export PATH=$HOME/.local/bin:$PATH
121
-
121
+
122
122
  venvpath="$MONGO_ORCHESTRATION_HOME"/venv
123
123
  virtualenv $venvpath
124
124
  . $venvpath/bin/activate
125
-
125
+
126
126
  pip install psutil pymongo
127
-
127
+
128
128
  git clone $repo mlaunch
129
129
  (cd mlaunch &&
130
130
  git checkout origin/$branch &&
@@ -133,26 +133,32 @@ install_mlaunch_git() {
133
133
  fi
134
134
  }
135
135
 
136
+ # This function sets followong global variables:
137
+ # server_cert_path
138
+ # server_ca_path
139
+ # server_client_cert_path
140
+ #
141
+ # These variables are used later to connect to processes via mongo client.
136
142
  calculate_server_args() {
137
143
  local mongo_version=`echo $MONGODB_VERSION |tr -d .`
138
-
144
+
139
145
  if test -z "$mongo_version"; then
140
146
  echo "$MONGODB_VERSION must be set and not contain only dots" 1>&2
141
147
  exit 3
142
148
  fi
143
-
149
+
144
150
  if test $mongo_version = latest; then
145
151
  mongo_version=49
146
152
  fi
147
153
 
148
154
  local args="--setParameter enableTestCommands=1"
149
-
155
+
150
156
  if test $mongo_version -ge 50; then
151
157
  args="$args --setParameter acceptApiVersion2=1"
152
158
  elif test $mongo_version -ge 47; then
153
159
  args="$args --setParameter acceptAPIVersion2=1"
154
160
  fi
155
-
161
+
156
162
  # diagnosticDataCollectionEnabled is a mongod-only parameter on server 3.2,
157
163
  # and mlaunch does not support specifying mongod-only parameters:
158
164
  # https://github.com/rueckstiess/mtools/issues/696
@@ -209,7 +215,6 @@ calculate_server_args() {
209
215
  fi
210
216
  fi
211
217
 
212
- local server_cert_path server_ca_path server_client_cert_path
213
218
  if test "$SSL" = ssl || test -n "$OCSP_ALGORITHM"; then
214
219
  if test -n "$OCSP_ALGORITHM"; then
215
220
  if test "$OCSP_MUST_STAPLE" = 1; then
@@ -288,7 +293,7 @@ calculate_server_args() {
288
293
  ocsp_args="$ocsp_args --fault $OCSP_STATUS"
289
294
  fi
290
295
  fi
291
-
296
+
292
297
  OCSP_ARGS="$ocsp_args"
293
298
  SERVER_ARGS="$args"
294
299
  URI_OPTIONS="$uri_options"
@@ -306,12 +311,57 @@ launch_server() {
306
311
  local dbdir="$1"
307
312
  python -m mtools.mlaunch.mlaunch --dir "$dbdir" --binarypath "$BINDIR" $SERVER_ARGS
308
313
 
314
+ if test "$TOPOLOGY" = sharded-cluster && test $MONGODB_VERSION = 3.6; then
315
+ # On 3.6 server the sessions collection is not immediately available,
316
+ # so we run the refreshLogicalSessionCacheNow command on the config server
317
+ # and again on each mongos in order for the mongoses
318
+ # to correctly report logicalSessionTimeoutMinutes.
319
+ mongos_regex="\s*mongos\s+([0-9]+)\s+running\s+[0-9]+"
320
+ config_server_regex="\s*config\sserver\s+([0-9]+)\s+running\s+[0-9]+"
321
+ config_server=""
322
+ mongoses=()
323
+ if test "$AUTH" = auth
324
+ then
325
+ base_url="mongodb://bob:pwd123@localhost"
326
+ else
327
+ base_url="mongodb://localhost"
328
+ fi
329
+ if test "$SSL" = "ssl"
330
+ then
331
+ mongo_command="${BINDIR}/mongo --ssl --sslPEMKeyFile $server_cert_path --sslCAFile $server_ca_path"
332
+ else
333
+ mongo_command="${BINDIR}/mongo"
334
+ fi
335
+
336
+ while read -r line
337
+ do
338
+ if [[ $line =~ $config_server_regex ]]
339
+ then
340
+ port="${BASH_REMATCH[1]}"
341
+ config_server="${base_url}:${port}"
342
+ fi
343
+ if [[ $line =~ $mongos_regex ]]
344
+ then
345
+ port="${BASH_REMATCH[1]}"
346
+ mongoses+=("${base_url}:${port}")
347
+ fi
348
+ done < <(python -m mtools.mlaunch.mlaunch list --dir "$dbdir" --binarypath "$BINDIR")
349
+
350
+ if [ -n "$config_server" ]; then
351
+ ${mongo_command} "$config_server" --eval 'db.adminCommand("refreshLogicalSessionCacheNow")'
352
+ for mongos in ${mongoses[*]}
353
+ do
354
+ ${mongo_command} "$mongos" --eval 'db.adminCommand("refreshLogicalSessionCacheNow")'
355
+ done
356
+ fi
357
+ fi
358
+
309
359
  if test "$TOPOLOGY" = load-balanced; then
310
360
  if test -z "$haproxy_config"; then
311
361
  echo haproxy_config should have been set 1>&2
312
362
  exit 3
313
363
  fi
314
-
364
+
315
365
  haproxy -D -f $haproxy_config -p $mongodb_dir/haproxy.pid
316
366
  fi
317
367
  }
@@ -8,7 +8,7 @@ require 'runners/change_streams/spec'
8
8
 
9
9
  describe 'ChangeStreams' do
10
10
  require_wired_tiger
11
- require_no_multi_shard
11
+ require_no_multi_mongos
12
12
 
13
13
  CHANGE_STREAMS_TESTS.each do |file|
14
14
 
@@ -40,7 +40,7 @@ describe 'Cmap' do
40
40
  context("#{spec.description} (#{file.sub(%r'.*/data/cmap/', '')})") do
41
41
 
42
42
  before do
43
- subscriber = EventSubscriber.new
43
+ subscriber = Mrss::EventSubscriber.new
44
44
 
45
45
  monitoring = Mongo::Monitoring.new(monitoring: false)
46
46
  monitoring.subscribe(Mongo::Monitoring::CONNECTION_POOL, subscriber)
@@ -76,6 +76,9 @@ describe 'Cmap' do
76
76
  allow(socket).to receive(:alive?).and_return(true)
77
77
 
78
78
  allow_any_instance_of(Mongo::Server::Connection).to receive(:do_connect).and_return(socket)
79
+ if @server.load_balancer?
80
+ allow_any_instance_of(Mongo::Server::Connection).to receive(:service_id).and_return('very fake')
81
+ end
79
82
  spec.run
80
83
  end
81
84
 
@@ -24,7 +24,7 @@ describe 'Command Monitoring Events' do
24
24
  end
25
25
 
26
26
  let(:subscriber) do
27
- EventSubscriber.new
27
+ Mrss::EventSubscriber.new
28
28
  end
29
29
 
30
30
  let(:monitoring) do
@@ -54,7 +54,7 @@ describe 'Command Monitoring Events' do
54
54
 
55
55
  def check_event(subscriber, index, expectation)
56
56
  subscriber.all_events.length.should > index
57
- # TODO move this filtering into EventSubscriber
57
+ # TODO move this filtering into Mrss::EventSubscriber
58
58
  events = subscriber.all_events.reject do |event|
59
59
  (
60
60
  event.is_a?(Mongo::Monitoring::Event::CommandStarted) ||
@@ -43,14 +43,13 @@ tests:
43
43
  filter: { _id: { $gt: 1 } }
44
44
  sort: { _id: 1 }
45
45
  skip: {"$numberLong": "2"}
46
- modifiers:
47
- $comment: "test"
48
- $hint: { _id: 1 }
49
- $max: { _id: 6 }
50
- $maxTimeMS: 6000
51
- $min: { _id: 0 }
52
- $returnKey: false
53
- $showDiskLoc: false
46
+ comment: "test"
47
+ hint: { _id: 1 }
48
+ max: { _id: 6 }
49
+ maxTimeMS: 6000
50
+ min: { _id: 0 }
51
+ returnKey: false
52
+ showRecordId: false
54
53
  expectations:
55
54
  -
56
55
  command_started_event:
@@ -195,8 +194,9 @@ tests:
195
194
  - { $numberLong: "42" }
196
195
  command_name: "killCursors"
197
196
  -
198
- description: "A successful find event with a getmore and the server kills the cursor"
197
+ description: "A successful find event with a getmore and the server kills the cursor (<= 4.4)"
199
198
  ignore_if_server_version_less_than: "3.1"
199
+ ignore_if_server_version_greater_than: "4.4"
200
200
  ignore_if_topology_type:
201
201
  - "sharded"
202
202
  operation:
@@ -1,6 +1,7 @@
1
1
  data:
2
2
  - {_id: 1, x: 'ping'}
3
3
  minServerVersion: '3.4'
4
+ serverless: 'forbid'
4
5
 
5
6
  tests:
6
7
  -
@@ -11,7 +12,7 @@ tests:
11
12
  pipeline:
12
13
  - $match:
13
14
  x: 'PING'
14
- collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/master/reference/collation/#collation-document
15
+ collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/manual/reference/collation/#collation-document
15
16
  outcome:
16
17
  result:
17
18
  - {_id: 1, x: 'ping'}
@@ -3,6 +3,7 @@ data:
3
3
  - {_id: 2, x: 22}
4
4
  - {_id: 3, x: 33}
5
5
  minServerVersion: '2.6'
6
+ serverless: 'forbid'
6
7
 
7
8
  tests:
8
9
  -
@@ -1,6 +1,7 @@
1
1
  data:
2
2
  - {_id: 1, x: 'PING'}
3
3
  minServerVersion: '3.4'
4
+ serverless: 'forbid'
4
5
 
5
6
  tests:
6
7
  -
@@ -9,7 +10,7 @@ tests:
9
10
  name: countDocuments
10
11
  arguments:
11
12
  filter: { x: 'ping' }
12
- collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/master/reference/collation/#collation-document
13
+ collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/manual/reference/collation/#collation-document
13
14
 
14
15
  outcome:
15
16
  result: 1
@@ -2,6 +2,7 @@ data:
2
2
  - {_id: 1, string: 'PING'}
3
3
  - {_id: 2, string: 'ping'}
4
4
  minServerVersion: '3.4'
5
+ serverless: 'forbid'
5
6
 
6
7
  tests:
7
8
  -
@@ -10,7 +11,7 @@ tests:
10
11
  name: distinct
11
12
  arguments:
12
13
  fieldName: "string"
13
- collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/master/reference/collation/#collation-document
14
+ collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/manual/reference/collation/#collation-document
14
15
 
15
16
  outcome:
16
17
  result:
@@ -1,6 +1,7 @@
1
1
  data:
2
2
  - {_id: 1, x: 'ping'}
3
3
  minServerVersion: '3.4'
4
+ serverless: 'forbid'
4
5
 
5
6
  tests:
6
7
  -
@@ -9,7 +10,7 @@ tests:
9
10
  name: "find"
10
11
  arguments:
11
12
  filter: {x: 'PING'}
12
- collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/master/reference/collation/#collation-document
13
+ collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/manual/reference/collation/#collation-document
13
14
  outcome:
14
15
  result:
15
16
  - {_id: 1, x: 'ping'}
@@ -6,8 +6,9 @@ data:
6
6
  - {_id: 5, x: 'pONg'}
7
7
 
8
8
  minServerVersion: '3.4'
9
+ serverless: 'forbid'
9
10
 
10
- # See: https://docs.mongodb.com/master/reference/collation/#collation-document
11
+ # See: https://docs.mongodb.com/manual/reference/collation/#collation-document
11
12
  tests:
12
13
  -
13
14
  description: "BulkWrite with delete operations and collation"
@@ -3,6 +3,7 @@ data:
3
3
  - {_id: 2, x: 'ping'}
4
4
  - {_id: 3, x: 'pINg'}
5
5
  minServerVersion: '3.4'
6
+ serverless: 'forbid'
6
7
 
7
8
  tests:
8
9
  -
@@ -12,7 +13,7 @@ tests:
12
13
  arguments:
13
14
  filter:
14
15
  x: 'PING'
15
- collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/master/reference/collation/#collation-document
16
+ collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/manual/reference/collation/#collation-document
16
17
 
17
18
  outcome:
18
19
  result:
@@ -3,6 +3,7 @@ data:
3
3
  - {_id: 2, x: 'ping'}
4
4
  - {_id: 3, x: 'pINg'}
5
5
  minServerVersion: '3.4'
6
+ serverless: 'forbid'
6
7
 
7
8
  tests:
8
9
  -
@@ -11,7 +12,7 @@ tests:
11
12
  name: "deleteOne"
12
13
  arguments:
13
14
  filter: {x: 'PING'}
14
- collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/master/reference/collation/#collation-document
15
+ collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/manual/reference/collation/#collation-document
15
16
 
16
17
  outcome:
17
18
  result:
@@ -3,6 +3,7 @@ data:
3
3
  - {_id: 2, x: 'ping'}
4
4
  - {_id: 3, x: 'pINg'}
5
5
  minServerVersion: '3.4'
6
+ serverless: 'forbid'
6
7
 
7
8
  tests:
8
9
  -
@@ -13,11 +14,11 @@ tests:
13
14
  filter: {_id: 2, x: 'PING'}
14
15
  projection: {x: 1, _id: 0}
15
16
  sort: {x: 1}
16
- collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/master/reference/collation/#collation-document
17
+ collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/manual/reference/collation/#collation-document
17
18
 
18
19
  outcome:
19
20
  result: {x: 'ping'}
20
21
  collection:
21
22
  data:
22
23
  - {_id: 1, x: 11}
23
- - {_id: 3, x: 'pINg'}
24
+ - {_id: 3, x: 'pINg'}
@@ -2,6 +2,7 @@ data:
2
2
  - {_id: 1, x: 11}
3
3
  - {_id: 2, x: 'ping'}
4
4
  minServerVersion: '3.4'
5
+ serverless: 'forbid'
5
6
 
6
7
  tests:
7
8
  -
@@ -14,7 +15,7 @@ tests:
14
15
  projection: {x: 1, _id: 0}
15
16
  returnDocument: After
16
17
  sort: {x: 1}
17
- collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/master/reference/collation/#collation-document
18
+ collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/manual/reference/collation/#collation-document
18
19
 
19
20
  outcome:
20
21
  result: {x: 'pong'}
@@ -3,6 +3,7 @@ data:
3
3
  - {_id: 2, x: 'ping'}
4
4
  - {_id: 3, x: 'pINg'}
5
5
  minServerVersion: '3.4'
6
+ serverless: 'forbid'
6
7
 
7
8
  tests:
8
9
  -
@@ -16,7 +17,7 @@ tests:
16
17
  $set: {x: 'pong'}
17
18
  projection: {x: 1, _id: 0}
18
19
  sort: {_id: 1}
19
- collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/master/reference/collation/#collation-document
20
+ collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/manual/reference/collation/#collation-document
20
21
 
21
22
  outcome:
22
23
  result: {x: 'ping'}
@@ -24,4 +25,4 @@ tests:
24
25
  data:
25
26
  - {_id: 1, x: 11}
26
27
  - {_id: 2, x: 'pong'}
27
- - {_id: 3, x: 'pINg'}
28
+ - {_id: 3, x: 'pINg'}
@@ -2,6 +2,7 @@ data:
2
2
  - {_id: 1, x: 11}
3
3
  - {_id: 2, x: 'ping'}
4
4
  minServerVersion: '3.4'
5
+ serverless: 'forbid'
5
6
 
6
7
  tests:
7
8
  -
@@ -11,7 +12,7 @@ tests:
11
12
  arguments:
12
13
  filter: {x: 'PING'}
13
14
  replacement: {_id: 2, x: 'pong'}
14
- collation: {locale: 'en_US', strength: 2} # https://docs.mongodb.com/master/reference/collation/#collation-document
15
+ collation: {locale: 'en_US', strength: 2} # https://docs.mongodb.com/manual/reference/collation/#collation-document
15
16
 
16
17
  outcome:
17
18
  result:
@@ -21,4 +22,4 @@ tests:
21
22
  collection:
22
23
  data:
23
24
  - {_id: 1, x: 11}
24
- - {_id: 2, x: 'pong'}
25
+ - {_id: 2, x: 'pong'}
@@ -3,6 +3,7 @@ data:
3
3
  - {_id: 2, x: 'ping'}
4
4
  - {_id: 3, x: 'pINg'}
5
5
  minServerVersion: '3.4'
6
+ serverless: 'forbid'
6
7
 
7
8
  tests:
8
9
  -
@@ -14,7 +15,7 @@ tests:
14
15
  x: 'ping'
15
16
  update:
16
17
  $set: {x: 'pong'}
17
- collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/master/reference/collation/#collation-document
18
+ collation: { locale: 'en_US', strength: 2 } # https://docs.mongodb.com/manual/reference/collation/#collation-document
18
19
 
19
20
  outcome:
20
21
  result:
@@ -2,6 +2,7 @@ data:
2
2
  - {_id: 1, x: 11}
3
3
  - {_id: 2, x: 'ping'}
4
4
  minServerVersion: '3.4'
5
+ serverless: 'forbid'
5
6
 
6
7
  tests:
7
8
  -
@@ -12,7 +13,7 @@ tests:
12
13
  filter: {x: 'PING'}
13
14
  update:
14
15
  $set: {x: 'pong'}
15
- collation: { locale: 'en_US', strength: 2} # https://docs.mongodb.com/master/reference/collation/#collation-document
16
+ collation: { locale: 'en_US', strength: 2} # https://docs.mongodb.com/manual/reference/collation/#collation-document
16
17
 
17
18
  outcome:
18
19
  result:
@@ -0,0 +1,99 @@
1
+ description: monitoring events include correct fields
2
+
3
+ schemaVersion: '1.3'
4
+
5
+ runOnRequirements:
6
+ - topologies: [ load-balanced ]
7
+
8
+ createEntities:
9
+ - client:
10
+ id: &client0 client0
11
+ useMultipleMongoses: true
12
+ uriOptions:
13
+ retryReads: false
14
+ observeEvents:
15
+ - commandStartedEvent
16
+ - commandSucceededEvent
17
+ - commandFailedEvent
18
+ - poolClearedEvent
19
+ - database:
20
+ id: &database0 database0
21
+ client: *client0
22
+ databaseName: &database0Name database0
23
+ - collection:
24
+ id: &collection0 collection0
25
+ database: *database0
26
+ collectionName: &collection0Name coll0
27
+
28
+ initialData:
29
+ - databaseName: *database0Name
30
+ collectionName: *collection0Name
31
+ documents: []
32
+
33
+ tests:
34
+ - description: command started and succeeded events include serviceId
35
+ operations:
36
+ - name: insertOne
37
+ object: *collection0
38
+ arguments:
39
+ document: { x: 1 }
40
+ expectEvents:
41
+ - client: *client0
42
+ events:
43
+ - commandStartedEvent:
44
+ commandName: insert
45
+ hasServiceId: true
46
+ - commandSucceededEvent:
47
+ commandName: insert
48
+ hasServiceId: true
49
+
50
+ - description: command failed events include serviceId
51
+ operations:
52
+ - name: find
53
+ object: *collection0
54
+ arguments:
55
+ filter: { $or: true }
56
+ expectError:
57
+ isError: true
58
+ expectEvents:
59
+ - client: *client0
60
+ events:
61
+ - commandStartedEvent:
62
+ commandName: find
63
+ hasServiceId: true
64
+ - commandFailedEvent:
65
+ commandName: find
66
+ hasServiceId: true
67
+
68
+ - description: poolClearedEvent events include serviceId
69
+ operations:
70
+ - name: failPoint
71
+ object: testRunner
72
+ arguments:
73
+ client: *client0
74
+ failPoint:
75
+ configureFailPoint: failCommand
76
+ mode: { times: 1 }
77
+ data:
78
+ failCommands: [find]
79
+ closeConnection: true
80
+ - name: find
81
+ object: *collection0
82
+ arguments:
83
+ filter: {}
84
+ expectError:
85
+ isClientError: true
86
+ expectEvents:
87
+ - client: *client0
88
+ events:
89
+ - commandStartedEvent:
90
+ commandName: find
91
+ hasServiceId: true
92
+ - commandFailedEvent:
93
+ commandName: find
94
+ hasServiceId: true
95
+ - client: *client0
96
+ eventType: cmap
97
+ events:
98
+ - poolClearedEvent:
99
+ hasServiceId: true
@@ -0,0 +1,36 @@
1
+ description: connection establishment for load-balanced clusters
2
+
3
+ schemaVersion: '1.3'
4
+
5
+ runOnRequirements:
6
+ - topologies: [ load-balanced ]
7
+
8
+ createEntities:
9
+ - client:
10
+ id: &client0 client0
11
+ uriOptions:
12
+ # Explicitly set loadBalanced to false to override the option from the global URI.
13
+ loadBalanced: false
14
+ observeEvents:
15
+ - commandStartedEvent
16
+ - database:
17
+ id: &database0 database0
18
+ client: *client0
19
+ databaseName: &database0Name database0
20
+
21
+ tests:
22
+ - description: operations against load balancers fail if URI contains loadBalanced=false
23
+ skipReason: servers have not implemented LB support yet so they will not fail the connection handshake in this case
24
+ operations:
25
+ - name: runCommand
26
+ object: *database0
27
+ arguments:
28
+ commandName: ping
29
+ command: { ping: 1 }
30
+ expectError:
31
+ isClientError: false
32
+ expectEvents:
33
+ # No events should be published because the server fails the connection handshake, so the "ping" command is never
34
+ # sent.
35
+ - client: *client0
36
+ events: []