mongo 2.11.2 → 2.13.0.beta1

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 (970) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CONTRIBUTING.md +8 -36
  5. data/LICENSE +1 -1
  6. data/README.md +54 -53
  7. data/Rakefile +1 -1
  8. data/lib/mongo.rb +7 -1
  9. data/lib/mongo/active_support.rb +1 -1
  10. data/lib/mongo/address.rb +114 -46
  11. data/lib/mongo/address/ipv4.rb +32 -5
  12. data/lib/mongo/address/ipv6.rb +32 -5
  13. data/lib/mongo/address/unix.rb +3 -3
  14. data/lib/mongo/address/validator.rb +1 -1
  15. data/lib/mongo/auth.rb +37 -13
  16. data/lib/mongo/auth/aws.rb +37 -0
  17. data/lib/mongo/auth/aws/conversation.rb +128 -0
  18. data/lib/mongo/auth/aws/credentials_retriever.rb +219 -0
  19. data/lib/mongo/auth/aws/request.rb +257 -0
  20. data/lib/mongo/auth/base.rb +129 -0
  21. data/lib/mongo/auth/conversation_base.rb +52 -0
  22. data/lib/mongo/auth/cr.rb +9 -36
  23. data/lib/mongo/auth/cr/conversation.rb +24 -69
  24. data/lib/mongo/auth/credential_cache.rb +51 -0
  25. data/lib/mongo/auth/gssapi.rb +38 -0
  26. data/lib/mongo/auth/gssapi/conversation.rb +108 -0
  27. data/lib/mongo/auth/ldap.rb +9 -34
  28. data/lib/mongo/auth/ldap/conversation.rb +3 -43
  29. data/lib/mongo/auth/roles.rb +1 -1
  30. data/lib/mongo/auth/sasl_conversation_base.rb +111 -0
  31. data/lib/mongo/auth/scram.rb +39 -51
  32. data/lib/mongo/auth/scram/conversation.rb +12 -502
  33. data/lib/mongo/auth/scram256.rb +31 -0
  34. data/lib/mongo/auth/scram256/conversation.rb +63 -0
  35. data/lib/mongo/auth/scram_conversation_base.rb +402 -0
  36. data/lib/mongo/auth/stringprep.rb +5 -4
  37. data/lib/mongo/auth/stringprep/profiles/sasl.rb +2 -1
  38. data/lib/mongo/auth/stringprep/tables.rb +2 -1
  39. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +1 -0
  40. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1 -0
  41. data/lib/mongo/auth/user.rb +9 -11
  42. data/lib/mongo/auth/user/view.rb +5 -5
  43. data/lib/mongo/auth/x509.rb +14 -32
  44. data/lib/mongo/auth/x509/conversation.rb +15 -42
  45. data/lib/mongo/background_thread.rb +12 -3
  46. data/lib/mongo/bson.rb +1 -1
  47. data/lib/mongo/bulk_write.rb +61 -26
  48. data/lib/mongo/bulk_write/combineable.rb +20 -8
  49. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  50. data/lib/mongo/bulk_write/result.rb +1 -1
  51. data/lib/mongo/bulk_write/result_combiner.rb +1 -1
  52. data/lib/mongo/bulk_write/transformable.rb +9 -10
  53. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  54. data/lib/mongo/bulk_write/validatable.rb +5 -1
  55. data/lib/mongo/client.rb +178 -23
  56. data/lib/mongo/client_encryption.rb +103 -0
  57. data/lib/mongo/cluster.rb +130 -52
  58. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  59. data/lib/mongo/cluster/reapers/cursor_reaper.rb +19 -7
  60. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
  61. data/lib/mongo/cluster/sdam_flow.rb +74 -62
  62. data/lib/mongo/cluster/topology.rb +19 -2
  63. data/lib/mongo/cluster/topology/base.rb +1 -1
  64. data/lib/mongo/cluster/topology/no_replica_set_options.rb +1 -1
  65. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +1 -1
  66. data/lib/mongo/cluster/topology/replica_set_with_primary.rb +1 -1
  67. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  68. data/lib/mongo/cluster/topology/single.rb +1 -1
  69. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  70. data/lib/mongo/cluster_time.rb +1 -1
  71. data/lib/mongo/collection.rb +25 -5
  72. data/lib/mongo/collection/view.rb +7 -3
  73. data/lib/mongo/collection/view/aggregation.rb +7 -4
  74. data/lib/mongo/collection/view/builder.rb +1 -1
  75. data/lib/mongo/collection/view/builder/aggregation.rb +1 -1
  76. data/lib/mongo/collection/view/builder/find_command.rb +9 -1
  77. data/lib/mongo/collection/view/builder/flags.rb +1 -1
  78. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  79. data/lib/mongo/collection/view/builder/modifiers.rb +1 -1
  80. data/lib/mongo/collection/view/builder/op_query.rb +1 -1
  81. data/lib/mongo/collection/view/change_stream.rb +15 -9
  82. data/lib/mongo/collection/view/change_stream/retryable.rb +1 -1
  83. data/lib/mongo/collection/view/explainable.rb +1 -1
  84. data/lib/mongo/collection/view/immutable.rb +1 -1
  85. data/lib/mongo/collection/view/iterable.rb +22 -7
  86. data/lib/mongo/collection/view/map_reduce.rb +9 -6
  87. data/lib/mongo/collection/view/readable.rb +16 -8
  88. data/lib/mongo/collection/view/writable.rb +62 -18
  89. data/lib/mongo/crypt.rb +33 -0
  90. data/lib/mongo/crypt/auto_decryption_context.rb +40 -0
  91. data/lib/mongo/crypt/auto_encrypter.rb +179 -0
  92. data/lib/mongo/crypt/auto_encryption_context.rb +44 -0
  93. data/lib/mongo/crypt/binary.rb +155 -0
  94. data/lib/mongo/crypt/binding.rb +1229 -0
  95. data/lib/mongo/crypt/context.rb +135 -0
  96. data/lib/mongo/crypt/data_key_context.rb +162 -0
  97. data/lib/mongo/crypt/encryption_io.rb +306 -0
  98. data/lib/mongo/crypt/explicit_decryption_context.rb +40 -0
  99. data/lib/mongo/crypt/explicit_encrypter.rb +117 -0
  100. data/lib/mongo/crypt/explicit_encryption_context.rb +89 -0
  101. data/lib/mongo/crypt/handle.rb +315 -0
  102. data/lib/mongo/crypt/hooks.rb +90 -0
  103. data/lib/mongo/crypt/kms_context.rb +67 -0
  104. data/lib/mongo/crypt/status.rb +131 -0
  105. data/lib/mongo/cursor.rb +67 -35
  106. data/lib/mongo/cursor/builder.rb +1 -1
  107. data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
  108. data/lib/mongo/cursor/builder/kill_cursors_command.rb +9 -2
  109. data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
  110. data/lib/mongo/cursor/builder/op_kill_cursors.rb +9 -2
  111. data/lib/mongo/database.rb +27 -7
  112. data/lib/mongo/database/view.rb +15 -6
  113. data/lib/mongo/dbref.rb +10 -3
  114. data/lib/mongo/error.rb +30 -3
  115. data/lib/mongo/error/auth_error.rb +1 -1
  116. data/lib/mongo/error/bulk_write_error.rb +17 -15
  117. data/lib/mongo/error/change_stream_resumable.rb +1 -1
  118. data/lib/mongo/error/closed_stream.rb +1 -1
  119. data/lib/mongo/error/connection_check_out_timeout.rb +1 -1
  120. data/lib/mongo/error/connection_perished.rb +23 -0
  121. data/lib/mongo/error/credential_check_error.rb +26 -0
  122. data/lib/mongo/error/crypt_error.rb +31 -0
  123. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  124. data/lib/mongo/error/{failed_stringprep_validation.rb → failed_string_prep_validation.rb} +0 -0
  125. data/lib/mongo/error/file_not_found.rb +1 -1
  126. data/lib/mongo/error/handshake_error.rb +1 -1
  127. data/lib/mongo/error/insufficient_iteration_count.rb +1 -1
  128. data/lib/mongo/error/invalid_address.rb +1 -1
  129. data/lib/mongo/error/invalid_application_name.rb +1 -1
  130. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  131. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  132. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  133. data/lib/mongo/error/invalid_cursor_operation.rb +27 -0
  134. data/lib/mongo/error/invalid_database_name.rb +1 -1
  135. data/lib/mongo/error/invalid_document.rb +1 -1
  136. data/lib/mongo/error/invalid_file.rb +1 -1
  137. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  138. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  139. data/lib/mongo/error/invalid_nonce.rb +2 -2
  140. data/lib/mongo/error/invalid_read_option.rb +1 -1
  141. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  142. data/lib/mongo/error/invalid_server_auth_response.rb +23 -0
  143. data/lib/mongo/error/invalid_server_preference.rb +6 -1
  144. data/lib/mongo/error/invalid_session.rb +1 -1
  145. data/lib/mongo/error/invalid_signature.rb +1 -1
  146. data/lib/mongo/error/invalid_transaction_operation.rb +1 -1
  147. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  148. data/lib/mongo/error/invalid_update_document.rb +1 -1
  149. data/lib/mongo/error/invalid_uri.rb +1 -1
  150. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  151. data/lib/mongo/error/kms_error.rb +22 -0
  152. data/lib/mongo/error/lint_error.rb +1 -1
  153. data/lib/mongo/error/max_bson_size.rb +15 -4
  154. data/lib/mongo/error/max_message_size.rb +1 -1
  155. data/lib/mongo/error/mismatched_domain.rb +1 -1
  156. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  157. data/lib/mongo/error/missing_password.rb +1 -1
  158. data/lib/mongo/error/missing_resume_token.rb +1 -1
  159. data/lib/mongo/error/missing_scram_server_signature.rb +27 -0
  160. data/lib/mongo/error/mongocryptd_spawn_error.rb +22 -0
  161. data/lib/mongo/error/multi_index_drop.rb +1 -1
  162. data/lib/mongo/error/need_primary_server.rb +1 -1
  163. data/lib/mongo/error/no_server_available.rb +9 -4
  164. data/lib/mongo/error/no_srv_records.rb +1 -1
  165. data/lib/mongo/error/notable.rb +17 -17
  166. data/lib/mongo/error/operation_failure.rb +57 -43
  167. data/lib/mongo/error/parser.rb +17 -6
  168. data/lib/mongo/error/pool_closed_error.rb +1 -1
  169. data/lib/mongo/error/raise_original_error.rb +29 -0
  170. data/lib/mongo/error/session_ended.rb +1 -1
  171. data/lib/mongo/error/socket_error.rb +1 -1
  172. data/lib/mongo/error/socket_timeout_error.rb +1 -1
  173. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  174. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  175. data/lib/mongo/error/unexpected_response.rb +1 -1
  176. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  177. data/lib/mongo/error/unsupported_array_filters.rb +7 -2
  178. data/lib/mongo/error/unsupported_collation.rb +7 -2
  179. data/lib/mongo/error/unsupported_features.rb +1 -1
  180. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  181. data/lib/mongo/error/unsupported_option.rb +99 -0
  182. data/lib/mongo/error/write_retryable.rb +1 -1
  183. data/lib/mongo/event.rb +1 -1
  184. data/lib/mongo/event/base.rb +1 -1
  185. data/lib/mongo/event/listeners.rb +1 -1
  186. data/lib/mongo/event/publisher.rb +1 -1
  187. data/lib/mongo/event/subscriber.rb +1 -1
  188. data/lib/mongo/grid.rb +1 -1
  189. data/lib/mongo/grid/file.rb +1 -1
  190. data/lib/mongo/grid/file/chunk.rb +1 -1
  191. data/lib/mongo/grid/file/info.rb +4 -3
  192. data/lib/mongo/grid/fs_bucket.rb +7 -2
  193. data/lib/mongo/grid/stream.rb +1 -1
  194. data/lib/mongo/grid/stream/read.rb +1 -1
  195. data/lib/mongo/grid/stream/write.rb +1 -1
  196. data/lib/mongo/id.rb +1 -1
  197. data/lib/mongo/index.rb +2 -1
  198. data/lib/mongo/index/view.rb +61 -14
  199. data/lib/mongo/lint.rb +10 -0
  200. data/lib/mongo/loggable.rb +1 -1
  201. data/lib/mongo/logger.rb +1 -1
  202. data/lib/mongo/monitoring.rb +1 -1
  203. data/lib/mongo/monitoring/cmap_log_subscriber.rb +1 -1
  204. data/lib/mongo/monitoring/command_log_subscriber.rb +12 -5
  205. data/lib/mongo/monitoring/event.rb +1 -1
  206. data/lib/mongo/monitoring/event/cmap.rb +1 -1
  207. data/lib/mongo/monitoring/event/cmap/base.rb +1 -1
  208. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +2 -2
  209. data/lib/mongo/monitoring/event/cmap/connection_check_out_started.rb +1 -1
  210. data/lib/mongo/monitoring/event/cmap/connection_checked_in.rb +1 -1
  211. data/lib/mongo/monitoring/event/cmap/connection_checked_out.rb +1 -1
  212. data/lib/mongo/monitoring/event/cmap/connection_closed.rb +1 -1
  213. data/lib/mongo/monitoring/event/cmap/connection_created.rb +1 -1
  214. data/lib/mongo/monitoring/event/cmap/connection_ready.rb +1 -1
  215. data/lib/mongo/monitoring/event/cmap/pool_cleared.rb +1 -1
  216. data/lib/mongo/monitoring/event/cmap/pool_closed.rb +1 -1
  217. data/lib/mongo/monitoring/event/cmap/pool_created.rb +1 -1
  218. data/lib/mongo/monitoring/event/command_failed.rb +1 -1
  219. data/lib/mongo/monitoring/event/command_started.rb +15 -4
  220. data/lib/mongo/monitoring/event/command_succeeded.rb +1 -1
  221. data/lib/mongo/monitoring/event/secure.rb +8 -2
  222. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  223. data/lib/mongo/monitoring/event/server_description_changed.rb +1 -1
  224. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +1 -1
  225. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +1 -1
  226. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +1 -1
  227. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  228. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  229. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  230. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  231. data/lib/mongo/monitoring/publishable.rb +5 -8
  232. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  233. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  234. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  235. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  236. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  237. data/lib/mongo/monitoring/topology_closed_log_subscriber.rb +1 -1
  238. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  239. data/lib/mongo/monitoring/unified_sdam_log_subscriber.rb +1 -1
  240. data/lib/mongo/operation.rb +1 -0
  241. data/lib/mongo/operation/aggregate.rb +1 -1
  242. data/lib/mongo/operation/aggregate/command.rb +5 -5
  243. data/lib/mongo/operation/aggregate/op_msg.rb +1 -1
  244. data/lib/mongo/operation/aggregate/result.rb +1 -1
  245. data/lib/mongo/operation/collections_info.rb +3 -33
  246. data/lib/mongo/operation/collections_info/command.rb +40 -0
  247. data/lib/mongo/operation/collections_info/result.rb +1 -1
  248. data/lib/mongo/operation/command.rb +1 -1
  249. data/lib/mongo/operation/command/command.rb +3 -3
  250. data/lib/mongo/operation/command/op_msg.rb +1 -1
  251. data/lib/mongo/operation/count.rb +1 -1
  252. data/lib/mongo/operation/count/command.rb +3 -3
  253. data/lib/mongo/operation/count/op_msg.rb +1 -1
  254. data/lib/mongo/operation/create.rb +1 -1
  255. data/lib/mongo/operation/create/command.rb +3 -3
  256. data/lib/mongo/operation/create/op_msg.rb +1 -1
  257. data/lib/mongo/operation/create_index.rb +1 -1
  258. data/lib/mongo/operation/create_index/command.rb +4 -4
  259. data/lib/mongo/operation/create_index/op_msg.rb +6 -3
  260. data/lib/mongo/operation/create_user.rb +1 -1
  261. data/lib/mongo/operation/create_user/command.rb +4 -4
  262. data/lib/mongo/operation/create_user/op_msg.rb +2 -2
  263. data/lib/mongo/operation/delete.rb +1 -1
  264. data/lib/mongo/operation/delete/bulk_result.rb +1 -1
  265. data/lib/mongo/operation/delete/command.rb +4 -4
  266. data/lib/mongo/operation/delete/legacy.rb +2 -2
  267. data/lib/mongo/operation/delete/op_msg.rb +5 -5
  268. data/lib/mongo/operation/delete/result.rb +2 -2
  269. data/lib/mongo/operation/distinct.rb +1 -1
  270. data/lib/mongo/operation/distinct/command.rb +3 -3
  271. data/lib/mongo/operation/distinct/op_msg.rb +1 -1
  272. data/lib/mongo/operation/drop.rb +1 -1
  273. data/lib/mongo/operation/drop/command.rb +3 -3
  274. data/lib/mongo/operation/drop/op_msg.rb +1 -1
  275. data/lib/mongo/operation/drop_database.rb +1 -1
  276. data/lib/mongo/operation/drop_database/command.rb +3 -3
  277. data/lib/mongo/operation/drop_database/op_msg.rb +1 -1
  278. data/lib/mongo/operation/drop_index.rb +1 -1
  279. data/lib/mongo/operation/drop_index/command.rb +4 -4
  280. data/lib/mongo/operation/drop_index/op_msg.rb +2 -2
  281. data/lib/mongo/operation/explain.rb +1 -1
  282. data/lib/mongo/operation/explain/command.rb +3 -3
  283. data/lib/mongo/operation/explain/legacy.rb +3 -3
  284. data/lib/mongo/operation/explain/op_msg.rb +1 -1
  285. data/lib/mongo/operation/explain/result.rb +1 -1
  286. data/lib/mongo/operation/find.rb +1 -1
  287. data/lib/mongo/operation/find/command.rb +3 -3
  288. data/lib/mongo/operation/find/legacy.rb +3 -3
  289. data/lib/mongo/operation/find/legacy/result.rb +1 -1
  290. data/lib/mongo/operation/find/op_msg.rb +2 -9
  291. data/lib/mongo/operation/find/result.rb +1 -1
  292. data/lib/mongo/operation/get_more.rb +1 -1
  293. data/lib/mongo/operation/get_more/command.rb +3 -3
  294. data/lib/mongo/operation/get_more/legacy.rb +2 -2
  295. data/lib/mongo/operation/get_more/op_msg.rb +2 -9
  296. data/lib/mongo/operation/get_more/result.rb +1 -1
  297. data/lib/mongo/operation/indexes.rb +1 -1
  298. data/lib/mongo/operation/indexes/command.rb +3 -3
  299. data/lib/mongo/operation/indexes/legacy.rb +4 -4
  300. data/lib/mongo/operation/indexes/op_msg.rb +1 -1
  301. data/lib/mongo/operation/indexes/result.rb +1 -1
  302. data/lib/mongo/operation/insert.rb +3 -2
  303. data/lib/mongo/operation/insert/bulk_result.rb +6 -2
  304. data/lib/mongo/operation/insert/command.rb +8 -7
  305. data/lib/mongo/operation/insert/legacy.rb +10 -5
  306. data/lib/mongo/operation/insert/op_msg.rb +7 -7
  307. data/lib/mongo/operation/insert/result.rb +7 -4
  308. data/lib/mongo/operation/kill_cursors.rb +1 -1
  309. data/lib/mongo/operation/kill_cursors/command.rb +3 -3
  310. data/lib/mongo/operation/kill_cursors/legacy.rb +2 -2
  311. data/lib/mongo/operation/kill_cursors/op_msg.rb +1 -1
  312. data/lib/mongo/operation/list_collections.rb +1 -1
  313. data/lib/mongo/operation/list_collections/command.rb +4 -4
  314. data/lib/mongo/operation/list_collections/op_msg.rb +2 -2
  315. data/lib/mongo/operation/list_collections/result.rb +1 -1
  316. data/lib/mongo/operation/map_reduce.rb +1 -1
  317. data/lib/mongo/operation/map_reduce/command.rb +3 -3
  318. data/lib/mongo/operation/map_reduce/op_msg.rb +1 -1
  319. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  320. data/lib/mongo/operation/op_msg_base.rb +3 -3
  321. data/lib/mongo/operation/parallel_scan.rb +1 -1
  322. data/lib/mongo/operation/parallel_scan/command.rb +5 -5
  323. data/lib/mongo/operation/parallel_scan/op_msg.rb +2 -2
  324. data/lib/mongo/operation/parallel_scan/result.rb +1 -1
  325. data/lib/mongo/operation/remove_user.rb +1 -1
  326. data/lib/mongo/operation/remove_user/command.rb +4 -4
  327. data/lib/mongo/operation/remove_user/op_msg.rb +2 -2
  328. data/lib/mongo/operation/result.rb +64 -31
  329. data/lib/mongo/operation/shared/bypass_document_validation.rb +10 -4
  330. data/lib/mongo/operation/shared/causal_consistency_supported.rb +3 -3
  331. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +56 -0
  332. data/lib/mongo/operation/shared/executable.rb +47 -27
  333. data/lib/mongo/operation/shared/executable_no_validate.rb +3 -3
  334. data/lib/mongo/operation/shared/executable_transaction_label.rb +1 -1
  335. data/lib/mongo/operation/shared/idable.rb +1 -1
  336. data/lib/mongo/operation/shared/limited.rb +10 -2
  337. data/lib/mongo/operation/shared/object_id_generator.rb +1 -1
  338. data/lib/mongo/operation/shared/op_msg_or_command.rb +8 -6
  339. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +9 -7
  340. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +9 -7
  341. data/lib/mongo/operation/shared/polymorphic_lookup.rb +1 -1
  342. data/lib/mongo/operation/shared/polymorphic_result.rb +1 -1
  343. data/lib/mongo/operation/shared/read_preference_supported.rb +74 -22
  344. data/lib/mongo/operation/shared/response_handling.rb +84 -9
  345. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -1
  346. data/lib/mongo/operation/shared/result/use_legacy_error_parser.rb +1 -1
  347. data/lib/mongo/operation/shared/sessions_supported.rb +86 -22
  348. data/lib/mongo/operation/shared/specifiable.rb +32 -20
  349. data/lib/mongo/operation/shared/write.rb +33 -20
  350. data/lib/mongo/operation/shared/write_concern_supported.rb +6 -6
  351. data/lib/mongo/operation/update.rb +1 -1
  352. data/lib/mongo/operation/update/bulk_result.rb +1 -1
  353. data/lib/mongo/operation/update/command.rb +4 -4
  354. data/lib/mongo/operation/update/legacy.rb +2 -2
  355. data/lib/mongo/operation/update/legacy/result.rb +1 -1
  356. data/lib/mongo/operation/update/op_msg.rb +5 -5
  357. data/lib/mongo/operation/update/result.rb +2 -2
  358. data/lib/mongo/operation/update_user.rb +1 -1
  359. data/lib/mongo/operation/update_user/command.rb +4 -4
  360. data/lib/mongo/operation/update_user/op_msg.rb +2 -2
  361. data/lib/mongo/operation/users_info.rb +1 -1
  362. data/lib/mongo/operation/users_info/command.rb +4 -4
  363. data/lib/mongo/operation/users_info/op_msg.rb +2 -2
  364. data/lib/mongo/operation/users_info/result.rb +1 -1
  365. data/lib/mongo/options.rb +1 -1
  366. data/lib/mongo/options/mapper.rb +1 -1
  367. data/lib/mongo/options/redacted.rb +1 -1
  368. data/lib/mongo/protocol/bit_vector.rb +3 -2
  369. data/lib/mongo/protocol/compressed.rb +7 -6
  370. data/lib/mongo/protocol/delete.rb +1 -1
  371. data/lib/mongo/protocol/get_more.rb +1 -1
  372. data/lib/mongo/protocol/insert.rb +4 -2
  373. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  374. data/lib/mongo/protocol/message.rb +95 -16
  375. data/lib/mongo/protocol/msg.rb +189 -38
  376. data/lib/mongo/protocol/query.rb +8 -10
  377. data/lib/mongo/protocol/registry.rb +1 -1
  378. data/lib/mongo/protocol/reply.rb +1 -1
  379. data/lib/mongo/protocol/serializers.rb +51 -16
  380. data/lib/mongo/protocol/update.rb +1 -1
  381. data/lib/mongo/retryable.rb +24 -11
  382. data/lib/mongo/semaphore.rb +1 -1
  383. data/lib/mongo/server.rb +42 -11
  384. data/lib/mongo/server/app_metadata.rb +17 -4
  385. data/lib/mongo/server/connection.rb +40 -126
  386. data/lib/mongo/server/connection_base.rb +106 -19
  387. data/lib/mongo/server/connection_common.rb +135 -0
  388. data/lib/mongo/server/connection_pool.rb +57 -2
  389. data/lib/mongo/server/connection_pool/populator.rb +2 -2
  390. data/lib/mongo/server/context.rb +1 -1
  391. data/lib/mongo/server/description.rb +53 -13
  392. data/lib/mongo/server/description/features.rb +12 -3
  393. data/lib/mongo/server/monitor.rb +118 -72
  394. data/lib/mongo/server/monitor/app_metadata.rb +1 -1
  395. data/lib/mongo/server/monitor/connection.rb +62 -96
  396. data/lib/mongo/server/pending_connection.rb +204 -1
  397. data/lib/mongo/server/round_trip_time_averager.rb +12 -3
  398. data/lib/mongo/server_selector.rb +2 -1
  399. data/lib/mongo/server_selector/base.rb +40 -0
  400. data/lib/mongo/server_selector/nearest.rb +25 -15
  401. data/lib/mongo/server_selector/primary.rb +23 -22
  402. data/lib/mongo/server_selector/primary_preferred.rb +25 -15
  403. data/lib/mongo/server_selector/secondary.rb +25 -15
  404. data/lib/mongo/server_selector/secondary_preferred.rb +28 -27
  405. data/lib/mongo/server_selector/selectable.rb +30 -15
  406. data/lib/mongo/session.rb +15 -4
  407. data/lib/mongo/session/server_session.rb +1 -1
  408. data/lib/mongo/session/session_pool.rb +9 -4
  409. data/lib/mongo/socket.rb +120 -30
  410. data/lib/mongo/socket/ssl.rb +110 -32
  411. data/lib/mongo/socket/tcp.rb +41 -24
  412. data/lib/mongo/socket/unix.rb +14 -6
  413. data/lib/mongo/srv.rb +1 -1
  414. data/lib/mongo/srv/monitor.rb +74 -43
  415. data/lib/mongo/srv/resolver.rb +1 -1
  416. data/lib/mongo/srv/result.rb +1 -2
  417. data/lib/mongo/timeout.rb +49 -0
  418. data/lib/mongo/topology_version.rb +80 -0
  419. data/lib/mongo/uri.rb +84 -41
  420. data/lib/mongo/uri/srv_protocol.rb +10 -2
  421. data/lib/mongo/version.rb +2 -2
  422. data/lib/mongo/write_concern.rb +1 -1
  423. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  424. data/lib/mongo/write_concern/base.rb +1 -1
  425. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  426. data/mongo.gemspec +2 -4
  427. data/spec/NOTES.aws-auth.md +291 -0
  428. data/spec/README.aws-auth.md +318 -0
  429. data/spec/README.md +282 -14
  430. data/spec/integration/auth_spec.rb +74 -1
  431. data/spec/integration/aws_auth_request_spec.rb +74 -0
  432. data/spec/integration/aws_credentials_retriever_spec.rb +103 -0
  433. data/spec/integration/bson_symbol_spec.rb +34 -0
  434. data/spec/integration/change_stream_spec.rb +123 -51
  435. data/spec/integration/{client_options_spec.rb → client_authentication_options_spec.rb} +15 -15
  436. data/spec/integration/client_construction_aws_auth_spec.rb +191 -0
  437. data/spec/integration/client_construction_spec.rb +101 -2
  438. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +353 -0
  439. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +303 -0
  440. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +72 -0
  441. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +79 -0
  442. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +221 -0
  443. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +601 -0
  444. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +187 -0
  445. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +78 -0
  446. data/spec/integration/client_side_encryption/client_close_spec.rb +63 -0
  447. data/spec/integration/client_side_encryption/corpus_spec.rb +233 -0
  448. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +132 -0
  449. data/spec/integration/client_side_encryption/data_key_spec.rb +165 -0
  450. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +114 -0
  451. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +141 -0
  452. data/spec/integration/client_side_encryption/views_spec.rb +44 -0
  453. data/spec/integration/client_update_spec.rb +154 -0
  454. data/spec/integration/collection_indexes_prose_spec.rb +55 -0
  455. data/spec/integration/command_monitoring_spec.rb +33 -7
  456. data/spec/integration/command_spec.rb +55 -19
  457. data/spec/integration/connect_single_rs_name_spec.rb +5 -3
  458. data/spec/integration/connection_spec.rb +115 -9
  459. data/spec/integration/crud_spec.rb +162 -0
  460. data/spec/integration/cursor_reaping_spec.rb +16 -11
  461. data/spec/integration/fork_reconnect_spec.rb +143 -0
  462. data/spec/integration/get_more_spec.rb +10 -3
  463. data/spec/integration/heartbeat_events_spec.rb +1 -1
  464. data/spec/integration/read_preference_spec.rb +67 -11
  465. data/spec/integration/reconnect_spec.rb +7 -7
  466. data/spec/integration/retryable_errors_spec.rb +35 -16
  467. data/spec/integration/{retryable_writes_spec.rb → retryable_writes/retryable_writes_36_and_older_spec.rb} +55 -51
  468. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +401 -0
  469. data/spec/integration/retryable_writes/shared/adds_diagnostics.rb +15 -0
  470. data/spec/integration/retryable_writes/shared/does_not_support_retries.rb +24 -0
  471. data/spec/integration/retryable_writes/shared/only_supports_legacy_retries.rb +25 -0
  472. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +215 -0
  473. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +232 -0
  474. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +110 -0
  475. data/spec/integration/retryable_writes/shared/supports_legacy_retries.rb +19 -0
  476. data/spec/integration/retryable_writes/shared/supports_modern_retries.rb +25 -0
  477. data/spec/integration/retryable_writes/shared/supports_retries.rb +16 -0
  478. data/spec/integration/sdam_error_handling_spec.rb +116 -18
  479. data/spec/integration/sdam_events_spec.rb +1 -0
  480. data/spec/integration/server_spec.rb +42 -26
  481. data/spec/integration/size_limit_spec.rb +94 -0
  482. data/spec/integration/srv_monitoring_spec.rb +16 -8
  483. data/spec/integration/step_down_spec.rb +15 -15
  484. data/spec/integration/transactions_api_examples_spec.rb +59 -0
  485. data/spec/integration/transactions_examples_spec.rb +5 -2
  486. data/spec/integration/x509_auth_spec.rb +109 -0
  487. data/spec/kerberos/kerberos_spec.rb +91 -0
  488. data/spec/lite_spec_helper.rb +41 -33
  489. data/spec/mongo/address/ipv4_spec.rb +1 -1
  490. data/spec/mongo/address_spec.rb +20 -14
  491. data/spec/mongo/auth/cr_spec.rb +15 -7
  492. data/spec/mongo/auth/gssapi/conversation_spec.rb +121 -0
  493. data/spec/mongo/auth/invalid_mechanism_spec.rb +1 -1
  494. data/spec/mongo/auth/ldap/conversation_spec.rb +1 -1
  495. data/spec/mongo/auth/ldap_spec.rb +8 -4
  496. data/spec/mongo/auth/scram/conversation_spec.rb +120 -334
  497. data/spec/mongo/auth/scram256/conversation_spec.rb +171 -0
  498. data/spec/mongo/auth/{scram/negotiation_spec.rb → scram_negotiation_spec.rb} +79 -75
  499. data/spec/mongo/auth/scram_spec.rb +55 -85
  500. data/spec/mongo/auth/user/view_spec.rb +39 -7
  501. data/spec/mongo/auth/user_spec.rb +13 -1
  502. data/spec/mongo/auth/x509/conversation_spec.rb +1 -1
  503. data/spec/mongo/auth/x509_spec.rb +13 -9
  504. data/spec/mongo/auth_spec.rb +4 -4
  505. data/spec/mongo/bulk_write/result_spec.rb +11 -7
  506. data/spec/mongo/bulk_write_spec.rb +208 -4
  507. data/spec/mongo/client_construction_spec.rb +496 -88
  508. data/spec/mongo/client_encryption_spec.rb +405 -0
  509. data/spec/mongo/client_spec.rb +21 -2
  510. data/spec/mongo/cluster/cursor_reaper_spec.rb +12 -8
  511. data/spec/mongo/cluster/socket_reaper_spec.rb +14 -3
  512. data/spec/mongo/cluster_spec.rb +23 -2
  513. data/spec/mongo/collection/view/aggregation_spec.rb +6 -4
  514. data/spec/mongo/collection/view/builder/find_command_spec.rb +17 -6
  515. data/spec/mongo/collection/view/change_stream_resume_spec.rb +392 -0
  516. data/spec/mongo/collection/view/change_stream_spec.rb +3 -321
  517. data/spec/mongo/collection/view/iterable_spec.rb +38 -0
  518. data/spec/mongo/collection/view/map_reduce_spec.rb +9 -5
  519. data/spec/mongo/collection/view/readable_spec.rb +15 -1
  520. data/spec/mongo/collection/view/writable_spec.rb +208 -1
  521. data/spec/mongo/collection/view_spec.rb +1 -1
  522. data/spec/mongo/collection_spec.rb +35 -52
  523. data/spec/mongo/crypt/auto_decryption_context_spec.rb +90 -0
  524. data/spec/mongo/crypt/auto_encrypter_spec.rb +187 -0
  525. data/spec/mongo/crypt/auto_encryption_context_spec.rb +107 -0
  526. data/spec/mongo/crypt/binary_spec.rb +115 -0
  527. data/spec/mongo/crypt/binding/binary_spec.rb +56 -0
  528. data/spec/mongo/crypt/binding/context_spec.rb +257 -0
  529. data/spec/mongo/crypt/binding/helpers_spec.rb +46 -0
  530. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +144 -0
  531. data/spec/mongo/crypt/binding/status_spec.rb +99 -0
  532. data/spec/mongo/crypt/binding/version_spec.rb +22 -0
  533. data/spec/mongo/crypt/binding_unloaded_spec.rb +20 -0
  534. data/spec/mongo/crypt/data_key_context_spec.rb +213 -0
  535. data/spec/mongo/crypt/encryption_io_spec.rb +136 -0
  536. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +72 -0
  537. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +170 -0
  538. data/spec/mongo/crypt/handle_spec.rb +232 -0
  539. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +108 -0
  540. data/spec/mongo/crypt/status_spec.rb +152 -0
  541. data/spec/mongo/cursor/builder/get_more_command_spec.rb +6 -1
  542. data/spec/mongo/cursor/builder/op_get_more_spec.rb +6 -1
  543. data/spec/mongo/cursor/builder/op_kill_cursors_spec.rb +61 -0
  544. data/spec/mongo/cursor_spec.rb +33 -5
  545. data/spec/mongo/database_spec.rb +26 -2
  546. data/spec/mongo/error/bulk_write_error_spec.rb +49 -0
  547. data/spec/mongo/error/crypt_error_spec.rb +26 -0
  548. data/spec/mongo/error/max_bson_size_spec.rb +35 -0
  549. data/spec/mongo/error/no_server_available_spec.rb +11 -1
  550. data/spec/mongo/error/notable_spec.rb +59 -0
  551. data/spec/mongo/error/operation_failure_heavy_spec.rb +58 -0
  552. data/spec/mongo/error/operation_failure_spec.rb +130 -72
  553. data/spec/mongo/error/unsupported_option_spec.rb +54 -0
  554. data/spec/mongo/grid/fs_bucket_spec.rb +18 -0
  555. data/spec/mongo/grid/stream/write_spec.rb +32 -0
  556. data/spec/mongo/index/view_spec.rb +166 -0
  557. data/spec/mongo/operation/aggregate/result_spec.rb +6 -1
  558. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  559. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  560. data/spec/mongo/operation/command_spec.rb +3 -3
  561. data/spec/mongo/operation/create_index_spec.rb +3 -3
  562. data/spec/mongo/operation/create_user_spec.rb +3 -3
  563. data/spec/mongo/operation/delete/bulk_spec.rb +18 -6
  564. data/spec/mongo/operation/delete/op_msg_spec.rb +23 -20
  565. data/spec/mongo/operation/delete_spec.rb +7 -7
  566. data/spec/mongo/operation/drop_index_spec.rb +2 -2
  567. data/spec/mongo/operation/find/legacy_spec.rb +27 -6
  568. data/spec/mongo/operation/get_more_spec.rb +6 -1
  569. data/spec/mongo/operation/indexes_spec.rb +1 -1
  570. data/spec/mongo/operation/insert/bulk_spec.rb +21 -7
  571. data/spec/mongo/operation/insert/command_spec.rb +4 -0
  572. data/spec/mongo/operation/insert/op_msg_spec.rb +25 -20
  573. data/spec/mongo/operation/insert_spec.rb +12 -12
  574. data/spec/mongo/operation/limited_spec.rb +5 -3
  575. data/spec/mongo/operation/map_reduce_spec.rb +2 -2
  576. data/spec/mongo/operation/read_preference_legacy_spec.rb +363 -0
  577. data/spec/mongo/operation/read_preference_op_msg_spec.rb +304 -0
  578. data/spec/mongo/operation/remove_user_spec.rb +3 -3
  579. data/spec/mongo/operation/result_spec.rb +6 -1
  580. data/spec/mongo/operation/update/bulk_spec.rb +18 -6
  581. data/spec/mongo/operation/update/command_spec.rb +4 -0
  582. data/spec/mongo/operation/update/op_msg_spec.rb +25 -20
  583. data/spec/mongo/operation/update_spec.rb +7 -7
  584. data/spec/mongo/operation/update_user_spec.rb +1 -1
  585. data/spec/mongo/protocol/compressed_spec.rb +2 -3
  586. data/spec/mongo/protocol/delete_spec.rb +9 -8
  587. data/spec/mongo/protocol/get_more_spec.rb +9 -8
  588. data/spec/mongo/protocol/insert_spec.rb +9 -8
  589. data/spec/mongo/protocol/kill_cursors_spec.rb +6 -5
  590. data/spec/mongo/protocol/msg_spec.rb +57 -53
  591. data/spec/mongo/protocol/query_spec.rb +12 -12
  592. data/spec/mongo/protocol/registry_spec.rb +1 -1
  593. data/spec/mongo/protocol/reply_spec.rb +1 -1
  594. data/spec/mongo/protocol/update_spec.rb +10 -9
  595. data/spec/mongo/retryable_spec.rb +71 -70
  596. data/spec/mongo/server/app_metadata_shared.rb +56 -0
  597. data/spec/mongo/server/app_metadata_spec.rb +8 -1
  598. data/spec/mongo/server/connection_auth_spec.rb +31 -12
  599. data/spec/mongo/server/connection_pool_spec.rb +1 -32
  600. data/spec/mongo/server/connection_spec.rb +143 -74
  601. data/spec/mongo/server/monitor/app_metadata_spec.rb +8 -1
  602. data/spec/mongo/server/monitor/connection_spec.rb +7 -81
  603. data/spec/mongo/server/monitor_spec.rb +76 -17
  604. data/spec/mongo/server/round_trip_time_averager_spec.rb +5 -3
  605. data/spec/mongo/server_selector/nearest_spec.rb +1 -0
  606. data/spec/mongo/server_selector/primary_preferred_spec.rb +1 -0
  607. data/spec/mongo/server_selector/primary_spec.rb +18 -0
  608. data/spec/mongo/server_selector/secondary_preferred_spec.rb +18 -1
  609. data/spec/mongo/server_selector/secondary_spec.rb +1 -0
  610. data/spec/mongo/server_selector_spec.rb +0 -1
  611. data/spec/mongo/session/session_pool_spec.rb +7 -3
  612. data/spec/mongo/socket/ssl_spec.rb +134 -100
  613. data/spec/mongo/socket/tcp_spec.rb +3 -11
  614. data/spec/mongo/socket/unix_spec.rb +2 -2
  615. data/spec/mongo/socket_spec.rb +9 -9
  616. data/spec/mongo/srv/monitor_spec.rb +88 -69
  617. data/spec/mongo/timeout_spec.rb +39 -0
  618. data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
  619. data/spec/mongo/uri_spec.rb +74 -12
  620. data/spec/mongo/write_concern_spec.rb +13 -1
  621. data/spec/{support → runners}/auth.rb +19 -7
  622. data/spec/runners/change_streams/outcome.rb +42 -0
  623. data/spec/runners/change_streams/spec.rb +57 -0
  624. data/spec/runners/change_streams/test.rb +229 -0
  625. data/spec/{support → runners}/cmap.rb +1 -1
  626. data/spec/{support → runners}/cmap/verifier.rb +1 -1
  627. data/spec/{support → runners}/command_monitoring.rb +2 -2
  628. data/spec/runners/connection_string.rb +359 -4
  629. data/spec/{support → runners}/crud.rb +11 -11
  630. data/spec/{support → runners}/crud/context.rb +1 -1
  631. data/spec/{support → runners}/crud/operation.rb +127 -33
  632. data/spec/{support → runners}/crud/outcome.rb +1 -1
  633. data/spec/{support → runners}/crud/requirement.rb +1 -1
  634. data/spec/{support → runners}/crud/spec.rb +13 -1
  635. data/spec/{support → runners}/crud/test.rb +8 -26
  636. data/spec/runners/crud/test_base.rb +69 -0
  637. data/spec/{support → runners}/crud/verifier.rb +29 -13
  638. data/spec/{support → runners}/gridfs.rb +1 -1
  639. data/spec/{support/server_discovery_and_monitoring.rb → runners/sdam.rb} +41 -22
  640. data/spec/runners/sdam/verifier.rb +26 -8
  641. data/spec/{support → runners}/sdam_monitoring.rb +1 -1
  642. data/spec/{support → runners}/server_selection.rb +0 -0
  643. data/spec/{support → runners}/server_selection_rtt.rb +0 -0
  644. data/spec/{support → runners}/transactions.rb +10 -13
  645. data/spec/{support → runners}/transactions/context.rb +1 -1
  646. data/spec/{support → runners}/transactions/operation.rb +5 -1
  647. data/spec/{support → runners}/transactions/spec.rb +1 -1
  648. data/spec/{support → runners}/transactions/test.rb +82 -56
  649. data/spec/spec_helper.rb +0 -5
  650. data/spec/spec_tests/auth_spec.rb +5 -3
  651. data/spec/spec_tests/change_streams_spec.rb +39 -4
  652. data/spec/spec_tests/client_side_encryption_spec.rb +11 -0
  653. data/spec/spec_tests/cmap_spec.rb +5 -0
  654. data/spec/spec_tests/command_monitoring_spec.rb +3 -0
  655. data/spec/spec_tests/connection_string_spec.rb +3 -1
  656. data/spec/spec_tests/crud_spec.rb +2 -0
  657. data/spec/spec_tests/data/auth/connection-string.yml +69 -0
  658. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +30 -0
  659. data/spec/spec_tests/data/change_streams/change-streams-resume-errorLabels.yml +1105 -0
  660. data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +1107 -0
  661. data/spec/spec_tests/data/change_streams/change-streams.yml +5 -4
  662. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +134 -0
  663. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +526 -0
  664. data/spec/spec_tests/data/client_side_encryption/badSchema.yml +73 -0
  665. data/spec/spec_tests/data/client_side_encryption/basic.yml +116 -0
  666. data/spec/spec_tests/data/client_side_encryption/bulk.yml +88 -0
  667. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +100 -0
  668. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +42 -0
  669. data/spec/spec_tests/data/client_side_encryption/count.yml +61 -0
  670. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +59 -0
  671. data/spec/spec_tests/data/client_side_encryption/delete.yml +105 -0
  672. data/spec/spec_tests/data/client_side_encryption/distinct.yml +73 -0
  673. data/spec/spec_tests/data/client_side_encryption/explain.yml +64 -0
  674. data/spec/spec_tests/data/client_side_encryption/find.yml +119 -0
  675. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +57 -0
  676. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +57 -0
  677. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +57 -0
  678. data/spec/spec_tests/data/client_side_encryption/getMore.yml +68 -0
  679. data/spec/spec_tests/data/client_side_encryption/insert.yml +102 -0
  680. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +71 -0
  681. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +54 -0
  682. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +72 -0
  683. data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +69 -0
  684. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +20 -0
  685. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +49 -0
  686. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +64 -0
  687. data/spec/spec_tests/data/client_side_encryption/types.yml +527 -0
  688. data/spec/spec_tests/data/client_side_encryption/unsupportedCommand.yml +25 -0
  689. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +77 -0
  690. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +171 -0
  691. data/spec/spec_tests/data/crud_v2/aggregate-merge.yml +1 -1
  692. data/spec/spec_tests/data/crud_v2/bulkWrite-arrayFilters.yml +33 -11
  693. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-clientError.yml +63 -0
  694. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint-serverError.yml +92 -0
  695. data/spec/spec_tests/data/crud_v2/bulkWrite-delete-hint.yml +103 -0
  696. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-clientError.yml +90 -0
  697. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint-serverError.yml +147 -0
  698. data/spec/spec_tests/data/crud_v2/bulkWrite-update-hint.yml +164 -0
  699. data/spec/spec_tests/data/crud_v2/deleteMany-hint-clientError.yml +43 -0
  700. data/spec/spec_tests/data/crud_v2/deleteMany-hint-serverError.yml +62 -0
  701. data/spec/spec_tests/data/crud_v2/deleteMany-hint.yml +58 -0
  702. data/spec/spec_tests/data/crud_v2/deleteOne-hint-clientError.yml +41 -0
  703. data/spec/spec_tests/data/crud_v2/deleteOne-hint-serverError.yml +60 -0
  704. data/spec/spec_tests/data/crud_v2/deleteOne-hint.yml +57 -0
  705. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-clientError.yml +28 -0
  706. data/spec/spec_tests/data/crud_v2/find-allowdiskuse-serverError.yml +44 -0
  707. data/spec/spec_tests/data/crud_v2/find-allowdiskuse.yml +50 -0
  708. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-clientError.yml +45 -0
  709. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint-serverError.yml +60 -0
  710. data/spec/spec_tests/data/crud_v2/findOneAndDelete-hint.yml +56 -0
  711. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-clientError.yml +40 -0
  712. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint-serverError.yml +59 -0
  713. data/spec/spec_tests/data/crud_v2/findOneAndReplace-hint.yml +55 -0
  714. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-clientError.yml +40 -0
  715. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint-serverError.yml +58 -0
  716. data/spec/spec_tests/data/crud_v2/findOneAndUpdate-hint.yml +55 -0
  717. data/spec/spec_tests/data/crud_v2/replaceOne-hint.yml +61 -0
  718. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-delete-hint-clientError.yml +60 -0
  719. data/spec/spec_tests/data/crud_v2/unacknowledged-bulkWrite-update-hint-clientError.yml +88 -0
  720. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteMany-hint-clientError.yml +40 -0
  721. data/spec/spec_tests/data/crud_v2/unacknowledged-deleteOne-hint-clientError.yml +38 -0
  722. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndDelete-hint-clientError.yml +42 -0
  723. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndReplace-hint-clientError.yml +40 -0
  724. data/spec/spec_tests/data/crud_v2/unacknowledged-findOneAndUpdate-hint-clientError.yml +40 -0
  725. data/spec/spec_tests/data/crud_v2/unacknowledged-replaceOne-hint-clientError.yml +40 -0
  726. data/spec/spec_tests/data/crud_v2/unacknowledged-updateMany-hint-clientError.yml +43 -0
  727. data/spec/spec_tests/data/crud_v2/unacknowledged-updateOne-hint-clientError.yml +40 -0
  728. data/spec/spec_tests/data/crud_v2/updateMany-hint-clientError.yml +45 -0
  729. data/spec/spec_tests/data/crud_v2/updateMany-hint-serverError.yml +66 -0
  730. data/spec/spec_tests/data/crud_v2/updateMany-hint.yml +65 -0
  731. data/spec/spec_tests/data/crud_v2/updateOne-hint-clientError.yml +43 -0
  732. data/spec/spec_tests/data/crud_v2/updateOne-hint-serverError.yml +62 -0
  733. data/spec/spec_tests/data/crud_v2/updateOne-hint.yml +61 -0
  734. data/spec/spec_tests/data/crud_v2/updateWithPipelines.yml +65 -0
  735. data/spec/spec_tests/data/dns_seedlist_discovery/direct-connection-false.yml +10 -0
  736. data/spec/spec_tests/data/dns_seedlist_discovery/direct-connection-true.yml +5 -0
  737. data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +1 -4
  738. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-2.6.yml +215 -0
  739. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.2.yml +58 -0
  740. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-3.4.yml +95 -0
  741. data/spec/spec_tests/data/read_write_concern/operation/default-write-concern-4.2.yml +36 -0
  742. data/spec/spec_tests/data/retryable_writes/bulkWrite-errorLabels.yml +77 -0
  743. data/spec/spec_tests/data/retryable_writes/bulkWrite-serverErrors.yml +37 -0
  744. data/spec/spec_tests/data/retryable_writes/deleteOne-errorLabels.yml +48 -0
  745. data/spec/spec_tests/data/retryable_writes/deleteOne-serverErrors.yml +22 -0
  746. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-errorLabels.yml +49 -0
  747. data/spec/spec_tests/data/retryable_writes/findOneAndDelete-serverErrors.yml +23 -0
  748. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-errorLabels.yml +52 -0
  749. data/spec/spec_tests/data/retryable_writes/findOneAndReplace-serverErrors.yml +25 -0
  750. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-errorLabels.yml +52 -0
  751. data/spec/spec_tests/data/retryable_writes/findOneAndUpdate-serverErrors.yml +24 -0
  752. data/spec/spec_tests/data/retryable_writes/insertMany-errorLabels.yml +54 -0
  753. data/spec/spec_tests/data/retryable_writes/insertMany-serverErrors.yml +24 -0
  754. data/spec/spec_tests/data/retryable_writes/insertOne-errorLabels.yml +44 -0
  755. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +90 -0
  756. data/spec/spec_tests/data/retryable_writes/replaceOne-errorLabels.yml +53 -0
  757. data/spec/spec_tests/data/retryable_writes/replaceOne-serverErrors.yml +23 -0
  758. data/spec/spec_tests/data/retryable_writes/updateOne-errorLabels.yml +53 -0
  759. data/spec/spec_tests/data/retryable_writes/updateOne-serverErrors.yml +23 -0
  760. data/spec/spec_tests/data/sdam/errors/error_handling_handshake.yml +54 -0
  761. data/spec/spec_tests/data/sdam/errors/non-stale-network-error.yml +46 -0
  762. data/spec/spec_tests/data/sdam/errors/non-stale-network-timeout-error.yml +37 -0
  763. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedAtShutdown.yml +60 -0
  764. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-InterruptedDueToReplStateChange.yml +60 -0
  765. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMaster.yml +60 -0
  766. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterNoSlaveOk.yml +60 -0
  767. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-NotMasterOrSecondary.yml +60 -0
  768. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-PrimarySteppedDown.yml +60 -0
  769. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-greater-ShutdownInProgress.yml +60 -0
  770. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedAtShutdown.yml +51 -0
  771. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-InterruptedDueToReplStateChange.yml +51 -0
  772. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMaster.yml +51 -0
  773. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterNoSlaveOk.yml +51 -0
  774. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-NotMasterOrSecondary.yml +51 -0
  775. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-PrimarySteppedDown.yml +51 -0
  776. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-missing-ShutdownInProgress.yml +51 -0
  777. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedAtShutdown.yml +60 -0
  778. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-InterruptedDueToReplStateChange.yml +60 -0
  779. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMaster.yml +60 -0
  780. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterNoSlaveOk.yml +60 -0
  781. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-NotMasterOrSecondary.yml +60 -0
  782. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-PrimarySteppedDown.yml +60 -0
  783. data/spec/spec_tests/data/sdam/errors/non-stale-topologyVersion-proccessId-changed-ShutdownInProgress.yml +60 -0
  784. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedAtShutdown.yml +46 -0
  785. data/spec/spec_tests/data/sdam/errors/post-42-InterruptedDueToReplStateChange.yml +46 -0
  786. data/spec/spec_tests/data/sdam/errors/post-42-NotMaster.yml +46 -0
  787. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterNoSlaveOk.yml +46 -0
  788. data/spec/spec_tests/data/sdam/errors/post-42-NotMasterOrSecondary.yml +46 -0
  789. data/spec/spec_tests/data/sdam/errors/post-42-PrimarySteppedDown.yml +46 -0
  790. data/spec/spec_tests/data/sdam/errors/post-42-ShutdownInProgress.yml +46 -0
  791. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedAtShutdown.yml +46 -0
  792. data/spec/spec_tests/data/sdam/errors/pre-42-InterruptedDueToReplStateChange.yml +46 -0
  793. data/spec/spec_tests/data/sdam/errors/pre-42-NotMaster.yml +46 -0
  794. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterNoSlaveOk.yml +46 -0
  795. data/spec/spec_tests/data/sdam/errors/pre-42-NotMasterOrSecondary.yml +46 -0
  796. data/spec/spec_tests/data/sdam/errors/pre-42-PrimarySteppedDown.yml +46 -0
  797. data/spec/spec_tests/data/sdam/errors/pre-42-ShutdownInProgress.yml +46 -0
  798. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedAtShutdown.yml +89 -0
  799. data/spec/spec_tests/data/sdam/errors/stale-generation-InterruptedDueToReplStateChange.yml +89 -0
  800. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMaster.yml +89 -0
  801. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterNoSlaveOk.yml +89 -0
  802. data/spec/spec_tests/data/sdam/errors/stale-generation-NotMasterOrSecondary.yml +89 -0
  803. data/spec/spec_tests/data/sdam/errors/stale-generation-PrimarySteppedDown.yml +89 -0
  804. data/spec/spec_tests/data/sdam/errors/stale-generation-ShutdownInProgress.yml +89 -0
  805. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedAtShutdown.yml +89 -0
  806. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-InterruptedDueToReplStateChange.yml +89 -0
  807. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMaster.yml +89 -0
  808. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterNoSlaveOk.yml +89 -0
  809. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-NotMasterOrSecondary.yml +89 -0
  810. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-PrimarySteppedDown.yml +89 -0
  811. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-ShutdownInProgress.yml +89 -0
  812. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-network.yml +80 -0
  813. data/spec/spec_tests/data/sdam/errors/stale-generation-afterHandshakeCompletes-timeout.yml +80 -0
  814. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedAtShutdown.yml +89 -0
  815. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-InterruptedDueToReplStateChange.yml +89 -0
  816. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMaster.yml +89 -0
  817. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterNoSlaveOk.yml +89 -0
  818. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-NotMasterOrSecondary.yml +89 -0
  819. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-PrimarySteppedDown.yml +89 -0
  820. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-ShutdownInProgress.yml +89 -0
  821. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-network.yml +80 -0
  822. data/spec/spec_tests/data/sdam/errors/stale-generation-beforeHandshakeCompletes-timeout.yml +80 -0
  823. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedAtShutdown.yml +64 -0
  824. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-InterruptedDueToReplStateChange.yml +64 -0
  825. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMaster.yml +64 -0
  826. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterNoSlaveOk.yml +64 -0
  827. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-NotMasterOrSecondary.yml +64 -0
  828. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-PrimarySteppedDown.yml +64 -0
  829. data/spec/spec_tests/data/sdam/errors/stale-topologyVersion-ShutdownInProgress.yml +64 -0
  830. data/spec/spec_tests/data/sdam/rs/compatible.yml +2 -0
  831. data/spec/spec_tests/data/sdam/rs/compatible_unknown.yml +2 -0
  832. data/spec/spec_tests/data/sdam/rs/discover_arbiters.yml +2 -2
  833. data/spec/spec_tests/data/sdam/rs/discover_arbiters_replicaset.yml +43 -0
  834. data/spec/spec_tests/data/sdam/rs/discover_ghost.yml +35 -0
  835. data/spec/spec_tests/data/sdam/rs/{ghost_discovered.yml → discover_ghost_replicaset.yml} +1 -1
  836. data/spec/spec_tests/data/sdam/rs/discover_hidden.yml +50 -0
  837. data/spec/spec_tests/data/sdam/rs/discover_hidden_replicaset.yml +50 -0
  838. data/spec/spec_tests/data/sdam/rs/discover_passives.yml +2 -2
  839. data/spec/spec_tests/data/sdam/rs/discover_passives_replicaset.yml +81 -0
  840. data/spec/spec_tests/data/sdam/rs/discover_primary.yml +2 -2
  841. data/spec/spec_tests/data/sdam/rs/discover_primary_replicaset.yml +42 -0
  842. data/spec/spec_tests/data/sdam/rs/discover_rsother.yml +49 -0
  843. data/spec/spec_tests/data/sdam/rs/{rsother_discovered.yml → discover_rsother_replicaset.yml} +1 -1
  844. data/spec/spec_tests/data/sdam/rs/discover_secondary.yml +2 -2
  845. data/spec/spec_tests/data/sdam/rs/discover_secondary_replicaset.yml +43 -0
  846. data/spec/spec_tests/data/sdam/rs/incompatible_arbiter.yml +2 -0
  847. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +4 -4
  848. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +3 -1
  849. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me.yml +23 -27
  850. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +73 -0
  851. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +79 -56
  852. data/spec/spec_tests/data/sdam/rs/repeated.yml +101 -0
  853. data/spec/spec_tests/data/sdam/rs/replicaset_rsnp.yml +20 -0
  854. data/spec/spec_tests/data/sdam/rs/{primary_address_change.yml → ruby_primary_address_change.yml} +2 -0
  855. data/spec/spec_tests/data/sdam/rs/{secondary_wrong_set_name_with_primary_second.yml → ruby_secondary_wrong_set_name_with_primary_second.yml} +0 -0
  856. data/spec/spec_tests/data/sdam/rs/secondary_mismatched_me.yml +3 -2
  857. data/spec/spec_tests/data/sdam/rs/too_new.yml +2 -0
  858. data/spec/spec_tests/data/sdam/rs/topology_version_equal.yml +66 -0
  859. data/spec/spec_tests/data/sdam/rs/topology_version_greater.yml +189 -0
  860. data/spec/spec_tests/data/sdam/rs/topology_version_less.yml +62 -0
  861. data/spec/spec_tests/data/sdam/sharded/discover_single_mongos.yml +23 -0
  862. data/spec/spec_tests/data/sdam/sharded/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
  863. data/spec/spec_tests/data/sdam/sharded/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
  864. data/spec/spec_tests/data/sdam/single/direct_connection_external_ip.yml +1 -1
  865. data/spec/spec_tests/data/sdam/single/direct_connection_mongos.yml +2 -2
  866. data/spec/spec_tests/data/sdam/single/direct_connection_replicaset.yml +22 -0
  867. data/spec/spec_tests/data/sdam/single/direct_connection_rsarbiter.yml +2 -2
  868. data/spec/spec_tests/data/sdam/single/direct_connection_rsprimary.yml +2 -2
  869. data/spec/spec_tests/data/sdam/single/direct_connection_rssecondary.yml +2 -2
  870. data/spec/spec_tests/data/sdam/single/direct_connection_slave.yml +1 -1
  871. data/spec/spec_tests/data/sdam/single/direct_connection_standalone.yml +2 -2
  872. data/spec/spec_tests/data/sdam/single/{unavailable_seed.yml → direct_connection_unavailable_seed.yml} +2 -2
  873. data/spec/spec_tests/data/sdam/single/direct_connection_wrong_set_name.yml +38 -0
  874. data/spec/spec_tests/data/sdam/{sharded/single_mongos.yml → single/discover_standalone.yml} +7 -6
  875. data/spec/spec_tests/data/sdam/single/discover_unavailable_seed.yml +28 -0
  876. data/spec/spec_tests/data/sdam/single/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
  877. data/spec/spec_tests/data/sdam/single/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
  878. data/spec/spec_tests/data/sdam/single/too_old_then_upgraded.yml +46 -0
  879. data/spec/spec_tests/data/sdam_monitoring/{replica_set_with_primary_change.yml → replica_set_primary_address_change.yml} +27 -5
  880. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +26 -74
  881. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +20 -16
  882. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +73 -0
  883. data/spec/spec_tests/data/transactions/create-collection.yml +131 -0
  884. data/spec/spec_tests/data/transactions/create-index.yml +152 -0
  885. data/spec/spec_tests/data/transactions/error-labels.yml +87 -21
  886. data/spec/spec_tests/data/transactions/mongos-recovery-token.yml +1 -0
  887. data/spec/spec_tests/data/transactions/pin-mongos.yml +2 -3
  888. data/spec/spec_tests/data/transactions/retryable-abort-errorLabels.yml +124 -0
  889. data/spec/spec_tests/data/transactions/retryable-abort.yml +17 -2
  890. data/spec/spec_tests/data/transactions/retryable-commit-errorLabels.yml +132 -0
  891. data/spec/spec_tests/data/transactions/retryable-commit.yml +24 -9
  892. data/spec/spec_tests/data/uri_options/auth-options.yml +10 -0
  893. data/spec/spec_tests/data/uri_options/connection-options.yml +43 -0
  894. data/spec/spec_tests/data/uri_options/ruby-auth-options.yml +12 -0
  895. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +57 -0
  896. data/spec/spec_tests/data/uri_options/tls-options.yml +75 -4
  897. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +3 -1
  898. data/spec/spec_tests/gridfs_spec.rb +2 -0
  899. data/spec/spec_tests/max_staleness_spec.rb +3 -1
  900. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +3 -1
  901. data/spec/spec_tests/read_write_concern_operaton_spec.rb +10 -0
  902. data/spec/spec_tests/retryable_reads_spec.rb +2 -0
  903. data/spec/spec_tests/retryable_writes_spec.rb +8 -1
  904. data/spec/spec_tests/sdam_monitoring_spec.rb +3 -1
  905. data/spec/spec_tests/sdam_spec.rb +70 -1
  906. data/spec/spec_tests/server_selection_rtt_spec.rb +2 -0
  907. data/spec/spec_tests/server_selection_spec.rb +2 -0
  908. data/spec/spec_tests/transactions_api_spec.rb +5 -0
  909. data/spec/spec_tests/transactions_spec.rb +5 -0
  910. data/spec/spec_tests/uri_options_spec.rb +8 -8
  911. data/spec/stress/cleanup_spec.rb +43 -0
  912. data/spec/stress/connection_pool_stress_spec.rb +1 -5
  913. data/spec/stress/connection_pool_timing_spec.rb +9 -9
  914. data/spec/stress/fork_reconnect_stress_spec.rb +109 -0
  915. data/spec/support/authorization.rb +1 -11
  916. data/spec/support/aws_utils.rb +62 -0
  917. data/spec/support/aws_utils/base.rb +134 -0
  918. data/spec/support/aws_utils/inspector.rb +224 -0
  919. data/spec/support/aws_utils/orchestrator.rb +370 -0
  920. data/spec/support/aws_utils/provisioner.rb +360 -0
  921. data/spec/support/background_thread_registry.rb +6 -2
  922. data/spec/support/certificates/README.md +4 -0
  923. data/spec/support/certificates/server-second-level-bundle.pem +77 -77
  924. data/spec/support/certificates/server-second-level.crt +52 -52
  925. data/spec/support/certificates/server-second-level.key +25 -25
  926. data/spec/support/certificates/server-second-level.pem +77 -77
  927. data/spec/support/client_registry.rb +24 -27
  928. data/spec/support/cluster_config.rb +10 -1
  929. data/spec/support/cluster_tools.rb +11 -4
  930. data/spec/support/common_shortcuts.rb +55 -0
  931. data/spec/support/constraints.rb +43 -7
  932. data/spec/support/crypt.rb +154 -0
  933. data/spec/support/crypt/corpus/corpus-key-aws.json +33 -0
  934. data/spec/support/crypt/corpus/corpus-key-local.json +31 -0
  935. data/spec/support/crypt/corpus/corpus-schema.json +2057 -0
  936. data/spec/support/crypt/corpus/corpus.json +3657 -0
  937. data/spec/support/crypt/corpus/corpus_encrypted.json +4152 -0
  938. data/spec/support/crypt/data_keys/key_document_aws.json +34 -0
  939. data/spec/support/crypt/data_keys/key_document_local.json +31 -0
  940. data/spec/support/crypt/external/external-key.json +31 -0
  941. data/spec/support/crypt/external/external-schema.json +19 -0
  942. data/spec/support/crypt/limits/limits-doc.json +102 -0
  943. data/spec/support/crypt/limits/limits-key.json +31 -0
  944. data/spec/support/crypt/limits/limits-schema.json +1405 -0
  945. data/spec/support/crypt/schema_maps/schema_map_aws.json +17 -0
  946. data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  947. data/spec/support/crypt/schema_maps/schema_map_local.json +18 -0
  948. data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +12 -0
  949. data/spec/support/event_subscriber.rb +94 -84
  950. data/spec/support/lite_constraints.rb +74 -1
  951. data/spec/support/matchers.rb +19 -0
  952. data/spec/support/shared/protocol.rb +2 -0
  953. data/spec/support/shared/scram_conversation.rb +100 -0
  954. data/spec/support/shared/server_selector.rb +81 -1
  955. data/spec/support/shared/session.rb +29 -21
  956. data/spec/support/spec_config.rb +92 -22
  957. data/spec/support/spec_setup.rb +8 -4
  958. data/spec/support/utils.rb +263 -32
  959. metadata +1285 -682
  960. metadata.gz.sig +0 -0
  961. data/lib/mongo/cluster/srv_monitor.rb +0 -127
  962. data/lib/mongo/server/connectable.rb +0 -107
  963. data/lib/mongo/srv/warning_result.rb +0 -35
  964. data/spec/enterprise_auth/kerberos_spec.rb +0 -58
  965. data/spec/mongo/cluster/srv_monitor_spec.rb +0 -214
  966. data/spec/mongo/operation/read_preference_spec.rb +0 -245
  967. data/spec/support/change_streams.rb +0 -262
  968. data/spec/support/change_streams/operation.rb +0 -89
  969. data/spec/support/connection_string.rb +0 -354
  970. data/spec/support/crud/test_base.rb +0 -22
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015-2019 MongoDB, Inc.
1
+ # Copyright (C) 2015-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015-2019 MongoDB, Inc.
1
+ # Copyright (C) 2015-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015-2019 MongoDB, Inc.
1
+ # Copyright (C) 2015-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -92,7 +92,14 @@ module Mongo
92
92
  #
93
93
  # @since 2.3.0
94
94
  def get_cursors_list(spec)
95
- spec[:selector][:cursors].map(&:value)
95
+ spec[:selector][:cursors].map do |value|
96
+ if value.respond_to?(:value)
97
+ # bson-ruby >= 4.6.0
98
+ value = value.value
99
+ else
100
+ value = value.instance_variable_get('@integer')
101
+ end
102
+ end
96
103
  end
97
104
  end
98
105
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015-2019 MongoDB, Inc.
1
+ # Copyright (C) 2015-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015-2019 MongoDB, Inc.
1
+ # Copyright (C) 2015-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -87,7 +87,14 @@ module Mongo
87
87
  #
88
88
  # @since 2.3.0
89
89
  def get_cursors_list(spec)
90
- spec[:cursor_ids].map(&:value)
90
+ spec[:cursor_ids].map do |value|
91
+ if value.respond_to?(:value)
92
+ # bson-ruby >= 4.6.0
93
+ value.value
94
+ else
95
+ value.instance_variable_get('@integer')
96
+ end
97
+ end
91
98
  end
92
99
  end
93
100
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014-2019 MongoDB, Inc.
1
+ # Copyright (C) 2014-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -126,12 +126,18 @@ module Mongo
126
126
  # information hash per collection, depends on the MongoDB server
127
127
  # version that fulfills the request.
128
128
  #
129
+ # @param [ Hash ] options
130
+ #
131
+ # @option options [ Hash ] :filter A filter on the collections returned.
132
+ # See https://docs.mongodb.com/manual/reference/command/listCollections/
133
+ # for more information and usage.
134
+ #
129
135
  # @return [ Array<Hash> ] Array of information hashes, one for each
130
136
  # collection in the database.
131
137
  #
132
138
  # @since 2.0.5
133
- def list_collections
134
- View.new(self).list_collections
139
+ def list_collections(**options)
140
+ View.new(self).list_collections(**options)
135
141
  end
136
142
 
137
143
  # Get all the non-system collections that belong to this database.
@@ -156,9 +162,18 @@ module Mongo
156
162
  #
157
163
  # @option opts :read [ Hash ] The read preference for this command.
158
164
  # @option opts :session [ Session ] The session to use for this command.
165
+ # @option opts :execution_options [ Hash ] Options to pass to the code that
166
+ # executes this command. This is an internal option and is subject to
167
+ # change.
168
+ # - :deserialize_as_bson [ Boolean ] Whether to deserialize the response
169
+ # to this command using BSON types intead of native Ruby types wherever
170
+ # possible.
159
171
  #
160
172
  # @return [ Mongo::Operation::Result ] The result of the command execution.
161
173
  def command(operation, opts = {})
174
+ opts = opts.dup
175
+ execution_opts = opts.delete(:execution_options) || {}
176
+
162
177
  txn_read_pref = if opts[:session] && opts[:session].in_transaction?
163
178
  opts[:session].txn_read_preference
164
179
  else
@@ -170,12 +185,14 @@ module Mongo
170
185
 
171
186
  client.send(:with_session, opts) do |session|
172
187
  server = selector.select_server(cluster, nil, session)
173
- Operation::Command.new({
188
+ op = Operation::Command.new(
174
189
  :selector => operation.dup,
175
190
  :db_name => name,
176
191
  :read => selector,
177
192
  :session => session
178
- }).execute(server)
193
+ )
194
+
195
+ op.execute(server, client: client, options: execution_opts)
179
196
  end
180
197
  end
181
198
 
@@ -206,7 +223,7 @@ module Mongo
206
223
  :db_name => name,
207
224
  :read => preference,
208
225
  :session => session
209
- }).execute(server)
226
+ }).execute(server, client: client)
210
227
  end
211
228
  end
212
229
  end
@@ -231,7 +248,7 @@ module Mongo
231
248
  db_name: name,
232
249
  write_concern: write_concern,
233
250
  session: session
234
- }).execute(next_primary(nil, session))
251
+ }).execute(next_primary(nil, session), client: client)
235
252
  end
236
253
  end
237
254
 
@@ -249,6 +266,9 @@ module Mongo
249
266
  # @since 2.0.0
250
267
  def initialize(client, name, options = {})
251
268
  raise Error::InvalidDatabaseName.new unless name
269
+ if Lint.enabled? && !(name.is_a?(String) || name.is_a?(Symbol))
270
+ raise "Database name must be a string or a symbol: #{name}"
271
+ end
252
272
  @client = client
253
273
  @name = name.to_s.freeze
254
274
  @options = options.freeze
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014-2019 MongoDB, Inc.
1
+ # Copyright (C) 2014-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -58,7 +58,7 @@ module Mongo
58
58
  send_initial_query(server, session, name_only: true)
59
59
  end
60
60
  cursor.map do |info|
61
- if cursor.server.features.list_collections_enabled?
61
+ if cursor.server.with_connection { |connection| connection.features }.list_collections_enabled?
62
62
  info['name']
63
63
  else
64
64
  (info['name'] &&
@@ -78,12 +78,18 @@ module Mongo
78
78
  # @example Get info on each collection.
79
79
  # database.list_collections
80
80
  #
81
+ # @param [ Hash ] options
82
+ #
83
+ # @option options [ Hash ] :filter A filter on the collections returned.
84
+ # See https://docs.mongodb.com/manual/reference/command/listCollections/
85
+ # for more information and usage.
86
+ #
81
87
  # @return [ Array<Hash> ] Info for each collection in the database.
82
88
  #
83
89
  # @since 2.0.5
84
- def list_collections
90
+ def list_collections(**options)
85
91
  session = client.send(:get_session)
86
- collections_info(session, ServerSelector.primary)
92
+ collections_info(session, ServerSelector.primary, **options)
87
93
  end
88
94
 
89
95
  # Create the new database view.
@@ -157,7 +163,10 @@ module Mongo
157
163
  cursor: batch_size ? { batchSize: batch_size } : {} },
158
164
  db_name: @database.name,
159
165
  session: session
160
- }.tap { |spec| spec[:selector][:nameOnly] = true if options[:name_only] }
166
+ }.tap do |spec|
167
+ spec[:selector][:nameOnly] = true if options[:name_only]
168
+ spec[:selector][:filter] = options[:filter] if options[:filter]
169
+ end
161
170
  end
162
171
 
163
172
  def initial_query_op(session, options = {})
@@ -165,7 +174,7 @@ module Mongo
165
174
  end
166
175
 
167
176
  def send_initial_query(server, session, options = {})
168
- initial_query_op(session, options).execute(server)
177
+ initial_query_op(session, options).execute(server, client: client)
169
178
  end
170
179
  end
171
180
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015-2019 MongoDB, Inc.
1
+ # Copyright (C) 2015-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the 'License');
4
4
  # you may not use this file except in compliance with the License.
@@ -100,8 +100,15 @@ module Mongo
100
100
  # @see http://bsonspec.org/#/specification
101
101
  #
102
102
  # @since 2.0.0
103
- def from_bson(buffer)
104
- decoded = super
103
+ def from_bson(buffer, **options)
104
+ # bson-ruby 4.8.0 changes #from_bson API to take **options.
105
+ # However older bsons fail if invoked with a plain super here,
106
+ # even if options are empty.
107
+ decoded = if options.empty?
108
+ super(buffer)
109
+ else
110
+ super
111
+ end
105
112
  if ref = decoded[COLLECTION]
106
113
  decoded = DBRef.new(ref, decoded[ID], decoded[DATABASE])
107
114
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014-2019 MongoDB, Inc.
1
+ # Copyright (C) 2014-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -104,6 +104,7 @@ module Mongo
104
104
  def initialize(msg = nil)
105
105
  super
106
106
  @labels = []
107
+ @write_concern_error_labels = []
107
108
  end
108
109
 
109
110
  # Does the error have the given label?
@@ -120,6 +121,15 @@ module Mongo
120
121
  @labels.include?(label)
121
122
  end
122
123
 
124
+ # Does the write concern error have the given label?
125
+ #
126
+ # @param [ String ] label The label to check for the presence of.
127
+ #
128
+ # @return [ Boolean ] Whether the write concern error has the given label.
129
+ def write_concern_error_label?(label)
130
+ @write_concern_error_labels.include?(label)
131
+ end
132
+
123
133
  # Gets the set of labels associated with the error.
124
134
  #
125
135
  # @example
@@ -132,6 +142,13 @@ module Mongo
132
142
  @labels.dup
133
143
  end
134
144
 
145
+ # The set of error labels associated with the write concern error.
146
+ #
147
+ # @return [ Array<String> ] The list of error labels.
148
+ def write_concern_error_labels
149
+ @write_concern_error_labels.dup
150
+ end
151
+
135
152
  # Adds the specified label to the error instance, if the label is not
136
153
  # already in the set of labels.
137
154
  #
@@ -152,6 +169,9 @@ require 'mongo/error/change_stream_resumable'
152
169
  require 'mongo/error/bulk_write_error'
153
170
  require 'mongo/error/closed_stream'
154
171
  require 'mongo/error/connection_check_out_timeout'
172
+ require 'mongo/error/connection_perished'
173
+ require 'mongo/error/credential_check_error'
174
+ require 'mongo/error/crypt_error'
155
175
  require 'mongo/error/extra_file_chunk'
156
176
  require 'mongo/error/file_not_found'
157
177
  require 'mongo/error/operation_failure'
@@ -159,6 +179,7 @@ require 'mongo/error/invalid_address'
159
179
  require 'mongo/error/invalid_bulk_operation'
160
180
  require 'mongo/error/invalid_bulk_operation_type'
161
181
  require 'mongo/error/invalid_collection_name'
182
+ require 'mongo/error/invalid_cursor_operation'
162
183
  require 'mongo/error/invalid_database_name'
163
184
  require 'mongo/error/invalid_document'
164
185
  require 'mongo/error/invalid_file'
@@ -168,6 +189,7 @@ require 'mongo/error/invalid_read_option'
168
189
  require 'mongo/error/invalid_application_name'
169
190
  require 'mongo/error/invalid_nonce'
170
191
  require 'mongo/error/invalid_replacement_document'
192
+ require 'mongo/error/invalid_server_auth_response'
171
193
  require 'mongo/error/invalid_server_preference'
172
194
  require 'mongo/error/invalid_session'
173
195
  require 'mongo/error/invalid_signature'
@@ -177,27 +199,32 @@ require 'mongo/error/invalid_update_document'
177
199
  require 'mongo/error/invalid_uri'
178
200
  require 'mongo/error/invalid_write_concern'
179
201
  require 'mongo/error/insufficient_iteration_count'
202
+ require 'mongo/error/kms_error'
180
203
  require 'mongo/error/lint_error'
181
204
  require 'mongo/error/max_bson_size'
182
205
  require 'mongo/error/max_message_size'
183
206
  require 'mongo/error/mismatched_domain'
207
+ require 'mongo/error/mongocryptd_spawn_error'
184
208
  require 'mongo/error/multi_index_drop'
185
209
  require 'mongo/error/need_primary_server'
186
210
  require 'mongo/error/no_server_available'
187
211
  require 'mongo/error/no_srv_records'
188
212
  require 'mongo/error/session_ended'
189
213
  require 'mongo/error/pool_closed_error'
214
+ require 'mongo/error/raise_original_error'
190
215
  require 'mongo/error/socket_error'
191
216
  require 'mongo/error/socket_timeout_error'
192
- require 'mongo/error/failed_stringprep_validation'
217
+ require 'mongo/error/failed_string_prep_validation'
193
218
  require 'mongo/error/unchangeable_collection_option'
194
219
  require 'mongo/error/unexpected_chunk_length'
195
220
  require 'mongo/error/unexpected_response'
196
221
  require 'mongo/error/missing_file_chunk'
197
222
  require 'mongo/error/missing_password'
198
223
  require 'mongo/error/missing_resume_token'
199
- require 'mongo/error/unsupported_array_filters'
224
+ require 'mongo/error/missing_scram_server_signature'
200
225
  require 'mongo/error/unknown_payload_type'
226
+ require 'mongo/error/unsupported_option'
227
+ require 'mongo/error/unsupported_array_filters'
201
228
  require 'mongo/error/unsupported_collation'
202
229
  require 'mongo/error/unsupported_features'
203
230
  require 'mongo/error/unsupported_message_type'
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2018-2019 MongoDB, Inc.
1
+ # Copyright (C) 2018-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014-2019 MongoDB, Inc.
1
+ # Copyright (C) 2014-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -35,22 +35,24 @@ module Mongo
35
35
  # @since 2.0.0
36
36
  def initialize(result)
37
37
  @result = result
38
+ # Exception constructor behaves differently for a nil argument and
39
+ # for no argument. Avoid passing nil explicitly.
40
+ super(*[build_message])
38
41
  end
39
42
 
40
- def to_s
41
- messages = if errors = result['writeErrors']
42
- frag = ': ' + errors[0..10].map do |error|
43
- "#{error['errmsg']} (#{error['code']})"
44
- end.join(', ')
45
- if errors.length > 10
46
- frag += '...'
47
- else
48
- frag
49
- end
50
- else
51
- ''
52
- end
53
- "#{self.class}: #{messages}" + notes_tail
43
+ private
44
+
45
+ def build_message
46
+ errors = @result['writeErrors']
47
+ return nil unless errors
48
+
49
+ fragment = errors.first(10).map do |error|
50
+ "#{error['errmsg']} (#{error['code']})"
51
+ end.join(', ')
52
+
53
+ fragment += '...' if errors.length > 10
54
+
55
+ fragment
54
56
  end
55
57
  end
56
58
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2018-2019 MongoDB, Inc.
1
+ # Copyright (C) 2018-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2014-2019 MongoDB, Inc.
1
+ # Copyright (C) 2014-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2019 MongoDB, Inc.
1
+ # Copyright (C) 2019-2020 MongoDB Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -0,0 +1,23 @@
1
+ # Copyright (C) 2020 MongoDB Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Error
17
+
18
+ # Exception raised when trying to perform operations on a connection that
19
+ # experienced a network error.
20
+ class ConnectionPerished < Error
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,26 @@
1
+ # Copyright (C) 2020 MongoDB Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ module Mongo
16
+ class Error
17
+
18
+ # Credential check for MONGODB-AWS authentication mechanism failed.
19
+ #
20
+ # This exception is raised when the driver attempts to verify the
21
+ # credentials via STS prior to sending them to the server, and the
22
+ # verification fails due to an error response from the STS.
23
+ class CredentialCheckError < AuthError
24
+ end
25
+ end
26
+ end