mongo 2.21.0 → 2.21.1

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 (1428) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  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/push_monitor.rb +1 -1
  27. data/lib/mongo/session/server_session/dirtyable.rb +1 -1
  28. data/lib/mongo/socket.rb +29 -22
  29. data/lib/mongo/uri/srv_protocol.rb +3 -1
  30. data/lib/mongo/version.rb +1 -1
  31. data/mongo.gemspec +4 -4
  32. metadata +19 -2799
  33. data/Rakefile +0 -196
  34. data/spec/NOTES.aws-auth.md +0 -296
  35. data/spec/README.aws-auth.md +0 -318
  36. data/spec/README.md +0 -733
  37. data/spec/USERS.md +0 -72
  38. data/spec/atlas/atlas_connectivity_spec.rb +0 -27
  39. data/spec/atlas/operations_spec.rb +0 -23
  40. data/spec/faas/ruby-sam-app/Gemfile +0 -9
  41. data/spec/faas/ruby-sam-app/mongodb/Gemfile +0 -4
  42. data/spec/faas/ruby-sam-app/mongodb/app.rb +0 -149
  43. data/spec/faas/ruby-sam-app/template.yaml +0 -48
  44. data/spec/integration/auth_spec.rb +0 -309
  45. data/spec/integration/awaited_ismaster_spec.rb +0 -31
  46. data/spec/integration/aws_auth_credentials_cache_spec.rb +0 -51
  47. data/spec/integration/aws_auth_request_spec.rb +0 -77
  48. data/spec/integration/aws_credentials_retriever_spec.rb +0 -136
  49. data/spec/integration/aws_lambda_examples_spec.rb +0 -68
  50. data/spec/integration/bson_symbol_spec.rb +0 -39
  51. data/spec/integration/bulk_insert_spec.rb +0 -83
  52. data/spec/integration/bulk_write_error_message_spec.rb +0 -74
  53. data/spec/integration/bulk_write_spec.rb +0 -86
  54. data/spec/integration/change_stream_examples_spec.rb +0 -208
  55. data/spec/integration/change_stream_spec.rb +0 -814
  56. data/spec/integration/check_clean_slate_spec.rb +0 -19
  57. data/spec/integration/client_authentication_options_spec.rb +0 -514
  58. data/spec/integration/client_connectivity_spec.rb +0 -41
  59. data/spec/integration/client_construction_aws_auth_spec.rb +0 -203
  60. data/spec/integration/client_construction_spec.rb +0 -381
  61. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +0 -360
  62. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +0 -306
  63. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +0 -75
  64. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +0 -82
  65. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +0 -260
  66. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +0 -754
  67. data/spec/integration/client_side_encryption/automatic_data_encryption_keys_prose_spec.rb +0 -153
  68. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +0 -190
  69. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +0 -81
  70. data/spec/integration/client_side_encryption/client_close_spec.rb +0 -66
  71. data/spec/integration/client_side_encryption/corpus_spec.rb +0 -273
  72. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +0 -132
  73. data/spec/integration/client_side_encryption/data_key_spec.rb +0 -258
  74. data/spec/integration/client_side_encryption/decryption_events_prose_spec.rb +0 -159
  75. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +0 -176
  76. data/spec/integration/client_side_encryption/explicit_queryable_encryption_spec.rb +0 -150
  77. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +0 -144
  78. data/spec/integration/client_side_encryption/kms_tls_options_spec.rb +0 -436
  79. data/spec/integration/client_side_encryption/kms_tls_spec.rb +0 -92
  80. data/spec/integration/client_side_encryption/mongocryptd_prose_spec.rb +0 -105
  81. data/spec/integration/client_side_encryption/on_demand_aws_credentials_spec.rb +0 -49
  82. data/spec/integration/client_side_encryption/on_demand_azure_credentials_spec.rb +0 -46
  83. data/spec/integration/client_side_encryption/on_demand_gcp_credentials_spec.rb +0 -47
  84. data/spec/integration/client_side_encryption/queryable_encryption_examples_spec.rb +0 -114
  85. data/spec/integration/client_side_encryption/range_explicit_encryption_prose_spec.rb +0 -583
  86. data/spec/integration/client_side_encryption/rewrap_prose_spec.rb +0 -114
  87. data/spec/integration/client_side_encryption/unique_index_on_key_alt_names_prose_spec.rb +0 -89
  88. data/spec/integration/client_side_encryption/views_spec.rb +0 -47
  89. data/spec/integration/client_side_operations_timeout/encryption_prose_spec.rb +0 -131
  90. data/spec/integration/client_spec.rb +0 -54
  91. data/spec/integration/client_update_spec.rb +0 -161
  92. data/spec/integration/collection_indexes_prose_spec.rb +0 -58
  93. data/spec/integration/command_monitoring_spec.rb +0 -184
  94. data/spec/integration/command_spec.rb +0 -157
  95. data/spec/integration/connect_single_rs_name_spec.rb +0 -75
  96. data/spec/integration/connection/faas_env_spec.rb +0 -62
  97. data/spec/integration/connection_pool_populator_spec.rb +0 -327
  98. data/spec/integration/connection_spec.rb +0 -353
  99. data/spec/integration/crud_spec.rb +0 -378
  100. data/spec/integration/cursor_pinning_spec.rb +0 -80
  101. data/spec/integration/cursor_reaping_spec.rb +0 -143
  102. data/spec/integration/docs_examples_spec.rb +0 -207
  103. data/spec/integration/error_detection_spec.rb +0 -42
  104. data/spec/integration/find_options_spec.rb +0 -227
  105. data/spec/integration/fork_reconnect_spec.rb +0 -207
  106. data/spec/integration/get_more_spec.rb +0 -42
  107. data/spec/integration/grid_fs_bucket_spec.rb +0 -51
  108. data/spec/integration/heartbeat_events_spec.rb +0 -102
  109. data/spec/integration/map_reduce_spec.rb +0 -81
  110. data/spec/integration/mmapv1_spec.rb +0 -31
  111. data/spec/integration/mongos_pinning_spec.rb +0 -37
  112. data/spec/integration/ocsp_connectivity_spec.rb +0 -29
  113. data/spec/integration/ocsp_verifier_cache_spec.rb +0 -191
  114. data/spec/integration/ocsp_verifier_spec.rb +0 -358
  115. data/spec/integration/operation_failure_code_spec.rb +0 -29
  116. data/spec/integration/operation_failure_message_spec.rb +0 -91
  117. data/spec/integration/query_cache_spec.rb +0 -1343
  118. data/spec/integration/query_cache_transactions_spec.rb +0 -193
  119. data/spec/integration/read_concern_spec.rb +0 -92
  120. data/spec/integration/read_preference_spec.rb +0 -548
  121. data/spec/integration/reconnect_spec.rb +0 -200
  122. data/spec/integration/retryable_errors_spec.rb +0 -286
  123. data/spec/integration/retryable_reads_errors_spec.rb +0 -275
  124. data/spec/integration/retryable_writes/retryable_writes_36_and_older_spec.rb +0 -764
  125. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +0 -405
  126. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +0 -18
  127. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +0 -27
  128. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +0 -28
  129. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +0 -220
  130. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +0 -235
  131. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +0 -113
  132. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +0 -22
  133. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +0 -28
  134. data/spec/integration/retryable_writes/shared/supports_retries.rb +0 -19
  135. data/spec/integration/retryable_writes_errors_spec.rb +0 -348
  136. data/spec/integration/sdam_error_handling_spec.rb +0 -490
  137. data/spec/integration/sdam_events_spec.rb +0 -178
  138. data/spec/integration/sdam_prose_spec.rb +0 -67
  139. data/spec/integration/search_indexes_prose_spec.rb +0 -172
  140. data/spec/integration/secondary_reads_spec.rb +0 -103
  141. data/spec/integration/server_description_spec.rb +0 -48
  142. data/spec/integration/server_monitor_spec.rb +0 -57
  143. data/spec/integration/server_selection_spec.rb +0 -39
  144. data/spec/integration/server_selector_spec.rb +0 -107
  145. data/spec/integration/server_spec.rb +0 -67
  146. data/spec/integration/shell_examples_spec.rb +0 -984
  147. data/spec/integration/size_limit_spec.rb +0 -118
  148. data/spec/integration/snappy_compression_spec.rb +0 -28
  149. data/spec/integration/snapshot_query_examples_spec.rb +0 -129
  150. data/spec/integration/srv_monitoring_spec.rb +0 -445
  151. data/spec/integration/srv_spec.rb +0 -60
  152. data/spec/integration/ssl_uri_options_spec.rb +0 -28
  153. data/spec/integration/step_down_spec.rb +0 -225
  154. data/spec/integration/time_zone_querying_spec.rb +0 -55
  155. data/spec/integration/transaction_pinning_spec.rb +0 -134
  156. data/spec/integration/transactions_api_examples_spec.rb +0 -64
  157. data/spec/integration/transactions_examples_spec.rb +0 -235
  158. data/spec/integration/truncated_utf8_spec.rb +0 -26
  159. data/spec/integration/versioned_api_examples_spec.rb +0 -120
  160. data/spec/integration/x509_auth_spec.rb +0 -112
  161. data/spec/integration/zlib_compression_spec.rb +0 -28
  162. data/spec/integration/zstd_compression_spec.rb +0 -29
  163. data/spec/kerberos/kerberos_spec.rb +0 -98
  164. data/spec/lite_spec_helper.rb +0 -211
  165. data/spec/mongo/address/ipv4_spec.rb +0 -102
  166. data/spec/mongo/address/ipv6_spec.rb +0 -137
  167. data/spec/mongo/address/unix_spec.rb +0 -45
  168. data/spec/mongo/address/validator_spec.rb +0 -54
  169. data/spec/mongo/address_spec.rb +0 -357
  170. data/spec/mongo/auth/aws/credential_cache_spec.rb +0 -63
  171. data/spec/mongo/auth/aws/credentials_retriever_spec.rb +0 -90
  172. data/spec/mongo/auth/aws/credentials_spec.rb +0 -46
  173. data/spec/mongo/auth/aws/request_region_spec.rb +0 -45
  174. data/spec/mongo/auth/aws/request_spec.rb +0 -79
  175. data/spec/mongo/auth/cr_spec.rb +0 -58
  176. data/spec/mongo/auth/gssapi/conversation_spec.rb +0 -124
  177. data/spec/mongo/auth/invalid_mechanism_spec.rb +0 -14
  178. data/spec/mongo/auth/ldap/conversation_spec.rb +0 -46
  179. data/spec/mongo/auth/ldap_spec.rb +0 -46
  180. data/spec/mongo/auth/scram/conversation_spec.rb +0 -205
  181. data/spec/mongo/auth/scram256/conversation_spec.rb +0 -174
  182. data/spec/mongo/auth/scram_negotiation_spec.rb +0 -532
  183. data/spec/mongo/auth/scram_spec.rb +0 -121
  184. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +0 -116
  185. data/spec/mongo/auth/stringprep_spec.rb +0 -191
  186. data/spec/mongo/auth/user/view_spec.rb +0 -584
  187. data/spec/mongo/auth/user_spec.rb +0 -343
  188. data/spec/mongo/auth/x509/conversation_spec.rb +0 -72
  189. data/spec/mongo/auth/x509_spec.rb +0 -72
  190. data/spec/mongo/auth_spec.rb +0 -68
  191. data/spec/mongo/bson_spec.rb +0 -14
  192. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +0 -287
  193. data/spec/mongo/bulk_write/result_spec.rb +0 -141
  194. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +0 -242
  195. data/spec/mongo/bulk_write_spec.rb +0 -2514
  196. data/spec/mongo/caching_cursor_spec.rb +0 -73
  197. data/spec/mongo/client_construction_spec.rb +0 -2723
  198. data/spec/mongo/client_encryption_spec.rb +0 -403
  199. data/spec/mongo/client_spec.rb +0 -1357
  200. data/spec/mongo/cluster/cursor_reaper_spec.rb +0 -230
  201. data/spec/mongo/cluster/periodic_executor_spec.rb +0 -21
  202. data/spec/mongo/cluster/socket_reaper_spec.rb +0 -46
  203. data/spec/mongo/cluster/topology/replica_set_spec.rb +0 -601
  204. data/spec/mongo/cluster/topology/sharded_spec.rb +0 -158
  205. data/spec/mongo/cluster/topology/single_spec.rb +0 -192
  206. data/spec/mongo/cluster/topology/unknown_spec.rb +0 -103
  207. data/spec/mongo/cluster/topology_spec.rb +0 -211
  208. data/spec/mongo/cluster_spec.rb +0 -825
  209. data/spec/mongo/cluster_time_spec.rb +0 -151
  210. data/spec/mongo/collection/view/aggregation_spec.rb +0 -753
  211. data/spec/mongo/collection/view/builder/find_command_spec.rb +0 -528
  212. data/spec/mongo/collection/view/builder/op_query_spec.rb +0 -161
  213. data/spec/mongo/collection/view/change_stream_resume_spec.rb +0 -397
  214. data/spec/mongo/collection/view/change_stream_spec.rb +0 -547
  215. data/spec/mongo/collection/view/explainable_spec.rb +0 -119
  216. data/spec/mongo/collection/view/immutable_spec.rb +0 -57
  217. data/spec/mongo/collection/view/iterable_spec.rb +0 -41
  218. data/spec/mongo/collection/view/map_reduce_spec.rb +0 -907
  219. data/spec/mongo/collection/view/readable_spec.rb +0 -2283
  220. data/spec/mongo/collection/view/writable_spec.rb +0 -1976
  221. data/spec/mongo/collection/view_spec.rb +0 -424
  222. data/spec/mongo/collection_crud_spec.rb +0 -4472
  223. data/spec/mongo/collection_ddl_spec.rb +0 -587
  224. data/spec/mongo/collection_spec.rb +0 -849
  225. data/spec/mongo/condition_variable_spec.rb +0 -104
  226. data/spec/mongo/config/options_spec.rb +0 -76
  227. data/spec/mongo/config_spec.rb +0 -74
  228. data/spec/mongo/crypt/auto_decryption_context_spec.rb +0 -109
  229. data/spec/mongo/crypt/auto_encrypter_spec.rb +0 -450
  230. data/spec/mongo/crypt/auto_encryption_context_spec.rb +0 -126
  231. data/spec/mongo/crypt/binary_spec.rb +0 -113
  232. data/spec/mongo/crypt/binding/binary_spec.rb +0 -54
  233. data/spec/mongo/crypt/binding/context_spec.rb +0 -305
  234. data/spec/mongo/crypt/binding/helpers_spec.rb +0 -44
  235. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +0 -113
  236. data/spec/mongo/crypt/binding/status_spec.rb +0 -97
  237. data/spec/mongo/crypt/binding/version_spec.rb +0 -67
  238. data/spec/mongo/crypt/binding_unloaded_spec.rb +0 -37
  239. data/spec/mongo/crypt/data_key_context_spec.rb +0 -146
  240. data/spec/mongo/crypt/encryption_io_spec.rb +0 -141
  241. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +0 -106
  242. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +0 -266
  243. data/spec/mongo/crypt/handle_spec.rb +0 -266
  244. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +0 -111
  245. data/spec/mongo/crypt/hooks_spec.rb +0 -30
  246. data/spec/mongo/crypt/kms/azure/credentials_retriever_spec.rb +0 -86
  247. data/spec/mongo/crypt/kms/credentials_spec.rb +0 -373
  248. data/spec/mongo/crypt/kms_spec.rb +0 -62
  249. data/spec/mongo/crypt/status_spec.rb +0 -150
  250. data/spec/mongo/crypt_spec.rb +0 -21
  251. data/spec/mongo/cursor/builder/get_more_command_spec.rb +0 -195
  252. data/spec/mongo/cursor/builder/op_get_more_spec.rb +0 -68
  253. data/spec/mongo/cursor_spec.rb +0 -851
  254. data/spec/mongo/database_spec.rb +0 -1365
  255. data/spec/mongo/distinguishing_semaphore_spec.rb +0 -66
  256. data/spec/mongo/error/bulk_write_error_spec.rb +0 -52
  257. data/spec/mongo/error/crypt_error_spec.rb +0 -29
  258. data/spec/mongo/error/max_bson_size_spec.rb +0 -38
  259. data/spec/mongo/error/no_server_available_spec.rb +0 -35
  260. data/spec/mongo/error/notable_spec.rb +0 -62
  261. data/spec/mongo/error/operation_failure_heavy_spec.rb +0 -110
  262. data/spec/mongo/error/operation_failure_spec.rb +0 -553
  263. data/spec/mongo/error/parser_spec.rb +0 -519
  264. data/spec/mongo/error/unsupported_option_spec.rb +0 -57
  265. data/spec/mongo/event/publisher_spec.rb +0 -53
  266. data/spec/mongo/event/subscriber_spec.rb +0 -37
  267. data/spec/mongo/grid/file/chunk_spec.rb +0 -230
  268. data/spec/mongo/grid/file/info_spec.rb +0 -107
  269. data/spec/mongo/grid/file_spec.rb +0 -194
  270. data/spec/mongo/grid/fs_bucket_spec.rb +0 -1269
  271. data/spec/mongo/grid/stream/read_spec.rb +0 -292
  272. data/spec/mongo/grid/stream/write_spec.rb +0 -559
  273. data/spec/mongo/grid/stream_spec.rb +0 -51
  274. data/spec/mongo/id_spec.rb +0 -38
  275. data/spec/mongo/index/view_spec.rb +0 -1296
  276. data/spec/mongo/lint_spec.rb +0 -231
  277. data/spec/mongo/logger_spec.rb +0 -62
  278. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +0 -79
  279. data/spec/mongo/monitoring/event/cmap/connection_check_out_failed_spec.rb +0 -26
  280. data/spec/mongo/monitoring/event/cmap/connection_check_out_started_spec.rb +0 -22
  281. data/spec/mongo/monitoring/event/cmap/connection_checked_in_spec.rb +0 -33
  282. data/spec/mongo/monitoring/event/cmap/connection_checked_out_spec.rb +0 -33
  283. data/spec/mongo/monitoring/event/cmap/connection_closed_spec.rb +0 -30
  284. data/spec/mongo/monitoring/event/cmap/connection_created_spec.rb +0 -27
  285. data/spec/mongo/monitoring/event/cmap/connection_ready_spec.rb +0 -27
  286. data/spec/mongo/monitoring/event/cmap/pool_cleared_spec.rb +0 -22
  287. data/spec/mongo/monitoring/event/cmap/pool_closed_spec.rb +0 -29
  288. data/spec/mongo/monitoring/event/cmap/pool_created_spec.rb +0 -36
  289. data/spec/mongo/monitoring/event/command_failed_spec.rb +0 -87
  290. data/spec/mongo/monitoring/event/command_started_spec.rb +0 -51
  291. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +0 -88
  292. data/spec/mongo/monitoring/event/secure_spec.rb +0 -123
  293. data/spec/mongo/monitoring/event/server_closed_spec.rb +0 -38
  294. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +0 -38
  295. data/spec/mongo/monitoring/event/server_heartbeat_failed_spec.rb +0 -34
  296. data/spec/mongo/monitoring/event/server_heartbeat_started_spec.rb +0 -34
  297. data/spec/mongo/monitoring/event/server_heartbeat_succeeded_spec.rb +0 -34
  298. data/spec/mongo/monitoring/event/server_opening_spec.rb +0 -38
  299. data/spec/mongo/monitoring/event/topology_changed_spec.rb +0 -44
  300. data/spec/mongo/monitoring/event/topology_closed_spec.rb +0 -38
  301. data/spec/mongo/monitoring/event/topology_opening_spec.rb +0 -38
  302. data/spec/mongo/monitoring_spec.rb +0 -196
  303. data/spec/mongo/operation/aggregate/result_spec.rb +0 -90
  304. data/spec/mongo/operation/aggregate_spec.rb +0 -76
  305. data/spec/mongo/operation/collections_info_spec.rb +0 -48
  306. data/spec/mongo/operation/command_spec.rb +0 -86
  307. data/spec/mongo/operation/context_spec.rb +0 -79
  308. data/spec/mongo/operation/create/op_msg_spec.rb +0 -240
  309. data/spec/mongo/operation/create_index_spec.rb +0 -62
  310. data/spec/mongo/operation/create_user_spec.rb +0 -53
  311. data/spec/mongo/operation/delete/bulk_spec.rb +0 -245
  312. data/spec/mongo/operation/delete/op_msg_spec.rb +0 -267
  313. data/spec/mongo/operation/delete_spec.rb +0 -203
  314. data/spec/mongo/operation/drop_index_spec.rb +0 -61
  315. data/spec/mongo/operation/find/builder/flags_spec.rb +0 -109
  316. data/spec/mongo/operation/find/builder/modifiers_spec.rb +0 -213
  317. data/spec/mongo/operation/find/op_msg_spec.rb +0 -66
  318. data/spec/mongo/operation/get_more/op_msg_spec.rb +0 -65
  319. data/spec/mongo/operation/indexes_spec.rb +0 -41
  320. data/spec/mongo/operation/insert/bulk_spec.rb +0 -273
  321. data/spec/mongo/operation/insert/op_msg_spec.rb +0 -293
  322. data/spec/mongo/operation/insert_spec.rb +0 -258
  323. data/spec/mongo/operation/limited_spec.rb +0 -55
  324. data/spec/mongo/operation/map_reduce_spec.rb +0 -131
  325. data/spec/mongo/operation/read_preference_legacy_spec.rb +0 -360
  326. data/spec/mongo/operation/read_preference_op_msg_spec.rb +0 -332
  327. data/spec/mongo/operation/remove_user_spec.rb +0 -52
  328. data/spec/mongo/operation/result_spec.rb +0 -369
  329. data/spec/mongo/operation/shared/csot/examples.rb +0 -113
  330. data/spec/mongo/operation/specifiable_spec.rb +0 -87
  331. data/spec/mongo/operation/update/bulk_spec.rb +0 -239
  332. data/spec/mongo/operation/update/op_msg_spec.rb +0 -272
  333. data/spec/mongo/operation/update_spec.rb +0 -235
  334. data/spec/mongo/operation/update_user_spec.rb +0 -52
  335. data/spec/mongo/options/redacted_spec.rb +0 -353
  336. data/spec/mongo/protocol/caching_hash_spec.rb +0 -37
  337. data/spec/mongo/protocol/compressed_spec.rb +0 -83
  338. data/spec/mongo/protocol/get_more_spec.rb +0 -164
  339. data/spec/mongo/protocol/kill_cursors_spec.rb +0 -121
  340. data/spec/mongo/protocol/msg_spec.rb +0 -507
  341. data/spec/mongo/protocol/query_spec.rb +0 -347
  342. data/spec/mongo/protocol/registry_spec.rb +0 -34
  343. data/spec/mongo/protocol/reply_spec.rb +0 -198
  344. data/spec/mongo/query_cache_middleware_spec.rb +0 -55
  345. data/spec/mongo/query_cache_spec.rb +0 -471
  346. data/spec/mongo/retryable/write_worker_spec.rb +0 -39
  347. data/spec/mongo/retryable_spec.rb +0 -624
  348. data/spec/mongo/semaphore_spec.rb +0 -54
  349. data/spec/mongo/server/app_metadata/environment_spec.rb +0 -344
  350. data/spec/mongo/server/app_metadata/truncator_spec.rb +0 -158
  351. data/spec/mongo/server/app_metadata_spec.rb +0 -158
  352. data/spec/mongo/server/connection_auth_spec.rb +0 -138
  353. data/spec/mongo/server/connection_common_spec.rb +0 -87
  354. data/spec/mongo/server/connection_pool/populator_spec.rb +0 -120
  355. data/spec/mongo/server/connection_pool_spec.rb +0 -1609
  356. data/spec/mongo/server/connection_spec.rb +0 -1310
  357. data/spec/mongo/server/description/features_spec.rb +0 -274
  358. data/spec/mongo/server/description_query_methods_spec.rb +0 -291
  359. data/spec/mongo/server/description_spec.rb +0 -846
  360. data/spec/mongo/server/monitor/app_metadata_spec.rb +0 -25
  361. data/spec/mongo/server/monitor/connection_spec.rb +0 -197
  362. data/spec/mongo/server/monitor_spec.rb +0 -326
  363. data/spec/mongo/server/push_monitor_spec.rb +0 -95
  364. data/spec/mongo/server/round_trip_time_calculator_spec.rb +0 -120
  365. data/spec/mongo/server_selector/nearest_spec.rb +0 -338
  366. data/spec/mongo/server_selector/primary_preferred_spec.rb +0 -372
  367. data/spec/mongo/server_selector/primary_spec.rb +0 -181
  368. data/spec/mongo/server_selector/secondary_preferred_spec.rb +0 -350
  369. data/spec/mongo/server_selector/secondary_spec.rb +0 -278
  370. data/spec/mongo/server_selector_spec.rb +0 -736
  371. data/spec/mongo/server_spec.rb +0 -463
  372. data/spec/mongo/session/server_session_spec.rb +0 -62
  373. data/spec/mongo/session/session_pool_spec.rb +0 -257
  374. data/spec/mongo/session_spec.rb +0 -368
  375. data/spec/mongo/session_transaction_spec.rb +0 -222
  376. data/spec/mongo/socket/ssl_spec.rb +0 -830
  377. data/spec/mongo/socket/tcp_spec.rb +0 -17
  378. data/spec/mongo/socket/unix_spec.rb +0 -56
  379. data/spec/mongo/socket_spec.rb +0 -119
  380. data/spec/mongo/srv/monitor_spec.rb +0 -233
  381. data/spec/mongo/srv/result_spec.rb +0 -57
  382. data/spec/mongo/timeout_spec.rb +0 -42
  383. data/spec/mongo/tls_context_hooks_spec.rb +0 -40
  384. data/spec/mongo/uri/options_mapper_spec.rb +0 -1605
  385. data/spec/mongo/uri/srv_protocol_spec.rb +0 -1367
  386. data/spec/mongo/uri_option_parsing_spec.rb +0 -625
  387. data/spec/mongo/uri_spec.rb +0 -1443
  388. data/spec/mongo/utils_spec.rb +0 -42
  389. data/spec/mongo/write_concern/acknowledged_spec.rb +0 -58
  390. data/spec/mongo/write_concern/unacknowledged_spec.rb +0 -29
  391. data/spec/mongo/write_concern_spec.rb +0 -227
  392. data/spec/runners/auth.rb +0 -140
  393. data/spec/runners/change_streams/outcome.rb +0 -45
  394. data/spec/runners/change_streams/spec.rb +0 -60
  395. data/spec/runners/change_streams/test.rb +0 -232
  396. data/spec/runners/cmap/verifier.rb +0 -48
  397. data/spec/runners/cmap.rb +0 -516
  398. data/spec/runners/command_monitoring.rb +0 -346
  399. data/spec/runners/connection_string.rb +0 -393
  400. data/spec/runners/crud/context.rb +0 -30
  401. data/spec/runners/crud/operation.rb +0 -480
  402. data/spec/runners/crud/outcome.rb +0 -56
  403. data/spec/runners/crud/requirement.rb +0 -139
  404. data/spec/runners/crud/spec.rb +0 -76
  405. data/spec/runners/crud/test.rb +0 -115
  406. data/spec/runners/crud/test_base.rb +0 -53
  407. data/spec/runners/crud/verifier.rb +0 -224
  408. data/spec/runners/crud.rb +0 -257
  409. data/spec/runners/gridfs.rb +0 -641
  410. data/spec/runners/read_write_concern_document.rb +0 -70
  411. data/spec/runners/sdam/verifier.rb +0 -112
  412. data/spec/runners/sdam.rb +0 -279
  413. data/spec/runners/server_selection.rb +0 -365
  414. data/spec/runners/server_selection_rtt.rb +0 -41
  415. data/spec/runners/transactions/operation.rb +0 -332
  416. data/spec/runners/transactions/spec.rb +0 -29
  417. data/spec/runners/transactions/test.rb +0 -379
  418. data/spec/runners/transactions.rb +0 -107
  419. data/spec/runners/unified/ambiguous_operations.rb +0 -13
  420. data/spec/runners/unified/assertions.rb +0 -396
  421. data/spec/runners/unified/change_stream_operations.rb +0 -42
  422. data/spec/runners/unified/client_side_encryption_operations.rb +0 -83
  423. data/spec/runners/unified/crud_operations.rb +0 -367
  424. data/spec/runners/unified/ddl_operations.rb +0 -286
  425. data/spec/runners/unified/entity_map.rb +0 -42
  426. data/spec/runners/unified/error.rb +0 -29
  427. data/spec/runners/unified/event_subscriber.rb +0 -110
  428. data/spec/runners/unified/exceptions.rb +0 -24
  429. data/spec/runners/unified/grid_fs_operations.rb +0 -114
  430. data/spec/runners/unified/search_index_operations.rb +0 -63
  431. data/spec/runners/unified/support_operations.rb +0 -370
  432. data/spec/runners/unified/test.rb +0 -606
  433. data/spec/runners/unified/test_group.rb +0 -31
  434. data/spec/runners/unified/thread_operations.rb +0 -73
  435. data/spec/runners/unified.rb +0 -109
  436. data/spec/solo/clean_exit_spec.rb +0 -24
  437. data/spec/spec_helper.rb +0 -35
  438. data/spec/spec_tests/auth_spec.rb +0 -58
  439. data/spec/spec_tests/change_streams_unified_spec.rb +0 -14
  440. data/spec/spec_tests/client_side_encryption_spec.rb +0 -37
  441. data/spec/spec_tests/client_side_encryption_unified_spec.rb +0 -26
  442. data/spec/spec_tests/client_side_operations_timeout_spec.rb +0 -15
  443. data/spec/spec_tests/cmap_spec.rb +0 -126
  444. data/spec/spec_tests/collection_management_spec.rb +0 -13
  445. data/spec/spec_tests/command_monitoring_unified_spec.rb +0 -13
  446. data/spec/spec_tests/connection_string_spec.rb +0 -10
  447. data/spec/spec_tests/crud_spec.rb +0 -12
  448. data/spec/spec_tests/crud_unified_spec.rb +0 -13
  449. data/spec/spec_tests/data/auth/connection-string.yml +0 -366
  450. data/spec/spec_tests/data/change_streams_unified/change-streams-clusterTime.yml +0 -43
  451. data/spec/spec_tests/data/change_streams_unified/change-streams-disambiguatedPaths.yml +0 -105
  452. data/spec/spec_tests/data/change_streams_unified/change-streams-errors.yml +0 -122
  453. data/spec/spec_tests/data/change_streams_unified/change-streams-pre_and_post_images.yml +0 -351
  454. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-allowlist.yml +0 -1169
  455. data/spec/spec_tests/data/change_streams_unified/change-streams-resume-errorLabels.yml +0 -1069
  456. data/spec/spec_tests/data/change_streams_unified/change-streams-showExpandedEvents.yml +0 -307
  457. data/spec/spec_tests/data/change_streams_unified/change-streams.yml +0 -927
  458. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +0 -120
  459. data/spec/spec_tests/data/client_side_encryption/awsTemporary.yml +0 -57
  460. data/spec/spec_tests/data/client_side_encryption/azureKMS.yml +0 -46
  461. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +0 -537
  462. data/spec/spec_tests/data/client_side_encryption/badSchema.yml +0 -73
  463. data/spec/spec_tests/data/client_side_encryption/basic.yml +0 -102
  464. data/spec/spec_tests/data/client_side_encryption/bulk.yml +0 -81
  465. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +0 -100
  466. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +0 -43
  467. data/spec/spec_tests/data/client_side_encryption/count.yml +0 -54
  468. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +0 -52
  469. data/spec/spec_tests/data/client_side_encryption/create-and-createIndexes.yml +0 -58
  470. data/spec/spec_tests/data/client_side_encryption/delete.yml +0 -91
  471. data/spec/spec_tests/data/client_side_encryption/distinct.yml +0 -66
  472. data/spec/spec_tests/data/client_side_encryption/explain.yml +0 -57
  473. data/spec/spec_tests/data/client_side_encryption/find.yml +0 -105
  474. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +0 -50
  475. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +0 -50
  476. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +0 -50
  477. data/spec/spec_tests/data/client_side_encryption/fle2v2-BypassQueryAnalysis.yml +0 -90
  478. data/spec/spec_tests/data/client_side_encryption/fle2v2-Compact.yml +0 -83
  479. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection-OldServer.yml +0 -61
  480. data/spec/spec_tests/data/client_side_encryption/fle2v2-CreateCollection.yml +0 -938
  481. data/spec/spec_tests/data/client_side_encryption/fle2v2-DecryptExistingData.yml +0 -67
  482. data/spec/spec_tests/data/client_side_encryption/fle2v2-Delete.yml +0 -101
  483. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-EncryptedFieldsMap.yml +0 -80
  484. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFields-vs-jsonSchema.yml +0 -103
  485. data/spec/spec_tests/data/client_side_encryption/fle2v2-EncryptedFieldsMap-defaults.yml +0 -59
  486. data/spec/spec_tests/data/client_side_encryption/fle2v2-FindOneAndUpdate.yml +0 -201
  487. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Indexed.yml +0 -97
  488. data/spec/spec_tests/data/client_side_encryption/fle2v2-InsertFind-Unindexed.yml +0 -90
  489. data/spec/spec_tests/data/client_side_encryption/fle2v2-MissingKey.yml +0 -44
  490. data/spec/spec_tests/data/client_side_encryption/fle2v2-NoEncryption.yml +0 -45
  491. data/spec/spec_tests/data/client_side_encryption/fle2v2-Update.yml +0 -211
  492. data/spec/spec_tests/data/client_side_encryption/fle2v2-validatorAndPartialFieldExpression.yml +0 -170
  493. data/spec/spec_tests/data/client_side_encryption/gcpKMS.yml +0 -46
  494. data/spec/spec_tests/data/client_side_encryption/getMore.yml +0 -61
  495. data/spec/spec_tests/data/client_side_encryption/insert.yml +0 -88
  496. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +0 -64
  497. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +0 -47
  498. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +0 -65
  499. data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +0 -69
  500. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +0 -22
  501. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +0 -42
  502. data/spec/spec_tests/data/client_side_encryption/noSchema.yml +0 -39
  503. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +0 -57
  504. data/spec/spec_tests/data/client_side_encryption/timeoutMS.yml +0 -67
  505. data/spec/spec_tests/data/client_side_encryption/types.yml +0 -501
  506. data/spec/spec_tests/data/client_side_encryption/unified/addKeyAltName.yml +0 -194
  507. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey-kms_providers-invalid.yml +0 -67
  508. data/spec/spec_tests/data/client_side_encryption/unified/createDataKey.yml +0 -309
  509. data/spec/spec_tests/data/client_side_encryption/unified/deleteKey.yml +0 -159
  510. data/spec/spec_tests/data/client_side_encryption/unified/getKey.yml +0 -105
  511. data/spec/spec_tests/data/client_side_encryption/unified/getKeyByAltName.yml +0 -104
  512. data/spec/spec_tests/data/client_side_encryption/unified/getKeys.yml +0 -122
  513. data/spec/spec_tests/data/client_side_encryption/unified/removeKeyAltName.yml +0 -157
  514. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-decrypt_failure.yml +0 -69
  515. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey-encrypt_failure.yml +0 -122
  516. data/spec/spec_tests/data/client_side_encryption/unified/rewrapManyDataKey.yml +0 -432
  517. data/spec/spec_tests/data/client_side_encryption/unsupportedCommand.yml +0 -25
  518. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +0 -70
  519. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +0 -164
  520. data/spec/spec_tests/data/client_side_encryption/validatorAndPartialFieldExpression.yml +0 -166
  521. data/spec/spec_tests/data/client_side_operations_timeout/bulkWrite.yml +0 -87
  522. data/spec/spec_tests/data/client_side_operations_timeout/change-streams.yml +0 -358
  523. data/spec/spec_tests/data/client_side_operations_timeout/close-cursors.yml +0 -129
  524. data/spec/spec_tests/data/client_side_operations_timeout/command-execution.yml +0 -250
  525. data/spec/spec_tests/data/client_side_operations_timeout/convenient-transactions.yml +0 -113
  526. data/spec/spec_tests/data/client_side_operations_timeout/cursors.yml +0 -70
  527. data/spec/spec_tests/data/client_side_operations_timeout/deprecated-options.yml +0 -3982
  528. data/spec/spec_tests/data/client_side_operations_timeout/error-transformations.yml +0 -96
  529. data/spec/spec_tests/data/client_side_operations_timeout/global-timeoutMS.yml +0 -3236
  530. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-advanced.yml +0 -207
  531. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-delete.yml +0 -152
  532. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-download.yml +0 -182
  533. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-find.yml +0 -100
  534. data/spec/spec_tests/data/client_side_operations_timeout/gridfs-upload.yml +0 -249
  535. data/spec/spec_tests/data/client_side_operations_timeout/legacy-timeouts.yml +0 -204
  536. data/spec/spec_tests/data/client_side_operations_timeout/non-tailable-cursors.yml +0 -307
  537. data/spec/spec_tests/data/client_side_operations_timeout/override-collection-timeoutMS.yml +0 -1877
  538. data/spec/spec_tests/data/client_side_operations_timeout/override-operation-timeoutMS.yml +0 -1918
  539. data/spec/spec_tests/data/client_side_operations_timeout/retryability-legacy-timeouts.yml +0 -1676
  540. data/spec/spec_tests/data/client_side_operations_timeout/retryability-timeoutMS.yml +0 -2824
  541. data/spec/spec_tests/data/client_side_operations_timeout/sessions-inherit-timeoutMS.yml +0 -168
  542. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-operation-timeoutMS.yml +0 -171
  543. data/spec/spec_tests/data/client_side_operations_timeout/sessions-override-timeoutMS.yml +0 -168
  544. data/spec/spec_tests/data/client_side_operations_timeout/tailable-awaitData.yml +0 -247
  545. data/spec/spec_tests/data/client_side_operations_timeout/tailable-non-awaitData.yml +0 -181
  546. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +0 -29
  547. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +0 -29
  548. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +0 -29
  549. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +0 -29
  550. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +0 -26
  551. data/spec/spec_tests/data/cmap/pool-checkin.yml +0 -24
  552. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +0 -21
  553. data/spec/spec_tests/data/cmap/pool-checkout-custom-maxConnecting-is-enforced.yml +0 -50
  554. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +0 -38
  555. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-is-enforced.yml +0 -81
  556. data/spec/spec_tests/data/cmap/pool-checkout-maxConnecting-timeout.yml +0 -71
  557. data/spec/spec_tests/data/cmap/pool-checkout-minPoolSize-connection-maxConnecting.yml +0 -64
  558. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +0 -39
  559. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +0 -41
  560. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +0 -41
  561. data/spec/spec_tests/data/cmap/pool-checkout-returned-connection-maxConnecting.yml +0 -88
  562. data/spec/spec_tests/data/cmap/pool-clear-interrupting-pending-connections.yml +0 -43
  563. data/spec/spec_tests/data/cmap/pool-clear-min-size.yml +0 -41
  564. data/spec/spec_tests/data/cmap/pool-clear-paused.yml +0 -18
  565. data/spec/spec_tests/data/cmap/pool-clear-ready.yml +0 -39
  566. data/spec/spec_tests/data/cmap/pool-clear-schedule-run-interruptInUseConnections-false.yml +0 -48
  567. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +0 -30
  568. data/spec/spec_tests/data/cmap/pool-close.yml +0 -11
  569. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +0 -73
  570. data/spec/spec_tests/data/cmap/pool-create-min-size-error.yml +0 -43
  571. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +0 -43
  572. data/spec/spec_tests/data/cmap/pool-create-with-options.yml +0 -21
  573. data/spec/spec_tests/data/cmap/pool-create.yml +0 -12
  574. data/spec/spec_tests/data/cmap/pool-ready-ready.yml +0 -22
  575. data/spec/spec_tests/data/cmap/pool-ready.yml +0 -30
  576. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +0 -126
  577. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +0 -51
  578. data/spec/spec_tests/data/collection_management/clustered-indexes.yml +0 -135
  579. data/spec/spec_tests/data/collection_management/createCollection-pre_and_post_images.yml +0 -50
  580. data/spec/spec_tests/data/collection_management/modifyCollection-errorResponse.yml +0 -59
  581. data/spec/spec_tests/data/collection_management/modifyCollection-pre_and_post_images.yml +0 -58
  582. data/spec/spec_tests/data/collection_management/timeseries-collection.yml +0 -164
  583. data/spec/spec_tests/data/command_monitoring_unified/bulkWrite.yml +0 -68
  584. data/spec/spec_tests/data/command_monitoring_unified/command.yml +0 -50
  585. data/spec/spec_tests/data/command_monitoring_unified/deleteMany.yml +0 -79
  586. data/spec/spec_tests/data/command_monitoring_unified/deleteOne.yml +0 -79
  587. data/spec/spec_tests/data/command_monitoring_unified/find.yml +0 -254
  588. data/spec/spec_tests/data/command_monitoring_unified/insertMany.yml +0 -79
  589. data/spec/spec_tests/data/command_monitoring_unified/insertOne.yml +0 -77
  590. data/spec/spec_tests/data/command_monitoring_unified/pre-42-server-connection-id.yml +0 -56
  591. data/spec/spec_tests/data/command_monitoring_unified/redacted-commands.yml +0 -348
  592. data/spec/spec_tests/data/command_monitoring_unified/server-connection-id.yml +0 -56
  593. data/spec/spec_tests/data/command_monitoring_unified/unacknowledgedBulkWrite.yml +0 -55
  594. data/spec/spec_tests/data/command_monitoring_unified/updateMany.yml +0 -87
  595. data/spec/spec_tests/data/command_monitoring_unified/updateOne.yml +0 -118
  596. data/spec/spec_tests/data/command_monitoring_unified/writeConcernError.yml +0 -80
  597. data/spec/spec_tests/data/connection_string/invalid-uris.yml +0 -251
  598. data/spec/spec_tests/data/connection_string/valid-auth.yml +0 -257
  599. data/spec/spec_tests/data/connection_string/valid-db-with-dotted-name.yml +0 -77
  600. data/spec/spec_tests/data/connection_string/valid-host_identifiers.yml +0 -121
  601. data/spec/spec_tests/data/connection_string/valid-options.yml +0 -30
  602. data/spec/spec_tests/data/connection_string/valid-unix_socket-absolute.yml +0 -197
  603. data/spec/spec_tests/data/connection_string/valid-unix_socket-relative.yml +0 -213
  604. data/spec/spec_tests/data/connection_string/valid-warnings.yml +0 -75
  605. data/spec/spec_tests/data/crud/read/aggregate-collation.yml +0 -18
  606. data/spec/spec_tests/data/crud/read/aggregate-out.yml +0 -44
  607. data/spec/spec_tests/data/crud/read/aggregate.yml +0 -21
  608. data/spec/spec_tests/data/crud/read/count-collation.yml +0 -26
  609. data/spec/spec_tests/data/crud/read/count-empty.yml +0 -29
  610. data/spec/spec_tests/data/crud/read/count.yml +0 -74
  611. data/spec/spec_tests/data/crud/read/distinct-collation.yml +0 -18
  612. data/spec/spec_tests/data/crud/read/distinct.yml +0 -32
  613. data/spec/spec_tests/data/crud/read/find-collation.yml +0 -16
  614. data/spec/spec_tests/data/crud/read/find.yml +0 -49
  615. data/spec/spec_tests/data/crud/write/bulkWrite-arrayFilters.yml +0 -45
  616. data/spec/spec_tests/data/crud/write/bulkWrite-collation.yml +0 -102
  617. data/spec/spec_tests/data/crud/write/bulkWrite.yml +0 -405
  618. data/spec/spec_tests/data/crud/write/deleteMany-collation.yml +0 -23
  619. data/spec/spec_tests/data/crud/write/deleteMany.yml +0 -35
  620. data/spec/spec_tests/data/crud/write/deleteOne-collation.yml +0 -23
  621. data/spec/spec_tests/data/crud/write/deleteOne.yml +0 -48
  622. data/spec/spec_tests/data/crud/write/findOneAndDelete-collation.yml +0 -24
  623. data/spec/spec_tests/data/crud/write/findOneAndDelete.yml +0 -53
  624. data/spec/spec_tests/data/crud/write/findOneAndReplace-collation.yml +0 -25
  625. data/spec/spec_tests/data/crud/write/findOneAndReplace-upsert.yml +0 -91
  626. data/spec/spec_tests/data/crud/write/findOneAndReplace-upsert_pre_2.6.yml +0 -88
  627. data/spec/spec_tests/data/crud/write/findOneAndReplace.yml +0 -113
  628. data/spec/spec_tests/data/crud/write/findOneAndUpdate-arrayFilters.yml +0 -69
  629. data/spec/spec_tests/data/crud/write/findOneAndUpdate-collation.yml +0 -28
  630. data/spec/spec_tests/data/crud/write/findOneAndUpdate.yml +0 -163
  631. data/spec/spec_tests/data/crud/write/insertMany.yml +0 -81
  632. data/spec/spec_tests/data/crud/write/insertOne.yml +0 -18
  633. data/spec/spec_tests/data/crud/write/replaceOne-collation.yml +0 -25
  634. data/spec/spec_tests/data/crud/write/replaceOne-pre_2.6.yml +0 -98
  635. data/spec/spec_tests/data/crud/write/replaceOne-upsert.yml +0 -48
  636. data/spec/spec_tests/data/crud/write/replaceOne.yml +0 -102
  637. data/spec/spec_tests/data/crud/write/updateMany-arrayFilters.yml +0 -66
  638. data/spec/spec_tests/data/crud/write/updateMany-collation.yml +0 -29
  639. data/spec/spec_tests/data/crud/write/updateMany-pre_2.6.yml +0 -86
  640. data/spec/spec_tests/data/crud/write/updateMany.yml +0 -87
  641. data/spec/spec_tests/data/crud/write/updateOne-arrayFilters.yml +0 -114
  642. data/spec/spec_tests/data/crud/write/updateOne-collation.yml +0 -26
  643. data/spec/spec_tests/data/crud/write/updateOne-pre_2.6.yml +0 -83
  644. data/spec/spec_tests/data/crud/write/updateOne.yml +0 -84
  645. data/spec/spec_tests/data/crud_unified/aggregate-allowdiskuse.yml +0 -75
  646. data/spec/spec_tests/data/crud_unified/aggregate-let.yml +0 -138
  647. data/spec/spec_tests/data/crud_unified/aggregate-merge-errorResponse.yml +0 -42
  648. data/spec/spec_tests/data/crud_unified/aggregate-merge.yml +0 -185
  649. data/spec/spec_tests/data/crud_unified/aggregate-out-readConcern.yml +0 -171
  650. data/spec/spec_tests/data/crud_unified/aggregate-write-readPreference.yml +0 -161
  651. data/spec/spec_tests/data/crud_unified/aggregate.yml +0 -215
  652. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters-clientError.yml +0 -98
  653. data/spec/spec_tests/data/crud_unified/bulkWrite-arrayFilters.yml +0 -174
  654. data/spec/spec_tests/data/crud_unified/bulkWrite-comment.yml +0 -189
  655. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-clientError.yml +0 -113
  656. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint-serverError.yml +0 -142
  657. data/spec/spec_tests/data/crud_unified/bulkWrite-delete-hint.yml +0 -154
  658. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-hint-unacknowledged.yml +0 -98
  659. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteMany-let.yml +0 -86
  660. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-hint-unacknowledged.yml +0 -97
  661. data/spec/spec_tests/data/crud_unified/bulkWrite-deleteOne-let.yml +0 -86
  662. data/spec/spec_tests/data/crud_unified/bulkWrite-errorResponse.yml +0 -50
  663. data/spec/spec_tests/data/crud_unified/bulkWrite-insertOne-dots_and_dollars.yml +0 -138
  664. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-dots_and_dollars.yml +0 -165
  665. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-hint-unacknowledged.yml +0 -103
  666. data/spec/spec_tests/data/crud_unified/bulkWrite-replaceOne-let.yml +0 -93
  667. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-clientError.yml +0 -148
  668. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint-serverError.yml +0 -239
  669. data/spec/spec_tests/data/crud_unified/bulkWrite-update-hint.yml +0 -256
  670. data/spec/spec_tests/data/crud_unified/bulkWrite-update-validation.yml +0 -73
  671. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-dots_and_dollars.yml +0 -150
  672. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-hint-unacknowledged.yml +0 -104
  673. data/spec/spec_tests/data/crud_unified/bulkWrite-updateMany-let.yml +0 -96
  674. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-dots_and_dollars.yml +0 -150
  675. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-hint-unacknowledged.yml +0 -103
  676. data/spec/spec_tests/data/crud_unified/bulkWrite-updateOne-let.yml +0 -95
  677. data/spec/spec_tests/data/crud_unified/countDocuments-comment.yml +0 -92
  678. data/spec/spec_tests/data/crud_unified/db-aggregate-write-readPreference.yml +0 -157
  679. data/spec/spec_tests/data/crud_unified/db-aggregate.yml +0 -73
  680. data/spec/spec_tests/data/crud_unified/deleteMany-comment.yml +0 -97
  681. data/spec/spec_tests/data/crud_unified/deleteMany-hint-clientError.yml +0 -87
  682. data/spec/spec_tests/data/crud_unified/deleteMany-hint-serverError.yml +0 -107
  683. data/spec/spec_tests/data/crud_unified/deleteMany-hint-unacknowledged.yml +0 -90
  684. data/spec/spec_tests/data/crud_unified/deleteMany-hint.yml +0 -99
  685. data/spec/spec_tests/data/crud_unified/deleteMany-let.yml +0 -93
  686. data/spec/spec_tests/data/crud_unified/deleteOne-comment.yml +0 -98
  687. data/spec/spec_tests/data/crud_unified/deleteOne-errorResponse.yml +0 -46
  688. data/spec/spec_tests/data/crud_unified/deleteOne-hint-clientError.yml +0 -80
  689. data/spec/spec_tests/data/crud_unified/deleteOne-hint-serverError.yml +0 -100
  690. data/spec/spec_tests/data/crud_unified/deleteOne-hint-unacknowledged.yml +0 -89
  691. data/spec/spec_tests/data/crud_unified/deleteOne-hint.yml +0 -95
  692. data/spec/spec_tests/data/crud_unified/deleteOne-let.yml +0 -91
  693. data/spec/spec_tests/data/crud_unified/distinct-comment.yml +0 -98
  694. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount-comment.yml +0 -95
  695. data/spec/spec_tests/data/crud_unified/estimatedDocumentCount.yml +0 -181
  696. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-clientError.yml +0 -55
  697. data/spec/spec_tests/data/crud_unified/find-allowdiskuse-serverError.yml +0 -68
  698. data/spec/spec_tests/data/crud_unified/find-allowdiskuse.yml +0 -79
  699. data/spec/spec_tests/data/crud_unified/find-comment.yml +0 -166
  700. data/spec/spec_tests/data/crud_unified/find-let.yml +0 -71
  701. data/spec/spec_tests/data/crud_unified/find-test-all-options.yml +0 -377
  702. data/spec/spec_tests/data/crud_unified/find.yml +0 -68
  703. data/spec/spec_tests/data/crud_unified/findOneAndDelete-comment.yml +0 -96
  704. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-clientError.yml +0 -91
  705. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-serverError.yml +0 -107
  706. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint-unacknowledged.yml +0 -88
  707. data/spec/spec_tests/data/crud_unified/findOneAndDelete-hint.yml +0 -102
  708. data/spec/spec_tests/data/crud_unified/findOneAndDelete-let.yml +0 -86
  709. data/spec/spec_tests/data/crud_unified/findOneAndReplace-comment.yml +0 -101
  710. data/spec/spec_tests/data/crud_unified/findOneAndReplace-dots_and_dollars.yml +0 -140
  711. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-clientError.yml +0 -83
  712. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-serverError.yml +0 -99
  713. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint-unacknowledged.yml +0 -96
  714. data/spec/spec_tests/data/crud_unified/findOneAndReplace-hint.yml +0 -98
  715. data/spec/spec_tests/data/crud_unified/findOneAndReplace-let.yml +0 -94
  716. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-comment.yml +0 -95
  717. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-dots_and_dollars.yml +0 -127
  718. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-errorResponse.yml +0 -69
  719. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-clientError.yml +0 -84
  720. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-serverError.yml +0 -100
  721. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint-unacknowledged.yml +0 -92
  722. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-hint.yml +0 -99
  723. data/spec/spec_tests/data/crud_unified/findOneAndUpdate-let.yml +0 -96
  724. data/spec/spec_tests/data/crud_unified/insertMany-comment.yml +0 -93
  725. data/spec/spec_tests/data/crud_unified/insertMany-dots_and_dollars.yml +0 -128
  726. data/spec/spec_tests/data/crud_unified/insertOne-comment.yml +0 -91
  727. data/spec/spec_tests/data/crud_unified/insertOne-dots_and_dollars.yml +0 -238
  728. data/spec/spec_tests/data/crud_unified/insertOne-errorResponse.yml +0 -46
  729. data/spec/spec_tests/data/crud_unified/replaceOne-comment.yml +0 -105
  730. data/spec/spec_tests/data/crud_unified/replaceOne-dots_and_dollars.yml +0 -180
  731. data/spec/spec_tests/data/crud_unified/replaceOne-hint-unacknowledged.yml +0 -95
  732. data/spec/spec_tests/data/crud_unified/replaceOne-hint.yml +0 -108
  733. data/spec/spec_tests/data/crud_unified/replaceOne-let.yml +0 -98
  734. data/spec/spec_tests/data/crud_unified/replaceOne-validation.yml +0 -37
  735. data/spec/spec_tests/data/crud_unified/updateMany-comment.yml +0 -104
  736. data/spec/spec_tests/data/crud_unified/updateMany-dots_and_dollars.yml +0 -138
  737. data/spec/spec_tests/data/crud_unified/updateMany-hint-clientError.yml +0 -91
  738. data/spec/spec_tests/data/crud_unified/updateMany-hint-serverError.yml +0 -115
  739. data/spec/spec_tests/data/crud_unified/updateMany-hint-unacknowledged.yml +0 -96
  740. data/spec/spec_tests/data/crud_unified/updateMany-hint.yml +0 -115
  741. data/spec/spec_tests/data/crud_unified/updateMany-let.yml +0 -107
  742. data/spec/spec_tests/data/crud_unified/updateMany-validation.yml +0 -39
  743. data/spec/spec_tests/data/crud_unified/updateOne-comment.yml +0 -104
  744. data/spec/spec_tests/data/crud_unified/updateOne-dots_and_dollars.yml +0 -138
  745. data/spec/spec_tests/data/crud_unified/updateOne-errorResponse.yml +0 -47
  746. data/spec/spec_tests/data/crud_unified/updateOne-hint-clientError.yml +0 -85
  747. data/spec/spec_tests/data/crud_unified/updateOne-hint-serverError.yml +0 -109
  748. data/spec/spec_tests/data/crud_unified/updateOne-hint-unacknowledged.yml +0 -95
  749. data/spec/spec_tests/data/crud_unified/updateOne-hint.yml +0 -109
  750. data/spec/spec_tests/data/crud_unified/updateOne-let.yml +0 -102
  751. data/spec/spec_tests/data/crud_unified/updateOne-validation.yml +0 -37
  752. data/spec/spec_tests/data/crud_unified/updateWithPipelines.yml +0 -299
  753. data/spec/spec_tests/data/gridfs/delete.yml +0 -123
  754. data/spec/spec_tests/data/gridfs/download.yml +0 -192
  755. data/spec/spec_tests/data/gridfs/download_by_name.yml +0 -113
  756. data/spec/spec_tests/data/gridfs/upload.yml +0 -158
  757. data/spec/spec_tests/data/gridfs_unified/delete.yml +0 -198
  758. data/spec/spec_tests/data/gridfs_unified/download.yml +0 -241
  759. data/spec/spec_tests/data/gridfs_unified/downloadByName.yml +0 -159
  760. data/spec/spec_tests/data/gridfs_unified/upload-disableMD5.yml +0 -92
  761. data/spec/spec_tests/data/gridfs_unified/upload.yml +0 -288
  762. data/spec/spec_tests/data/index_management/createSearchIndex.yml +0 -64
  763. data/spec/spec_tests/data/index_management/createSearchIndexes.yml +0 -86
  764. data/spec/spec_tests/data/index_management/dropSearchIndex.yml +0 -43
  765. data/spec/spec_tests/data/index_management/listSearchIndexes.yml +0 -91
  766. data/spec/spec_tests/data/index_management/updateSearchIndex.yml +0 -46
  767. data/spec/spec_tests/data/load_balancers/event-monitoring.yml +0 -99
  768. data/spec/spec_tests/data/load_balancers/lb-connection-establishment.yml +0 -36
  769. data/spec/spec_tests/data/load_balancers/non-lb-connection-establishment.yml +0 -56
  770. data/spec/spec_tests/data/load_balancers/server-selection.yml +0 -50
  771. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/DefaultNoMaxStaleness.yml +0 -26
  772. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Incompatible.yml +0 -25
  773. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/LastUpdateTime.yml +0 -33
  774. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml +0 -15
  775. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest.yml +0 -33
  776. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Nearest2.yml +0 -33
  777. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +0 -16
  778. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred.yml +0 -27
  779. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/PrimaryPreferred_tags.yml +0 -36
  780. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/Secondary.yml +0 -51
  781. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred.yml +0 -26
  782. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/SecondaryPreferred_tags.yml +0 -51
  783. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/ZeroMaxStaleness.yml +0 -23
  784. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/DefaultNoMaxStaleness.yml +0 -26
  785. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Incompatible.yml +0 -25
  786. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LastUpdateTime.yml +0 -35
  787. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat.yml +0 -29
  788. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/LongHeartbeat2.yml +0 -25
  789. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessTooSmall.yml +0 -26
  790. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/MaxStalenessWithModePrimary.yml +0 -23
  791. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest.yml +0 -33
  792. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest2.yml +0 -33
  793. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Nearest_tags.yml +0 -36
  794. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred.yml +0 -27
  795. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/PrimaryPreferred_incompatible.yml +0 -27
  796. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred.yml +0 -26
  797. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags.yml +0 -59
  798. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/SecondaryPreferred_tags2.yml +0 -43
  799. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags.yml +0 -59
  800. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/Secondary_tags2.yml +0 -43
  801. data/spec/spec_tests/data/max_staleness/ReplicaSetWithPrimary/ZeroMaxStaleness.yml +0 -23
  802. data/spec/spec_tests/data/max_staleness/Sharded/Incompatible.yml +0 -25
  803. data/spec/spec_tests/data/max_staleness/Sharded/SmallMaxStaleness.yml +0 -28
  804. data/spec/spec_tests/data/max_staleness/Single/Incompatible.yml +0 -18
  805. data/spec/spec_tests/data/max_staleness/Single/SmallMaxStaleness.yml +0 -20
  806. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +0 -15
  807. data/spec/spec_tests/data/read_write_concern/connection-string/read-concern.yml +0 -32
  808. data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +0 -79
  809. data/spec/spec_tests/data/read_write_concern/document/read-concern.yml +0 -37
  810. data/spec/spec_tests/data/read_write_concern/document/write-concern.yml +0 -100
  811. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-2.6.yml +0 -215
  812. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.2.yml +0 -58
  813. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.4.yml +0 -95
  814. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-4.2.yml +0 -36
  815. data/spec/spec_tests/data/retryable_reads/legacy/aggregate-merge.yml +0 -39
  816. data/spec/spec_tests/data/retryable_reads/legacy/aggregate-serverErrors.yml +0 -157
  817. data/spec/spec_tests/data/retryable_reads/legacy/aggregate.yml +0 -87
  818. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-client.watch-serverErrors.yml +0 -150
  819. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-client.watch.yml +0 -62
  820. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.coll.watch-serverErrors.yml +0 -150
  821. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.coll.watch.yml +0 -66
  822. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.watch-serverErrors.yml +0 -154
  823. data/spec/spec_tests/data/retryable_reads/legacy/changeStreams-db.watch.yml +0 -62
  824. data/spec/spec_tests/data/retryable_reads/legacy/count-serverErrors.yml +0 -150
  825. data/spec/spec_tests/data/retryable_reads/legacy/count.yml +0 -64
  826. data/spec/spec_tests/data/retryable_reads/legacy/countDocuments-serverErrors.yml +0 -150
  827. data/spec/spec_tests/data/retryable_reads/legacy/countDocuments.yml +0 -64
  828. data/spec/spec_tests/data/retryable_reads/legacy/distinct-serverErrors.yml +0 -156
  829. data/spec/spec_tests/data/retryable_reads/legacy/distinct.yml +0 -71
  830. data/spec/spec_tests/data/retryable_reads/legacy/estimatedDocumentCount-serverErrors.yml +0 -148
  831. data/spec/spec_tests/data/retryable_reads/legacy/estimatedDocumentCount.yml +0 -62
  832. data/spec/spec_tests/data/retryable_reads/legacy/find-serverErrors.yml +0 -160
  833. data/spec/spec_tests/data/retryable_reads/legacy/find.yml +0 -86
  834. data/spec/spec_tests/data/retryable_reads/legacy/findOne-serverErrors.yml +0 -154
  835. data/spec/spec_tests/data/retryable_reads/legacy/findOne.yml +0 -68
  836. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-download-serverErrors.yml +0 -173
  837. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-download.yml +0 -79
  838. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-downloadByName-serverErrors.yml +0 -174
  839. data/spec/spec_tests/data/retryable_reads/legacy/gridfs-downloadByName.yml +0 -79
  840. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionNames-serverErrors.yml +0 -143
  841. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionNames.yml +0 -59
  842. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionObjects-serverErrors.yml +0 -144
  843. data/spec/spec_tests/data/retryable_reads/legacy/listCollectionObjects.yml +0 -59
  844. data/spec/spec_tests/data/retryable_reads/legacy/listCollections-serverErrors.yml +0 -143
  845. data/spec/spec_tests/data/retryable_reads/legacy/listCollections.yml +0 -59
  846. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseNames-serverErrors.yml +0 -143
  847. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseNames.yml +0 -59
  848. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseObjects-serverErrors.yml +0 -144
  849. data/spec/spec_tests/data/retryable_reads/legacy/listDatabaseObjects.yml +0 -59
  850. data/spec/spec_tests/data/retryable_reads/legacy/listDatabases-serverErrors.yml +0 -144
  851. data/spec/spec_tests/data/retryable_reads/legacy/listDatabases.yml +0 -59
  852. data/spec/spec_tests/data/retryable_reads/legacy/listIndexNames-serverErrors.yml +0 -144
  853. data/spec/spec_tests/data/retryable_reads/legacy/listIndexNames.yml +0 -60
  854. data/spec/spec_tests/data/retryable_reads/legacy/listIndexes-serverErrors.yml +0 -145
  855. data/spec/spec_tests/data/retryable_reads/legacy/listIndexes.yml +0 -60
  856. data/spec/spec_tests/data/retryable_reads/legacy/mapReduce.yml +0 -62
  857. data/spec/spec_tests/data/retryable_reads/unified/handshakeError.yml +0 -1342
  858. data/spec/spec_tests/data/retryable_writes/legacy/bulkWrite-errorLabels.yml +0 -77
  859. data/spec/spec_tests/data/retryable_writes/legacy/bulkWrite-serverErrors.yml +0 -130
  860. data/spec/spec_tests/data/retryable_writes/legacy/bulkWrite.yml +0 -402
  861. data/spec/spec_tests/data/retryable_writes/legacy/deleteMany.yml +0 -22
  862. data/spec/spec_tests/data/retryable_writes/legacy/deleteOne-errorLabels.yml +0 -48
  863. data/spec/spec_tests/data/retryable_writes/legacy/deleteOne-serverErrors.yml +0 -73
  864. data/spec/spec_tests/data/retryable_writes/legacy/deleteOne.yml +0 -57
  865. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndDelete-errorLabels.yml +0 -49
  866. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndDelete-serverErrors.yml +0 -74
  867. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndDelete.yml +0 -58
  868. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndReplace-errorLabels.yml +0 -52
  869. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndReplace-serverErrors.yml +0 -80
  870. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndReplace.yml +0 -63
  871. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndUpdate-errorLabels.yml +0 -52
  872. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndUpdate-serverErrors.yml +0 -79
  873. data/spec/spec_tests/data/retryable_writes/legacy/findOneAndUpdate.yml +0 -62
  874. data/spec/spec_tests/data/retryable_writes/legacy/insertMany-errorLabels.yml +0 -54
  875. data/spec/spec_tests/data/retryable_writes/legacy/insertMany-serverErrors.yml +0 -84
  876. data/spec/spec_tests/data/retryable_writes/legacy/insertMany.yml +0 -74
  877. data/spec/spec_tests/data/retryable_writes/legacy/insertOne-errorLabels.yml +0 -44
  878. data/spec/spec_tests/data/retryable_writes/legacy/insertOne-serverErrors.yml +0 -527
  879. data/spec/spec_tests/data/retryable_writes/legacy/insertOne.yml +0 -61
  880. data/spec/spec_tests/data/retryable_writes/legacy/replaceOne-errorLabels.yml +0 -53
  881. data/spec/spec_tests/data/retryable_writes/legacy/replaceOne-serverErrors.yml +0 -82
  882. data/spec/spec_tests/data/retryable_writes/legacy/replaceOne.yml +0 -66
  883. data/spec/spec_tests/data/retryable_writes/legacy/updateMany.yml +0 -27
  884. data/spec/spec_tests/data/retryable_writes/legacy/updateOne-errorLabels.yml +0 -53
  885. data/spec/spec_tests/data/retryable_writes/legacy/updateOne-serverErrors.yml +0 -82
  886. data/spec/spec_tests/data/retryable_writes/legacy/updateOne.yml +0 -129
  887. data/spec/spec_tests/data/retryable_writes/unified/bulkWrite-serverErrors.yml +0 -93
  888. data/spec/spec_tests/data/retryable_writes/unified/handshakeError.yml +0 -785
  889. data/spec/spec_tests/data/retryable_writes/unified/insertOne-noWritesPerformedError.yml +0 -54
  890. data/spec/spec_tests/data/retryable_writes/unified/insertOne-serverErrors.yml +0 -75
  891. data/spec/spec_tests/data/run_command_unified/runCommand.yml +0 -319
  892. data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +0 -55
  893. data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +0 -47
  894. data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +0 -38
  895. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +0 -61
  896. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +0 -61
  897. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-LegacyNotPrimary.yml +0 -61
  898. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryNoSecondaryOk.yml +0 -61
  899. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotPrimaryOrSecondary.yml +0 -61
  900. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotWritablePrimary.yml +0 -61
  901. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +0 -61
  902. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +0 -61
  903. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +0 -52
  904. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +0 -52
  905. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-LegacyNotPrimary.yml +0 -52
  906. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryNoSecondaryOk.yml +0 -52
  907. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotPrimaryOrSecondary.yml +0 -52
  908. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotWritablePrimary.yml +0 -52
  909. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +0 -52
  910. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +0 -52
  911. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +0 -61
  912. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +0 -61
  913. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-LegacyNotPrimary.yml +0 -61
  914. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryNoSecondaryOk.yml +0 -61
  915. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotPrimaryOrSecondary.yml +0 -61
  916. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotWritablePrimary.yml +0 -61
  917. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +0 -61
  918. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +0 -61
  919. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +0 -47
  920. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +0 -47
  921. data/spec/spec_tests/data/sdam/errors/post-42-LegacyNotPrimary.yml +0 -47
  922. data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryNoSecondaryOk.yml +0 -47
  923. data/spec/spec_tests/data/sdam/errors/post-42-NotPrimaryOrSecondary.yml +0 -47
  924. data/spec/spec_tests/data/sdam/errors/post-42-NotWritablePrimary.yml +0 -47
  925. data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +0 -47
  926. data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +0 -47
  927. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +0 -47
  928. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +0 -47
  929. data/spec/spec_tests/data/sdam/errors/pre-42-LegacyNotPrimary.yml +0 -47
  930. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryNoSecondaryOk.yml +0 -47
  931. data/spec/spec_tests/data/sdam/errors/pre-42-NotPrimaryOrSecondary.yml +0 -47
  932. data/spec/spec_tests/data/sdam/errors/pre-42-NotWritablePrimary.yml +0 -47
  933. data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +0 -47
  934. data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +0 -47
  935. data/spec/spec_tests/data/sdam/errors/prefer-error-code.yml +0 -54
  936. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +0 -91
  937. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +0 -91
  938. data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryNoSecondaryOk.yml +0 -91
  939. data/spec/spec_tests/data/sdam/errors/stale-generation-NotPrimaryOrSecondary.yml +0 -91
  940. data/spec/spec_tests/data/sdam/errors/stale-generation-NotWritablePrimary.yml +0 -91
  941. data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +0 -91
  942. data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +0 -91
  943. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +0 -91
  944. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +0 -91
  945. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-LegacyNotPrimary.yml +0 -91
  946. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +0 -91
  947. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotPrimaryOrSecondary.yml +0 -91
  948. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotWritablePrimary.yml +0 -91
  949. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +0 -91
  950. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +0 -91
  951. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +0 -82
  952. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +0 -82
  953. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +0 -91
  954. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +0 -91
  955. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-LegacyNotPrimary.yml +0 -91
  956. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryNoSecondaryOk.yml +0 -91
  957. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotPrimaryOrSecondary.yml +0 -91
  958. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotWritablePrimary.yml +0 -91
  959. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +0 -91
  960. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +0 -91
  961. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +0 -82
  962. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +0 -82
  963. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +0 -65
  964. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +0 -65
  965. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-LegacyNotPrimary.yml +0 -65
  966. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryNoSecondaryOk.yml +0 -65
  967. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotPrimaryOrSecondary.yml +0 -65
  968. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotWritablePrimary.yml +0 -65
  969. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +0 -65
  970. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +0 -65
  971. data/spec/spec_tests/data/sdam/errors/write_errors_ignored.yml +0 -42
  972. data/spec/spec_tests/data/sdam/load-balanced/discover_load_balancer.yml +0 -25
  973. data/spec/spec_tests/data/sdam/rs/compatible.yml +0 -45
  974. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +0 -34
  975. data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +0 -44
  976. data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +0 -44
  977. data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +0 -36
  978. data/spec/spec_tests/data/sdam/rs/discover_ghost_replicaset.yml +0 -42
  979. data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +0 -51
  980. data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +0 -51
  981. data/spec/spec_tests/data/sdam/rs/discover_passives.yml +0 -83
  982. data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +0 -83
  983. data/spec/spec_tests/data/sdam/rs/discover_primary.yml +0 -43
  984. data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +0 -43
  985. data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +0 -50
  986. data/spec/spec_tests/data/sdam/rs/discover_rsother_replicaset.yml +0 -68
  987. data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +0 -44
  988. data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +0 -44
  989. data/spec/spec_tests/data/sdam/rs/discovery.yml +0 -207
  990. data/spec/spec_tests/data/sdam/rs/electionId_precedence_setVersion.yml +0 -62
  991. data/spec/spec_tests/data/sdam/rs/equal_electionids.yml +0 -57
  992. data/spec/spec_tests/data/sdam/rs/hosts_differ_from_seeds.yml +0 -37
  993. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +0 -36
  994. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +0 -34
  995. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +0 -36
  996. data/spec/spec_tests/data/sdam/rs/ls_timeout.yml +0 -249
  997. data/spec/spec_tests/data/sdam/rs/member_reconfig.yml +0 -74
  998. data/spec/spec_tests/data/sdam/rs/member_standalone.yml +0 -66
  999. data/spec/spec_tests/data/sdam/rs/new_primary.yml +0 -80
  1000. data/spec/spec_tests/data/sdam/rs/new_primary_new_electionid.yml +0 -119
  1001. data/spec/spec_tests/data/sdam/rs/new_primary_new_setversion.yml +0 -119
  1002. data/spec/spec_tests/data/sdam/rs/new_primary_wrong_set_name.yml +0 -77
  1003. data/spec/spec_tests/data/sdam/rs/non_rs_member.yml +0 -33
  1004. data/spec/spec_tests/data/sdam/rs/normalize_case.yml +0 -52
  1005. data/spec/spec_tests/data/sdam/rs/normalize_case_me.yml +0 -102
  1006. data/spec/spec_tests/data/sdam/rs/null_election_id-pre-6.0.yml +0 -175
  1007. data/spec/spec_tests/data/sdam/rs/null_election_id.yml +0 -177
  1008. data/spec/spec_tests/data/sdam/rs/primary_becomes_ghost.yml +0 -65
  1009. data/spec/spec_tests/data/sdam/rs/primary_becomes_mongos.yml +0 -58
  1010. data/spec/spec_tests/data/sdam/rs/primary_becomes_standalone.yml +0 -55
  1011. data/spec/spec_tests/data/sdam/rs/primary_changes_set_name.yml +0 -63
  1012. data/spec/spec_tests/data/sdam/rs/primary_disconnect.yml +0 -59
  1013. data/spec/spec_tests/data/sdam/rs/primary_disconnect_electionid.yml +0 -189
  1014. data/spec/spec_tests/data/sdam/rs/primary_disconnect_setversion.yml +0 -189
  1015. data/spec/spec_tests/data/sdam/rs/primary_hint_from_secondary_with_mismatched_me.yml +0 -64
  1016. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +0 -27
  1017. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +0 -75
  1018. data/spec/spec_tests/data/sdam/rs/primary_reports_new_member.yml +0 -175
  1019. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +0 -81
  1020. data/spec/spec_tests/data/sdam/rs/primary_wrong_set_name.yml +0 -30
  1021. data/spec/spec_tests/data/sdam/rs/repeated.yml +0 -105
  1022. data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +0 -21
  1023. data/spec/spec_tests/data/sdam/rs/response_from_removed.yml +0 -69
  1024. data/spec/spec_tests/data/sdam/rs/ruby_primary_address_change.yml +0 -31
  1025. data/spec/spec_tests/data/sdam/rs/ruby_secondary_wrong_set_name_with_primary_second.yml +0 -73
  1026. data/spec/spec_tests/data/sdam/rs/sec_not_auth.yml +0 -55
  1027. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0-pre-6.0.yml +0 -87
  1028. data/spec/spec_tests/data/sdam/rs/secondary_ignore_ok_0.yml +0 -87
  1029. data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +0 -28
  1030. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name.yml +0 -31
  1031. data/spec/spec_tests/data/sdam/rs/secondary_wrong_set_name_with_primary.yml +0 -75
  1032. data/spec/spec_tests/data/sdam/rs/set_version_can_rollback.yml +0 -101
  1033. data/spec/spec_tests/data/sdam/rs/setversion_equal_max_without_electionid.yml +0 -78
  1034. data/spec/spec_tests/data/sdam/rs/setversion_greaterthan_max_without_electionid.yml +0 -79
  1035. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid-pre-6.0.yml +0 -79
  1036. data/spec/spec_tests/data/sdam/rs/setversion_without_electionid.yml +0 -78
  1037. data/spec/spec_tests/data/sdam/rs/stepdown_change_set_name.yml +0 -65
  1038. data/spec/spec_tests/data/sdam/rs/too_new.yml +0 -45
  1039. data/spec/spec_tests/data/sdam/rs/too_old.yml +0 -41
  1040. data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +0 -68
  1041. data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +0 -194
  1042. data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +0 -64
  1043. data/spec/spec_tests/data/sdam/rs/unexpected_mongos.yml +0 -29
  1044. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid-pre-6.0.yml +0 -117
  1045. data/spec/spec_tests/data/sdam/rs/use_setversion_without_electionid.yml +0 -119
  1046. data/spec/spec_tests/data/sdam/rs/wrong_set_name.yml +0 -38
  1047. data/spec/spec_tests/data/sdam/sharded/compatible.yml +0 -40
  1048. data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +0 -24
  1049. data/spec/spec_tests/data/sdam/sharded/ls_timeout_mongos.yml +0 -101
  1050. data/spec/spec_tests/data/sdam/sharded/mongos_disconnect.yml +0 -113
  1051. data/spec/spec_tests/data/sdam/sharded/multiple_mongoses.yml +0 -52
  1052. data/spec/spec_tests/data/sdam/sharded/non_mongos_removed.yml +0 -47
  1053. data/spec/spec_tests/data/sdam/sharded/normalize_uri_case.yml +0 -32
  1054. data/spec/spec_tests/data/sdam/sharded/ruby_primary_different_address.yml +0 -21
  1055. data/spec/spec_tests/data/sdam/sharded/ruby_primary_mismatched_me.yml +0 -22
  1056. data/spec/spec_tests/data/sdam/sharded/too_new.yml +0 -38
  1057. data/spec/spec_tests/data/sdam/sharded/too_old.yml +0 -38
  1058. data/spec/spec_tests/data/sdam/single/compatible.yml +0 -27
  1059. data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +0 -37
  1060. data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +0 -36
  1061. data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +0 -23
  1062. data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +0 -38
  1063. data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +0 -37
  1064. data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +0 -38
  1065. data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +0 -35
  1066. data/spec/spec_tests/data/sdam/single/direct_connection_unavailable_seed.yml +0 -28
  1067. data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +0 -40
  1068. data/spec/spec_tests/data/sdam/single/discover_standalone.yml +0 -35
  1069. data/spec/spec_tests/data/sdam/single/discover_unavailable_seed.yml +0 -28
  1070. data/spec/spec_tests/data/sdam/single/ls_timeout_standalone.yml +0 -36
  1071. data/spec/spec_tests/data/sdam/single/not_ok_response.yml +0 -44
  1072. data/spec/spec_tests/data/sdam/single/ruby_primary_different_address.yml +0 -24
  1073. data/spec/spec_tests/data/sdam/single/ruby_primary_mismatched_me.yml +0 -25
  1074. data/spec/spec_tests/data/sdam/single/standalone_removed.yml +0 -35
  1075. data/spec/spec_tests/data/sdam/single/standalone_using_legacy_hello.yml +0 -34
  1076. data/spec/spec_tests/data/sdam/single/too_new.yml +0 -27
  1077. data/spec/spec_tests/data/sdam/single/too_old.yml +0 -25
  1078. data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +0 -48
  1079. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +0 -70
  1080. data/spec/spec_tests/data/sdam_monitoring/load_balancer.yml +0 -65
  1081. data/spec/spec_tests/data/sdam_monitoring/replica_set_other_chain.yml +0 -222
  1082. data/spec/spec_tests/data/sdam_monitoring/replica_set_other_change.yml +0 -225
  1083. data/spec/spec_tests/data/sdam_monitoring/replica_set_primary_address_change.yml +0 -251
  1084. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +0 -111
  1085. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_no_primary.yml +0 -112
  1086. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary.yml +0 -111
  1087. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary_and_secondary.yml +0 -198
  1088. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_primary_removal.yml +0 -175
  1089. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +0 -111
  1090. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_second_seed_removal.yml +0 -106
  1091. data/spec/spec_tests/data/sdam_monitoring/required_replica_set.yml +0 -108
  1092. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +0 -70
  1093. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +0 -86
  1094. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +0 -73
  1095. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +0 -90
  1096. data/spec/spec_tests/data/sdam_unified/auth-error.yml +0 -130
  1097. data/spec/spec_tests/data/sdam_unified/auth-misc-command-error.yml +0 -132
  1098. data/spec/spec_tests/data/sdam_unified/auth-network-error.yml +0 -132
  1099. data/spec/spec_tests/data/sdam_unified/auth-network-timeout-error.yml +0 -138
  1100. data/spec/spec_tests/data/sdam_unified/auth-shutdown-error.yml +0 -133
  1101. data/spec/spec_tests/data/sdam_unified/cancel-server-check.yml +0 -143
  1102. data/spec/spec_tests/data/sdam_unified/connectTimeoutMS.yml +0 -130
  1103. data/spec/spec_tests/data/sdam_unified/find-network-error.yml +0 -135
  1104. data/spec/spec_tests/data/sdam_unified/find-network-timeout-error.yml +0 -119
  1105. data/spec/spec_tests/data/sdam_unified/find-shutdown-error.yml +0 -163
  1106. data/spec/spec_tests/data/sdam_unified/hello-command-error.yml +0 -233
  1107. data/spec/spec_tests/data/sdam_unified/hello-network-error.yml +0 -228
  1108. data/spec/spec_tests/data/sdam_unified/hello-timeout.yml +0 -318
  1109. data/spec/spec_tests/data/sdam_unified/insert-network-error.yml +0 -137
  1110. data/spec/spec_tests/data/sdam_unified/insert-shutdown-error.yml +0 -162
  1111. data/spec/spec_tests/data/sdam_unified/interruptInUse-pool-clear.yml +0 -340
  1112. data/spec/spec_tests/data/sdam_unified/minPoolSize-error.yml +0 -125
  1113. data/spec/spec_tests/data/sdam_unified/pool-cleared-error.yml +0 -239
  1114. data/spec/spec_tests/data/sdam_unified/rediscover-quickly-after-step-down.yml +0 -144
  1115. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-directConnection.yml +0 -14
  1116. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-no-results.yml +0 -5
  1117. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-replicaSet-errors.yml +0 -6
  1118. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-multiple-hosts.yml +0 -5
  1119. data/spec/spec_tests/data/seed_list_discovery/load-balanced/loadBalanced-true-txt.yml +0 -11
  1120. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true-txt.yml +0 -5
  1121. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-conflicts_with_loadBalanced-true.yml +0 -5
  1122. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero-txt.yml +0 -11
  1123. data/spec/spec_tests/data/seed_list_discovery/load-balanced/srvMaxHosts-zero.yml +0 -11
  1124. data/spec/spec_tests/data/seed_list_discovery/replica-set/direct-connection-false.yml +0 -10
  1125. data/spec/spec_tests/data/seed_list_discovery/replica-set/direct-connection-true.yml +0 -5
  1126. data/spec/spec_tests/data/seed_list_discovery/replica-set/encoded-userinfo-and-db.yml +0 -15
  1127. data/spec/spec_tests/data/seed_list_discovery/replica-set/loadBalanced-false-txt.yml +0 -10
  1128. data/spec/spec_tests/data/seed_list_discovery/replica-set/longer-parent-in-return.yml +0 -11
  1129. data/spec/spec_tests/data/seed_list_discovery/replica-set/misformatted-option.yml +0 -5
  1130. data/spec/spec_tests/data/seed_list_discovery/replica-set/no-results.yml +0 -5
  1131. data/spec/spec_tests/data/seed_list_discovery/replica-set/not-enough-parts.yml +0 -5
  1132. data/spec/spec_tests/data/seed_list_discovery/replica-set/one-result-default-port.yml +0 -10
  1133. data/spec/spec_tests/data/seed_list_discovery/replica-set/one-txt-record-multiple-strings.yml +0 -10
  1134. data/spec/spec_tests/data/seed_list_discovery/replica-set/one-txt-record.yml +0 -11
  1135. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch1.yml +0 -5
  1136. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch2.yml +0 -5
  1137. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch3.yml +0 -5
  1138. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch4.yml +0 -5
  1139. data/spec/spec_tests/data/seed_list_discovery/replica-set/parent-part-mismatch5.yml +0 -5
  1140. data/spec/spec_tests/data/seed_list_discovery/replica-set/returned-parent-too-short.yml +0 -5
  1141. data/spec/spec_tests/data/seed_list_discovery/replica-set/returned-parent-wrong.yml +0 -5
  1142. data/spec/spec_tests/data/seed_list_discovery/replica-set/srv-service-name.yml +0 -11
  1143. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet-txt.yml +0 -5
  1144. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-conflicts_with_replicaSet.yml +0 -5
  1145. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-equal_to_srv_records.yml +0 -16
  1146. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-greater_than_srv_records.yml +0 -15
  1147. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-less_than_srv_records.yml +0 -15
  1148. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero-txt.yml +0 -15
  1149. data/spec/spec_tests/data/seed_list_discovery/replica-set/srvMaxHosts-zero.yml +0 -15
  1150. data/spec/spec_tests/data/seed_list_discovery/replica-set/two-results-default-port.yml +0 -11
  1151. data/spec/spec_tests/data/seed_list_discovery/replica-set/two-results-nonstandard-port.yml +0 -11
  1152. data/spec/spec_tests/data/seed_list_discovery/replica-set/two-txt-records.yml +0 -5
  1153. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-not-allowed-option.yml +0 -5
  1154. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-with-overridden-ssl-option.yml +0 -11
  1155. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-with-overridden-uri-option.yml +0 -11
  1156. data/spec/spec_tests/data/seed_list_discovery/replica-set/txt-record-with-unallowed-option.yml +0 -5
  1157. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-admin-database.yml +0 -13
  1158. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-auth.yml +0 -12
  1159. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-port.yml +0 -5
  1160. data/spec/spec_tests/data/seed_list_discovery/replica-set/uri-with-two-hosts.yml +0 -5
  1161. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-equal_to_srv_records.yml +0 -13
  1162. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-greater_than_srv_records.yml +0 -12
  1163. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-less_than_srv_records.yml +0 -10
  1164. data/spec/spec_tests/data/seed_list_discovery/sharded/srvMaxHosts-zero.yml +0 -11
  1165. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Nearest.yml +0 -25
  1166. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Nearest_multiple.yml +0 -26
  1167. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +0 -20
  1168. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PossiblePrimary.yml +0 -15
  1169. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PossiblePrimaryNearest.yml +0 -15
  1170. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Primary.yml +0 -18
  1171. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +0 -25
  1172. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +0 -20
  1173. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary.yml +0 -25
  1174. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +0 -25
  1175. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +0 -20
  1176. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags.yml +0 -31
  1177. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary_multi_tags2.yml +0 -31
  1178. data/spec/spec_tests/data/server_selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +0 -20
  1179. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Nearest.yml +0 -32
  1180. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Nearest_multiple.yml +0 -33
  1181. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +0 -25
  1182. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Primary.yml +0 -26
  1183. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +0 -28
  1184. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +0 -28
  1185. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Secondary.yml +0 -30
  1186. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +0 -30
  1187. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +0 -28
  1188. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/SecondaryPreferred_tags.yml +0 -28
  1189. data/spec/spec_tests/data/server_selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +0 -25
  1190. data/spec/spec_tests/data/server_selection/Sharded/read/Nearest.yml +0 -21
  1191. data/spec/spec_tests/data/server_selection/Sharded/read/Primary.yml +0 -19
  1192. data/spec/spec_tests/data/server_selection/Sharded/read/PrimaryPreferred.yml +0 -21
  1193. data/spec/spec_tests/data/server_selection/Sharded/read/Secondary.yml +0 -21
  1194. data/spec/spec_tests/data/server_selection/Sharded/read/SecondaryPreferred.yml +0 -21
  1195. data/spec/spec_tests/data/server_selection/Single/read/SecondaryPreferred.yml +0 -18
  1196. data/spec/spec_tests/data/server_selection/Unknown/read/SecondaryPreferred.yml +0 -10
  1197. data/spec/spec_tests/data/server_selection/Unknown/read/ghost.yml +0 -11
  1198. data/spec/spec_tests/data/server_selection/Unknown/write/ghost.yml +0 -11
  1199. data/spec/spec_tests/data/server_selection_rtt/first_value.yml +0 -4
  1200. data/spec/spec_tests/data/server_selection_rtt/first_value_zero.yml +0 -4
  1201. data/spec/spec_tests/data/server_selection_rtt/value_test_1.yml +0 -4
  1202. data/spec/spec_tests/data/server_selection_rtt/value_test_2.yml +0 -4
  1203. data/spec/spec_tests/data/server_selection_rtt/value_test_3.yml +0 -4
  1204. data/spec/spec_tests/data/server_selection_rtt/value_test_4.yml +0 -4
  1205. data/spec/spec_tests/data/server_selection_rtt/value_test_5.yml +0 -4
  1206. data/spec/spec_tests/data/sessions_unified/driver-sessions-dirty-session-errors.yml +0 -351
  1207. data/spec/spec_tests/data/sessions_unified/driver-sessions-server-support.yml +0 -123
  1208. data/spec/spec_tests/data/sessions_unified/implicit-sessions-default-causal-consistency.yml +0 -119
  1209. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-client-error.yml +0 -75
  1210. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-not-supported-server-error.yml +0 -102
  1211. data/spec/spec_tests/data/sessions_unified/snapshot-sessions-unsupported-ops.yml +0 -258
  1212. data/spec/spec_tests/data/sessions_unified/snapshot-sessions.yml +0 -482
  1213. data/spec/spec_tests/data/transactions/abort.yml +0 -413
  1214. data/spec/spec_tests/data/transactions/bulk.yml +0 -267
  1215. data/spec/spec_tests/data/transactions/causal-consistency.yml +0 -175
  1216. data/spec/spec_tests/data/transactions/commit.yml +0 -603
  1217. data/spec/spec_tests/data/transactions/count.yml +0 -67
  1218. data/spec/spec_tests/data/transactions/create-collection.yml +0 -131
  1219. data/spec/spec_tests/data/transactions/create-index.yml +0 -152
  1220. data/spec/spec_tests/data/transactions/delete.yml +0 -192
  1221. data/spec/spec_tests/data/transactions/error-labels.yml +0 -1030
  1222. data/spec/spec_tests/data/transactions/errors-client.yml +0 -55
  1223. data/spec/spec_tests/data/transactions/errors.yml +0 -133
  1224. data/spec/spec_tests/data/transactions/findOneAndDelete.yml +0 -134
  1225. data/spec/spec_tests/data/transactions/findOneAndReplace.yml +0 -148
  1226. data/spec/spec_tests/data/transactions/findOneAndUpdate.yml +0 -236
  1227. data/spec/spec_tests/data/transactions/insert.yml +0 -390
  1228. data/spec/spec_tests/data/transactions/isolation.yml +0 -133
  1229. data/spec/spec_tests/data/transactions/mongos-pin-auto.yml +0 -1674
  1230. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +0 -350
  1231. data/spec/spec_tests/data/transactions/pin-mongos.yml +0 -559
  1232. data/spec/spec_tests/data/transactions/read-concern.yml +0 -623
  1233. data/spec/spec_tests/data/transactions/read-pref.yml +0 -348
  1234. data/spec/spec_tests/data/transactions/reads.yml +0 -261
  1235. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +0 -124
  1236. data/spec/spec_tests/data/transactions/retryable-abort.yml +0 -1315
  1237. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +0 -132
  1238. data/spec/spec_tests/data/transactions/retryable-commit.yml +0 -1460
  1239. data/spec/spec_tests/data/transactions/retryable-writes.yml +0 -216
  1240. data/spec/spec_tests/data/transactions/run-command.yml +0 -197
  1241. data/spec/spec_tests/data/transactions/transaction-options-repl.yml +0 -117
  1242. data/spec/spec_tests/data/transactions/transaction-options.yml +0 -781
  1243. data/spec/spec_tests/data/transactions/update.yml +0 -246
  1244. data/spec/spec_tests/data/transactions/write-concern.yml +0 -554
  1245. data/spec/spec_tests/data/transactions_api/callback-aborts.yml +0 -170
  1246. data/spec/spec_tests/data/transactions_api/callback-commits.yml +0 -204
  1247. data/spec/spec_tests/data/transactions_api/callback-retry.yml +0 -215
  1248. data/spec/spec_tests/data/transactions_api/commit-retry.yml +0 -324
  1249. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror-4.2.yml +0 -139
  1250. data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror.yml +0 -175
  1251. data/spec/spec_tests/data/transactions_api/commit-writeconcernerror.yml +0 -216
  1252. data/spec/spec_tests/data/transactions_api/commit.yml +0 -193
  1253. data/spec/spec_tests/data/transactions_api/transaction-options.yml +0 -274
  1254. data/spec/spec_tests/data/transactions_unified/do-not-retry-read-in-transaction.yml +0 -64
  1255. data/spec/spec_tests/data/transactions_unified/mongos-unpin.yml +0 -172
  1256. data/spec/spec_tests/data/transactions_unified/retryable-abort-handshake.yml +0 -118
  1257. data/spec/spec_tests/data/transactions_unified/retryable-commit-handshake.yml +0 -118
  1258. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor-malformed.yml +0 -31
  1259. data/spec/spec_tests/data/unified/valid-fail/entity-findCursor.yml +0 -31
  1260. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError-malformed.yml +0 -34
  1261. data/spec/spec_tests/data/unified/valid-fail/ignoreResultAndError.yml +0 -35
  1262. data/spec/spec_tests/data/unified/valid-fail/operation-failure.yml +0 -31
  1263. data/spec/spec_tests/data/unified/valid-fail/operation-unsupported.yml +0 -13
  1264. data/spec/spec_tests/data/unified/valid-pass/assertNumberConnectionsCheckedOut.yml +0 -17
  1265. data/spec/spec_tests/data/unified/valid-pass/collectionData-createOptions.yml +0 -37
  1266. data/spec/spec_tests/data/unified/valid-pass/entity-client-cmap-events.yml +0 -40
  1267. data/spec/spec_tests/data/unified/valid-pass/entity-client-storeEventsAsEntities.yml +0 -37
  1268. data/spec/spec_tests/data/unified/valid-pass/expectedError-errorResponse.yml +0 -39
  1269. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-eventType.yml +0 -66
  1270. data/spec/spec_tests/data/unified/valid-pass/expectedEventsForClient-ignoreExtraEvents.yml +0 -78
  1271. data/spec/spec_tests/data/unified/valid-pass/ignoreResultAndError.yml +0 -34
  1272. data/spec/spec_tests/data/unified/valid-pass/observeSensitiveCommands.yml +0 -255
  1273. data/spec/spec_tests/data/unified/valid-pass/poc-change-streams.yml +0 -241
  1274. data/spec/spec_tests/data/unified/valid-pass/poc-command-monitoring.yml +0 -102
  1275. data/spec/spec_tests/data/unified/valid-pass/poc-crud.yml +0 -190
  1276. data/spec/spec_tests/data/unified/valid-pass/poc-gridfs.yml +0 -155
  1277. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-reads.yml +0 -193
  1278. data/spec/spec_tests/data/unified/valid-pass/poc-retryable-writes.yml +0 -210
  1279. data/spec/spec_tests/data/unified/valid-pass/poc-sessions.yml +0 -214
  1280. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-convenient-api.yml +0 -235
  1281. data/spec/spec_tests/data/unified/valid-pass/poc-transactions-mongos-pin-auto.yml +0 -169
  1282. data/spec/spec_tests/data/unified/valid-pass/poc-transactions.yml +0 -171
  1283. data/spec/spec_tests/data/uri_options/auth-options.yml +0 -49
  1284. data/spec/spec_tests/data/uri_options/compression-options.yml +0 -51
  1285. data/spec/spec_tests/data/uri_options/concern-options.yml +0 -55
  1286. data/spec/spec_tests/data/uri_options/connection-options.yml +0 -209
  1287. data/spec/spec_tests/data/uri_options/connection-pool-options.yml +0 -26
  1288. data/spec/spec_tests/data/uri_options/read-preference-options.yml +0 -66
  1289. data/spec/spec_tests/data/uri_options/ruby-auth-options.yml +0 -12
  1290. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +0 -58
  1291. data/spec/spec_tests/data/uri_options/srv-options.yml +0 -96
  1292. data/spec/spec_tests/data/uri_options/tls-options.yml +0 -364
  1293. data/spec/spec_tests/data/versioned_api/crud-api-version-1-strict.yml +0 -419
  1294. data/spec/spec_tests/data/versioned_api/crud-api-version-1.yml +0 -413
  1295. data/spec/spec_tests/data/versioned_api/runcommand-helper-no-api-version-declared.yml +0 -75
  1296. data/spec/spec_tests/data/versioned_api/test-commands-deprecation-errors.yml +0 -47
  1297. data/spec/spec_tests/data/versioned_api/test-commands-strict-mode.yml +0 -46
  1298. data/spec/spec_tests/data/versioned_api/transaction-handling.yml +0 -128
  1299. data/spec/spec_tests/gridfs_spec.rb +0 -55
  1300. data/spec/spec_tests/gridfs_unified_spec.rb +0 -13
  1301. data/spec/spec_tests/index_management_unified_spec.rb +0 -13
  1302. data/spec/spec_tests/load_balancers_spec.rb +0 -15
  1303. data/spec/spec_tests/max_staleness_spec.rb +0 -12
  1304. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +0 -13
  1305. data/spec/spec_tests/read_write_concern_document_spec.rb +0 -77
  1306. data/spec/spec_tests/read_write_concern_operaton_spec.rb +0 -13
  1307. data/spec/spec_tests/retryable_reads_spec.rb +0 -55
  1308. data/spec/spec_tests/retryable_reads_unified_spec.rb +0 -22
  1309. data/spec/spec_tests/retryable_writes_spec.rb +0 -25
  1310. data/spec/spec_tests/retryable_writes_unified_spec.rb +0 -21
  1311. data/spec/spec_tests/run_command_unified_spec.rb +0 -13
  1312. data/spec/spec_tests/sdam_monitoring_spec.rb +0 -101
  1313. data/spec/spec_tests/sdam_spec.rb +0 -246
  1314. data/spec/spec_tests/sdam_unified_spec.rb +0 -15
  1315. data/spec/spec_tests/seed_list_discovery_spec.rb +0 -127
  1316. data/spec/spec_tests/server_selection_rtt_spec.rb +0 -33
  1317. data/spec/spec_tests/server_selection_spec.rb +0 -12
  1318. data/spec/spec_tests/sessions_unified_spec.rb +0 -13
  1319. data/spec/spec_tests/transactions_api_spec.rb +0 -13
  1320. data/spec/spec_tests/transactions_spec.rb +0 -13
  1321. data/spec/spec_tests/transactions_unified_spec.rb +0 -14
  1322. data/spec/spec_tests/unified_spec.rb +0 -18
  1323. data/spec/spec_tests/uri_options_spec.rb +0 -93
  1324. data/spec/spec_tests/versioned_api_spec.rb +0 -13
  1325. data/spec/stress/cleanup_spec.rb +0 -61
  1326. data/spec/stress/connection_pool_stress_spec.rb +0 -143
  1327. data/spec/stress/connection_pool_timing_spec.rb +0 -160
  1328. data/spec/stress/fork_reconnect_stress_spec.rb +0 -108
  1329. data/spec/stress/push_monitor_close_spec.rb +0 -44
  1330. data/spec/support/authorization.rb +0 -161
  1331. data/spec/support/aws_utils/base.rb +0 -137
  1332. data/spec/support/aws_utils/inspector.rb +0 -227
  1333. data/spec/support/aws_utils/orchestrator.rb +0 -385
  1334. data/spec/support/aws_utils/provisioner.rb +0 -363
  1335. data/spec/support/aws_utils.rb +0 -66
  1336. data/spec/support/background_thread_registry.rb +0 -60
  1337. data/spec/support/certificates/README.md +0 -106
  1338. data/spec/support/certificates/atlas-ocsp-ca.crt +0 -113
  1339. data/spec/support/certificates/atlas-ocsp.crt +0 -147
  1340. data/spec/support/certificates/ca.crt +0 -76
  1341. data/spec/support/certificates/client-encrypted.key +0 -30
  1342. data/spec/support/certificates/client-int.crt +0 -78
  1343. data/spec/support/certificates/client-second-level-bundle.pem +0 -179
  1344. data/spec/support/certificates/client-second-level.crt +0 -74
  1345. data/spec/support/certificates/client-second-level.key +0 -27
  1346. data/spec/support/certificates/client-second-level.pem +0 -101
  1347. data/spec/support/certificates/client-x509.crt +0 -78
  1348. data/spec/support/certificates/client-x509.key +0 -27
  1349. data/spec/support/certificates/client-x509.pem +0 -105
  1350. data/spec/support/certificates/client.crt +0 -74
  1351. data/spec/support/certificates/client.key +0 -27
  1352. data/spec/support/certificates/client.pem +0 -101
  1353. data/spec/support/certificates/crl.pem +0 -12
  1354. data/spec/support/certificates/crl_client_revoked.pem +0 -13
  1355. data/spec/support/certificates/multi-ca.crt +0 -152
  1356. data/spec/support/certificates/python-ca.crt +0 -76
  1357. data/spec/support/certificates/retrieve-atlas-cert +0 -40
  1358. data/spec/support/certificates/server-int.crt +0 -78
  1359. data/spec/support/certificates/server-second-level-bundle.pem +0 -179
  1360. data/spec/support/certificates/server-second-level.crt +0 -74
  1361. data/spec/support/certificates/server-second-level.key +0 -27
  1362. data/spec/support/certificates/server-second-level.pem +0 -101
  1363. data/spec/support/certificates/server.pem +0 -101
  1364. data/spec/support/client_registry.rb +0 -258
  1365. data/spec/support/client_registry_macros.rb +0 -26
  1366. data/spec/support/cluster_tools.rb +0 -384
  1367. data/spec/support/common_shortcuts.rb +0 -421
  1368. data/spec/support/constraints.rb +0 -39
  1369. data/spec/support/crypt/corpus/corpus-encrypted.json +0 -9515
  1370. data/spec/support/crypt/corpus/corpus-key-aws.json +0 -33
  1371. data/spec/support/crypt/corpus/corpus-key-azure.json +0 -33
  1372. data/spec/support/crypt/corpus/corpus-key-gcp.json +0 -35
  1373. data/spec/support/crypt/corpus/corpus-key-kmip.json +0 -32
  1374. data/spec/support/crypt/corpus/corpus-key-local.json +0 -31
  1375. data/spec/support/crypt/corpus/corpus-schema.json +0 -6335
  1376. data/spec/support/crypt/corpus/corpus.json +0 -8619
  1377. data/spec/support/crypt/data_keys/key_document_aws.json +0 -34
  1378. data/spec/support/crypt/data_keys/key_document_azure.json +0 -33
  1379. data/spec/support/crypt/data_keys/key_document_gcp.json +0 -37
  1380. data/spec/support/crypt/data_keys/key_document_kmip.json +0 -32
  1381. data/spec/support/crypt/data_keys/key_document_local.json +0 -31
  1382. data/spec/support/crypt/encrypted_fields/encryptedFields.json +0 -32
  1383. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Date.json +0 -30
  1384. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalNoPrecision.json +0 -21
  1385. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DecimalPrecision.json +0 -29
  1386. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoubleNoPrecision.json +0 -21
  1387. data/spec/support/crypt/encrypted_fields/range-encryptedFields-DoublePrecision.json +0 -30
  1388. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Int.json +0 -27
  1389. data/spec/support/crypt/encrypted_fields/range-encryptedFields-Long.json +0 -27
  1390. data/spec/support/crypt/external/external-key.json +0 -31
  1391. data/spec/support/crypt/external/external-schema.json +0 -19
  1392. data/spec/support/crypt/keys/key1-document.json +0 -30
  1393. data/spec/support/crypt/limits/limits-doc.json +0 -102
  1394. data/spec/support/crypt/limits/limits-key.json +0 -31
  1395. data/spec/support/crypt/limits/limits-schema.json +0 -1405
  1396. data/spec/support/crypt/schema_maps/schema_map_aws.json +0 -17
  1397. data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +0 -12
  1398. data/spec/support/crypt/schema_maps/schema_map_azure.json +0 -17
  1399. data/spec/support/crypt/schema_maps/schema_map_azure_key_alt_names.json +0 -12
  1400. data/spec/support/crypt/schema_maps/schema_map_gcp.json +0 -17
  1401. data/spec/support/crypt/schema_maps/schema_map_gcp_key_alt_names.json +0 -12
  1402. data/spec/support/crypt/schema_maps/schema_map_kmip.json +0 -17
  1403. data/spec/support/crypt/schema_maps/schema_map_kmip_key_alt_names.json +0 -12
  1404. data/spec/support/crypt/schema_maps/schema_map_local.json +0 -18
  1405. data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +0 -12
  1406. data/spec/support/crypt.rb +0 -412
  1407. data/spec/support/dns.rb +0 -16
  1408. data/spec/support/json_ext_formatter.rb +0 -16
  1409. data/spec/support/keyword_struct.rb +0 -29
  1410. data/spec/support/local_resource_registry.rb +0 -37
  1411. data/spec/support/macros.rb +0 -29
  1412. data/spec/support/matchers.rb +0 -88
  1413. data/spec/support/mongos_macros.rb +0 -24
  1414. data/spec/support/monitoring_ext.rb +0 -19
  1415. data/spec/support/ocsp +0 -1
  1416. data/spec/support/primary_socket.rb +0 -24
  1417. data/spec/support/recording_logger.rb +0 -27
  1418. data/spec/support/sdam_formatter_integration.rb +0 -119
  1419. data/spec/support/shared/app_metadata.rb +0 -179
  1420. data/spec/support/shared/auth_context.rb +0 -17
  1421. data/spec/support/shared/protocol.rb +0 -36
  1422. data/spec/support/shared/scram_conversation.rb +0 -104
  1423. data/spec/support/shared/server_selector.rb +0 -233
  1424. data/spec/support/shared/session.rb +0 -916
  1425. data/spec/support/spec_config.rb +0 -767
  1426. data/spec/support/spec_setup.rb +0 -83
  1427. data/spec/support/using_hash.rb +0 -40
  1428. 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