mongo 2.21.0 → 2.21.2

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 (1430) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -2
  3. data/lib/mongo/auth/aws/conversation.rb +1 -1
  4. data/lib/mongo/auth/credential_cache.rb +13 -6
  5. data/lib/mongo/client.rb +75 -28
  6. data/lib/mongo/client_encryption.rb +1 -1
  7. data/lib/mongo/cluster/sdam_flow.rb +1 -1
  8. data/lib/mongo/collection/view/aggregation.rb +1 -1
  9. data/lib/mongo/crypt/binary.rb +5 -5
  10. data/lib/mongo/crypt/binding.rb +65 -1
  11. data/lib/mongo/crypt/context.rb +55 -27
  12. data/lib/mongo/crypt/encryption_io.rb +4 -2
  13. data/lib/mongo/crypt/handle.rb +1 -1
  14. data/lib/mongo/cursor.rb +1 -1
  15. data/lib/mongo/error/kms_error.rb +9 -0
  16. data/lib/mongo/error/pool_cleared_error.rb +1 -0
  17. data/lib/mongo/error/sdam_error_detection.rb +3 -3
  18. data/lib/mongo/lint.rb +1 -1
  19. data/lib/mongo/monitoring/event/secure.rb +1 -1
  20. data/lib/mongo/monitoring.rb +1 -1
  21. data/lib/mongo/operation/shared/read_preference_supported.rb +2 -2
  22. data/lib/mongo/operation/shared/sessions_supported.rb +2 -2
  23. data/lib/mongo/protocol/compressed.rb +1 -1
  24. data/lib/mongo/protocol/msg.rb +1 -1
  25. data/lib/mongo/search_index/view.rb +4 -4
  26. data/lib/mongo/server/connection_pool/generation_manager.rb +26 -1
  27. data/lib/mongo/server/connection_pool.rb +1 -0
  28. data/lib/mongo/server/push_monitor.rb +1 -1
  29. data/lib/mongo/session/server_session/dirtyable.rb +1 -1
  30. data/lib/mongo/socket.rb +40 -24
  31. data/lib/mongo/uri/srv_protocol.rb +3 -1
  32. data/lib/mongo/version.rb +4 -15
  33. data/mongo.gemspec +4 -4
  34. metadata +19 -2799
  35. data/Rakefile +0 -196
  36. data/spec/NOTES.aws-auth.md +0 -296
  37. data/spec/README.aws-auth.md +0 -318
  38. data/spec/README.md +0 -733
  39. data/spec/USERS.md +0 -72
  40. data/spec/atlas/atlas_connectivity_spec.rb +0 -27
  41. data/spec/atlas/operations_spec.rb +0 -23
  42. data/spec/faas/ruby-sam-app/Gemfile +0 -9
  43. data/spec/faas/ruby-sam-app/mongodb/Gemfile +0 -4
  44. data/spec/faas/ruby-sam-app/mongodb/app.rb +0 -149
  45. data/spec/faas/ruby-sam-app/template.yaml +0 -48
  46. data/spec/integration/auth_spec.rb +0 -309
  47. data/spec/integration/awaited_ismaster_spec.rb +0 -31
  48. data/spec/integration/aws_auth_credentials_cache_spec.rb +0 -51
  49. data/spec/integration/aws_auth_request_spec.rb +0 -77
  50. data/spec/integration/aws_credentials_retriever_spec.rb +0 -136
  51. data/spec/integration/aws_lambda_examples_spec.rb +0 -68
  52. data/spec/integration/bson_symbol_spec.rb +0 -39
  53. data/spec/integration/bulk_insert_spec.rb +0 -83
  54. data/spec/integration/bulk_write_error_message_spec.rb +0 -74
  55. data/spec/integration/bulk_write_spec.rb +0 -86
  56. data/spec/integration/change_stream_examples_spec.rb +0 -208
  57. data/spec/integration/change_stream_spec.rb +0 -814
  58. data/spec/integration/check_clean_slate_spec.rb +0 -19
  59. data/spec/integration/client_authentication_options_spec.rb +0 -514
  60. data/spec/integration/client_connectivity_spec.rb +0 -41
  61. data/spec/integration/client_construction_aws_auth_spec.rb +0 -203
  62. data/spec/integration/client_construction_spec.rb +0 -381
  63. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +0 -360
  64. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +0 -306
  65. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -75
  66. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +0 -82
  67. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +0 -260
  68. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +0 -754
  69. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +0 -153
  70. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +0 -190
  71. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +0 -81
  72. data/spec/integration/client_side_encryption/client_close_spec.rb +0 -66
  73. data/spec/integration/client_side_encryption/corpus_spec.rb +0 -273
  74. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +0 -132
  75. data/spec/integration/client_side_encryption/data_key_spec.rb +0 -258
  76. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +0 -159
  77. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +0 -176
  78. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +0 -150
  79. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +0 -144
  80. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +0 -436
  81. data/spec/integration/client_side_encryption/kms_tls_spec.rb +0 -92
  82. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +0 -105
  83. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +0 -49
  84. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +0 -46
  85. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +0 -47
  86. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +0 -114
  87. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +0 -583
  88. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +0 -114
  89. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +0 -89
  90. data/spec/integration/client_side_encryption/views_spec.rb +0 -47
  91. data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +0 -131
  92. data/spec/integration/client_spec.rb +0 -54
  93. data/spec/integration/client_update_spec.rb +0 -161
  94. data/spec/integration/collection_indexes_prose_spec.rb +0 -58
  95. data/spec/integration/command_monitoring_spec.rb +0 -184
  96. data/spec/integration/command_spec.rb +0 -157
  97. data/spec/integration/connect_single_rs_name_spec.rb +0 -75
  98. data/spec/integration/connection/faas_env_spec.rb +0 -62
  99. data/spec/integration/connection_pool_populator_spec.rb +0 -327
  100. data/spec/integration/connection_spec.rb +0 -353
  101. data/spec/integration/crud_spec.rb +0 -378
  102. data/spec/integration/cursor_pinning_spec.rb +0 -80
  103. data/spec/integration/cursor_reaping_spec.rb +0 -143
  104. data/spec/integration/docs_examples_spec.rb +0 -207
  105. data/spec/integration/error_detection_spec.rb +0 -42
  106. data/spec/integration/find_options_spec.rb +0 -227
  107. data/spec/integration/fork_reconnect_spec.rb +0 -207
  108. data/spec/integration/get_more_spec.rb +0 -42
  109. data/spec/integration/grid_fs_bucket_spec.rb +0 -51
  110. data/spec/integration/heartbeat_events_spec.rb +0 -102
  111. data/spec/integration/map_reduce_spec.rb +0 -81
  112. data/spec/integration/mmapv1_spec.rb +0 -31
  113. data/spec/integration/mongos_pinning_spec.rb +0 -37
  114. data/spec/integration/ocsp_connectivity_spec.rb +0 -29
  115. data/spec/integration/ocsp_verifier_cache_spec.rb +0 -191
  116. data/spec/integration/ocsp_verifier_spec.rb +0 -358
  117. data/spec/integration/operation_failure_code_spec.rb +0 -29
  118. data/spec/integration/operation_failure_message_spec.rb +0 -91
  119. data/spec/integration/query_cache_spec.rb +0 -1343
  120. data/spec/integration/query_cache_transactions_spec.rb +0 -193
  121. data/spec/integration/read_concern_spec.rb +0 -92
  122. data/spec/integration/read_preference_spec.rb +0 -548
  123. data/spec/integration/reconnect_spec.rb +0 -200
  124. data/spec/integration/retryable_errors_spec.rb +0 -286
  125. data/spec/integration/retryable_reads_errors_spec.rb +0 -275
  126. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +0 -764
  127. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +0 -405
  128. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +0 -18
  129. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +0 -27
  130. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +0 -28
  131. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +0 -220
  132. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +0 -235
  133. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +0 -113
  134. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +0 -22
  135. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +0 -28
  136. data/spec/integration/retryable_writes/shared/supports_retries.rb +0 -19
  137. data/spec/integration/retryable_writes_errors_spec.rb +0 -348
  138. data/spec/integration/sdam_error_handling_spec.rb +0 -490
  139. data/spec/integration/sdam_events_spec.rb +0 -178
  140. data/spec/integration/sdam_prose_spec.rb +0 -67
  141. data/spec/integration/search_indexes_prose_spec.rb +0 -172
  142. data/spec/integration/secondary_reads_spec.rb +0 -103
  143. data/spec/integration/server_description_spec.rb +0 -48
  144. data/spec/integration/server_monitor_spec.rb +0 -57
  145. data/spec/integration/server_selection_spec.rb +0 -39
  146. data/spec/integration/server_selector_spec.rb +0 -107
  147. data/spec/integration/server_spec.rb +0 -67
  148. data/spec/integration/shell_examples_spec.rb +0 -984
  149. data/spec/integration/size_limit_spec.rb +0 -118
  150. data/spec/integration/snappy_compression_spec.rb +0 -28
  151. data/spec/integration/snapshot_query_examples_spec.rb +0 -129
  152. data/spec/integration/srv_monitoring_spec.rb +0 -445
  153. data/spec/integration/srv_spec.rb +0 -60
  154. data/spec/integration/ssl_uri_options_spec.rb +0 -28
  155. data/spec/integration/step_down_spec.rb +0 -225
  156. data/spec/integration/time_zone_querying_spec.rb +0 -55
  157. data/spec/integration/transaction_pinning_spec.rb +0 -134
  158. data/spec/integration/transactions_api_examples_spec.rb +0 -64
  159. data/spec/integration/transactions_examples_spec.rb +0 -235
  160. data/spec/integration/truncated_utf8_spec.rb +0 -26
  161. data/spec/integration/versioned_api_examples_spec.rb +0 -120
  162. data/spec/integration/x509_auth_spec.rb +0 -112
  163. data/spec/integration/zlib_compression_spec.rb +0 -28
  164. data/spec/integration/zstd_compression_spec.rb +0 -29
  165. data/spec/kerberos/kerberos_spec.rb +0 -98
  166. data/spec/lite_spec_helper.rb +0 -211
  167. data/spec/mongo/address/ipv4_spec.rb +0 -102
  168. data/spec/mongo/address/ipv6_spec.rb +0 -137
  169. data/spec/mongo/address/unix_spec.rb +0 -45
  170. data/spec/mongo/address/validator_spec.rb +0 -54
  171. data/spec/mongo/address_spec.rb +0 -357
  172. data/spec/mongo/auth/aws/credential_cache_spec.rb +0 -63
  173. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +0 -90
  174. data/spec/mongo/auth/aws/credentials_spec.rb +0 -46
  175. data/spec/mongo/auth/aws/request_region_spec.rb +0 -45
  176. data/spec/mongo/auth/aws/request_spec.rb +0 -79
  177. data/spec/mongo/auth/cr_spec.rb +0 -58
  178. data/spec/mongo/auth/gssapi/conversation_spec.rb +0 -124
  179. data/spec/mongo/auth/invalid_mechanism_spec.rb +0 -14
  180. data/spec/mongo/auth/ldap/conversation_spec.rb +0 -46
  181. data/spec/mongo/auth/ldap_spec.rb +0 -46
  182. data/spec/mongo/auth/scram/conversation_spec.rb +0 -205
  183. data/spec/mongo/auth/scram256/conversation_spec.rb +0 -174
  184. data/spec/mongo/auth/scram_negotiation_spec.rb +0 -532
  185. data/spec/mongo/auth/scram_spec.rb +0 -121
  186. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +0 -116
  187. data/spec/mongo/auth/stringprep_spec.rb +0 -191
  188. data/spec/mongo/auth/user/view_spec.rb +0 -584
  189. data/spec/mongo/auth/user_spec.rb +0 -343
  190. data/spec/mongo/auth/x509/conversation_spec.rb +0 -72
  191. data/spec/mongo/auth/x509_spec.rb +0 -72
  192. data/spec/mongo/auth_spec.rb +0 -68
  193. data/spec/mongo/bson_spec.rb +0 -14
  194. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +0 -287
  195. data/spec/mongo/bulk_write/result_spec.rb +0 -141
  196. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +0 -242
  197. data/spec/mongo/bulk_write_spec.rb +0 -2514
  198. data/spec/mongo/caching_cursor_spec.rb +0 -73
  199. data/spec/mongo/client_construction_spec.rb +0 -2723
  200. data/spec/mongo/client_encryption_spec.rb +0 -403
  201. data/spec/mongo/client_spec.rb +0 -1357
  202. data/spec/mongo/cluster/cursor_reaper_spec.rb +0 -230
  203. data/spec/mongo/cluster/periodic_executor_spec.rb +0 -21
  204. data/spec/mongo/cluster/socket_reaper_spec.rb +0 -46
  205. data/spec/mongo/cluster/topology/replica_set_spec.rb +0 -601
  206. data/spec/mongo/cluster/topology/sharded_spec.rb +0 -158
  207. data/spec/mongo/cluster/topology/single_spec.rb +0 -192
  208. data/spec/mongo/cluster/topology/unknown_spec.rb +0 -103
  209. data/spec/mongo/cluster/topology_spec.rb +0 -211
  210. data/spec/mongo/cluster_spec.rb +0 -825
  211. data/spec/mongo/cluster_time_spec.rb +0 -151
  212. data/spec/mongo/collection/view/aggregation_spec.rb +0 -753
  213. data/spec/mongo/collection/view/builder/find_command_spec.rb +0 -528
  214. data/spec/mongo/collection/view/builder/op_query_spec.rb +0 -161
  215. data/spec/mongo/collection/view/change_stream_resume_spec.rb +0 -397
  216. data/spec/mongo/collection/view/change_stream_spec.rb +0 -547
  217. data/spec/mongo/collection/view/explainable_spec.rb +0 -119
  218. data/spec/mongo/collection/view/immutable_spec.rb +0 -57
  219. data/spec/mongo/collection/view/iterable_spec.rb +0 -41
  220. data/spec/mongo/collection/view/map_reduce_spec.rb +0 -907
  221. data/spec/mongo/collection/view/readable_spec.rb +0 -2283
  222. data/spec/mongo/collection/view/writable_spec.rb +0 -1976
  223. data/spec/mongo/collection/view_spec.rb +0 -424
  224. data/spec/mongo/collection_crud_spec.rb +0 -4472
  225. data/spec/mongo/collection_ddl_spec.rb +0 -587
  226. data/spec/mongo/collection_spec.rb +0 -849
  227. data/spec/mongo/condition_variable_spec.rb +0 -104
  228. data/spec/mongo/config/options_spec.rb +0 -76
  229. data/spec/mongo/config_spec.rb +0 -74
  230. data/spec/mongo/crypt/auto_decryption_context_spec.rb +0 -109
  231. data/spec/mongo/crypt/auto_encrypter_spec.rb +0 -450
  232. data/spec/mongo/crypt/auto_encryption_context_spec.rb +0 -126
  233. data/spec/mongo/crypt/binary_spec.rb +0 -113
  234. data/spec/mongo/crypt/binding/binary_spec.rb +0 -54
  235. data/spec/mongo/crypt/binding/context_spec.rb +0 -305
  236. data/spec/mongo/crypt/binding/helpers_spec.rb +0 -44
  237. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +0 -113
  238. data/spec/mongo/crypt/binding/status_spec.rb +0 -97
  239. data/spec/mongo/crypt/binding/version_spec.rb +0 -67
  240. data/spec/mongo/crypt/binding_unloaded_spec.rb +0 -37
  241. data/spec/mongo/crypt/data_key_context_spec.rb +0 -146
  242. data/spec/mongo/crypt/encryption_io_spec.rb +0 -141
  243. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +0 -106
  244. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +0 -266
  245. data/spec/mongo/crypt/handle_spec.rb +0 -266
  246. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +0 -111
  247. data/spec/mongo/crypt/hooks_spec.rb +0 -30
  248. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +0 -86
  249. data/spec/mongo/crypt/kms/credentials_spec.rb +0 -373
  250. data/spec/mongo/crypt/kms_spec.rb +0 -62
  251. data/spec/mongo/crypt/status_spec.rb +0 -150
  252. data/spec/mongo/crypt_spec.rb +0 -21
  253. data/spec/mongo/cursor/builder/get_more_command_spec.rb +0 -195
  254. data/spec/mongo/cursor/builder/op_get_more_spec.rb +0 -68
  255. data/spec/mongo/cursor_spec.rb +0 -851
  256. data/spec/mongo/database_spec.rb +0 -1365
  257. data/spec/mongo/distinguishing_semaphore_spec.rb +0 -66
  258. data/spec/mongo/error/bulk_write_error_spec.rb +0 -52
  259. data/spec/mongo/error/crypt_error_spec.rb +0 -29
  260. data/spec/mongo/error/max_bson_size_spec.rb +0 -38
  261. data/spec/mongo/error/no_server_available_spec.rb +0 -35
  262. data/spec/mongo/error/notable_spec.rb +0 -62
  263. data/spec/mongo/error/operation_failure_heavy_spec.rb +0 -110
  264. data/spec/mongo/error/operation_failure_spec.rb +0 -553
  265. data/spec/mongo/error/parser_spec.rb +0 -519
  266. data/spec/mongo/error/unsupported_option_spec.rb +0 -57
  267. data/spec/mongo/event/publisher_spec.rb +0 -53
  268. data/spec/mongo/event/subscriber_spec.rb +0 -37
  269. data/spec/mongo/grid/file/chunk_spec.rb +0 -230
  270. data/spec/mongo/grid/file/info_spec.rb +0 -107
  271. data/spec/mongo/grid/file_spec.rb +0 -194
  272. data/spec/mongo/grid/fs_bucket_spec.rb +0 -1269
  273. data/spec/mongo/grid/stream/read_spec.rb +0 -292
  274. data/spec/mongo/grid/stream/write_spec.rb +0 -559
  275. data/spec/mongo/grid/stream_spec.rb +0 -51
  276. data/spec/mongo/id_spec.rb +0 -38
  277. data/spec/mongo/index/view_spec.rb +0 -1296
  278. data/spec/mongo/lint_spec.rb +0 -231
  279. data/spec/mongo/logger_spec.rb +0 -62
  280. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +0 -79
  281. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +0 -26
  282. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +0 -22
  283. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +0 -33
  284. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +0 -33
  285. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +0 -30
  286. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +0 -27
  287. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +0 -27
  288. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +0 -22
  289. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +0 -29
  290. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +0 -36
  291. data/spec/mongo/monitoring/event/command_failed_spec.rb +0 -87
  292. data/spec/mongo/monitoring/event/command_started_spec.rb +0 -51
  293. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +0 -88
  294. data/spec/mongo/monitoring/event/secure_spec.rb +0 -123
  295. data/spec/mongo/monitoring/event/server_closed_spec.rb +0 -38
  296. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +0 -38
  297. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +0 -34
  298. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +0 -34
  299. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +0 -34
  300. data/spec/mongo/monitoring/event/server_opening_spec.rb +0 -38
  301. data/spec/mongo/monitoring/event/topology_changed_spec.rb +0 -44
  302. data/spec/mongo/monitoring/event/topology_closed_spec.rb +0 -38
  303. data/spec/mongo/monitoring/event/topology_opening_spec.rb +0 -38
  304. data/spec/mongo/monitoring_spec.rb +0 -196
  305. data/spec/mongo/operation/aggregate/result_spec.rb +0 -90
  306. data/spec/mongo/operation/aggregate_spec.rb +0 -76
  307. data/spec/mongo/operation/collections_info_spec.rb +0 -48
  308. data/spec/mongo/operation/command_spec.rb +0 -86
  309. data/spec/mongo/operation/context_spec.rb +0 -79
  310. data/spec/mongo/operation/create/op_msg_spec.rb +0 -240
  311. data/spec/mongo/operation/create_index_spec.rb +0 -62
  312. data/spec/mongo/operation/create_user_spec.rb +0 -53
  313. data/spec/mongo/operation/delete/bulk_spec.rb +0 -245
  314. data/spec/mongo/operation/delete/op_msg_spec.rb +0 -267
  315. data/spec/mongo/operation/delete_spec.rb +0 -203
  316. data/spec/mongo/operation/drop_index_spec.rb +0 -61
  317. data/spec/mongo/operation/find/builder/flags_spec.rb +0 -109
  318. data/spec/mongo/operation/find/builder/modifiers_spec.rb +0 -213
  319. data/spec/mongo/operation/find/op_msg_spec.rb +0 -66
  320. data/spec/mongo/operation/get_more/op_msg_spec.rb +0 -65
  321. data/spec/mongo/operation/indexes_spec.rb +0 -41
  322. data/spec/mongo/operation/insert/bulk_spec.rb +0 -273
  323. data/spec/mongo/operation/insert/op_msg_spec.rb +0 -293
  324. data/spec/mongo/operation/insert_spec.rb +0 -258
  325. data/spec/mongo/operation/limited_spec.rb +0 -55
  326. data/spec/mongo/operation/map_reduce_spec.rb +0 -131
  327. data/spec/mongo/operation/read_preference_legacy_spec.rb +0 -360
  328. data/spec/mongo/operation/read_preference_op_msg_spec.rb +0 -332
  329. data/spec/mongo/operation/remove_user_spec.rb +0 -52
  330. data/spec/mongo/operation/result_spec.rb +0 -369
  331. data/spec/mongo/operation/shared/csot/examples.rb +0 -113
  332. data/spec/mongo/operation/specifiable_spec.rb +0 -87
  333. data/spec/mongo/operation/update/bulk_spec.rb +0 -239
  334. data/spec/mongo/operation/update/op_msg_spec.rb +0 -272
  335. data/spec/mongo/operation/update_spec.rb +0 -235
  336. data/spec/mongo/operation/update_user_spec.rb +0 -52
  337. data/spec/mongo/options/redacted_spec.rb +0 -353
  338. data/spec/mongo/protocol/caching_hash_spec.rb +0 -37
  339. data/spec/mongo/protocol/compressed_spec.rb +0 -83
  340. data/spec/mongo/protocol/get_more_spec.rb +0 -164
  341. data/spec/mongo/protocol/kill_cursors_spec.rb +0 -121
  342. data/spec/mongo/protocol/msg_spec.rb +0 -507
  343. data/spec/mongo/protocol/query_spec.rb +0 -347
  344. data/spec/mongo/protocol/registry_spec.rb +0 -34
  345. data/spec/mongo/protocol/reply_spec.rb +0 -198
  346. data/spec/mongo/query_cache_middleware_spec.rb +0 -55
  347. data/spec/mongo/query_cache_spec.rb +0 -471
  348. data/spec/mongo/retryable/write_worker_spec.rb +0 -39
  349. data/spec/mongo/retryable_spec.rb +0 -624
  350. data/spec/mongo/semaphore_spec.rb +0 -54
  351. data/spec/mongo/server/app_metadata/environment_spec.rb +0 -344
  352. data/spec/mongo/server/app_metadata/truncator_spec.rb +0 -158
  353. data/spec/mongo/server/app_metadata_spec.rb +0 -158
  354. data/spec/mongo/server/connection_auth_spec.rb +0 -138
  355. data/spec/mongo/server/connection_common_spec.rb +0 -87
  356. data/spec/mongo/server/connection_pool/populator_spec.rb +0 -120
  357. data/spec/mongo/server/connection_pool_spec.rb +0 -1609
  358. data/spec/mongo/server/connection_spec.rb +0 -1310
  359. data/spec/mongo/server/description/features_spec.rb +0 -274
  360. data/spec/mongo/server/description_query_methods_spec.rb +0 -291
  361. data/spec/mongo/server/description_spec.rb +0 -846
  362. data/spec/mongo/server/monitor/app_metadata_spec.rb +0 -25
  363. data/spec/mongo/server/monitor/connection_spec.rb +0 -197
  364. data/spec/mongo/server/monitor_spec.rb +0 -326
  365. data/spec/mongo/server/push_monitor_spec.rb +0 -95
  366. data/spec/mongo/server/round_trip_time_calculator_spec.rb +0 -120
  367. data/spec/mongo/server_selector/nearest_spec.rb +0 -338
  368. data/spec/mongo/server_selector/primary_preferred_spec.rb +0 -372
  369. data/spec/mongo/server_selector/primary_spec.rb +0 -181
  370. data/spec/mongo/server_selector/secondary_preferred_spec.rb +0 -350
  371. data/spec/mongo/server_selector/secondary_spec.rb +0 -278
  372. data/spec/mongo/server_selector_spec.rb +0 -736
  373. data/spec/mongo/server_spec.rb +0 -463
  374. data/spec/mongo/session/server_session_spec.rb +0 -62
  375. data/spec/mongo/session/session_pool_spec.rb +0 -257
  376. data/spec/mongo/session_spec.rb +0 -368
  377. data/spec/mongo/session_transaction_spec.rb +0 -222
  378. data/spec/mongo/socket/ssl_spec.rb +0 -830
  379. data/spec/mongo/socket/tcp_spec.rb +0 -17
  380. data/spec/mongo/socket/unix_spec.rb +0 -56
  381. data/spec/mongo/socket_spec.rb +0 -119
  382. data/spec/mongo/srv/monitor_spec.rb +0 -233
  383. data/spec/mongo/srv/result_spec.rb +0 -57
  384. data/spec/mongo/timeout_spec.rb +0 -42
  385. data/spec/mongo/tls_context_hooks_spec.rb +0 -40
  386. data/spec/mongo/uri/options_mapper_spec.rb +0 -1605
  387. data/spec/mongo/uri/srv_protocol_spec.rb +0 -1367
  388. data/spec/mongo/uri_option_parsing_spec.rb +0 -625
  389. data/spec/mongo/uri_spec.rb +0 -1443
  390. data/spec/mongo/utils_spec.rb +0 -42
  391. data/spec/mongo/write_concern/acknowledged_spec.rb +0 -58
  392. data/spec/mongo/write_concern/unacknowledged_spec.rb +0 -29
  393. data/spec/mongo/write_concern_spec.rb +0 -227
  394. data/spec/runners/auth.rb +0 -140
  395. data/spec/runners/change_streams/outcome.rb +0 -45
  396. data/spec/runners/change_streams/spec.rb +0 -60
  397. data/spec/runners/change_streams/test.rb +0 -232
  398. data/spec/runners/cmap/verifier.rb +0 -48
  399. data/spec/runners/cmap.rb +0 -516
  400. data/spec/runners/command_monitoring.rb +0 -346
  401. data/spec/runners/connection_string.rb +0 -393
  402. data/spec/runners/crud/context.rb +0 -30
  403. data/spec/runners/crud/operation.rb +0 -480
  404. data/spec/runners/crud/outcome.rb +0 -56
  405. data/spec/runners/crud/requirement.rb +0 -139
  406. data/spec/runners/crud/spec.rb +0 -76
  407. data/spec/runners/crud/test.rb +0 -115
  408. data/spec/runners/crud/test_base.rb +0 -53
  409. data/spec/runners/crud/verifier.rb +0 -224
  410. data/spec/runners/crud.rb +0 -257
  411. data/spec/runners/gridfs.rb +0 -641
  412. data/spec/runners/read_write_concern_document.rb +0 -70
  413. data/spec/runners/sdam/verifier.rb +0 -112
  414. data/spec/runners/sdam.rb +0 -279
  415. data/spec/runners/server_selection.rb +0 -365
  416. data/spec/runners/server_selection_rtt.rb +0 -41
  417. data/spec/runners/transactions/operation.rb +0 -332
  418. data/spec/runners/transactions/spec.rb +0 -29
  419. data/spec/runners/transactions/test.rb +0 -379
  420. data/spec/runners/transactions.rb +0 -107
  421. data/spec/runners/unified/ambiguous_operations.rb +0 -13
  422. data/spec/runners/unified/assertions.rb +0 -396
  423. data/spec/runners/unified/change_stream_operations.rb +0 -42
  424. data/spec/runners/unified/client_side_encryption_operations.rb +0 -83
  425. data/spec/runners/unified/crud_operations.rb +0 -367
  426. data/spec/runners/unified/ddl_operations.rb +0 -286
  427. data/spec/runners/unified/entity_map.rb +0 -42
  428. data/spec/runners/unified/error.rb +0 -29
  429. data/spec/runners/unified/event_subscriber.rb +0 -110
  430. data/spec/runners/unified/exceptions.rb +0 -24
  431. data/spec/runners/unified/grid_fs_operations.rb +0 -114
  432. data/spec/runners/unified/search_index_operations.rb +0 -63
  433. data/spec/runners/unified/support_operations.rb +0 -370
  434. data/spec/runners/unified/test.rb +0 -606
  435. data/spec/runners/unified/test_group.rb +0 -31
  436. data/spec/runners/unified/thread_operations.rb +0 -73
  437. data/spec/runners/unified.rb +0 -109
  438. data/spec/solo/clean_exit_spec.rb +0 -24
  439. data/spec/spec_helper.rb +0 -35
  440. data/spec/spec_tests/auth_spec.rb +0 -58
  441. data/spec/spec_tests/change_streams_unified_spec.rb +0 -14
  442. data/spec/spec_tests/client_side_encryption_spec.rb +0 -37
  443. data/spec/spec_tests/client_side_encryption_unified_spec.rb +0 -26
  444. data/spec/spec_tests/client_side_operations_timeout_spec.rb +0 -15
  445. data/spec/spec_tests/cmap_spec.rb +0 -126
  446. data/spec/spec_tests/collection_management_spec.rb +0 -13
  447. data/spec/spec_tests/command_monitoring_unified_spec.rb +0 -13
  448. data/spec/spec_tests/connection_string_spec.rb +0 -10
  449. data/spec/spec_tests/crud_spec.rb +0 -12
  450. data/spec/spec_tests/crud_unified_spec.rb +0 -13
  451. data/spec/spec_tests/data/auth/connection-string.yml +0 -366
  452. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +0 -43
  453. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +0 -105
  454. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +0 -122
  455. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +0 -351
  456. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +0 -1169
  457. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +0 -1069
  458. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +0 -307
  459. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +0 -927
  460. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +0 -120
  461. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +0 -57
  462. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +0 -46
  463. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +0 -537
  464. data/spec/spec_tests/data/client_side_encryption/badSchema.yml +0 -73
  465. data/spec/spec_tests/data/client_side_encryption/basic.yml +0 -102
  466. data/spec/spec_tests/data/client_side_encryption/bulk.yml +0 -81
  467. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +0 -100
  468. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +0 -43
  469. data/spec/spec_tests/data/client_side_encryption/count.yml +0 -54
  470. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +0 -52
  471. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +0 -58
  472. data/spec/spec_tests/data/client_side_encryption/delete.yml +0 -91
  473. data/spec/spec_tests/data/client_side_encryption/distinct.yml +0 -66
  474. data/spec/spec_tests/data/client_side_encryption/explain.yml +0 -57
  475. data/spec/spec_tests/data/client_side_encryption/find.yml +0 -105
  476. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +0 -50
  477. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +0 -50
  478. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +0 -50
  479. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +0 -90
  480. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +0 -83
  481. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +0 -61
  482. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +0 -938
  483. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +0 -67
  484. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +0 -101
  485. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +0 -80
  486. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +0 -103
  487. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +0 -59
  488. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +0 -201
  489. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +0 -97
  490. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +0 -90
  491. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +0 -44
  492. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +0 -45
  493. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +0 -211
  494. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +0 -170
  495. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +0 -46
  496. data/spec/spec_tests/data/client_side_encryption/getMore.yml +0 -61
  497. data/spec/spec_tests/data/client_side_encryption/insert.yml +0 -88
  498. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +0 -64
  499. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +0 -47
  500. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +0 -65
  501. data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +0 -69
  502. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +0 -22
  503. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +0 -42
  504. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +0 -39
  505. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +0 -57
  506. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +0 -67
  507. data/spec/spec_tests/data/client_side_encryption/types.yml +0 -501
  508. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +0 -194
  509. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +0 -67
  510. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +0 -309
  511. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +0 -159
  512. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +0 -105
  513. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +0 -104
  514. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +0 -122
  515. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +0 -157
  516. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +0 -69
  517. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +0 -122
  518. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +0 -432
  519. data/spec/spec_tests/data/client_side_encryption/unsupportedCommand.yml +0 -25
  520. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +0 -70
  521. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +0 -164
  522. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +0 -166
  523. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +0 -87
  524. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +0 -358
  525. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +0 -129
  526. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +0 -250
  527. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +0 -113
  528. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +0 -70
  529. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +0 -3982
  530. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +0 -96
  531. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +0 -3236
  532. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +0 -207
  533. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +0 -152
  534. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +0 -182
  535. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +0 -100
  536. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +0 -249
  537. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +0 -204
  538. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +0 -307
  539. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +0 -1877
  540. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +0 -1918
  541. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +0 -1676
  542. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +0 -2824
  543. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +0 -168
  544. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +0 -171
  545. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +0 -168
  546. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +0 -247
  547. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +0 -181
  548. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +0 -29
  549. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +0 -29
  550. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +0 -29
  551. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +0 -29
  552. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +0 -26
  553. data/spec/spec_tests/data/cmap/pool-checkin.yml +0 -24
  554. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +0 -21
  555. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +0 -50
  556. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +0 -38
  557. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +0 -81
  558. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +0 -71
  559. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +0 -64
  560. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +0 -39
  561. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +0 -41
  562. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +0 -41
  563. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +0 -88
  564. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +0 -43
  565. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +0 -41
  566. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +0 -18
  567. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +0 -39
  568. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +0 -48
  569. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +0 -30
  570. data/spec/spec_tests/data/cmap/pool-close.yml +0 -11
  571. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +0 -73
  572. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +0 -43
  573. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +0 -43
  574. data/spec/spec_tests/data/cmap/pool-create-with-options.yml +0 -21
  575. data/spec/spec_tests/data/cmap/pool-create.yml +0 -12
  576. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +0 -22
  577. data/spec/spec_tests/data/cmap/pool-ready.yml +0 -30
  578. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +0 -126
  579. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +0 -51
  580. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +0 -135
  581. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +0 -50
  582. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +0 -59
  583. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +0 -58
  584. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +0 -164
  585. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +0 -68
  586. data/spec/spec_tests/data/command_monitoring_unified/command.yml +0 -50
  587. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +0 -79
  588. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +0 -79
  589. data/spec/spec_tests/data/command_monitoring_unified/find.yml +0 -254
  590. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +0 -79
  591. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +0 -77
  592. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +0 -56
  593. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +0 -348
  594. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +0 -56
  595. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +0 -55
  596. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +0 -87
  597. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +0 -118
  598. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +0 -80
  599. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -251
  600. data/spec/spec_tests/data/connection_string/valid-auth.yml +0 -257
  601. data/spec/spec_tests/data/connection_string/valid-db-with-dotted-name.yml +0 -77
  602. data/spec/spec_tests/data/connection_string/valid-host_identifiers.yml +0 -121
  603. data/spec/spec_tests/data/connection_string/valid-options.yml +0 -30
  604. data/spec/spec_tests/data/connection_string/valid-unix_socket-absolute.yml +0 -197
  605. data/spec/spec_tests/data/connection_string/valid-unix_socket-relative.yml +0 -213
  606. data/spec/spec_tests/data/connection_string/valid-warnings.yml +0 -75
  607. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +0 -18
  608. data/spec/spec_tests/data/crud/read/aggregate-out.yml +0 -44
  609. data/spec/spec_tests/data/crud/read/aggregate.yml +0 -21
  610. data/spec/spec_tests/data/crud/read/count-collation.yml +0 -26
  611. data/spec/spec_tests/data/crud/read/count-empty.yml +0 -29
  612. data/spec/spec_tests/data/crud/read/count.yml +0 -74
  613. data/spec/spec_tests/data/crud/read/distinct-collation.yml +0 -18
  614. data/spec/spec_tests/data/crud/read/distinct.yml +0 -32
  615. data/spec/spec_tests/data/crud/read/find-collation.yml +0 -16
  616. data/spec/spec_tests/data/crud/read/find.yml +0 -49
  617. data/spec/spec_tests/data/crud/write/bulkWrite-arrayFilters.yml +0 -45
  618. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +0 -102
  619. data/spec/spec_tests/data/crud/write/bulkWrite.yml +0 -405
  620. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +0 -23
  621. data/spec/spec_tests/data/crud/write/deleteMany.yml +0 -35
  622. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +0 -23
  623. data/spec/spec_tests/data/crud/write/deleteOne.yml +0 -48
  624. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +0 -24
  625. data/spec/spec_tests/data/crud/write/findOneAndDelete.yml +0 -53
  626. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +0 -25
  627. data/spec/spec_tests/data/crud/write/findOneAndReplace-upsert.yml +0 -91
  628. data/spec/spec_tests/data/crud/write/findOneAndReplace-upsert_pre_2.6.yml +0 -88
  629. data/spec/spec_tests/data/crud/write/findOneAndReplace.yml +0 -113
  630. data/spec/spec_tests/data/crud/write/findOneAndUpdate-arrayFilters.yml +0 -69
  631. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +0 -28
  632. data/spec/spec_tests/data/crud/write/findOneAndUpdate.yml +0 -163
  633. data/spec/spec_tests/data/crud/write/insertMany.yml +0 -81
  634. data/spec/spec_tests/data/crud/write/insertOne.yml +0 -18
  635. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +0 -25
  636. data/spec/spec_tests/data/crud/write/replaceOne-pre_2.6.yml +0 -98
  637. data/spec/spec_tests/data/crud/write/replaceOne-upsert.yml +0 -48
  638. data/spec/spec_tests/data/crud/write/replaceOne.yml +0 -102
  639. data/spec/spec_tests/data/crud/write/updateMany-arrayFilters.yml +0 -66
  640. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +0 -29
  641. data/spec/spec_tests/data/crud/write/updateMany-pre_2.6.yml +0 -86
  642. data/spec/spec_tests/data/crud/write/updateMany.yml +0 -87
  643. data/spec/spec_tests/data/crud/write/updateOne-arrayFilters.yml +0 -114
  644. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +0 -26
  645. data/spec/spec_tests/data/crud/write/updateOne-pre_2.6.yml +0 -83
  646. data/spec/spec_tests/data/crud/write/updateOne.yml +0 -84
  647. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +0 -75
  648. data/spec/spec_tests/data/crud_unified/aggregate-let.yml +0 -138
  649. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +0 -42
  650. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +0 -185
  651. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +0 -171
  652. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +0 -161
  653. data/spec/spec_tests/data/crud_unified/aggregate.yml +0 -215
  654. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +0 -98
  655. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +0 -174
  656. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +0 -189
  657. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +0 -113
  658. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +0 -142
  659. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +0 -154
  660. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +0 -98
  661. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +0 -86
  662. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +0 -97
  663. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +0 -86
  664. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +0 -50
  665. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +0 -138
  666. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +0 -165
  667. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +0 -103
  668. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +0 -93
  669. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +0 -148
  670. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +0 -239
  671. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +0 -256
  672. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +0 -73
  673. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +0 -150
  674. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +0 -104
  675. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +0 -96
  676. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +0 -150
  677. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +0 -103
  678. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +0 -95
  679. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +0 -92
  680. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +0 -157
  681. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +0 -73
  682. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +0 -97
  683. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +0 -87
  684. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +0 -107
  685. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +0 -90
  686. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +0 -99
  687. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +0 -93
  688. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +0 -98
  689. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +0 -46
  690. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +0 -80
  691. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +0 -100
  692. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +0 -89
  693. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +0 -95
  694. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +0 -91
  695. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +0 -98
  696. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +0 -95
  697. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +0 -181
  698. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +0 -55
  699. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +0 -68
  700. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +0 -79
  701. data/spec/spec_tests/data/crud_unified/find-comment.yml +0 -166
  702. data/spec/spec_tests/data/crud_unified/find-let.yml +0 -71
  703. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +0 -377
  704. data/spec/spec_tests/data/crud_unified/find.yml +0 -68
  705. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +0 -96
  706. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +0 -91
  707. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +0 -107
  708. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +0 -88
  709. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +0 -102
  710. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +0 -86
  711. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +0 -101
  712. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +0 -140
  713. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +0 -83
  714. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +0 -99
  715. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +0 -96
  716. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +0 -98
  717. data/spec/spec_tests/data/crud_unified/findOneAndReplace-let.yml +0 -94
  718. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +0 -95
  719. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +0 -127
  720. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +0 -69
  721. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +0 -84
  722. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +0 -100
  723. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +0 -92
  724. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +0 -99
  725. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-let.yml +0 -96
  726. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +0 -93
  727. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +0 -128
  728. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +0 -91
  729. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +0 -238
  730. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +0 -46
  731. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +0 -105
  732. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +0 -180
  733. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +0 -95
  734. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +0 -108
  735. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +0 -98
  736. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +0 -37
  737. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +0 -104
  738. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +0 -138
  739. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +0 -91
  740. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +0 -115
  741. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +0 -96
  742. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +0 -115
  743. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +0 -107
  744. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +0 -39
  745. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +0 -104
  746. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +0 -138
  747. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +0 -47
  748. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +0 -85
  749. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +0 -109
  750. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +0 -95
  751. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +0 -109
  752. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +0 -102
  753. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +0 -37
  754. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +0 -299
  755. data/spec/spec_tests/data/gridfs/delete.yml +0 -123
  756. data/spec/spec_tests/data/gridfs/download.yml +0 -192
  757. data/spec/spec_tests/data/gridfs/download_by_name.yml +0 -113
  758. data/spec/spec_tests/data/gridfs/upload.yml +0 -158
  759. data/spec/spec_tests/data/gridfs_unified/delete.yml +0 -198
  760. data/spec/spec_tests/data/gridfs_unified/download.yml +0 -241
  761. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +0 -159
  762. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +0 -92
  763. data/spec/spec_tests/data/gridfs_unified/upload.yml +0 -288
  764. data/spec/spec_tests/data/index_management/createSearchIndex.yml +0 -64
  765. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +0 -86
  766. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +0 -43
  767. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +0 -91
  768. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +0 -46
  769. data/spec/spec_tests/data/load_balancers/event-monitoring.yml +0 -99
  770. data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +0 -36
  771. data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +0 -56
  772. data/spec/spec_tests/data/load_balancers/server-selection.yml +0 -50
  773. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +0 -26
  774. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Incompatible.yml +0 -25
  775. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +0 -33
  776. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml +0 -15
  777. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +0 -33
  778. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +0 -33
  779. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +0 -16
  780. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +0 -27
  781. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +0 -36
  782. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +0 -51
  783. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +0 -26
  784. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +0 -51
  785. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +0 -23
  786. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +0 -26
  787. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Incompatible.yml +0 -25
  788. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +0 -35
  789. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +0 -29
  790. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +0 -25
  791. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +0 -26
  792. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +0 -23
  793. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +0 -33
  794. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +0 -33
  795. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +0 -36
  796. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +0 -27
  797. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred_incompatible.yml +0 -27
  798. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +0 -26
  799. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +0 -59
  800. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +0 -43
  801. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +0 -59
  802. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +0 -43
  803. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +0 -23
  804. data/spec/spec_tests/data/max_staleness/Sharded/Incompatible.yml +0 -25
  805. data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +0 -28
  806. data/spec/spec_tests/data/max_staleness/Single/Incompatible.yml +0 -18
  807. data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +0 -20
  808. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +0 -15
  809. data/spec/spec_tests/data/read_write_concern/connection-string/read-concern.yml +0 -32
  810. data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +0 -79
  811. data/spec/spec_tests/data/read_write_concern/document/read-concern.yml +0 -37
  812. data/spec/spec_tests/data/read_write_concern/document/write-concern.yml +0 -100
  813. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-2.6.yml +0 -215
  814. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.2.yml +0 -58
  815. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.4.yml +0 -95
  816. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-4.2.yml +0 -36
  817. data/spec/spec_tests/data/retryable_reads/legacy/aggregate-merge.yml +0 -39
  818. data/spec/spec_tests/data/retryable_reads/legacy/aggregate-serverErrors.yml +0 -157
  819. data/spec/spec_tests/data/retryable_reads/legacy/aggregate.yml +0 -87
  820. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-client.watch-serverErrors.yml +0 -150
  821. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-client.watch.yml +0 -62
  822. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.coll.watch-serverErrors.yml +0 -150
  823. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.coll.watch.yml +0 -66
  824. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.watch-serverErrors.yml +0 -154
  825. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.watch.yml +0 -62
  826. data/spec/spec_tests/data/retryable_reads/legacy/count-serverErrors.yml +0 -150
  827. data/spec/spec_tests/data/retryable_reads/legacy/count.yml +0 -64
  828. data/spec/spec_tests/data/retryable_reads/legacy/countDocuments-serverErrors.yml +0 -150
  829. data/spec/spec_tests/data/retryable_reads/legacy/countDocuments.yml +0 -64
  830. data/spec/spec_tests/data/retryable_reads/legacy/distinct-serverErrors.yml +0 -156
  831. data/spec/spec_tests/data/retryable_reads/legacy/distinct.yml +0 -71
  832. data/spec/spec_tests/data/retryable_reads/legacy/estimatedDocumentCount-serverErrors.yml +0 -148
  833. data/spec/spec_tests/data/retryable_reads/legacy/estimatedDocumentCount.yml +0 -62
  834. data/spec/spec_tests/data/retryable_reads/legacy/find-serverErrors.yml +0 -160
  835. data/spec/spec_tests/data/retryable_reads/legacy/find.yml +0 -86
  836. data/spec/spec_tests/data/retryable_reads/legacy/findOne-serverErrors.yml +0 -154
  837. data/spec/spec_tests/data/retryable_reads/legacy/findOne.yml +0 -68
  838. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-download-serverErrors.yml +0 -173
  839. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-download.yml +0 -79
  840. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-downloadByName-serverErrors.yml +0 -174
  841. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-downloadByName.yml +0 -79
  842. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionNames-serverErrors.yml +0 -143
  843. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionNames.yml +0 -59
  844. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionObjects-serverErrors.yml +0 -144
  845. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionObjects.yml +0 -59
  846. data/spec/spec_tests/data/retryable_reads/legacy/listCollections-serverErrors.yml +0 -143
  847. data/spec/spec_tests/data/retryable_reads/legacy/listCollections.yml +0 -59
  848. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseNames-serverErrors.yml +0 -143
  849. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseNames.yml +0 -59
  850. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseObjects-serverErrors.yml +0 -144
  851. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseObjects.yml +0 -59
  852. data/spec/spec_tests/data/retryable_reads/legacy/listDatabases-serverErrors.yml +0 -144
  853. data/spec/spec_tests/data/retryable_reads/legacy/listDatabases.yml +0 -59
  854. data/spec/spec_tests/data/retryable_reads/legacy/listIndexNames-serverErrors.yml +0 -144
  855. data/spec/spec_tests/data/retryable_reads/legacy/listIndexNames.yml +0 -60
  856. data/spec/spec_tests/data/retryable_reads/legacy/listIndexes-serverErrors.yml +0 -145
  857. data/spec/spec_tests/data/retryable_reads/legacy/listIndexes.yml +0 -60
  858. data/spec/spec_tests/data/retryable_reads/legacy/mapReduce.yml +0 -62
  859. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +0 -1342
  860. data/spec/spec_tests/data/retryable_writes/legacy/bulkWrite-errorLabels.yml +0 -77
  861. data/spec/spec_tests/data/retryable_writes/legacy/bulkWrite-serverErrors.yml +0 -130
  862. data/spec/spec_tests/data/retryable_writes/legacy/bulkWrite.yml +0 -402
  863. data/spec/spec_tests/data/retryable_writes/legacy/deleteMany.yml +0 -22
  864. data/spec/spec_tests/data/retryable_writes/legacy/deleteOne-errorLabels.yml +0 -48
  865. data/spec/spec_tests/data/retryable_writes/legacy/deleteOne-serverErrors.yml +0 -73
  866. data/spec/spec_tests/data/retryable_writes/legacy/deleteOne.yml +0 -57
  867. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndDelete-errorLabels.yml +0 -49
  868. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndDelete-serverErrors.yml +0 -74
  869. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndDelete.yml +0 -58
  870. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndReplace-errorLabels.yml +0 -52
  871. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndReplace-serverErrors.yml +0 -80
  872. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndReplace.yml +0 -63
  873. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndUpdate-errorLabels.yml +0 -52
  874. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndUpdate-serverErrors.yml +0 -79
  875. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndUpdate.yml +0 -62
  876. data/spec/spec_tests/data/retryable_writes/legacy/insertMany-errorLabels.yml +0 -54
  877. data/spec/spec_tests/data/retryable_writes/legacy/insertMany-serverErrors.yml +0 -84
  878. data/spec/spec_tests/data/retryable_writes/legacy/insertMany.yml +0 -74
  879. data/spec/spec_tests/data/retryable_writes/legacy/insertOne-errorLabels.yml +0 -44
  880. data/spec/spec_tests/data/retryable_writes/legacy/insertOne-serverErrors.yml +0 -527
  881. data/spec/spec_tests/data/retryable_writes/legacy/insertOne.yml +0 -61
  882. data/spec/spec_tests/data/retryable_writes/legacy/replaceOne-errorLabels.yml +0 -53
  883. data/spec/spec_tests/data/retryable_writes/legacy/replaceOne-serverErrors.yml +0 -82
  884. data/spec/spec_tests/data/retryable_writes/legacy/replaceOne.yml +0 -66
  885. data/spec/spec_tests/data/retryable_writes/legacy/updateMany.yml +0 -27
  886. data/spec/spec_tests/data/retryable_writes/legacy/updateOne-errorLabels.yml +0 -53
  887. data/spec/spec_tests/data/retryable_writes/legacy/updateOne-serverErrors.yml +0 -82
  888. data/spec/spec_tests/data/retryable_writes/legacy/updateOne.yml +0 -129
  889. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +0 -93
  890. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +0 -785
  891. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +0 -54
  892. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +0 -75
  893. data/spec/spec_tests/data/run_command_unified/runCommand.yml +0 -319
  894. data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +0 -55
  895. data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +0 -47
  896. data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +0 -38
  897. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +0 -61
  898. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +0 -61
  899. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml +0 -61
  900. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml +0 -61
  901. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml +0 -61
  902. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotWritablePrimary.yml +0 -61
  903. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +0 -61
  904. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +0 -61
  905. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +0 -52
  906. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +0 -52
  907. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml +0 -52
  908. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml +0 -52
  909. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml +0 -52
  910. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotWritablePrimary.yml +0 -52
  911. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +0 -52
  912. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +0 -52
  913. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +0 -61
  914. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +0 -61
  915. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml +0 -61
  916. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml +0 -61
  917. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml +0 -61
  918. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml +0 -61
  919. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +0 -61
  920. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +0 -61
  921. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +0 -47
  922. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +0 -47
  923. data/spec/spec_tests/data/sdam/errors/post-42-LegacyNotPrimary.yml +0 -47
  924. data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryNoSecondaryOk.yml +0 -47
  925. data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryOrSecondary.yml +0 -47
  926. data/spec/spec_tests/data/sdam/errors/post-42-NotWritablePrimary.yml +0 -47
  927. data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +0 -47
  928. data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +0 -47
  929. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +0 -47
  930. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +0 -47
  931. data/spec/spec_tests/data/sdam/errors/pre-42-LegacyNotPrimary.yml +0 -47
  932. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryNoSecondaryOk.yml +0 -47
  933. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryOrSecondary.yml +0 -47
  934. data/spec/spec_tests/data/sdam/errors/pre-42-NotWritablePrimary.yml +0 -47
  935. data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +0 -47
  936. data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +0 -47
  937. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +0 -54
  938. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +0 -91
  939. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +0 -91
  940. data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryNoSecondaryOk.yml +0 -91
  941. data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryOrSecondary.yml +0 -91
  942. data/spec/spec_tests/data/sdam/errors/stale-generation-NotWritablePrimary.yml +0 -91
  943. data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +0 -91
  944. data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +0 -91
  945. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +0 -91
  946. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +0 -91
  947. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml +0 -91
  948. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +0 -91
  949. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml +0 -91
  950. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml +0 -91
  951. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +0 -91
  952. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +0 -91
  953. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +0 -82
  954. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +0 -82
  955. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +0 -91
  956. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +0 -91
  957. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml +0 -91
  958. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +0 -91
  959. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml +0 -91
  960. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml +0 -91
  961. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +0 -91
  962. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +0 -91
  963. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +0 -82
  964. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +0 -82
  965. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +0 -65
  966. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +0 -65
  967. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-LegacyNotPrimary.yml +0 -65
  968. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.yml +0 -65
  969. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryOrSecondary.yml +0 -65
  970. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotWritablePrimary.yml +0 -65
  971. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +0 -65
  972. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +0 -65
  973. data/spec/spec_tests/data/sdam/errors/write_errors_ignored.yml +0 -42
  974. data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +0 -25
  975. data/spec/spec_tests/data/sdam/rs/compatible.yml +0 -45
  976. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +0 -34
  977. data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +0 -44
  978. data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +0 -44
  979. data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +0 -36
  980. data/spec/spec_tests/data/sdam/rs/discover_ghost_replicaset.yml +0 -42
  981. data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +0 -51
  982. data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +0 -51
  983. data/spec/spec_tests/data/sdam/rs/discover_passives.yml +0 -83
  984. data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +0 -83
  985. data/spec/spec_tests/data/sdam/rs/discover_primary.yml +0 -43
  986. data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +0 -43
  987. data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +0 -50
  988. data/spec/spec_tests/data/sdam/rs/discover_rsother_replicaset.yml +0 -68
  989. data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +0 -44
  990. data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +0 -44
  991. data/spec/spec_tests/data/sdam/rs/discovery.yml +0 -207
  992. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +0 -62
  993. data/spec/spec_tests/data/sdam/rs/equal_electionids.yml +0 -57
  994. data/spec/spec_tests/data/sdam/rs/hosts_differ_from_seeds.yml +0 -37
  995. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +0 -36
  996. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +0 -34
  997. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +0 -36
  998. data/spec/spec_tests/data/sdam/rs/ls_timeout.yml +0 -249
  999. data/spec/spec_tests/data/sdam/rs/member_reconfig.yml +0 -74
  1000. data/spec/spec_tests/data/sdam/rs/member_standalone.yml +0 -66
  1001. data/spec/spec_tests/data/sdam/rs/new_primary.yml +0 -80
  1002. data/spec/spec_tests/data/sdam/rs/new_primary_new_electionid.yml +0 -119
  1003. data/spec/spec_tests/data/sdam/rs/new_primary_new_setversion.yml +0 -119
  1004. data/spec/spec_tests/data/sdam/rs/new_primary_wrong_set_name.yml +0 -77
  1005. data/spec/spec_tests/data/sdam/rs/non_rs_member.yml +0 -33
  1006. data/spec/spec_tests/data/sdam/rs/normalize_case.yml +0 -52
  1007. data/spec/spec_tests/data/sdam/rs/normalize_case_me.yml +0 -102
  1008. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +0 -175
  1009. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +0 -177
  1010. data/spec/spec_tests/data/sdam/rs/primary_becomes_ghost.yml +0 -65
  1011. data/spec/spec_tests/data/sdam/rs/primary_becomes_mongos.yml +0 -58
  1012. data/spec/spec_tests/data/sdam/rs/primary_becomes_standalone.yml +0 -55
  1013. data/spec/spec_tests/data/sdam/rs/primary_changes_set_name.yml +0 -63
  1014. data/spec/spec_tests/data/sdam/rs/primary_disconnect.yml +0 -59
  1015. data/spec/spec_tests/data/sdam/rs/primary_disconnect_electionid.yml +0 -189
  1016. data/spec/spec_tests/data/sdam/rs/primary_disconnect_setversion.yml +0 -189
  1017. data/spec/spec_tests/data/sdam/rs/primary_hint_from_secondary_with_mismatched_me.yml +0 -64
  1018. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +0 -27
  1019. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +0 -75
  1020. data/spec/spec_tests/data/sdam/rs/primary_reports_new_member.yml +0 -175
  1021. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +0 -81
  1022. data/spec/spec_tests/data/sdam/rs/primary_wrong_set_name.yml +0 -30
  1023. data/spec/spec_tests/data/sdam/rs/repeated.yml +0 -105
  1024. data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +0 -21
  1025. data/spec/spec_tests/data/sdam/rs/response_from_removed.yml +0 -69
  1026. data/spec/spec_tests/data/sdam/rs/ruby_primary_address_change.yml +0 -31
  1027. data/spec/spec_tests/data/sdam/rs/ruby_secondary_wrong_set_name_with_primary_second.yml +0 -73
  1028. data/spec/spec_tests/data/sdam/rs/sec_not_auth.yml +0 -55
  1029. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +0 -87
  1030. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +0 -87
  1031. data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +0 -28
  1032. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name.yml +0 -31
  1033. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name_with_primary.yml +0 -75
  1034. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +0 -101
  1035. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +0 -78
  1036. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +0 -79
  1037. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +0 -79
  1038. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +0 -78
  1039. data/spec/spec_tests/data/sdam/rs/stepdown_change_set_name.yml +0 -65
  1040. data/spec/spec_tests/data/sdam/rs/too_new.yml +0 -45
  1041. data/spec/spec_tests/data/sdam/rs/too_old.yml +0 -41
  1042. data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +0 -68
  1043. data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +0 -194
  1044. data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +0 -64
  1045. data/spec/spec_tests/data/sdam/rs/unexpected_mongos.yml +0 -29
  1046. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +0 -117
  1047. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +0 -119
  1048. data/spec/spec_tests/data/sdam/rs/wrong_set_name.yml +0 -38
  1049. data/spec/spec_tests/data/sdam/sharded/compatible.yml +0 -40
  1050. data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +0 -24
  1051. data/spec/spec_tests/data/sdam/sharded/ls_timeout_mongos.yml +0 -101
  1052. data/spec/spec_tests/data/sdam/sharded/mongos_disconnect.yml +0 -113
  1053. data/spec/spec_tests/data/sdam/sharded/multiple_mongoses.yml +0 -52
  1054. data/spec/spec_tests/data/sdam/sharded/non_mongos_removed.yml +0 -47
  1055. data/spec/spec_tests/data/sdam/sharded/normalize_uri_case.yml +0 -32
  1056. data/spec/spec_tests/data/sdam/sharded/ruby_primary_different_address.yml +0 -21
  1057. data/spec/spec_tests/data/sdam/sharded/ruby_primary_mismatched_me.yml +0 -22
  1058. data/spec/spec_tests/data/sdam/sharded/too_new.yml +0 -38
  1059. data/spec/spec_tests/data/sdam/sharded/too_old.yml +0 -38
  1060. data/spec/spec_tests/data/sdam/single/compatible.yml +0 -27
  1061. data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +0 -37
  1062. data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +0 -36
  1063. data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +0 -23
  1064. data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +0 -38
  1065. data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +0 -37
  1066. data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +0 -38
  1067. data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +0 -35
  1068. data/spec/spec_tests/data/sdam/single/direct_connection_unavailable_seed.yml +0 -28
  1069. data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +0 -40
  1070. data/spec/spec_tests/data/sdam/single/discover_standalone.yml +0 -35
  1071. data/spec/spec_tests/data/sdam/single/discover_unavailable_seed.yml +0 -28
  1072. data/spec/spec_tests/data/sdam/single/ls_timeout_standalone.yml +0 -36
  1073. data/spec/spec_tests/data/sdam/single/not_ok_response.yml +0 -44
  1074. data/spec/spec_tests/data/sdam/single/ruby_primary_different_address.yml +0 -24
  1075. data/spec/spec_tests/data/sdam/single/ruby_primary_mismatched_me.yml +0 -25
  1076. data/spec/spec_tests/data/sdam/single/standalone_removed.yml +0 -35
  1077. data/spec/spec_tests/data/sdam/single/standalone_using_legacy_hello.yml +0 -34
  1078. data/spec/spec_tests/data/sdam/single/too_new.yml +0 -27
  1079. data/spec/spec_tests/data/sdam/single/too_old.yml +0 -25
  1080. data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +0 -48
  1081. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +0 -70
  1082. data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +0 -65
  1083. data/spec/spec_tests/data/sdam_monitoring/replica_set_other_chain.yml +0 -222
  1084. data/spec/spec_tests/data/sdam_monitoring/replica_set_other_change.yml +0 -225
  1085. data/spec/spec_tests/data/sdam_monitoring/replica_set_primary_address_change.yml +0 -251
  1086. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +0 -111
  1087. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +0 -112
  1088. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +0 -111
  1089. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary_and_secondary.yml +0 -198
  1090. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary_removal.yml +0 -175
  1091. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +0 -111
  1092. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_second_seed_removal.yml +0 -106
  1093. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +0 -108
  1094. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +0 -70
  1095. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +0 -86
  1096. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +0 -73
  1097. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +0 -90
  1098. data/spec/spec_tests/data/sdam_unified/auth-error.yml +0 -130
  1099. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +0 -132
  1100. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +0 -132
  1101. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +0 -138
  1102. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +0 -133
  1103. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +0 -143
  1104. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +0 -130
  1105. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +0 -135
  1106. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +0 -119
  1107. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +0 -163
  1108. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +0 -233
  1109. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +0 -228
  1110. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +0 -318
  1111. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +0 -137
  1112. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +0 -162
  1113. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +0 -340
  1114. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +0 -125
  1115. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +0 -239
  1116. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +0 -144
  1117. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +0 -14
  1118. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +0 -5
  1119. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +0 -6
  1120. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +0 -5
  1121. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +0 -11
  1122. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +0 -5
  1123. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +0 -5
  1124. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +0 -11
  1125. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +0 -11
  1126. data/spec/spec_tests/data/seed_list_discovery/replica-set/direct-connection-false.yml +0 -10
  1127. data/spec/spec_tests/data/seed_list_discovery/replica-set/direct-connection-true.yml +0 -5
  1128. data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +0 -15
  1129. data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +0 -10
  1130. data/spec/spec_tests/data/seed_list_discovery/replica-set/longer-parent-in-return.yml +0 -11
  1131. data/spec/spec_tests/data/seed_list_discovery/replica-set/misformatted-option.yml +0 -5
  1132. data/spec/spec_tests/data/seed_list_discovery/replica-set/no-results.yml +0 -5
  1133. data/spec/spec_tests/data/seed_list_discovery/replica-set/not-enough-parts.yml +0 -5
  1134. data/spec/spec_tests/data/seed_list_discovery/replica-set/one-result-default-port.yml +0 -10
  1135. data/spec/spec_tests/data/seed_list_discovery/replica-set/one-txt-record-multiple-strings.yml +0 -10
  1136. data/spec/spec_tests/data/seed_list_discovery/replica-set/one-txt-record.yml +0 -11
  1137. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch1.yml +0 -5
  1138. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch2.yml +0 -5
  1139. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch3.yml +0 -5
  1140. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch4.yml +0 -5
  1141. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch5.yml +0 -5
  1142. data/spec/spec_tests/data/seed_list_discovery/replica-set/returned-parent-too-short.yml +0 -5
  1143. data/spec/spec_tests/data/seed_list_discovery/replica-set/returned-parent-wrong.yml +0 -5
  1144. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +0 -11
  1145. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +0 -5
  1146. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +0 -5
  1147. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +0 -16
  1148. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +0 -15
  1149. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +0 -15
  1150. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +0 -15
  1151. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +0 -15
  1152. data/spec/spec_tests/data/seed_list_discovery/replica-set/two-results-default-port.yml +0 -11
  1153. data/spec/spec_tests/data/seed_list_discovery/replica-set/two-results-nonstandard-port.yml +0 -11
  1154. data/spec/spec_tests/data/seed_list_discovery/replica-set/two-txt-records.yml +0 -5
  1155. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-not-allowed-option.yml +0 -5
  1156. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-with-overridden-ssl-option.yml +0 -11
  1157. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-with-overridden-uri-option.yml +0 -11
  1158. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-with-unallowed-option.yml +0 -5
  1159. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +0 -13
  1160. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +0 -12
  1161. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-port.yml +0 -5
  1162. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-two-hosts.yml +0 -5
  1163. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +0 -13
  1164. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +0 -12
  1165. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +0 -10
  1166. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +0 -11
  1167. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Nearest.yml +0 -25
  1168. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +0 -26
  1169. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +0 -20
  1170. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml +0 -15
  1171. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +0 -15
  1172. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Primary.yml +0 -18
  1173. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +0 -25
  1174. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +0 -20
  1175. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary.yml +0 -25
  1176. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +0 -25
  1177. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +0 -20
  1178. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.yml +0 -31
  1179. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.yml +0 -31
  1180. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +0 -20
  1181. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Nearest.yml +0 -32
  1182. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +0 -33
  1183. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +0 -25
  1184. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Primary.yml +0 -26
  1185. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +0 -28
  1186. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +0 -28
  1187. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Secondary.yml +0 -30
  1188. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +0 -30
  1189. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +0 -28
  1190. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.yml +0 -28
  1191. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +0 -25
  1192. data/spec/spec_tests/data/server_selection/Sharded/read/Nearest.yml +0 -21
  1193. data/spec/spec_tests/data/server_selection/Sharded/read/Primary.yml +0 -19
  1194. data/spec/spec_tests/data/server_selection/Sharded/read/PrimaryPreferred.yml +0 -21
  1195. data/spec/spec_tests/data/server_selection/Sharded/read/Secondary.yml +0 -21
  1196. data/spec/spec_tests/data/server_selection/Sharded/read/SecondaryPreferred.yml +0 -21
  1197. data/spec/spec_tests/data/server_selection/Single/read/SecondaryPreferred.yml +0 -18
  1198. data/spec/spec_tests/data/server_selection/Unknown/read/SecondaryPreferred.yml +0 -10
  1199. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +0 -11
  1200. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +0 -11
  1201. data/spec/spec_tests/data/server_selection_rtt/first_value.yml +0 -4
  1202. data/spec/spec_tests/data/server_selection_rtt/first_value_zero.yml +0 -4
  1203. data/spec/spec_tests/data/server_selection_rtt/value_test_1.yml +0 -4
  1204. data/spec/spec_tests/data/server_selection_rtt/value_test_2.yml +0 -4
  1205. data/spec/spec_tests/data/server_selection_rtt/value_test_3.yml +0 -4
  1206. data/spec/spec_tests/data/server_selection_rtt/value_test_4.yml +0 -4
  1207. data/spec/spec_tests/data/server_selection_rtt/value_test_5.yml +0 -4
  1208. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +0 -351
  1209. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +0 -123
  1210. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +0 -119
  1211. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +0 -75
  1212. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-server-error.yml +0 -102
  1213. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +0 -258
  1214. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +0 -482
  1215. data/spec/spec_tests/data/transactions/abort.yml +0 -413
  1216. data/spec/spec_tests/data/transactions/bulk.yml +0 -267
  1217. data/spec/spec_tests/data/transactions/causal-consistency.yml +0 -175
  1218. data/spec/spec_tests/data/transactions/commit.yml +0 -603
  1219. data/spec/spec_tests/data/transactions/count.yml +0 -67
  1220. data/spec/spec_tests/data/transactions/create-collection.yml +0 -131
  1221. data/spec/spec_tests/data/transactions/create-index.yml +0 -152
  1222. data/spec/spec_tests/data/transactions/delete.yml +0 -192
  1223. data/spec/spec_tests/data/transactions/error-labels.yml +0 -1030
  1224. data/spec/spec_tests/data/transactions/errors-client.yml +0 -55
  1225. data/spec/spec_tests/data/transactions/errors.yml +0 -133
  1226. data/spec/spec_tests/data/transactions/findOneAndDelete.yml +0 -134
  1227. data/spec/spec_tests/data/transactions/findOneAndReplace.yml +0 -148
  1228. data/spec/spec_tests/data/transactions/findOneAndUpdate.yml +0 -236
  1229. data/spec/spec_tests/data/transactions/insert.yml +0 -390
  1230. data/spec/spec_tests/data/transactions/isolation.yml +0 -133
  1231. data/spec/spec_tests/data/transactions/mongos-pin-auto.yml +0 -1674
  1232. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +0 -350
  1233. data/spec/spec_tests/data/transactions/pin-mongos.yml +0 -559
  1234. data/spec/spec_tests/data/transactions/read-concern.yml +0 -623
  1235. data/spec/spec_tests/data/transactions/read-pref.yml +0 -348
  1236. data/spec/spec_tests/data/transactions/reads.yml +0 -261
  1237. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -124
  1238. data/spec/spec_tests/data/transactions/retryable-abort.yml +0 -1315
  1239. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -132
  1240. data/spec/spec_tests/data/transactions/retryable-commit.yml +0 -1460
  1241. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -216
  1242. data/spec/spec_tests/data/transactions/run-command.yml +0 -197
  1243. data/spec/spec_tests/data/transactions/transaction-options-repl.yml +0 -117
  1244. data/spec/spec_tests/data/transactions/transaction-options.yml +0 -781
  1245. data/spec/spec_tests/data/transactions/update.yml +0 -246
  1246. data/spec/spec_tests/data/transactions/write-concern.yml +0 -554
  1247. data/spec/spec_tests/data/transactions_api/callback-aborts.yml +0 -170
  1248. data/spec/spec_tests/data/transactions_api/callback-commits.yml +0 -204
  1249. data/spec/spec_tests/data/transactions_api/callback-retry.yml +0 -215
  1250. data/spec/spec_tests/data/transactions_api/commit-retry.yml +0 -324
  1251. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror-4.2.yml +0 -139
  1252. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror.yml +0 -175
  1253. data/spec/spec_tests/data/transactions_api/commit-writeconcernerror.yml +0 -216
  1254. data/spec/spec_tests/data/transactions_api/commit.yml +0 -193
  1255. data/spec/spec_tests/data/transactions_api/transaction-options.yml +0 -274
  1256. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +0 -64
  1257. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +0 -172
  1258. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +0 -118
  1259. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +0 -118
  1260. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +0 -31
  1261. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +0 -31
  1262. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +0 -34
  1263. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +0 -35
  1264. data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +0 -31
  1265. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +0 -13
  1266. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +0 -17
  1267. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +0 -37
  1268. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +0 -40
  1269. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +0 -37
  1270. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +0 -39
  1271. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +0 -66
  1272. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +0 -78
  1273. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +0 -34
  1274. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +0 -255
  1275. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +0 -241
  1276. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +0 -102
  1277. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +0 -190
  1278. data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +0 -155
  1279. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +0 -193
  1280. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +0 -210
  1281. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +0 -214
  1282. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +0 -235
  1283. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +0 -169
  1284. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +0 -171
  1285. data/spec/spec_tests/data/uri_options/auth-options.yml +0 -49
  1286. data/spec/spec_tests/data/uri_options/compression-options.yml +0 -51
  1287. data/spec/spec_tests/data/uri_options/concern-options.yml +0 -55
  1288. data/spec/spec_tests/data/uri_options/connection-options.yml +0 -209
  1289. data/spec/spec_tests/data/uri_options/connection-pool-options.yml +0 -26
  1290. data/spec/spec_tests/data/uri_options/read-preference-options.yml +0 -66
  1291. data/spec/spec_tests/data/uri_options/ruby-auth-options.yml +0 -12
  1292. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +0 -58
  1293. data/spec/spec_tests/data/uri_options/srv-options.yml +0 -96
  1294. data/spec/spec_tests/data/uri_options/tls-options.yml +0 -364
  1295. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +0 -419
  1296. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +0 -413
  1297. data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +0 -75
  1298. data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +0 -47
  1299. data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +0 -46
  1300. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +0 -128
  1301. data/spec/spec_tests/gridfs_spec.rb +0 -55
  1302. data/spec/spec_tests/gridfs_unified_spec.rb +0 -13
  1303. data/spec/spec_tests/index_management_unified_spec.rb +0 -13
  1304. data/spec/spec_tests/load_balancers_spec.rb +0 -15
  1305. data/spec/spec_tests/max_staleness_spec.rb +0 -12
  1306. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +0 -13
  1307. data/spec/spec_tests/read_write_concern_document_spec.rb +0 -77
  1308. data/spec/spec_tests/read_write_concern_operaton_spec.rb +0 -13
  1309. data/spec/spec_tests/retryable_reads_spec.rb +0 -55
  1310. data/spec/spec_tests/retryable_reads_unified_spec.rb +0 -22
  1311. data/spec/spec_tests/retryable_writes_spec.rb +0 -25
  1312. data/spec/spec_tests/retryable_writes_unified_spec.rb +0 -21
  1313. data/spec/spec_tests/run_command_unified_spec.rb +0 -13
  1314. data/spec/spec_tests/sdam_monitoring_spec.rb +0 -101
  1315. data/spec/spec_tests/sdam_spec.rb +0 -246
  1316. data/spec/spec_tests/sdam_unified_spec.rb +0 -15
  1317. data/spec/spec_tests/seed_list_discovery_spec.rb +0 -127
  1318. data/spec/spec_tests/server_selection_rtt_spec.rb +0 -33
  1319. data/spec/spec_tests/server_selection_spec.rb +0 -12
  1320. data/spec/spec_tests/sessions_unified_spec.rb +0 -13
  1321. data/spec/spec_tests/transactions_api_spec.rb +0 -13
  1322. data/spec/spec_tests/transactions_spec.rb +0 -13
  1323. data/spec/spec_tests/transactions_unified_spec.rb +0 -14
  1324. data/spec/spec_tests/unified_spec.rb +0 -18
  1325. data/spec/spec_tests/uri_options_spec.rb +0 -93
  1326. data/spec/spec_tests/versioned_api_spec.rb +0 -13
  1327. data/spec/stress/cleanup_spec.rb +0 -61
  1328. data/spec/stress/connection_pool_stress_spec.rb +0 -143
  1329. data/spec/stress/connection_pool_timing_spec.rb +0 -160
  1330. data/spec/stress/fork_reconnect_stress_spec.rb +0 -108
  1331. data/spec/stress/push_monitor_close_spec.rb +0 -44
  1332. data/spec/support/authorization.rb +0 -161
  1333. data/spec/support/aws_utils/base.rb +0 -137
  1334. data/spec/support/aws_utils/inspector.rb +0 -227
  1335. data/spec/support/aws_utils/orchestrator.rb +0 -385
  1336. data/spec/support/aws_utils/provisioner.rb +0 -363
  1337. data/spec/support/aws_utils.rb +0 -66
  1338. data/spec/support/background_thread_registry.rb +0 -60
  1339. data/spec/support/certificates/README.md +0 -106
  1340. data/spec/support/certificates/atlas-ocsp-ca.crt +0 -113
  1341. data/spec/support/certificates/atlas-ocsp.crt +0 -147
  1342. data/spec/support/certificates/ca.crt +0 -76
  1343. data/spec/support/certificates/client-encrypted.key +0 -30
  1344. data/spec/support/certificates/client-int.crt +0 -78
  1345. data/spec/support/certificates/client-second-level-bundle.pem +0 -179
  1346. data/spec/support/certificates/client-second-level.crt +0 -74
  1347. data/spec/support/certificates/client-second-level.key +0 -27
  1348. data/spec/support/certificates/client-second-level.pem +0 -101
  1349. data/spec/support/certificates/client-x509.crt +0 -78
  1350. data/spec/support/certificates/client-x509.key +0 -27
  1351. data/spec/support/certificates/client-x509.pem +0 -105
  1352. data/spec/support/certificates/client.crt +0 -74
  1353. data/spec/support/certificates/client.key +0 -27
  1354. data/spec/support/certificates/client.pem +0 -101
  1355. data/spec/support/certificates/crl.pem +0 -12
  1356. data/spec/support/certificates/crl_client_revoked.pem +0 -13
  1357. data/spec/support/certificates/multi-ca.crt +0 -152
  1358. data/spec/support/certificates/python-ca.crt +0 -76
  1359. data/spec/support/certificates/retrieve-atlas-cert +0 -40
  1360. data/spec/support/certificates/server-int.crt +0 -78
  1361. data/spec/support/certificates/server-second-level-bundle.pem +0 -179
  1362. data/spec/support/certificates/server-second-level.crt +0 -74
  1363. data/spec/support/certificates/server-second-level.key +0 -27
  1364. data/spec/support/certificates/server-second-level.pem +0 -101
  1365. data/spec/support/certificates/server.pem +0 -101
  1366. data/spec/support/client_registry.rb +0 -258
  1367. data/spec/support/client_registry_macros.rb +0 -26
  1368. data/spec/support/cluster_tools.rb +0 -384
  1369. data/spec/support/common_shortcuts.rb +0 -421
  1370. data/spec/support/constraints.rb +0 -39
  1371. data/spec/support/crypt/corpus/corpus-encrypted.json +0 -9515
  1372. data/spec/support/crypt/corpus/corpus-key-aws.json +0 -33
  1373. data/spec/support/crypt/corpus/corpus-key-azure.json +0 -33
  1374. data/spec/support/crypt/corpus/corpus-key-gcp.json +0 -35
  1375. data/spec/support/crypt/corpus/corpus-key-kmip.json +0 -32
  1376. data/spec/support/crypt/corpus/corpus-key-local.json +0 -31
  1377. data/spec/support/crypt/corpus/corpus-schema.json +0 -6335
  1378. data/spec/support/crypt/corpus/corpus.json +0 -8619
  1379. data/spec/support/crypt/data_keys/key_document_aws.json +0 -34
  1380. data/spec/support/crypt/data_keys/key_document_azure.json +0 -33
  1381. data/spec/support/crypt/data_keys/key_document_gcp.json +0 -37
  1382. data/spec/support/crypt/data_keys/key_document_kmip.json +0 -32
  1383. data/spec/support/crypt/data_keys/key_document_local.json +0 -31
  1384. data/spec/support/crypt/encrypted_fields/encryptedFields.json +0 -32
  1385. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +0 -30
  1386. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +0 -21
  1387. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +0 -29
  1388. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +0 -21
  1389. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +0 -30
  1390. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +0 -27
  1391. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +0 -27
  1392. data/spec/support/crypt/external/external-key.json +0 -31
  1393. data/spec/support/crypt/external/external-schema.json +0 -19
  1394. data/spec/support/crypt/keys/key1-document.json +0 -30
  1395. data/spec/support/crypt/limits/limits-doc.json +0 -102
  1396. data/spec/support/crypt/limits/limits-key.json +0 -31
  1397. data/spec/support/crypt/limits/limits-schema.json +0 -1405
  1398. data/spec/support/crypt/schema_maps/schema_map_aws.json +0 -17
  1399. data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +0 -12
  1400. data/spec/support/crypt/schema_maps/schema_map_azure.json +0 -17
  1401. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +0 -12
  1402. data/spec/support/crypt/schema_maps/schema_map_gcp.json +0 -17
  1403. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +0 -12
  1404. data/spec/support/crypt/schema_maps/schema_map_kmip.json +0 -17
  1405. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +0 -12
  1406. data/spec/support/crypt/schema_maps/schema_map_local.json +0 -18
  1407. data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +0 -12
  1408. data/spec/support/crypt.rb +0 -412
  1409. data/spec/support/dns.rb +0 -16
  1410. data/spec/support/json_ext_formatter.rb +0 -16
  1411. data/spec/support/keyword_struct.rb +0 -29
  1412. data/spec/support/local_resource_registry.rb +0 -37
  1413. data/spec/support/macros.rb +0 -29
  1414. data/spec/support/matchers.rb +0 -88
  1415. data/spec/support/mongos_macros.rb +0 -24
  1416. data/spec/support/monitoring_ext.rb +0 -19
  1417. data/spec/support/ocsp +0 -1
  1418. data/spec/support/primary_socket.rb +0 -24
  1419. data/spec/support/recording_logger.rb +0 -27
  1420. data/spec/support/sdam_formatter_integration.rb +0 -119
  1421. data/spec/support/shared/app_metadata.rb +0 -179
  1422. data/spec/support/shared/auth_context.rb +0 -17
  1423. data/spec/support/shared/protocol.rb +0 -36
  1424. data/spec/support/shared/scram_conversation.rb +0 -104
  1425. data/spec/support/shared/server_selector.rb +0 -233
  1426. data/spec/support/shared/session.rb +0 -916
  1427. data/spec/support/spec_config.rb +0 -767
  1428. data/spec/support/spec_setup.rb +0 -83
  1429. data/spec/support/using_hash.rb +0 -40
  1430. data/spec/support/utils.rb +0 -680
@@ -1,2723 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- SINGLE_CLIENT = [ '127.0.0.1:27017' ].freeze
6
-
7
- # let these existing styles stand, rather than going in for a deep refactoring
8
- # of these specs.
9
- #
10
- # possible future work: re-enable these one at a time and do the hard work of
11
- # making them right.
12
- #
13
- # rubocop:disable RSpec/ExpectInHook, RSpec/MessageSpies, RSpec/ExampleLength
14
- # rubocop:disable RSpec/ContextWording, RSpec/RepeatedExampleGroupDescription
15
- # rubocop:disable RSpec/ExampleWording, Style/BlockComments, RSpec/AnyInstance
16
- # rubocop:disable RSpec/VerifiedDoubles
17
- describe Mongo::Client do
18
- clean_slate
19
-
20
- let(:subscriber) { Mrss::EventSubscriber.new }
21
-
22
- describe '.new' do
23
- context 'with scan: false' do
24
- fails_on_jruby
25
-
26
- it 'does not perform i/o' do
27
- allow_any_instance_of(Mongo::Server::Monitor).to receive(:run!)
28
- expect_any_instance_of(Mongo::Server::Monitor).not_to receive(:scan!)
29
-
30
- # return should be instant
31
- c = Timeout.timeout(1) do
32
- ClientRegistry.instance.new_local_client([ '1.1.1.1' ], scan: false)
33
- end
34
- expect(c.cluster.servers).to be_empty
35
- c.close
36
- end
37
- end
38
-
39
- context 'with default scan: true' do
40
- shared_examples 'does not wait for server selection timeout' do
41
- let(:logger) do
42
- Logger.new($stdout, level: Logger::DEBUG)
43
- end
44
-
45
- let(:subscriber) do
46
- Mongo::Monitoring::UnifiedSdamLogSubscriber.new(
47
- logger: logger,
48
- log_prefix: 'CCS-SDAM'
49
- )
50
- end
51
-
52
- let(:client) do
53
- ClientRegistry.instance.new_local_client(
54
- [ address ],
55
- # Specify server selection timeout here because test suite sets
56
- # one by default and it's fairly low
57
- SpecConfig.instance.test_options.merge(
58
- connect_timeout: 1,
59
- socket_timeout: 1,
60
- server_selection_timeout: 8,
61
- logger: logger,
62
- log_prefix: 'CCS-CLIENT',
63
- sdam_proc: ->(client) { subscriber.subscribe(client) }
64
- )
65
- )
66
- end
67
-
68
- it 'does not wait for server selection timeout' do
69
- time_taken = Benchmark.realtime do
70
- # Client is created here.
71
- client
72
- end
73
- puts "client_construction_spec.rb: Cluster is: #{client.cluster.summary}"
74
-
75
- # Because the first round of sdam waits for server statuses to change
76
- # rather than for server selection semaphore on the cluster which
77
- # is signaled after topology is updated, the topology here could be
78
- # old (i.e. a monitor thread was just about to update the topology
79
- # but hasn't quite gotten to it. Add a small delay to compensate.
80
- # This issue doesn't apply to real applications which will wait for
81
- # server selection semaphore.
82
- sleep 0.1
83
-
84
- actual_class = client.cluster.topology.class
85
- expect([
86
- Mongo::Cluster::Topology::ReplicaSetWithPrimary,
87
- Mongo::Cluster::Topology::Single,
88
- Mongo::Cluster::Topology::Sharded,
89
- Mongo::Cluster::Topology::LoadBalanced,
90
- ]).to include(actual_class)
91
- expect(time_taken).to be < 5
92
-
93
- # run a command to ensure the client is a working one
94
- client.database.command(ping: 1)
95
- end
96
- end
97
-
98
- context 'when cluster is monitored' do
99
- require_topology :single, :replica_set, :sharded
100
-
101
- # TODO: this test requires there being no outstanding background
102
- # monitoring threads running, as otherwise the scan! expectation
103
- # can be executed on a thread that belongs to one of the global
104
- # clients for instance
105
- it 'performs one round of sdam' do
106
- # Does not work due to
107
- # https://github.com/rspec/rspec-mocks/issues/1242.
108
- #
109
- # expect_any_instance_of(Mongo::Server::Monitor).to receive(:scan!).
110
- # exactly(SpecConfig.instance.addresses.length).times.and_call_original
111
- c = new_local_client(SpecConfig.instance.addresses, SpecConfig.instance.test_options)
112
- expect(c.cluster.servers).not_to be_empty
113
- end
114
-
115
- # This checks the case of all initial seeds being removed from
116
- # cluster during SDAM
117
- context 'me mismatch on the only initial seed' do
118
- let(:address) do
119
- ClusterConfig.instance.alternate_address.to_s
120
- end
121
-
122
- include_examples 'does not wait for server selection timeout'
123
- end
124
- end
125
-
126
- context 'when cluster is not monitored' do
127
- require_topology :load_balanced
128
-
129
- let(:address) do
130
- ClusterConfig.instance.alternate_address.to_s
131
- end
132
-
133
- include_examples 'does not wait for server selection timeout'
134
- end
135
- end
136
-
137
- context 'with monitoring_io: false' do
138
- let(:client) do
139
- new_local_client(SINGLE_CLIENT, monitoring_io: false)
140
- end
141
-
142
- it 'passes monitoring_io: false to cluster' do
143
- expect(client.cluster.options[:monitoring_io]).to be false
144
- end
145
- end
146
- end
147
-
148
- describe '#initialize' do
149
- context 'when providing options' do
150
- context 'with auto_encryption_options' do
151
- require_libmongocrypt
152
-
153
- include_context 'define shared FLE helpers'
154
-
155
- let(:client) do
156
- new_local_client_nmio(
157
- SpecConfig.instance.addresses,
158
- SpecConfig.instance.test_options.merge(client_opts)
159
- )
160
- end
161
-
162
- let(:client_opts) { { auto_encryption_options: auto_encryption_options } }
163
-
164
- let(:auto_encryption_options) do
165
- {
166
- key_vault_client: key_vault_client,
167
- key_vault_namespace: key_vault_namespace,
168
- kms_providers: kms_providers,
169
- schema_map: schema_map,
170
- bypass_auto_encryption: bypass_auto_encryption,
171
- extra_options: extra_options,
172
- }
173
- end
174
-
175
- let(:key_vault_client) { new_local_client_nmio(SpecConfig.instance.addresses) }
176
-
177
- let(:bypass_auto_encryption) { true }
178
-
179
- let(:extra_options) do
180
- {
181
- mongocryptd_uri: mongocryptd_uri,
182
- mongocryptd_bypass_spawn: mongocryptd_bypass_spawn,
183
- mongocryptd_spawn_path: mongocryptd_spawn_path,
184
- mongocryptd_spawn_args: mongocryptd_spawn_args,
185
- }
186
- end
187
-
188
- let(:mongocryptd_uri) { 'mongodb://localhost:27021' }
189
- let(:mongocryptd_bypass_spawn) { true }
190
- let(:mongocryptd_spawn_path) { '/spawn/path' }
191
- let(:mongocryptd_spawn_args) { [ '--idleShutdownTimeoutSecs=100' ] }
192
-
193
- shared_examples 'a functioning auto encryption client' do
194
- let(:encryption_options) { client.encrypter.options }
195
-
196
- context 'when auto_encrypt_opts are nil' do
197
- let(:auto_encryption_options) { nil }
198
-
199
- it 'does not raise an exception' do
200
- expect { client }.not_to raise_error
201
- end
202
- end
203
-
204
- context 'when key_vault_namespace is nil' do
205
- let(:key_vault_namespace) { nil }
206
-
207
- it 'raises an exception' do
208
- expect { client }.to raise_error(ArgumentError, /key_vault_namespace option cannot be nil/)
209
- end
210
- end
211
-
212
- context 'when key_vault_namespace is incorrectly formatted' do
213
- let(:key_vault_namespace) { 'not.good.formatting' }
214
-
215
- it 'raises an exception' do
216
- expect { client }.to raise_error(
217
- ArgumentError,
218
- /key_vault_namespace option must be in the format database.collection/
219
- )
220
- end
221
- end
222
-
223
- context 'when kms_providers is nil' do
224
- let(:kms_providers) { nil }
225
-
226
- it 'raises an exception' do
227
- expect { client }.to raise_error(ArgumentError, /KMS providers options must not be nil/)
228
- end
229
- end
230
-
231
- context 'when kms_providers doesn\'t have local or aws keys' do
232
- let(:kms_providers) { { random_key: 'hello' } }
233
-
234
- it 'raises an exception' do
235
- expect { client }.to raise_error(
236
- ArgumentError,
237
- /KMS providers options must have one of the following keys: :aws, :azure, :gcp, :kmip, :local/
238
- )
239
- end
240
- end
241
-
242
- context 'when local kms_provider is incorrectly formatted' do
243
- let(:kms_providers) { { local: { wrong_key: 'hello' } } }
244
-
245
- it 'raises an exception' do
246
- expect { client }.to raise_error(
247
- ArgumentError,
248
- /Local KMS provider options must be in the format: { key: 'MASTER-KEY' }/
249
- )
250
- end
251
- end
252
-
253
- context 'when aws kms_provider is incorrectly formatted' do
254
- let(:kms_providers) { { aws: { wrong_key: 'hello' } } }
255
-
256
- let(:expected_options_format) do
257
- "{ access_key_id: 'YOUR-ACCESS-KEY-ID', secret_access_key: 'SECRET-ACCESS-KEY' }"
258
- end
259
-
260
- it 'raises an exception' do
261
- expect { client }.to raise_error(
262
- ArgumentError,
263
- / AWS KMS provider options must be in the format: #{expected_options_format}/
264
- )
265
- end
266
- end
267
-
268
- context 'with an invalid schema map' do
269
- let(:schema_map) { '' }
270
-
271
- it 'raises an exception' do
272
- expect { client }.to raise_error(ArgumentError, /schema_map must be a Hash or nil/)
273
- end
274
- end
275
-
276
- context 'with valid options' do
277
- it 'does not raise an exception' do
278
- expect { client }.not_to raise_error
279
- end
280
-
281
- context 'with a nil schema_map' do
282
- let(:schema_map) { nil }
283
-
284
- it 'does not raise an exception' do
285
- expect { client }.not_to raise_error
286
- end
287
- end
288
-
289
- it 'sets options on the client' do
290
- expect(encryption_options[:key_vault_client]).to eq(key_vault_client)
291
- expect(encryption_options[:key_vault_namespace]).to eq(key_vault_namespace)
292
- # Don't explicitly expect kms_providers to avoid accidentally exposing
293
- # sensitive data in evergreen logs
294
- expect(encryption_options[:kms_providers]).to be_a(Hash)
295
- expect(encryption_options[:schema_map]).to eq(schema_map)
296
- expect(encryption_options[:bypass_auto_encryption]).to eq(bypass_auto_encryption)
297
- expect(encryption_options[:extra_options][:mongocryptd_uri]).to eq(mongocryptd_uri)
298
- expect(encryption_options[:extra_options][:mongocryptd_bypass_spawn]).to eq(mongocryptd_bypass_spawn)
299
- expect(encryption_options[:extra_options][:mongocryptd_spawn_path]).to eq(mongocryptd_spawn_path)
300
- expect(encryption_options[:extra_options][:mongocryptd_spawn_args]).to eq(mongocryptd_spawn_args)
301
-
302
- expect(client.encrypter.mongocryptd_client.options[:monitoring_io]).to be false
303
- end
304
-
305
- context 'with default extra options' do
306
- let(:auto_encryption_options) do
307
- {
308
- key_vault_namespace: key_vault_namespace,
309
- kms_providers: kms_providers,
310
- schema_map: schema_map,
311
- }
312
- end
313
-
314
- it 'sets key_vault_client with no encryption options' do
315
- key_vault_client = client.encrypter.key_vault_client
316
- expect(key_vault_client.options['auto_encryption_options']).to be_nil
317
- end
318
-
319
- it 'sets bypass_auto_encryption to false' do
320
- expect(encryption_options[:bypass_auto_encryption]).to be false
321
- end
322
-
323
- it 'sets extra options to defaults' do
324
- expect(encryption_options[:extra_options][:mongocryptd_uri]).to eq('mongodb://localhost:27020')
325
- expect(encryption_options[:extra_options][:mongocryptd_bypass_spawn]).to be false
326
- expect(encryption_options[:extra_options][:mongocryptd_spawn_path]).to eq('mongocryptd')
327
- expect(encryption_options[:extra_options][:mongocryptd_spawn_args])
328
- .to eq([ '--idleShutdownTimeoutSecs=60' ])
329
- end
330
- end
331
-
332
- context 'with mongocryptd_spawn_args that don\'t include idleShutdownTimeoutSecs' do
333
- let(:mongocryptd_spawn_args) { [ '--otherArgument=true' ] }
334
-
335
- it 'adds a default value to mongocryptd_spawn_args' do
336
- expect(encryption_options[:extra_options][:mongocryptd_spawn_args])
337
- .to eq(mongocryptd_spawn_args + [ '--idleShutdownTimeoutSecs=60' ])
338
- end
339
- end
340
-
341
- context 'with mongocryptd_spawn_args that has idleShutdownTimeoutSecs as two arguments' do
342
- let(:mongocryptd_spawn_args) { [ '--idleShutdownTimeoutSecs', 100 ] }
343
-
344
- it 'does not modify mongocryptd_spawn_args' do
345
- expect(encryption_options[:extra_options][:mongocryptd_spawn_args]).to eq(mongocryptd_spawn_args)
346
- end
347
- end
348
-
349
- context 'with default key_vault_client' do
350
- let(:key_vault_client) { nil }
351
-
352
- it 'creates a key_vault_client' do
353
- key_vault_client = encryption_options[:key_vault_client]
354
-
355
- expect(key_vault_client).to be_a(described_class)
356
- end
357
- end
358
- end
359
- end
360
-
361
- context 'with AWS KMS providers' do
362
- include_context 'with AWS kms_providers' do
363
- it_behaves_like 'a functioning auto encryption client'
364
- end
365
- end
366
-
367
- context 'with local KMS providers' do
368
- include_context 'with local kms_providers' do
369
- it_behaves_like 'a functioning auto encryption client'
370
- end
371
- end
372
- end
373
-
374
- context 'timeout options' do
375
- let(:client) do
376
- new_local_client(
377
- SpecConfig.instance.addresses,
378
- SpecConfig.instance.authorized_test_options.merge(options)
379
- )
380
- end
381
-
382
- context 'when network timeouts are zero' do
383
- let(:options) { { socket_timeout: 0, connect_timeout: 0 } }
384
-
385
- it 'sets options to zeros' do
386
- expect(client.options[:socket_timeout]).to be == 0
387
- expect(client.options[:connect_timeout]).to be == 0
388
- end
389
-
390
- it 'connects and performs operations successfully' do
391
- expect { client.database.command(ping: 1) }
392
- .not_to raise_error
393
- end
394
- end
395
-
396
- %i[ socket_timeout connect_timeout ].each do |option|
397
- context "when #{option} is negative" do
398
- let(:options) { { option => -1 } }
399
-
400
- it 'fails client creation' do
401
- expect { client }
402
- .to raise_error(ArgumentError, /#{option} must be a non-negative number/)
403
- end
404
- end
405
-
406
- context "when #{option} is of the wrong type" do
407
- let(:options) { { option => '42' } }
408
-
409
- it 'fails client creation' do
410
- expect { client }
411
- .to raise_error(ArgumentError, /#{option} must be a non-negative number/)
412
- end
413
- end
414
- end
415
-
416
- context 'when :connect_timeout is very small' do
417
- # The driver reads first and checks the deadline second.
418
- # This means the read (in a monitor) can technically take more than
419
- # the connect timeout. Restrict to TLS configurations to make
420
- # the network I/O take longer.
421
- require_tls
422
-
423
- let(:options) do
424
- { connect_timeout: 1e-6, server_selection_timeout: 2 }
425
- end
426
-
427
- it 'allows client creation' do
428
- expect { client }.not_to raise_error
429
- end
430
-
431
- context 'non-lb' do
432
- require_topology :single, :replica_set, :sharded
433
-
434
- it 'fails server selection due to very small timeout' do
435
- expect { client.database.command(ping: 1) }
436
- .to raise_error(Mongo::Error::NoServerAvailable)
437
- end
438
- end
439
-
440
- context 'lb' do
441
- require_topology :load_balanced
442
-
443
- it 'fails the operation after successful server selection' do
444
- expect { client.database.command(ping: 1) }
445
- .to raise_error(Mongo::Error::SocketTimeoutError, /socket took over.*to connect/)
446
- end
447
- end
448
- end
449
-
450
- context 'when :socket_timeout is very small' do
451
- # The driver reads first and checks the deadline second.
452
- # This means the read (in a monitor) can technically take more than
453
- # the connect timeout. Restrict to TLS configurations to make
454
- # the network I/O take longer.
455
- require_tls
456
-
457
- let(:options) do
458
- { socket_timeout: 1e-6, server_selection_timeout: 2 }
459
- end
460
-
461
- it 'allows client creation' do
462
- expect { client }.not_to raise_error
463
- end
464
-
465
- retry_test
466
- it 'fails operations due to very small timeout' do
467
- expect { client.database.command(ping: 1) }
468
- .to raise_error(Mongo::Error::SocketTimeoutError)
469
- end
470
- end
471
- end
472
-
473
- context 'retry_writes option' do
474
- let(:client) do
475
- new_local_client_nmio(SpecConfig.instance.addresses, options)
476
- end
477
-
478
- context 'when retry_writes is true' do
479
- let(:options) do
480
- { retry_writes: true }
481
- end
482
-
483
- it 'sets retry_writes to true' do
484
- expect(client.options['retry_writes']).to be true
485
- end
486
- end
487
-
488
- context 'when retry_writes is false' do
489
- let(:options) do
490
- { retry_writes: false }
491
- end
492
-
493
- it 'sets retry_writes to false' do
494
- expect(client.options['retry_writes']).to be false
495
- end
496
- end
497
-
498
- context 'when retry_writes is not given' do
499
- let(:options) { {} }
500
-
501
- it 'sets retry_writes to true' do
502
- expect(client.options['retry_writes']).to be true
503
- end
504
- end
505
- end
506
-
507
- context 'when compressors are provided' do
508
- let(:client) do
509
- new_local_client(
510
- SpecConfig.instance.addresses,
511
- SpecConfig.instance.all_test_options.merge(options)
512
- )
513
- end
514
-
515
- context 'when the compressor is not supported by the driver' do
516
- require_warning_clean
517
-
518
- let(:options) do
519
- { compressors: %w[ snoopy ] }
520
- end
521
-
522
- it 'does not set the compressor and warns' do
523
- expect(Mongo::Logger.logger).to receive(:warn).with(/Unsupported compressor/)
524
- expect(client.options['compressors']).to be_nil
525
- end
526
-
527
- it 'sets the compression key of the handshake document to an empty array' do
528
- expect(client.cluster.app_metadata.send(:document)[:compression]).to eq([])
529
- end
530
-
531
- context 'when one supported compressor and one unsupported compressor are provided' do
532
- require_compression
533
- min_server_fcv '3.6'
534
-
535
- let(:options) do
536
- { compressors: %w[ zlib snoopy ] }
537
- end
538
-
539
- it 'does not set the unsupported compressor and warns' do
540
- expect(Mongo::Logger.logger).to receive(:warn).at_least(:once)
541
- expect(client.options['compressors']).to eq(%w[ zlib ])
542
- end
543
-
544
- it 'sets the compression key of the handshake document to the list of supported compressors' do
545
- expect(client.cluster.app_metadata.send(:document)[:compression]).to eq(%w[ zlib ])
546
- end
547
- end
548
- end
549
-
550
- context 'when the compressor is not supported by the server' do
551
- max_server_version '3.4'
552
-
553
- let(:options) do
554
- { compressors: %w[ zlib ] }
555
- end
556
-
557
- it 'does not set the compressor and warns' do
558
- expect(Mongo::Logger.logger).to receive(:warn).at_least(:once)
559
- expect(client.cluster.next_primary.monitor.compressor).to be_nil
560
- end
561
- end
562
-
563
- context 'when zlib compression is requested' do
564
- require_zlib_compression
565
-
566
- let(:options) do
567
- { compressors: %w[ zlib ] }
568
- end
569
-
570
- it 'sets the compressor' do
571
- expect(client.options['compressors']).to eq(options[:compressors])
572
- end
573
-
574
- it 'sends the compressor in the compression key of the handshake document' do
575
- expect(client.cluster.app_metadata.send(:document)[:compression]).to eq(options[:compressors])
576
- end
577
-
578
- context 'when server supports compression' do
579
- min_server_fcv '3.6'
580
-
581
- it 'uses compression for messages' do
582
- expect(Mongo::Protocol::Compressed).to receive(:new).at_least(:once).and_call_original
583
- client[TEST_COLL].find({}, limit: 1).first
584
- end
585
- end
586
-
587
- it 'does not use compression for authentication messages' do
588
- expect(Mongo::Protocol::Compressed).not_to receive(:new)
589
- client.cluster.next_primary.send(:with_connection, &:connect!)
590
- end
591
- end
592
-
593
- context 'when snappy compression is requested and supported by the server' do
594
- min_server_version '3.6'
595
-
596
- let(:options) do
597
- { compressors: %w[ snappy ] }
598
- end
599
-
600
- context 'when snappy gem is installed' do
601
- require_snappy_compression
602
-
603
- it 'creates the client' do
604
- expect(client.options['compressors']).to eq(%w[ snappy ])
605
- end
606
- end
607
-
608
- context 'when snappy gem is not installed' do
609
- require_no_snappy_compression
610
-
611
- it 'raises an exception' do
612
- expect do
613
- client
614
- end.to raise_error(Mongo::Error::UnmetDependency, /Cannot enable snappy compression/)
615
- end
616
- end
617
- end
618
-
619
- context 'when zstd compression is requested and supported by the server' do
620
- min_server_version '4.2'
621
-
622
- let(:options) do
623
- { compressors: %w[ zstd ] }
624
- end
625
-
626
- context 'when zstd gem is installed' do
627
- require_zstd_compression
628
-
629
- it 'creates the client' do
630
- expect(client.options['compressors']).to eq(%w[ zstd ])
631
- end
632
- end
633
-
634
- context 'when zstd gem is not installed' do
635
- require_no_zstd_compression
636
-
637
- it 'raises an exception' do
638
- expect do
639
- client
640
- end.to raise_error(Mongo::Error::UnmetDependency, /Cannot enable zstd compression/)
641
- end
642
- end
643
- end
644
- end
645
-
646
- context 'when compressors are not provided' do
647
- require_no_compression
648
-
649
- let(:client) do
650
- authorized_client
651
- end
652
-
653
- it 'does not set the compressor' do
654
- expect(client.options['compressors']).to be_nil
655
- end
656
-
657
- it 'sets the compression key of the handshake document to an empty array' do
658
- expect(client.cluster.app_metadata.send(:document)[:compression]).to eq([])
659
- end
660
-
661
- it 'does not use compression for messages' do
662
- client[TEST_COLL].find({}, limit: 1).first
663
- expect(Mongo::Protocol::Compressed).not_to receive(:new)
664
- end
665
- end
666
-
667
- context 'when a zlib_compression_level option is provided' do
668
- require_compression
669
- min_server_fcv '3.6'
670
-
671
- let(:client) do
672
- new_local_client_nmio(
673
- SpecConfig.instance.addresses,
674
- SpecConfig.instance.test_options.merge(zlib_compression_level: 1)
675
- )
676
- end
677
-
678
- it 'sets the option on the client' do
679
- expect(client.options[:zlib_compression_level]).to eq(1)
680
- end
681
- end
682
-
683
- context 'when ssl options are provided' do
684
- let(:options) do
685
- {
686
- ssl: true,
687
- ssl_ca_cert: SpecConfig.instance.ca_cert_path,
688
- ssl_ca_cert_string: 'ca cert string',
689
- ssl_ca_cert_object: 'ca cert object',
690
- ssl_cert: SpecConfig.instance.client_cert_path,
691
- ssl_cert_string: 'cert string',
692
- ssl_cert_object: 'cert object',
693
- ssl_key: SpecConfig.instance.client_key_path,
694
- ssl_key_string: 'key string',
695
- ssl_key_object: 'key object',
696
- ssl_key_pass_phrase: 'passphrase',
697
- ssl_verify: true,
698
- }
699
- end
700
-
701
- let(:client) do
702
- new_local_client_nmio(SINGLE_CLIENT, options)
703
- end
704
-
705
- it 'sets the ssl option' do
706
- expect(client.options[:ssl]).to eq(options[:ssl])
707
- end
708
-
709
- it 'sets the ssl_ca_cert option' do
710
- expect(client.options[:ssl_ca_cert]).to eq(options[:ssl_ca_cert])
711
- end
712
-
713
- it 'sets the ssl_ca_cert_string option' do
714
- expect(client.options[:ssl_ca_cert_string]).to eq(options[:ssl_ca_cert_string])
715
- end
716
-
717
- it 'sets the ssl_ca_cert_object option' do
718
- expect(client.options[:ssl_ca_cert_object]).to eq(options[:ssl_ca_cert_object])
719
- end
720
-
721
- it 'sets the ssl_cert option' do
722
- expect(client.options[:ssl_cert]).to eq(options[:ssl_cert])
723
- end
724
-
725
- it 'sets the ssl_cert_string option' do
726
- expect(client.options[:ssl_cert_string]).to eq(options[:ssl_cert_string])
727
- end
728
-
729
- it 'sets the ssl_cert_object option' do
730
- expect(client.options[:ssl_cert_object]).to eq(options[:ssl_cert_object])
731
- end
732
-
733
- it 'sets the ssl_key option' do
734
- expect(client.options[:ssl_key]).to eq(options[:ssl_key])
735
- end
736
-
737
- it 'sets the ssl_key_string option' do
738
- expect(client.options[:ssl_key_string]).to eq(options[:ssl_key_string])
739
- end
740
-
741
- it 'sets the ssl_key_object option' do
742
- expect(client.options[:ssl_key_object]).to eq(options[:ssl_key_object])
743
- end
744
-
745
- it 'sets the ssl_key_pass_phrase option' do
746
- expect(client.options[:ssl_key_pass_phrase]).to eq(options[:ssl_key_pass_phrase])
747
- end
748
-
749
- it 'sets the ssl_verify option' do
750
- expect(client.options[:ssl_verify]).to eq(options[:ssl_verify])
751
- end
752
- end
753
-
754
- context 'when no database is provided' do
755
- let(:client) do
756
- new_local_client_nmio(SINGLE_CLIENT, read: { mode: :secondary })
757
- end
758
-
759
- it 'defaults the database to admin' do
760
- expect(client.database.name).to eq('admin')
761
- end
762
- end
763
-
764
- context 'when a database is provided' do
765
- let(:client) do
766
- new_local_client_nmio(SINGLE_CLIENT, database: :testdb)
767
- end
768
-
769
- it 'sets the current database' do
770
- expect(client[:users].name).to eq('users')
771
- end
772
- end
773
-
774
- context 'when providing a custom logger' do
775
- let(:logger) do
776
- Logger.new($stdout).tap do |l|
777
- l.level = Logger::FATAL
778
- end
779
- end
780
-
781
- let(:client) do
782
- authorized_client.with(logger: logger)
783
- end
784
-
785
- it 'does not use the global logger' do
786
- expect(client.cluster.logger).not_to eq(Mongo::Logger.logger)
787
- end
788
- end
789
-
790
- context 'when providing a heartbeat_frequency' do
791
- let(:client) do
792
- new_local_client_nmio(SINGLE_CLIENT, heartbeat_frequency: 2)
793
- end
794
-
795
- it 'sets the heartbeat frequency' do
796
- expect(client.cluster.options[:heartbeat_frequency]).to eq(client.options[:heartbeat_frequency])
797
- end
798
- end
799
-
800
- context 'when max_connecting is provided' do
801
- let(:client) do
802
- new_local_client_nmio(SINGLE_CLIENT, options)
803
- end
804
-
805
- context 'when max_connecting is a positive integer' do
806
- let(:options) do
807
- { max_connecting: 5 }
808
- end
809
-
810
- it 'sets the max connecting' do
811
- expect(client.options[:max_connecting]).to eq(options[:max_connecting])
812
- end
813
- end
814
-
815
- context 'when max_connecting is a negative integer' do
816
- let(:options) do
817
- { max_connecting: -5 }
818
- end
819
-
820
- it 'raises an exception' do
821
- expect { client }.to raise_error(Mongo::Error::InvalidMaxConnecting)
822
- end
823
- end
824
- end
825
-
826
- context 'when min_pool_size is provided' do
827
- let(:client) { new_local_client_nmio(SINGLE_CLIENT, options) }
828
-
829
- context 'when max_pool_size is provided' do
830
- context 'when the min_pool_size is greater than the max_pool_size' do
831
- let(:options) { { min_pool_size: 20, max_pool_size: 10 } }
832
-
833
- it 'raises an Exception' do
834
- expect { client }
835
- .to raise_exception(Mongo::Error::InvalidMinPoolSize)
836
- end
837
- end
838
-
839
- context 'when the min_pool_size is less than the max_pool_size' do
840
- let(:options) { { min_pool_size: 10, max_pool_size: 20 } }
841
-
842
- it 'sets the option' do
843
- expect(client.options[:min_pool_size]).to eq(options[:min_pool_size])
844
- expect(client.options[:max_pool_size]).to eq(options[:max_pool_size])
845
- end
846
- end
847
-
848
- context 'when the min_pool_size is equal to the max_pool_size' do
849
- let(:options) { { min_pool_size: 10, max_pool_size: 10 } }
850
-
851
- it 'sets the option' do
852
- expect(client.options[:min_pool_size]).to eq(options[:min_pool_size])
853
- expect(client.options[:max_pool_size]).to eq(options[:max_pool_size])
854
- end
855
- end
856
-
857
- context 'when max_pool_size is zero (unlimited)' do
858
- let(:options) { { min_pool_size: 10, max_pool_size: 0 } }
859
-
860
- it 'sets the option' do
861
- expect(client.options[:min_pool_size]).to eq(options[:min_pool_size])
862
- expect(client.options[:max_pool_size]).to eq(options[:max_pool_size])
863
- end
864
- end
865
- end
866
-
867
- context 'when max_pool_size is not provided' do
868
- context 'when the min_pool_size is greater than the default max_pool_size' do
869
- let(:options) { { min_pool_size: 30 } }
870
-
871
- it 'raises an Exception' do
872
- expect { client }
873
- .to raise_exception(Mongo::Error::InvalidMinPoolSize)
874
- end
875
- end
876
-
877
- context 'when the min_pool_size is less than the default max_pool_size' do
878
- let(:options) { { min_pool_size: 3 } }
879
-
880
- it 'sets the option' do
881
- expect(client.options[:min_pool_size]).to eq(options[:min_pool_size])
882
- end
883
- end
884
-
885
- context 'when the min_pool_size is equal to the max_pool_size' do
886
- let(:options) do
887
- {
888
- min_pool_size: Mongo::Server::ConnectionPool::DEFAULT_MAX_SIZE
889
- }
890
- end
891
-
892
- it 'sets the option' do
893
- expect(client.options[:min_pool_size]).to eq(options[:min_pool_size])
894
- end
895
- end
896
- end
897
- end
898
-
899
- context 'when max_pool_size is 0 (unlimited)' do
900
- let(:client) { new_local_client_nmio(SINGLE_CLIENT, options) }
901
- let(:options) { { max_pool_size: 0 } }
902
-
903
- it 'sets the option' do
904
- expect(client.options[:max_pool_size]).to eq(options[:max_pool_size])
905
- end
906
- end
907
-
908
- context 'when max_pool_size and min_pool_size are both nil' do
909
- let(:options) { { min_pool_size: nil, max_pool_size: nil } }
910
- let(:client) { new_local_client_nmio(SINGLE_CLIENT, options) }
911
-
912
- it 'does not set either option' do
913
- expect(client.options[:max_pool_size]).to be_nil
914
- expect(client.options[:min_pool_size]).to be_nil
915
- end
916
- end
917
-
918
- context 'when platform details are specified' do
919
- let(:app_metadata) do
920
- client.cluster.app_metadata
921
- end
922
-
923
- let(:client) do
924
- new_local_client_nmio(SINGLE_CLIENT, platform: 'mongoid-6.0.2')
925
- end
926
-
927
- it 'includes the platform info in the app metadata' do
928
- expect(app_metadata.client_document[:platform]).to match(/mongoid-6\.0\.2/)
929
- end
930
- end
931
-
932
- context 'when platform details are not specified' do
933
- let(:app_metadata) do
934
- client.cluster.app_metadata
935
- end
936
-
937
- let(:client) do
938
- new_local_client_nmio(SINGLE_CLIENT)
939
- end
940
-
941
- context 'mri' do
942
- require_mri
943
-
944
- let(:platform_string) do
945
- [
946
- "Ruby #{RUBY_VERSION}",
947
- RUBY_PLATFORM,
948
- RbConfig::CONFIG['build'],
949
- 'A',
950
- ].join(', ')
951
- end
952
-
953
- it 'does not include the platform info in the app metadata' do
954
- expect(app_metadata.client_document[:platform]).to eq(platform_string)
955
- end
956
- end
957
-
958
- context 'jruby' do
959
- require_jruby
960
-
961
- let(:platform_string) do
962
- [
963
- "JRuby #{JRUBY_VERSION}",
964
- "like Ruby #{RUBY_VERSION}",
965
- RUBY_PLATFORM,
966
- "JVM #{java.lang.System.get_property('java.version')}",
967
- RbConfig::CONFIG['build'],
968
- 'A',
969
- ].join(', ')
970
- end
971
-
972
- it 'does not include the platform info in the app metadata' do
973
- expect(app_metadata.client_document[:platform]).to eq(platform_string)
974
- end
975
- end
976
- end
977
- end
978
-
979
- context 'when providing a connection string' do
980
- context 'when the string uses the SRV Protocol' do
981
- require_external_connectivity
982
-
983
- let(:uri) { 'mongodb+srv://test5.test.build.10gen.cc/testdb' }
984
- let(:client) { new_local_client_nmio(uri) }
985
-
986
- it 'sets the database' do
987
- expect(client.options[:database]).to eq('testdb')
988
- end
989
- end
990
-
991
- context 'when a database is provided' do
992
- let(:uri) { 'mongodb://127.0.0.1:27017/testdb' }
993
- let(:client) { new_local_client_nmio(uri) }
994
-
995
- it 'sets the database' do
996
- expect { client[:users] }.not_to raise_error
997
- end
998
- end
999
-
1000
- context 'when a database is not provided' do
1001
- let(:uri) { 'mongodb://127.0.0.1:27017' }
1002
- let(:client) { new_local_client_nmio(uri) }
1003
-
1004
- it 'defaults the database to admin' do
1005
- expect(client.database.name).to eq('admin')
1006
- end
1007
- end
1008
-
1009
- context 'when URI options are provided' do
1010
- let(:uri) { 'mongodb://127.0.0.1:27017/testdb?w=3' }
1011
- let(:client) { new_local_client_nmio(uri) }
1012
-
1013
- let(:expected_options) do
1014
- Mongo::Options::Redacted.new(
1015
- write_concern: { w: 3 },
1016
- monitoring_io: false,
1017
- database: 'testdb',
1018
- retry_writes: true,
1019
- retry_reads: true
1020
- )
1021
- end
1022
-
1023
- it 'sets the options' do
1024
- expect(client.options).to eq(expected_options)
1025
- end
1026
-
1027
- context 'when max_connecting is provided' do
1028
- context 'when max_connecting is a positive integer' do
1029
- let(:uri) do
1030
- 'mongodb://127.0.0.1:27017/?maxConnecting=10'
1031
- end
1032
-
1033
- it 'sets the max connecting' do
1034
- expect(client.options[:max_connecting]).to eq(10)
1035
- end
1036
- end
1037
-
1038
- context 'when max_connecting is a negative integer' do
1039
- let(:uri) do
1040
- 'mongodb://127.0.0.1:27017/?maxConnecting=0'
1041
- end
1042
-
1043
- it 'raises an exception' do
1044
- expect { client }.to raise_error(Mongo::Error::InvalidMaxConnecting)
1045
- end
1046
- end
1047
- end
1048
-
1049
- context 'when min_pool_size is provided' do
1050
- context 'when max_pool_size is provided' do
1051
- context 'when the min_pool_size is greater than the max_pool_size' do
1052
- let(:uri) do
1053
- 'mongodb://127.0.0.1:27017/?minPoolSize=20&maxPoolSize=10'
1054
- end
1055
-
1056
- it 'raises an Exception' do
1057
- expect { client }
1058
- .to raise_exception(Mongo::Error::InvalidMinPoolSize)
1059
- end
1060
- end
1061
-
1062
- context 'when the min_pool_size is less than the max_pool_size' do
1063
- let(:uri) do
1064
- 'mongodb://127.0.0.1:27017/?minPoolSize=10&maxPoolSize=20'
1065
- end
1066
-
1067
- it 'sets the option' do
1068
- expect(client.options[:min_pool_size]).to eq(10)
1069
- expect(client.options[:max_pool_size]).to eq(20)
1070
- end
1071
- end
1072
-
1073
- context 'when the min_pool_size is equal to the max_pool_size' do
1074
- let(:uri) do
1075
- 'mongodb://127.0.0.1:27017/?minPoolSize=10&maxPoolSize=10'
1076
- end
1077
-
1078
- it 'sets the option' do
1079
- expect(client.options[:min_pool_size]).to eq(10)
1080
- expect(client.options[:max_pool_size]).to eq(10)
1081
- end
1082
- end
1083
-
1084
- context 'when max_pool_size is 0 (unlimited)' do
1085
- let(:uri) do
1086
- 'mongodb://127.0.0.1:27017/?minPoolSize=10&maxPoolSize=0'
1087
- end
1088
-
1089
- it 'sets the option' do
1090
- expect(client.options[:min_pool_size]).to eq(10)
1091
- expect(client.options[:max_pool_size]).to eq(0)
1092
- end
1093
- end
1094
- end
1095
-
1096
- context 'when max_pool_size is not provided' do
1097
- context 'when the min_pool_size is greater than the default max_pool_size' do
1098
- let(:uri) { 'mongodb://127.0.0.1:27017/?minPoolSize=30' }
1099
-
1100
- it 'raises an Exception' do
1101
- expect { client }
1102
- .to raise_exception(Mongo::Error::InvalidMinPoolSize)
1103
- end
1104
- end
1105
-
1106
- context 'when the min_pool_size is less than the default max_pool_size' do
1107
- let(:uri) { 'mongodb://127.0.0.1:27017/?minPoolSize=3' }
1108
-
1109
- it 'sets the option' do
1110
- expect(client.options[:min_pool_size]).to eq(3)
1111
- end
1112
- end
1113
-
1114
- context 'when the min_pool_size is equal to the max_pool_size' do
1115
- let(:uri) { 'mongodb://127.0.0.1:27017/?minPoolSize=5' }
1116
-
1117
- it 'sets the option' do
1118
- expect(client.options[:min_pool_size]).to eq(5)
1119
- end
1120
- end
1121
- end
1122
- end
1123
-
1124
- context 'when retryReads URI option is given' do
1125
- context 'it is false' do
1126
- let(:uri) { 'mongodb://127.0.0.1:27017/testdb?retryReads=false' }
1127
-
1128
- it 'sets the option on the client' do
1129
- expect(client.options[:retry_reads]).to be false
1130
- end
1131
- end
1132
-
1133
- context 'it is true' do
1134
- let(:uri) { 'mongodb://127.0.0.1:27017/testdb?retryReads=true' }
1135
-
1136
- it 'sets the option on the client' do
1137
- expect(client.options[:retry_reads]).to be true
1138
- end
1139
- end
1140
- end
1141
-
1142
- context 'when retryWrites URI option is given' do
1143
- context 'it is false' do
1144
- let(:uri) { 'mongodb://127.0.0.1:27017/testdb?retryWrites=false' }
1145
-
1146
- it 'sets the option on the client' do
1147
- expect(client.options[:retry_writes]).to be false
1148
- end
1149
- end
1150
-
1151
- context 'it is true' do
1152
- let(:uri) { 'mongodb://127.0.0.1:27017/testdb?retryWrites=true' }
1153
-
1154
- it 'sets the option on the client' do
1155
- expect(client.options[:retry_writes]).to be true
1156
- end
1157
- end
1158
- end
1159
- end
1160
-
1161
- context 'when options are provided not in the string' do
1162
- let(:uri) { 'mongodb://127.0.0.1:27017/testdb' }
1163
-
1164
- let(:client) do
1165
- new_local_client_nmio(uri, write: { w: 3 })
1166
- end
1167
-
1168
- let(:expected_options) do
1169
- Mongo::Options::Redacted.new(
1170
- write: { w: 3 },
1171
- monitoring_io: false,
1172
- database: 'testdb',
1173
- retry_writes: true,
1174
- retry_reads: true
1175
- )
1176
- end
1177
-
1178
- it 'sets the options' do
1179
- expect(client.options).to eq(expected_options)
1180
- end
1181
- end
1182
-
1183
- context 'when options are provided in the URI and as Ruby options' do
1184
- let(:uri) { 'mongodb://127.0.0.1:27017/testdb?w=3' }
1185
-
1186
- let(:client) do
1187
- new_local_client_nmio(uri, option_name => { w: 4 })
1188
- end
1189
-
1190
- let(:expected_options) do
1191
- Mongo::Options::Redacted.new(
1192
- option_name => { w: 4 },
1193
- monitoring_io: false,
1194
- database: 'testdb',
1195
- retry_writes: true,
1196
- retry_reads: true
1197
- )
1198
- end
1199
-
1200
- shared_examples_for 'allows explicit options to take preference' do
1201
- it 'allows explicit options to take preference' do
1202
- expect(client.options).to eq(expected_options)
1203
- end
1204
- end
1205
-
1206
- context 'when using :write' do
1207
- let(:option_name) { :write }
1208
-
1209
- it_behaves_like 'allows explicit options to take preference'
1210
- end
1211
-
1212
- context 'when using :write_concern' do
1213
- let(:option_name) { :write_concern }
1214
-
1215
- it_behaves_like 'allows explicit options to take preference'
1216
- end
1217
- end
1218
-
1219
- context 'when a replica set name is provided' do
1220
- let(:uri) { 'mongodb://127.0.0.1:27017/testdb?replicaSet=testing' }
1221
- let(:client) { new_local_client_nmio(uri) }
1222
-
1223
- it 'sets the correct cluster topology' do
1224
- expect(client.cluster.topology).to be_a(Mongo::Cluster::Topology::ReplicaSetNoPrimary)
1225
- end
1226
- end
1227
- end
1228
-
1229
- context 'when Ruby options are provided' do
1230
- let(:client) do
1231
- new_local_client_nmio(SINGLE_CLIENT, options)
1232
- end
1233
-
1234
- describe 'connection option conflicts' do
1235
- context 'direct_connection: true and multiple seeds' do
1236
- let(:client) do
1237
- new_local_client_nmio([ '127.0.0.1:27017', '127.0.0.2:27017' ], direct_connection: true)
1238
- end
1239
-
1240
- it 'is rejected' do
1241
- expect { client }
1242
- .to raise_error(ArgumentError, /direct_connection=true cannot be used with multiple seeds/)
1243
- end
1244
- end
1245
-
1246
- context 'direct_connection: true and connect: :direct' do
1247
- let(:options) do
1248
- { direct_connection: true, connect: :direct }
1249
- end
1250
-
1251
- it 'is accepted' do
1252
- expect(client.options[:direct_connection]).to be true
1253
- expect(client.options[:connect]).to be :direct
1254
- end
1255
- end
1256
-
1257
- context 'direct_connection: true and connect: :replica_set' do
1258
- let(:options) do
1259
- { direct_connection: true, connect: :replica_set }
1260
- end
1261
-
1262
- it 'is rejected' do
1263
- expect { client }
1264
- .to raise_error(
1265
- ArgumentError,
1266
- /Conflicting client options: direct_connection=true and connect=replica_set/
1267
- )
1268
- end
1269
- end
1270
-
1271
- context 'direct_connection: true and connect: :sharded' do
1272
- let(:options) do
1273
- { direct_connection: true, connect: :sharded }
1274
- end
1275
-
1276
- it 'is rejected' do
1277
- expect { client }
1278
- .to raise_error(ArgumentError, /Conflicting client options: direct_connection=true and connect=sharded/)
1279
- end
1280
- end
1281
-
1282
- context 'direct_connection: false and connect: :direct' do
1283
- let(:options) do
1284
- { direct_connection: false, connect: :direct }
1285
- end
1286
-
1287
- it 'is rejected' do
1288
- expect { client }
1289
- .to raise_error(ArgumentError, /Conflicting client options: direct_connection=false and connect=direct/)
1290
- end
1291
- end
1292
-
1293
- context 'direct_connection: false and connect: :replica_set' do
1294
- let(:options) do
1295
- { direct_connection: false, connect: :replica_set, replica_set: 'foo' }
1296
- end
1297
-
1298
- it 'is accepted' do
1299
- expect(client.options[:direct_connection]).to be false
1300
- expect(client.options[:connect]).to be :replica_set
1301
- end
1302
- end
1303
-
1304
- context 'direct_connection: false and connect: :sharded' do
1305
- let(:options) do
1306
- { direct_connection: false, connect: :sharded }
1307
- end
1308
-
1309
- it 'is accepted' do
1310
- expect(client.options[:direct_connection]).to be false
1311
- expect(client.options[:connect]).to be :sharded
1312
- end
1313
- end
1314
-
1315
- context 'load_balanced: true and multiple seeds' do
1316
- let(:client) do
1317
- new_local_client_nmio([ '127.0.0.1:27017', '127.0.0.2:27017' ], load_balanced: true)
1318
- end
1319
-
1320
- it 'is rejected' do
1321
- expect { client }
1322
- .to raise_error(ArgumentError, /load_balanced=true cannot be used with multiple seeds/)
1323
- end
1324
- end
1325
-
1326
- context 'load_balanced: false and multiple seeds' do
1327
- let(:client) do
1328
- new_local_client_nmio([ '127.0.0.1:27017', '127.0.0.2:27017' ], load_balanced: false)
1329
- end
1330
-
1331
- it 'is accepted' do
1332
- expect { client }.not_to raise_error
1333
- expect(client.options[:load_balanced]).to be false
1334
- end
1335
- end
1336
-
1337
- context 'load_balanced: true and direct_connection: true' do
1338
- let(:client) do
1339
- new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, direct_connection: true)
1340
- end
1341
-
1342
- it 'is rejected' do
1343
- expect { client }
1344
- .to raise_error(ArgumentError, /direct_connection=true cannot be used with load_balanced=true/)
1345
- end
1346
- end
1347
-
1348
- context 'load_balanced: true and direct_connection: false' do
1349
- let(:client) do
1350
- new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, direct_connection: false)
1351
- end
1352
-
1353
- it 'is accepted' do
1354
- expect { client }.not_to raise_error
1355
- expect(client.options[:load_balanced]).to be true
1356
- expect(client.options[:direct_connection]).to be false
1357
- end
1358
- end
1359
-
1360
- context 'load_balanced: false and direct_connection: true' do
1361
- let(:client) do
1362
- new_local_client_nmio(SINGLE_CLIENT, load_balanced: false, direct_connection: true)
1363
- end
1364
-
1365
- it 'is accepted' do
1366
- expect { client }.not_to raise_error
1367
- expect(client.options[:load_balanced]).to be false
1368
- expect(client.options[:direct_connection]).to be true
1369
- end
1370
- end
1371
-
1372
- [ :direct, 'direct', :sharded, 'sharded' ].each do |v|
1373
- context "load_balanced: true and connect: #{v.inspect}" do
1374
- let(:client) do
1375
- new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, connect: v)
1376
- end
1377
-
1378
- it 'is rejected' do
1379
- expect { client }
1380
- .to raise_error(ArgumentError, /connect=#{v} cannot be used with load_balanced=true/)
1381
- end
1382
- end
1383
- end
1384
-
1385
- [ nil ].each do |v|
1386
- context "load_balanced: true and connect: #{v.inspect}" do
1387
- let(:client) do
1388
- new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, connect: v)
1389
- end
1390
-
1391
- it 'is accepted' do
1392
- expect { client }.not_to raise_error
1393
- expect(client.options[:load_balanced]).to be true
1394
- expect(client.options[:connect]).to eq v
1395
- end
1396
- end
1397
- end
1398
-
1399
- [ :load_balanced, 'load_balanced' ].each do |v|
1400
- context "load_balanced: true and connect: #{v.inspect}" do
1401
- let(:client) do
1402
- new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, connect: v)
1403
- end
1404
-
1405
- it 'is accepted' do
1406
- expect { client }.not_to raise_error
1407
- expect(client.options[:load_balanced]).to be true
1408
- expect(client.options[:connect]).to eq v
1409
- end
1410
- end
1411
-
1412
- context "replica_set and connect: #{v.inspect}" do
1413
- let(:client) do
1414
- new_local_client_nmio(SINGLE_CLIENT, replica_set: 'foo', connect: v)
1415
- end
1416
-
1417
- it 'is rejected' do
1418
- expect { client }
1419
- .to raise_error(ArgumentError, /connect=load_balanced cannot be used with replica_set option/)
1420
- end
1421
- end
1422
-
1423
- context "direct_connection=true and connect: #{v.inspect}" do
1424
- let(:client) do
1425
- new_local_client_nmio(SINGLE_CLIENT, direct_connection: true, connect: v)
1426
- end
1427
-
1428
- it 'is rejected' do
1429
- expect { client }
1430
- .to raise_error(
1431
- ArgumentError,
1432
- /Conflicting client options: direct_connection=true and connect=load_balanced/
1433
- )
1434
- end
1435
- end
1436
-
1437
- context "multiple seed addresses and connect: #{v.inspect}" do
1438
- let(:client) do
1439
- new_local_client_nmio([ '127.0.0.1:27017', '127.0.0.1:1234' ], connect: v)
1440
- end
1441
-
1442
- it 'is rejected' do
1443
- expect { client }
1444
- .to raise_error(ArgumentError, /connect=load_balanced cannot be used with multiple seeds/)
1445
- end
1446
- end
1447
- end
1448
-
1449
- [ :replica_set, 'replica_set' ].each do |v|
1450
- context "load_balanced: true and connect: #{v.inspect}" do
1451
- let(:client) do
1452
- new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, connect: v, replica_set: 'x')
1453
- end
1454
-
1455
- it 'is rejected' do
1456
- expect { client }
1457
- .to raise_error(ArgumentError, /connect=replica_set cannot be used with load_balanced=true/)
1458
- end
1459
- end
1460
-
1461
- context "load_balanced: true and #{v.inspect} option" do
1462
- let(:client) do
1463
- new_local_client_nmio(SINGLE_CLIENT, load_balanced: true, v => 'rs')
1464
- end
1465
-
1466
- it 'is rejected' do
1467
- expect { client }
1468
- .to raise_error(ArgumentError, /load_balanced=true cannot be used with replica_set option/)
1469
- end
1470
- end
1471
- end
1472
-
1473
- context 'srv_max_hosts > 0 and load_balanced: true' do
1474
- let(:client) do
1475
- new_local_client_nmio(SINGLE_CLIENT, srv_max_hosts: 1, load_balanced: true)
1476
- end
1477
-
1478
- it 'it is rejected' do
1479
- expect { client }
1480
- .to raise_error(ArgumentError, /:srv_max_hosts > 0 cannot be used with :load_balanced=true/)
1481
- end
1482
- end
1483
-
1484
- context 'srv_max_hosts > 0 and replica_set' do
1485
- let(:client) do
1486
- new_local_client_nmio(SINGLE_CLIENT, srv_max_hosts: 1, replica_set: 'rs')
1487
- end
1488
-
1489
- it 'it is rejected' do
1490
- expect do
1491
- client
1492
- end.to raise_error(ArgumentError, /:srv_max_hosts > 0 cannot be used with :replica_set option/)
1493
- end
1494
- end
1495
-
1496
- context 'srv_max_hosts < 0' do
1497
- let(:client) do
1498
- new_local_client_nmio(SINGLE_CLIENT, srv_max_hosts: -1)
1499
- end
1500
-
1501
- it 'is accepted and does not add the srv_max_hosts to uri_options' do
1502
- expect { client }.not_to raise_error
1503
- expect(client.options).not_to have_key(:srv_max_hosts)
1504
- end
1505
- end
1506
-
1507
- context 'srv_max_hosts invalid type' do
1508
- let(:client) do
1509
- new_local_client_nmio(SINGLE_CLIENT, srv_max_hosts: 'foo')
1510
- end
1511
-
1512
- it 'is accepted and does not add the srv_max_hosts to uri_options' do
1513
- expect { client }.not_to raise_error
1514
- expect(client.options).not_to have_key(:srv_max_hosts)
1515
- end
1516
- end
1517
-
1518
- context 'srv_max_hosts with non-SRV URI' do
1519
- let(:client) do
1520
- new_local_client_nmio(SINGLE_CLIENT, srv_max_hosts: 1)
1521
- end
1522
-
1523
- it 'is rejected' do
1524
- expect { client }
1525
- .to raise_error(ArgumentError, /:srv_max_hosts cannot be used on non-SRV URI/)
1526
- end
1527
- end
1528
-
1529
- context 'srv_service_name with non-SRV URI' do
1530
- let(:client) do
1531
- new_local_client_nmio(SINGLE_CLIENT, srv_service_name: 'customname')
1532
- end
1533
-
1534
- it 'is rejected' do
1535
- expect { client }
1536
- .to raise_error(ArgumentError, /:srv_service_name cannot be used on non-SRV URI/)
1537
- end
1538
- end
1539
- end
1540
-
1541
- context 'with SRV lookups mocked at Resolver' do
1542
- let(:srv_result) do
1543
- double('srv result').tap do |result|
1544
- allow(result).to receive(:empty?).and_return(false)
1545
- allow(result).to receive(:address_strs).and_return(
1546
- [ ClusterConfig.instance.primary_address_str ]
1547
- )
1548
- end
1549
- end
1550
-
1551
- let(:client) do
1552
- allow_any_instance_of(Mongo::Srv::Resolver).to receive(:get_records).and_return(srv_result)
1553
- allow_any_instance_of(Mongo::Srv::Resolver).to receive(:get_txt_options_string)
1554
-
1555
- new_local_client_nmio('mongodb+srv://foo.a.b', options)
1556
- end
1557
-
1558
- context 'when setting srv_max_hosts' do
1559
- let(:srv_max_hosts) { 1 }
1560
- let(:options) { { srv_max_hosts: srv_max_hosts } }
1561
-
1562
- it 'is accepted and sets srv_max_hosts' do
1563
- expect { client }.not_to raise_error
1564
- expect(client.options[:srv_max_hosts]).to eq(srv_max_hosts)
1565
- end
1566
- end
1567
-
1568
- context 'when setting srv_max_hosts to 0' do
1569
- let(:srv_max_hosts) { 0 }
1570
- let(:options) { { srv_max_hosts: srv_max_hosts } }
1571
-
1572
- it 'is accepted sets srv_max_hosts' do
1573
- expect { client }.not_to raise_error
1574
- expect(client.options[:srv_max_hosts]).to eq(srv_max_hosts)
1575
- end
1576
- end
1577
-
1578
- context 'when setting srv_service_name' do
1579
- let(:srv_service_name) { 'customname' }
1580
- let(:options) { { srv_service_name: srv_service_name } }
1581
-
1582
- it 'is accepted and sets srv_service_name' do
1583
- expect { client }.not_to raise_error
1584
- expect(client.options[:srv_service_name]).to eq(srv_service_name)
1585
- end
1586
- end
1587
- end
1588
-
1589
- context ':bg_error_backtrace option' do
1590
- [ true, false, nil, 42 ].each do |valid_value|
1591
- context "valid value: #{valid_value.inspect}" do
1592
- let(:options) do
1593
- { bg_error_backtrace: valid_value }
1594
- end
1595
-
1596
- it 'is accepted' do
1597
- expect(client.options[:bg_error_backtrace]).to be == valid_value
1598
- end
1599
- end
1600
- end
1601
-
1602
- context 'invalid value type' do
1603
- let(:options) do
1604
- { bg_error_backtrace: 'yes' }
1605
- end
1606
-
1607
- it 'is rejected' do
1608
- expect { client }
1609
- .to raise_error(
1610
- ArgumentError,
1611
- /:bg_error_backtrace option value must be true, false, nil or a positive integer/
1612
- )
1613
- end
1614
- end
1615
-
1616
- context 'invalid value' do
1617
- [ 0, -1, 42.0 ].each do |invalid_value|
1618
- context "invalid value: #{invalid_value.inspect}" do
1619
- let(:options) do
1620
- { bg_error_backtrace: invalid_value }
1621
- end
1622
-
1623
- it 'is rejected' do
1624
- expect { client }
1625
- .to raise_error(
1626
- ArgumentError,
1627
- /:bg_error_backtrace option value must be true, false, nil or a positive integer/
1628
- )
1629
- end
1630
- end
1631
- end
1632
- end
1633
- end
1634
-
1635
- describe ':read option' do
1636
- %i[ primary primary_preferred secondary secondary_preferred nearest ].each do |sym|
1637
- describe sym.to_s do
1638
- context 'when given as symbol' do
1639
- let(:options) do
1640
- { read: { mode: sym } }
1641
- end
1642
-
1643
- it 'is accepted' do
1644
- # the key got converted to a string here
1645
- expect(client.read_preference).to eq({ 'mode' => sym })
1646
- end
1647
- end
1648
-
1649
- context 'when given as string' do
1650
- let(:options) do
1651
- { read: { mode: sym.to_s } }
1652
- end
1653
-
1654
- # string keys are not documented as being allowed
1655
- # but the code accepts them
1656
- it 'is accepted' do
1657
- # the key got converted to a string here
1658
- # the value remains a string
1659
- expect(client.read_preference).to eq({ 'mode' => sym.to_s })
1660
- end
1661
- end
1662
- end
1663
- end
1664
-
1665
- context 'when not linting' do
1666
- require_no_linting
1667
-
1668
- it 'rejects bogus read preference as symbol' do
1669
- expect do
1670
- new_local_client_nmio(SINGLE_CLIENT, read: { mode: :bogus })
1671
- end.to raise_error(
1672
- Mongo::Error::InvalidReadOption,
1673
- 'Invalid read preference value: {"mode"=>:bogus}: ' \
1674
- 'mode bogus is not one of recognized modes'
1675
- )
1676
- end
1677
-
1678
- it 'rejects bogus read preference as string' do
1679
- expect do
1680
- new_local_client_nmio(SINGLE_CLIENT, read: { mode: 'bogus' })
1681
- end.to raise_error(
1682
- Mongo::Error::InvalidReadOption,
1683
- 'Invalid read preference value: {"mode"=>"bogus"}: mode bogus is not one of recognized modes'
1684
- )
1685
- end
1686
-
1687
- it 'rejects read option specified as a string' do
1688
- expect do
1689
- new_local_client_nmio(SINGLE_CLIENT, read: 'primary')
1690
- end.to raise_error(
1691
- Mongo::Error::InvalidReadOption,
1692
- 'Invalid read preference value: "primary": ' \
1693
- 'the read preference must be specified as a hash: { mode: "primary" }'
1694
- )
1695
- end
1696
-
1697
- it 'rejects read option specified as a symbol' do
1698
- expect do
1699
- new_local_client_nmio(SINGLE_CLIENT, read: :primary)
1700
- end.to raise_error(
1701
- Mongo::Error::InvalidReadOption,
1702
- 'Invalid read preference value: :primary: ' \
1703
- 'the read preference must be specified as a hash: { mode: :primary }'
1704
- )
1705
- end
1706
- end
1707
- end
1708
-
1709
- context 'when setting read concern options' do
1710
- min_server_fcv '3.2'
1711
-
1712
- context 'when read concern is valid' do
1713
- let(:options) do
1714
- { read_concern: { level: :local } }
1715
- end
1716
-
1717
- it 'does not warn' do
1718
- expect(Mongo::Logger.logger).not_to receive(:warn)
1719
- new_local_client_nmio(SpecConfig.instance.addresses, options)
1720
- end
1721
- end
1722
-
1723
- context 'when read concern has an invalid key' do
1724
- require_no_linting
1725
-
1726
- let(:options) do
1727
- { read_concern: { hello: :local } }
1728
- end
1729
-
1730
- it 'logs a warning' do
1731
- expect(Mongo::Logger.logger).to receive(:warn).with(/Read concern has invalid keys: hello/)
1732
- new_local_client_nmio(SpecConfig.instance.addresses, options)
1733
- end
1734
- end
1735
-
1736
- context 'when read concern has a non-user-settable key' do
1737
- let(:options) do
1738
- { read_concern: { after_cluster_time: 100 } }
1739
- end
1740
-
1741
- it 'raises an exception' do
1742
- expect do
1743
- new_local_client_nmio(SpecConfig.instance.addresses, options)
1744
- end.to raise_error(
1745
- Mongo::Error::InvalidReadConcern,
1746
- 'The after_cluster_time read_concern option cannot be specified by the user'
1747
- )
1748
- end
1749
- end
1750
- end
1751
-
1752
- context 'when an invalid option is provided' do
1753
- let(:options) do
1754
- { ssl: false, invalid: :test }
1755
- end
1756
-
1757
- it 'does not set the option' do
1758
- expect(client.options.keys).not_to include('invalid')
1759
- end
1760
-
1761
- it 'sets the valid options' do
1762
- expect(client.options.keys).to include('ssl')
1763
- end
1764
-
1765
- it 'warns that an invalid option has been specified' do
1766
- expect(Mongo::Logger.logger).to receive(:warn)
1767
- expect(client.options.keys).not_to include('invalid')
1768
- end
1769
- end
1770
-
1771
- =begin WriteConcern object support
1772
- context 'when write concern is provided via a WriteConcern object' do
1773
- let(:options) do
1774
- { write_concern: wc }
1775
- end
1776
-
1777
- let(:wc) { Mongo::WriteConcern.get(w: 2) }
1778
-
1779
- it 'stores write concern options in client options' do
1780
- expect(client.options[:write_concern]).to eq(
1781
- Mongo::Options::Redacted.new(w: 2))
1782
- end
1783
-
1784
- it 'caches write concern object' do
1785
- expect(client.write_concern).to be wc
1786
- end
1787
- end
1788
- =end
1789
-
1790
- context ':wrapping_libraries option' do
1791
- let(:options) do
1792
- { wrapping_libraries: wrapping_libraries }
1793
- end
1794
-
1795
- context 'valid input' do
1796
- context 'symbol keys' do
1797
- let(:wrapping_libraries) do
1798
- [ { name: 'Mongoid', version: '7.1.2' } ].freeze
1799
- end
1800
-
1801
- it 'works' do
1802
- expect(client.options[:wrapping_libraries]).to be == [ { 'name' => 'Mongoid', 'version' => '7.1.2' } ]
1803
- end
1804
- end
1805
-
1806
- context 'string keys' do
1807
- let(:wrapping_libraries) do
1808
- [ { 'name' => 'Mongoid', 'version' => '7.1.2' } ].freeze
1809
- end
1810
-
1811
- it 'works' do
1812
- expect(client.options[:wrapping_libraries]).to be == [ { 'name' => 'Mongoid', 'version' => '7.1.2' } ]
1813
- end
1814
- end
1815
-
1816
- context 'Redacted keys' do
1817
- let(:wrapping_libraries) do
1818
- [ Mongo::Options::Redacted.new(name: 'Mongoid', version: '7.1.2') ].freeze
1819
- end
1820
-
1821
- it 'works' do
1822
- expect(client.options[:wrapping_libraries]).to be == [ { 'name' => 'Mongoid', 'version' => '7.1.2' } ]
1823
- end
1824
- end
1825
-
1826
- context 'two libraries' do
1827
- let(:wrapping_libraries) do
1828
- [
1829
- { name: 'Mongoid', version: '7.1.2' },
1830
- { name: 'Rails', version: '4.0', platform: 'Foobar' },
1831
- ].freeze
1832
- end
1833
-
1834
- it 'works' do
1835
- expect(client.options[:wrapping_libraries]).to be == [
1836
- { 'name' => 'Mongoid', 'version' => '7.1.2' },
1837
- { 'name' => 'Rails', 'version' => '4.0', 'platform' => 'Foobar' },
1838
- ]
1839
- end
1840
- end
1841
-
1842
- context 'empty array' do
1843
- let(:wrapping_libraries) do
1844
- []
1845
- end
1846
-
1847
- it 'works' do
1848
- expect(client.options[:wrapping_libraries]).to be == []
1849
- end
1850
- end
1851
-
1852
- context 'empty array' do
1853
- let(:wrapping_libraries) do
1854
- nil
1855
- end
1856
-
1857
- it 'works' do
1858
- expect(client.options[:wrapping_libraries]).to be_nil
1859
- end
1860
- end
1861
- end
1862
-
1863
- context 'valid input' do
1864
- context 'hash given instead of an array' do
1865
- let(:wrapping_libraries) do
1866
- { name: 'Mongoid', version: '7.1.2' }.freeze
1867
- end
1868
-
1869
- it 'is rejected' do
1870
- expect { client }
1871
- .to raise_error(ArgumentError, /:wrapping_libraries must be an array of hashes/)
1872
- end
1873
- end
1874
-
1875
- context 'invalid keys' do
1876
- let(:wrapping_libraries) do
1877
- [ { name: 'Mongoid', invalid: '7.1.2' } ].freeze
1878
- end
1879
-
1880
- it 'is rejected' do
1881
- expect { client }
1882
- .to raise_error(ArgumentError, /:wrapping_libraries element has invalid keys/)
1883
- end
1884
- end
1885
-
1886
- context 'value includes |' do
1887
- let(:wrapping_libraries) do
1888
- [ { name: 'Mongoid|on|Rails', version: '7.1.2' } ].freeze
1889
- end
1890
-
1891
- it 'is rejected' do
1892
- expect { client }
1893
- .to raise_error(ArgumentError, /:wrapping_libraries element value cannot include '|'/)
1894
- end
1895
- end
1896
- end
1897
- end
1898
-
1899
- context ':auth_mech_properties option' do
1900
- context 'is nil' do
1901
- let(:options) { { auth_mech_properties: nil } }
1902
-
1903
- it 'creates the client without the option' do
1904
- expect(client.options).not_to have_key(:auth_mech_properties)
1905
- end
1906
- end
1907
- end
1908
-
1909
- context ':server_api parameter' do
1910
- context 'is a hash with symbol keys' do
1911
- context 'using known keys' do
1912
- let(:options) do
1913
- {
1914
- server_api: {
1915
- version: '1',
1916
- strict: true,
1917
- deprecation_errors: false,
1918
- }
1919
- }
1920
- end
1921
-
1922
- it 'is accepted' do
1923
- expect(client.options[:server_api]).to be == {
1924
- 'version' => '1',
1925
- 'strict' => true,
1926
- 'deprecation_errors' => false,
1927
- }
1928
- end
1929
- end
1930
-
1931
- context 'using an unknown version' do
1932
- let(:options) do
1933
- { server_api: { version: '42' } }
1934
- end
1935
-
1936
- it 'is rejected' do
1937
- expect { client }
1938
- .to raise_error(ArgumentError, 'Unknown server API version: 42')
1939
- end
1940
- end
1941
-
1942
- context 'using an unknown option' do
1943
- let(:options) do
1944
- { server_api: { vversion: '1' } }
1945
- end
1946
-
1947
- it 'is rejected' do
1948
- expect { client }
1949
- .to raise_error(ArgumentError, 'Unknown keys under :server_api: "vversion"')
1950
- end
1951
- end
1952
-
1953
- context 'using a value which is not a hash' do
1954
- let(:options) do
1955
- { server_api: 42 }
1956
- end
1957
-
1958
- it 'is rejected' do
1959
- expect { client }
1960
- .to raise_error(ArgumentError, ':server_api value must be a hash: 42')
1961
- end
1962
- end
1963
- end
1964
-
1965
- context 'when connected to a pre-OP_MSG server' do
1966
- max_server_version '3.4'
1967
-
1968
- let(:options) do
1969
- { server_api: { version: 1 } }
1970
- end
1971
-
1972
- let(:client) do
1973
- new_local_client(
1974
- SpecConfig.instance.addresses,
1975
- SpecConfig.instance.all_test_options.merge(options)
1976
- )
1977
- end
1978
-
1979
- it 'constructs the client' do
1980
- expect(client).to be_a(described_class)
1981
- end
1982
-
1983
- it 'does not discover servers' do
1984
- client.cluster.servers_list.each do |s|
1985
- expect(s.status).to eq('UNKNOWN')
1986
- end
1987
- end
1988
-
1989
- it 'fails operations' do
1990
- expect { client.command(ping: 1) }
1991
- .to raise_error(Mongo::Error::NoServerAvailable)
1992
- end
1993
- end
1994
- end
1995
- end
1996
-
1997
- context 'when making a block client' do
1998
- context 'when the block doesn\'t raise an error' do
1999
- let(:block_client) do
2000
- c = nil
2001
- described_class.new(
2002
- SpecConfig.instance.addresses,
2003
- SpecConfig.instance.test_options.merge(database: SpecConfig.instance.test_db)
2004
- ) do |client|
2005
- c = client
2006
- end
2007
- c
2008
- end
2009
-
2010
- it 'is closed after block' do
2011
- expect(block_client.cluster.connected?).to be false
2012
- end
2013
-
2014
- context 'with auto encryption options' do
2015
- require_libmongocrypt
2016
- min_server_fcv '4.2'
2017
- require_enterprise
2018
- clean_slate
2019
-
2020
- include_context 'define shared FLE helpers'
2021
- include_context 'with local kms_providers'
2022
-
2023
- let(:auto_encryption_options) do
2024
- {
2025
- key_vault_client: key_vault_client,
2026
- key_vault_namespace: key_vault_namespace,
2027
- kms_providers: kms_providers,
2028
- schema_map: schema_map,
2029
- extra_options: extra_options,
2030
- }
2031
- end
2032
-
2033
- let(:key_vault_client) { new_local_client_nmio(SpecConfig.instance.addresses) }
2034
-
2035
- let(:block_client) do
2036
- c = nil
2037
- described_class.new(
2038
- SpecConfig.instance.addresses,
2039
- SpecConfig.instance.test_options.merge(
2040
- auto_encryption_options: auto_encryption_options,
2041
- database: SpecConfig.instance.test_db
2042
- )
2043
- ) do |client|
2044
- c = client
2045
- end
2046
- c
2047
- end
2048
-
2049
- it 'closes all clients after block' do
2050
- expect(block_client.cluster.connected?).to be false
2051
- [
2052
- block_client.encrypter.mongocryptd_client,
2053
- block_client.encrypter.key_vault_client,
2054
- block_client.encrypter.metadata_client
2055
- ].each do |crypt_client|
2056
- expect(crypt_client.cluster.connected?).to be false
2057
- end
2058
- end
2059
- end
2060
- end
2061
-
2062
- context 'when the block raises an error' do
2063
- it 'is closed after the block' do
2064
- block_client_raise = nil
2065
- expect do
2066
- described_class.new(
2067
- SpecConfig.instance.addresses,
2068
- SpecConfig.instance.test_options.merge(database: SpecConfig.instance.test_db)
2069
- ) do |client|
2070
- block_client_raise = client
2071
- raise 'This is an error!'
2072
- end
2073
- end.to raise_error(StandardError, 'This is an error!')
2074
- expect(block_client_raise.cluster.connected?).to be false
2075
- end
2076
- end
2077
-
2078
- context 'when the hosts given include the protocol' do
2079
- it 'raises an error on mongodb://' do
2080
- expect do
2081
- described_class.new([ 'mongodb://127.0.0.1:27017/test' ])
2082
- end.to raise_error(ArgumentError,
2083
- "Host 'mongodb://127.0.0.1:27017/test' should not contain protocol. " \
2084
- 'Did you mean to not use an array?')
2085
- end
2086
-
2087
- it 'raises an error on mongodb+srv://' do
2088
- expect do
2089
- described_class.new([ 'mongodb+srv://127.0.0.1:27017/test' ])
2090
- end.to raise_error(ArgumentError,
2091
- "Host 'mongodb+srv://127.0.0.1:27017/test' should not contain protocol. " \
2092
- 'Did you mean to not use an array?')
2093
- end
2094
-
2095
- it 'raises an error on multiple items' do
2096
- expect do
2097
- described_class.new([ '127.0.0.1:27017', 'mongodb+srv://127.0.0.1:27017/test' ])
2098
- end.to raise_error(ArgumentError,
2099
- "Host 'mongodb+srv://127.0.0.1:27017/test' should not contain protocol. " \
2100
- 'Did you mean to not use an array?')
2101
- end
2102
-
2103
- it 'raises an error only at beginning of string' do
2104
- expect do
2105
- described_class
2106
- .new([ 'somethingmongodb://127.0.0.1:27017/test', 'mongodb+srv://127.0.0.1:27017/test' ])
2107
- end.to raise_error(ArgumentError,
2108
- "Host 'mongodb+srv://127.0.0.1:27017/test' should not contain protocol. " \
2109
- 'Did you mean to not use an array?')
2110
- end
2111
-
2112
- it 'raises an error with different case' do
2113
- expect { described_class.new([ 'MongOdB://127.0.0.1:27017/test' ]) }
2114
- .to raise_error(ArgumentError,
2115
- "Host 'MongOdB://127.0.0.1:27017/test' should not contain protocol. " \
2116
- 'Did you mean to not use an array?')
2117
- end
2118
- end
2119
- end
2120
- end
2121
-
2122
- shared_examples_for 'duplicated client with duplicated monitoring' do
2123
- let(:monitoring) { client.send(:monitoring) }
2124
- let(:new_monitoring) { new_client.send(:monitoring) }
2125
-
2126
- it 'duplicates monitoring' do
2127
- expect(new_monitoring).not_to eql(monitoring)
2128
- end
2129
-
2130
- it 'copies monitoring subscribers' do
2131
- monitoring.subscribers.clear
2132
- client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
2133
- expect(monitoring.present_subscribers.length).to eq(1)
2134
- expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
2135
-
2136
- # this duplicates the client
2137
- expect(new_monitoring.present_subscribers.length).to eq(1)
2138
- expect(new_monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
2139
- end
2140
-
2141
- it 'does not change subscribers on original client' do
2142
- monitoring.subscribers.clear
2143
- client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
2144
- expect(monitoring.present_subscribers.length).to eq(1)
2145
- expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
2146
-
2147
- new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
2148
- new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
2149
- expect(new_monitoring.present_subscribers.length).to eq(1)
2150
- expect(new_monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(3)
2151
- # original client should not have gotten any of the new subscribers
2152
- expect(monitoring.present_subscribers.length).to eq(1)
2153
- expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
2154
- end
2155
- end
2156
-
2157
- shared_examples_for 'duplicated client with reused monitoring' do
2158
- let(:monitoring) { client.send(:monitoring) }
2159
- let(:new_monitoring) { new_client.send(:monitoring) }
2160
-
2161
- it 'reuses monitoring' do
2162
- expect(new_monitoring).to eql(monitoring)
2163
- end
2164
- end
2165
-
2166
- shared_examples_for 'duplicated client with clean slate monitoring' do
2167
- let(:monitoring) { client.send(:monitoring) }
2168
- let(:new_monitoring) { new_client.send(:monitoring) }
2169
-
2170
- it 'does not reuse monitoring' do
2171
- expect(new_monitoring).not_to eql(monitoring)
2172
- end
2173
-
2174
- it 'resets monitoring subscribers' do
2175
- monitoring.subscribers.clear
2176
- client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
2177
- expect(monitoring.present_subscribers.length).to eq(1)
2178
- expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
2179
-
2180
- # this duplicates the client
2181
- # 7 is how many subscribers driver sets up by default
2182
- expect(new_monitoring.present_subscribers.length).to eq(7)
2183
- # ... none of which are for heartbeats
2184
- expect(new_monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(0)
2185
- end
2186
-
2187
- it 'does not change subscribers on original client' do
2188
- monitoring.subscribers.clear
2189
- client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
2190
- expect(monitoring.present_subscribers.length).to eq(1)
2191
- expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
2192
-
2193
- new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
2194
- new_client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
2195
- # 7 default subscribers + heartbeat
2196
- expect(new_monitoring.present_subscribers.length).to eq(8)
2197
- # the heartbeat subscriber on the original client is not inherited
2198
- expect(new_monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(2)
2199
- # original client should not have gotten any of the new subscribers
2200
- expect(monitoring.present_subscribers.length).to eq(1)
2201
- expect(monitoring.subscribers[Mongo::Monitoring::SERVER_HEARTBEAT].length).to eq(1)
2202
- end
2203
- end
2204
-
2205
- describe '#use' do
2206
- let(:client) do
2207
- new_local_client_nmio(SINGLE_CLIENT, database: SpecConfig.instance.test_db)
2208
- end
2209
-
2210
- shared_examples_for 'a database switching object' do
2211
- it 'returns the new client' do
2212
- expect(client.send(:database).name).to eq('ruby-driver')
2213
- end
2214
-
2215
- it 'keeps the same cluster' do
2216
- expect(database.cluster).to equal(client.cluster)
2217
- end
2218
- end
2219
-
2220
- context 'when provided a string' do
2221
- let(:database) do
2222
- client.use('testdb')
2223
- end
2224
-
2225
- it_behaves_like 'a database switching object'
2226
- end
2227
-
2228
- context 'when provided a symbol' do
2229
- let(:database) do
2230
- client.use(:testdb)
2231
- end
2232
-
2233
- it_behaves_like 'a database switching object'
2234
- end
2235
-
2236
- context 'when providing nil' do
2237
- it 'raises an exception' do
2238
- expect { client.use(nil) }
2239
- .to raise_error(Mongo::Error::InvalidDatabaseName)
2240
- end
2241
- end
2242
- end
2243
-
2244
- describe '#with' do
2245
- let(:client) do
2246
- new_local_client_nmio(SINGLE_CLIENT, database: SpecConfig.instance.test_db)
2247
- end
2248
-
2249
- context 'when providing nil' do
2250
- it 'returns the cloned client' do
2251
- expect(client.with(nil)).to eq(client)
2252
- end
2253
- end
2254
-
2255
- context 'when the app_name is changed' do
2256
- let(:client) { authorized_client }
2257
- let(:original_options) { client.options }
2258
- let(:new_options) { { app_name: 'client_test' } }
2259
- let(:new_client) { authorized_client.with(new_options) }
2260
-
2261
- it 'returns a new client' do
2262
- expect(new_client).not_to equal(client)
2263
- end
2264
-
2265
- it 'replaces the existing options' do
2266
- expect(new_client.options).to eq(client.options.merge(new_options))
2267
- end
2268
-
2269
- it 'does not modify the original client' do
2270
- expect(client.options).to eq(original_options)
2271
- end
2272
-
2273
- it 'does not keep the same cluster' do
2274
- expect(new_client.cluster).not_to be(client.cluster)
2275
- end
2276
- end
2277
-
2278
- context 'when direct_connection option is given' do
2279
- let(:client) do
2280
- options = SpecConfig.instance.test_options
2281
- options.delete(:connect)
2282
- new_local_client(SpecConfig.instance.addresses, options)
2283
- end
2284
-
2285
- let(:new_client) do
2286
- client.with(new_options)
2287
- end
2288
-
2289
- before do
2290
- expect(client.options[:direct_connection]).to be_nil
2291
- end
2292
-
2293
- context 'direct_connection set to false' do
2294
- let(:new_options) do
2295
- { direct_connection: false }
2296
- end
2297
-
2298
- it 'is accepted' do
2299
- expect(new_client.options[:direct_connection]).to be false
2300
- end
2301
- end
2302
-
2303
- context 'direct_connection set to true' do
2304
- let(:new_options) do
2305
- { direct_connection: true }
2306
- end
2307
-
2308
- context 'in single topology' do
2309
- require_topology :single
2310
-
2311
- it 'is accepted' do
2312
- expect(new_client.options[:direct_connection]).to be true
2313
- expect(new_client.cluster.topology).to be_a(Mongo::Cluster::Topology::Single)
2314
- end
2315
- end
2316
-
2317
- context 'in replica set or sharded cluster topology' do
2318
- require_topology :replica_set, :sharded
2319
-
2320
- it 'is rejected' do
2321
- expect { new_client }
2322
- .to raise_error(ArgumentError, /direct_connection=true cannot be used with topologies other than Single/)
2323
- end
2324
-
2325
- context 'when a new cluster is created' do
2326
- let(:new_options) do
2327
- { direct_connection: true, app_name: 'new-client' }
2328
- end
2329
-
2330
- it 'is rejected' do
2331
- expect { new_client }
2332
- .to raise_error(ArgumentError,
2333
- /direct_connection=true cannot be used with topologies other than Single/)
2334
- end
2335
- end
2336
- end
2337
- end
2338
- end
2339
-
2340
- context 'when the write concern is not changed' do
2341
- let(:client) do
2342
- new_local_client_nmio(
2343
- SINGLE_CLIENT,
2344
- read: { mode: :secondary },
2345
- write: { w: 1 },
2346
- database: SpecConfig.instance.test_db
2347
- )
2348
- end
2349
-
2350
- let(:new_client) { client.with(read: { mode: :primary }) }
2351
-
2352
- let(:new_options) do
2353
- Mongo::Options::Redacted.new(
2354
- read: { mode: :primary },
2355
- write: { w: 1 },
2356
- monitoring_io: false,
2357
- database: SpecConfig.instance.test_db,
2358
- retry_writes: true,
2359
- retry_reads: true
2360
- )
2361
- end
2362
-
2363
- let(:original_options) do
2364
- Mongo::Options::Redacted.new(
2365
- read: { mode: :secondary },
2366
- write: { w: 1 },
2367
- monitoring_io: false,
2368
- database: SpecConfig.instance.test_db,
2369
- retry_writes: true,
2370
- retry_reads: true
2371
- )
2372
- end
2373
-
2374
- it 'returns a new client' do
2375
- expect(new_client).not_to equal(client)
2376
- end
2377
-
2378
- it 'replaces the existing options' do
2379
- expect(new_client.options).to eq(new_options)
2380
- end
2381
-
2382
- it 'does not modify the original client' do
2383
- expect(client.options).to eq(original_options)
2384
- end
2385
-
2386
- it 'keeps the same cluster' do
2387
- expect(new_client.cluster).to be(client.cluster)
2388
- end
2389
- end
2390
-
2391
- context 'when the write concern is changed' do
2392
- let(:client) do
2393
- new_local_client(
2394
- SINGLE_CLIENT,
2395
- { monitoring_io: false }.merge(client_options)
2396
- )
2397
- end
2398
-
2399
- let(:client_options) do
2400
- { write: { w: 1 } }
2401
- end
2402
-
2403
- context 'when the write concern has not been accessed' do
2404
- let(:new_client) { client.with(write: { w: 0 }) }
2405
-
2406
- let(:get_last_error) do
2407
- new_client.write_concern.get_last_error
2408
- end
2409
-
2410
- it 'returns the correct write concern' do
2411
- expect(get_last_error).to be_nil
2412
- end
2413
- end
2414
-
2415
- context 'when the write concern has been accessed' do
2416
- let(:new_client) do
2417
- client.write_concern
2418
- client.with(write: { w: 0 })
2419
- end
2420
-
2421
- let(:get_last_error) do
2422
- new_client.write_concern.get_last_error
2423
- end
2424
-
2425
- it 'returns the correct write concern' do
2426
- expect(get_last_error).to be_nil
2427
- end
2428
- end
2429
-
2430
- context 'when write concern is given as :write' do
2431
- let(:client_options) do
2432
- { write: { w: 1 } }
2433
- end
2434
-
2435
- it 'sets :write option' do
2436
- expect(client.options[:write]).to eq(Mongo::Options::Redacted.new(w: 1))
2437
- end
2438
-
2439
- it 'does not set :write_concern option' do
2440
- expect(client.options[:write_concern]).to be_nil
2441
- end
2442
-
2443
- it 'returns correct write concern' do
2444
- expect(client.write_concern).to be_a(Mongo::WriteConcern::Acknowledged)
2445
- expect(client.write_concern.options).to eq(w: 1)
2446
- end
2447
- end
2448
-
2449
- context 'when write concern is given as :write_concern' do
2450
- let(:client_options) do
2451
- { write_concern: { w: 1 } }
2452
- end
2453
-
2454
- it 'sets :write_concern option' do
2455
- expect(client.options[:write_concern]).to eq(Mongo::Options::Redacted.new(w: 1))
2456
- end
2457
-
2458
- it 'does not set :write option' do
2459
- expect(client.options[:write]).to be_nil
2460
- end
2461
-
2462
- it 'returns correct write concern' do
2463
- expect(client.write_concern).to be_a(Mongo::WriteConcern::Acknowledged)
2464
- expect(client.write_concern.options).to eq(w: 1)
2465
- end
2466
- end
2467
-
2468
- context 'when write concern is given as both :write and :write_concern' do
2469
- context 'with identical values' do
2470
- let(:client_options) do
2471
- { write: { w: 1 }, write_concern: { w: 1 } }
2472
- end
2473
-
2474
- it 'sets :write_concern option' do
2475
- expect(client.options[:write_concern]).to eq(Mongo::Options::Redacted.new(w: 1))
2476
- end
2477
-
2478
- it 'sets :write option' do
2479
- expect(client.options[:write]).to eq(Mongo::Options::Redacted.new(w: 1))
2480
- end
2481
-
2482
- it 'returns correct write concern' do
2483
- expect(client.write_concern).to be_a(Mongo::WriteConcern::Acknowledged)
2484
- expect(client.write_concern.options).to eq(w: 1)
2485
- end
2486
- end
2487
-
2488
- context 'with different values' do
2489
- let(:client_options) do
2490
- { write: { w: 1 }, write_concern: { w: 2 } }
2491
- end
2492
-
2493
- it 'raises an exception' do
2494
- expect do
2495
- client
2496
- end.to raise_error(ArgumentError, /If :write and :write_concern are both given, they must be identical/)
2497
- end
2498
- end
2499
- end
2500
-
2501
- context 'when #with uses a different write concern option name' do
2502
- context 'from :write_concern to :write' do
2503
- let(:client_options) do
2504
- { write_concern: { w: 1 } }
2505
- end
2506
-
2507
- let(:new_client) { client.with(write: { w: 2 }) }
2508
-
2509
- it 'uses the new option' do
2510
- expect(new_client.options[:write]).to eq(Mongo::Options::Redacted.new(w: 2))
2511
- expect(new_client.options[:write_concern]).to be_nil
2512
- end
2513
- end
2514
-
2515
- context 'from :write to :write_concern' do
2516
- let(:client_options) do
2517
- { write: { w: 1 } }
2518
- end
2519
-
2520
- let(:new_client) { client.with(write_concern: { w: 2 }) }
2521
-
2522
- it 'uses the new option' do
2523
- expect(new_client.options[:write_concern]).to eq(Mongo::Options::Redacted.new(w: 2))
2524
- expect(new_client.options[:write]).to be_nil
2525
- end
2526
- end
2527
- end
2528
- end
2529
-
2530
- context 'when an invalid option is provided' do
2531
- let(:new_client) do
2532
- client.with(invalid: :option, ssl: false)
2533
- end
2534
-
2535
- it 'does not set the invalid option' do
2536
- expect(new_client.options.keys).not_to include('invalid')
2537
- end
2538
-
2539
- it 'sets the valid options' do
2540
- expect(new_client.options.keys).to include('ssl')
2541
- end
2542
-
2543
- it 'warns that an invalid option has been specified' do
2544
- expect(Mongo::Logger.logger).to receive(:warn)
2545
- expect(new_client.options.keys).not_to include('invalid')
2546
- end
2547
- end
2548
-
2549
- context 'when client is created with ipv6 address' do
2550
- let(:client) do
2551
- new_local_client_nmio([ '[::1]:27017' ], database: SpecConfig.instance.test_db)
2552
- end
2553
-
2554
- context 'when providing nil' do
2555
- it 'returns the cloned client' do
2556
- expect(client.with(nil)).to eq(client)
2557
- end
2558
- end
2559
-
2560
- context 'when changing options' do
2561
- let(:new_options) { { app_name: 'client_test' } }
2562
- let(:new_client) { client.with(new_options) }
2563
-
2564
- it 'returns a new client' do
2565
- expect(new_client).not_to equal(client)
2566
- end
2567
- end
2568
- end
2569
-
2570
- context 'when new client has a new cluster' do
2571
- let(:client) do
2572
- new_local_client(
2573
- SINGLE_CLIENT,
2574
- database: SpecConfig.instance.test_db,
2575
- server_selection_timeout: 0.5,
2576
- socket_timeout: 0.1, connect_timeout: 0.1, populator_io: false
2577
- )
2578
- end
2579
-
2580
- let(:new_client) do
2581
- client.with(app_name: 'client_construction_spec').tap do |new_client|
2582
- expect(new_client.cluster).not_to eql(client.cluster)
2583
- end
2584
- end
2585
-
2586
- it_behaves_like 'duplicated client with clean slate monitoring'
2587
- end
2588
-
2589
- context 'when new client shares cluster with original client' do
2590
- let(:new_client) do
2591
- client.with(database: 'client_construction_spec').tap do |new_client|
2592
- expect(new_client.cluster).to eql(client.cluster)
2593
- end
2594
- end
2595
-
2596
- it_behaves_like 'duplicated client with reused monitoring'
2597
- end
2598
-
2599
- # Since we either reuse monitoring or reset it to a clean slate
2600
- # in #with, the consistent behavior is to never transfer sdam_proc to
2601
- # the new client.
2602
- context 'when sdam_proc is given on original client' do
2603
- let(:sdam_proc) do
2604
- proc do |client|
2605
- client.subscribe(Mongo::Monitoring::SERVER_HEARTBEAT, subscriber)
2606
- end
2607
- end
2608
-
2609
- let(:client) do
2610
- new_local_client(
2611
- SpecConfig.instance.addresses,
2612
- SpecConfig.instance.test_options.merge(
2613
- sdam_proc: sdam_proc,
2614
- connect_timeout: 3.08, socket_timeout: 3.09,
2615
- server_selection_timeout: 2.92,
2616
- heartbeat_frequency: 100,
2617
- database: SpecConfig.instance.test_db
2618
- )
2619
- )
2620
- end
2621
-
2622
- let(:new_client) do
2623
- client.with(app_name: 'foo').tap do |new_client|
2624
- expect(new_client.cluster).not_to be == client.cluster
2625
- end
2626
- end
2627
-
2628
- before do
2629
- client.cluster.next_primary
2630
- events = subscriber.select_started_events(Mongo::Monitoring::Event::ServerHeartbeatStarted)
2631
- if ClusterConfig.instance.topology == :load_balanced
2632
- # No server monitoring in LB topology
2633
- expect(events.length).to be == 0
2634
- else
2635
- expect(events.length).to be > 0
2636
- end
2637
- end
2638
-
2639
- it 'does not copy sdam_proc option to new client' do
2640
- expect(new_client.options[:sdam_proc]).to be_nil
2641
- end
2642
-
2643
- it 'does not notify subscribers set up by sdam_proc' do
2644
- # On 4.4, the push monitor also is receiving heartbeats.
2645
- # Give those some time to be processed.
2646
- sleep 2
2647
-
2648
- if ClusterConfig.instance.topology == :load_balanced
2649
- # No server monitoring in LB topology
2650
- expect(subscriber.started_events.length).to eq 0
2651
- else
2652
- expect(subscriber.started_events.length).to be > 0
2653
- end
2654
- subscriber.started_events.clear
2655
-
2656
- # If this test takes longer than heartbeat interval,
2657
- # subscriber may receive events from the original client.
2658
-
2659
- new_client.cluster.next_primary
2660
-
2661
- # Diagnostics
2662
- # rubocop:disable Style/IfUnlessModifier, Lint/Debugger
2663
- unless subscriber.started_events.empty?
2664
- p subscriber.started_events
2665
- end
2666
- # rubocop:enable Style/IfUnlessModifier, Lint/Debugger
2667
-
2668
- expect(subscriber.started_events.length).to eq 0
2669
- expect(new_client.cluster.topology.class).not_to be Mongo::Cluster::Topology::Unknown
2670
- end
2671
- end
2672
-
2673
- context 'when :server_api is changed' do
2674
- let(:client) do
2675
- new_local_client_nmio(SINGLE_CLIENT)
2676
- end
2677
-
2678
- let(:new_client) do
2679
- client.with(server_api: { version: '1' })
2680
- end
2681
-
2682
- it 'changes :server_api' do
2683
- expect(new_client.options[:server_api]).to be == { 'version' => '1' }
2684
- end
2685
- end
2686
-
2687
- context 'when :server_api is cleared' do
2688
- let(:client) do
2689
- new_local_client_nmio(SINGLE_CLIENT, server_api: { version: '1' })
2690
- end
2691
-
2692
- let(:new_client) do
2693
- client.with(server_api: nil)
2694
- end
2695
-
2696
- it 'clears :server_api' do
2697
- expect(new_client.options[:server_api]).to be_nil
2698
- end
2699
- end
2700
- end
2701
-
2702
- describe '#dup' do
2703
- let(:client) do
2704
- new_local_client_nmio(
2705
- SINGLE_CLIENT,
2706
- read: { mode: :primary },
2707
- database: SpecConfig.instance.test_db
2708
- )
2709
- end
2710
-
2711
- let(:new_client) { client.dup }
2712
-
2713
- it 'creates a client with Redacted options' do
2714
- expect(new_client.options).to be_a(Mongo::Options::Redacted)
2715
- end
2716
-
2717
- it_behaves_like 'duplicated client with reused monitoring'
2718
- end
2719
- end
2720
- # rubocop:enable RSpec/ExpectInHook, RSpec/MessageSpies, RSpec/ExampleLength
2721
- # rubocop:enable RSpec/ContextWording, RSpec/RepeatedExampleGroupDescription
2722
- # rubocop:enable RSpec/ExampleWording, Style/BlockComments, RSpec/AnyInstance
2723
- # rubocop:enable RSpec/VerifiedDoubles