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