mongo 2.5.3 → 2.6.0

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 (394) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/LICENSE +1 -1
  5. data/README.md +3 -2
  6. data/lib/mongo.rb +2 -2
  7. data/lib/mongo/address.rb +10 -2
  8. data/lib/mongo/address/ipv4.rb +1 -1
  9. data/lib/mongo/address/ipv6.rb +26 -5
  10. data/lib/mongo/address/unix.rb +1 -1
  11. data/lib/mongo/auth.rb +10 -3
  12. data/lib/mongo/auth/cr.rb +4 -1
  13. data/lib/mongo/auth/cr/conversation.rb +4 -1
  14. data/lib/mongo/auth/ldap.rb +1 -1
  15. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  16. data/lib/mongo/auth/roles.rb +1 -1
  17. data/lib/mongo/auth/scram.rb +24 -7
  18. data/lib/mongo/auth/scram/conversation.rb +52 -19
  19. data/lib/mongo/auth/stringprep.rb +114 -0
  20. data/lib/mongo/auth/stringprep/profiles/sasl.rb +73 -0
  21. data/lib/mongo/auth/stringprep/tables.rb +3232 -0
  22. data/lib/mongo/auth/stringprep/unicode_normalize/normalize.rb +174 -0
  23. data/lib/mongo/auth/stringprep/unicode_normalize/tables.rb +1170 -0
  24. data/lib/mongo/auth/user.rb +14 -3
  25. data/lib/mongo/auth/user/view.rb +1 -1
  26. data/lib/mongo/auth/x509.rb +1 -1
  27. data/lib/mongo/auth/x509/conversation.rb +1 -1
  28. data/lib/mongo/bson.rb +1 -1
  29. data/lib/mongo/bulk_write.rb +8 -8
  30. data/lib/mongo/bulk_write/combineable.rb +1 -1
  31. data/lib/mongo/bulk_write/ordered_combiner.rb +1 -1
  32. data/lib/mongo/bulk_write/result.rb +1 -1
  33. data/lib/mongo/bulk_write/result_combiner.rb +4 -4
  34. data/lib/mongo/bulk_write/transformable.rb +1 -1
  35. data/lib/mongo/bulk_write/unordered_combiner.rb +1 -1
  36. data/lib/mongo/bulk_write/validatable.rb +1 -1
  37. data/lib/mongo/client.rb +115 -24
  38. data/lib/mongo/cluster.rb +17 -10
  39. data/lib/mongo/cluster/app_metadata.rb +7 -1
  40. data/lib/mongo/cluster/periodic_executor.rb +1 -1
  41. data/lib/mongo/cluster/reapers/socket_reaper.rb +1 -1
  42. data/lib/mongo/cluster/topology.rb +12 -2
  43. data/lib/mongo/cluster/topology/replica_set.rb +9 -1
  44. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  45. data/lib/mongo/cluster/topology/single.rb +1 -1
  46. data/lib/mongo/cluster/topology/unknown.rb +1 -1
  47. data/lib/mongo/collection.rb +75 -19
  48. data/lib/mongo/collection/view.rb +1 -1
  49. data/lib/mongo/collection/view/aggregation.rb +1 -1
  50. data/lib/mongo/collection/view/builder.rb +1 -1
  51. data/lib/mongo/collection/view/builder/aggregation.rb +3 -3
  52. data/lib/mongo/collection/view/builder/find_command.rb +1 -1
  53. data/lib/mongo/collection/view/builder/flags.rb +1 -1
  54. data/lib/mongo/collection/view/builder/map_reduce.rb +1 -1
  55. data/lib/mongo/collection/view/builder/modifiers.rb +1 -1
  56. data/lib/mongo/collection/view/builder/op_query.rb +1 -1
  57. data/lib/mongo/collection/view/change_stream.rb +193 -17
  58. data/lib/mongo/collection/view/change_stream/retryable.rb +3 -20
  59. data/lib/mongo/collection/view/explainable.rb +1 -1
  60. data/lib/mongo/collection/view/immutable.rb +1 -1
  61. data/lib/mongo/collection/view/iterable.rb +2 -2
  62. data/lib/mongo/collection/view/map_reduce.rb +1 -1
  63. data/lib/mongo/collection/view/readable.rb +108 -29
  64. data/lib/mongo/collection/view/writable.rb +3 -3
  65. data/lib/mongo/cursor.rb +44 -4
  66. data/lib/mongo/cursor/builder.rb +1 -1
  67. data/lib/mongo/cursor/builder/get_more_command.rb +1 -1
  68. data/lib/mongo/cursor/builder/kill_cursors_command.rb +1 -1
  69. data/lib/mongo/cursor/builder/op_get_more.rb +1 -1
  70. data/lib/mongo/cursor/builder/op_kill_cursors.rb +1 -1
  71. data/lib/mongo/database.rb +46 -3
  72. data/lib/mongo/database/view.rb +11 -11
  73. data/lib/mongo/dbref.rb +1 -1
  74. data/lib/mongo/error.rb +57 -1
  75. data/lib/mongo/error/bulk_write_error.rb +2 -2
  76. data/lib/mongo/error/change_stream_resumable.rb +37 -0
  77. data/lib/mongo/error/closed_stream.rb +1 -1
  78. data/lib/mongo/error/extra_file_chunk.rb +1 -1
  79. data/lib/mongo/error/failed_stringprep_validation.rb +38 -0
  80. data/lib/mongo/error/file_not_found.rb +1 -1
  81. data/lib/mongo/error/insufficient_iteration_count.rb +38 -0
  82. data/lib/mongo/error/invalid_application_name.rb +1 -1
  83. data/lib/mongo/error/invalid_bulk_operation.rb +1 -1
  84. data/lib/mongo/error/invalid_bulk_operation_type.rb +1 -1
  85. data/lib/mongo/error/invalid_collection_name.rb +1 -1
  86. data/lib/mongo/error/invalid_database_name.rb +1 -1
  87. data/lib/mongo/error/invalid_document.rb +1 -1
  88. data/lib/mongo/error/invalid_file.rb +1 -1
  89. data/lib/mongo/error/invalid_file_revision.rb +1 -1
  90. data/lib/mongo/error/invalid_min_pool_size.rb +1 -1
  91. data/lib/mongo/error/invalid_nonce.rb +1 -1
  92. data/lib/mongo/error/invalid_read_option.rb +35 -0
  93. data/lib/mongo/error/invalid_replacement_document.rb +1 -1
  94. data/lib/mongo/error/invalid_server_preference.rb +1 -1
  95. data/lib/mongo/error/invalid_session.rb +1 -1
  96. data/lib/mongo/error/invalid_signature.rb +1 -1
  97. data/lib/mongo/error/invalid_transaction_operation.rb +82 -0
  98. data/lib/mongo/error/invalid_txt_record.rb +1 -1
  99. data/lib/mongo/error/invalid_update_document.rb +1 -1
  100. data/lib/mongo/error/invalid_uri.rb +1 -1
  101. data/lib/mongo/error/invalid_write_concern.rb +1 -1
  102. data/lib/mongo/error/max_bson_size.rb +1 -1
  103. data/lib/mongo/error/max_message_size.rb +1 -1
  104. data/lib/mongo/error/mismatched_domain.rb +1 -1
  105. data/lib/mongo/error/missing_file_chunk.rb +1 -1
  106. data/lib/mongo/error/missing_resume_token.rb +1 -1
  107. data/lib/mongo/error/multi_index_drop.rb +1 -1
  108. data/lib/mongo/error/need_primary_server.rb +1 -1
  109. data/lib/mongo/error/no_server_available.rb +1 -1
  110. data/lib/mongo/error/no_srv_records.rb +1 -1
  111. data/lib/mongo/error/operation_failure.rb +108 -14
  112. data/lib/mongo/error/parser.rb +50 -1
  113. data/lib/mongo/error/socket_error.rb +5 -2
  114. data/lib/mongo/error/socket_timeout_error.rb +5 -2
  115. data/lib/mongo/error/unchangeable_collection_option.rb +1 -1
  116. data/lib/mongo/error/unexpected_chunk_length.rb +1 -1
  117. data/lib/mongo/error/unexpected_response.rb +1 -1
  118. data/lib/mongo/error/unknown_payload_type.rb +1 -1
  119. data/lib/mongo/error/unsupported_array_filters.rb +1 -1
  120. data/lib/mongo/error/unsupported_collation.rb +1 -1
  121. data/lib/mongo/error/unsupported_features.rb +1 -1
  122. data/lib/mongo/error/unsupported_message_type.rb +1 -1
  123. data/lib/mongo/error/write_retryable.rb +27 -0
  124. data/lib/mongo/event.rb +10 -9
  125. data/lib/mongo/event/base.rb +33 -0
  126. data/lib/mongo/event/description_changed.rb +2 -2
  127. data/lib/mongo/event/listeners.rb +1 -1
  128. data/lib/mongo/event/member_discovered.rb +4 -2
  129. data/lib/mongo/event/primary_elected.rb +2 -2
  130. data/lib/mongo/event/publisher.rb +1 -1
  131. data/lib/mongo/event/standalone_discovered.rb +2 -2
  132. data/lib/mongo/event/subscriber.rb +1 -1
  133. data/lib/mongo/grid.rb +1 -1
  134. data/lib/mongo/grid/file.rb +1 -1
  135. data/lib/mongo/grid/file/chunk.rb +3 -3
  136. data/lib/mongo/grid/file/info.rb +26 -3
  137. data/lib/mongo/grid/fs_bucket.rb +1 -1
  138. data/lib/mongo/grid/stream.rb +1 -1
  139. data/lib/mongo/grid/stream/read.rb +1 -1
  140. data/lib/mongo/grid/stream/write.rb +1 -1
  141. data/lib/mongo/index.rb +1 -1
  142. data/lib/mongo/index/view.rb +1 -1
  143. data/lib/mongo/loggable.rb +1 -1
  144. data/lib/mongo/logger.rb +1 -1
  145. data/lib/mongo/monitoring.rb +99 -62
  146. data/lib/mongo/monitoring/command_log_subscriber.rb +2 -2
  147. data/lib/mongo/monitoring/event.rb +2 -1
  148. data/lib/mongo/monitoring/event/command_failed.rb +19 -6
  149. data/lib/mongo/monitoring/event/command_started.rb +14 -3
  150. data/lib/mongo/monitoring/event/command_succeeded.rb +5 -3
  151. data/lib/mongo/monitoring/event/secure.rb +1 -1
  152. data/lib/mongo/monitoring/event/server_closed.rb +2 -2
  153. data/lib/mongo/monitoring/event/server_description_changed.rb +2 -2
  154. data/lib/mongo/monitoring/event/server_opening.rb +11 -2
  155. data/lib/mongo/monitoring/event/topology_changed.rb +13 -2
  156. data/lib/mongo/monitoring/event/topology_closed.rb +2 -2
  157. data/lib/mongo/monitoring/event/topology_opening.rb +11 -2
  158. data/lib/mongo/monitoring/publishable.rb +10 -6
  159. data/lib/mongo/monitoring/sdam_log_subscriber.rb +1 -1
  160. data/lib/mongo/monitoring/server_closed_log_subscriber.rb +1 -1
  161. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +1 -1
  162. data/lib/mongo/monitoring/server_opening_log_subscriber.rb +1 -1
  163. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  164. data/lib/mongo/monitoring/topology_opening_log_subscriber.rb +1 -1
  165. data/lib/mongo/operation/aggregate/op_msg.rb +3 -0
  166. data/lib/mongo/operation/create/op_msg.rb +9 -0
  167. data/lib/mongo/operation/create_index/op_msg.rb +9 -0
  168. data/lib/mongo/operation/create_user/command.rb +1 -1
  169. data/lib/mongo/operation/create_user/op_msg.rb +10 -1
  170. data/lib/mongo/operation/delete/op_msg.rb +3 -0
  171. data/lib/mongo/operation/distinct/op_msg.rb +9 -0
  172. data/lib/mongo/operation/drop/op_msg.rb +9 -0
  173. data/lib/mongo/operation/drop_database/op_msg.rb +9 -0
  174. data/lib/mongo/operation/drop_index/op_msg.rb +9 -0
  175. data/lib/mongo/operation/explain/op_msg.rb +3 -0
  176. data/lib/mongo/operation/find/op_msg.rb +3 -0
  177. data/lib/mongo/operation/get_more.rb +1 -1
  178. data/lib/mongo/operation/get_more/command.rb +1 -1
  179. data/lib/mongo/operation/get_more/legacy.rb +1 -1
  180. data/lib/mongo/operation/get_more/op_msg.rb +3 -0
  181. data/lib/mongo/operation/indexes/op_msg.rb +3 -0
  182. data/lib/mongo/operation/indexes/result.rb +1 -1
  183. data/lib/mongo/operation/insert/bulk_result.rb +32 -2
  184. data/lib/mongo/operation/insert/op_msg.rb +3 -0
  185. data/lib/mongo/operation/insert/result.rb +1 -1
  186. data/lib/mongo/operation/kill_cursors/op_msg.rb +9 -0
  187. data/lib/mongo/operation/list_collections/op_msg.rb +3 -0
  188. data/lib/mongo/operation/list_collections/result.rb +5 -1
  189. data/lib/mongo/operation/map_reduce/op_msg.rb +3 -0
  190. data/lib/mongo/operation/map_reduce/result.rb +1 -1
  191. data/lib/mongo/operation/parallel_scan/op_msg.rb +3 -0
  192. data/lib/mongo/operation/remove_user/op_msg.rb +9 -0
  193. data/lib/mongo/operation/result.rb +27 -14
  194. data/lib/mongo/operation/shared/executable.rb +1 -0
  195. data/lib/mongo/operation/shared/sessions_supported.rb +78 -7
  196. data/lib/mongo/operation/shared/specifiable.rb +18 -2
  197. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -1
  198. data/lib/mongo/operation/update/op_msg.rb +3 -0
  199. data/lib/mongo/operation/update_user/command.rb +1 -1
  200. data/lib/mongo/operation/update_user/op_msg.rb +10 -1
  201. data/lib/mongo/operation/users_info/op_msg.rb +3 -0
  202. data/lib/mongo/options.rb +1 -1
  203. data/lib/mongo/options/mapper.rb +1 -1
  204. data/lib/mongo/options/redacted.rb +1 -1
  205. data/lib/mongo/protocol/bit_vector.rb +1 -1
  206. data/lib/mongo/protocol/compressed.rb +1 -1
  207. data/lib/mongo/protocol/delete.rb +1 -1
  208. data/lib/mongo/protocol/get_more.rb +7 -7
  209. data/lib/mongo/protocol/insert.rb +1 -1
  210. data/lib/mongo/protocol/kill_cursors.rb +1 -1
  211. data/lib/mongo/protocol/message.rb +5 -5
  212. data/lib/mongo/protocol/msg.rb +9 -7
  213. data/lib/mongo/protocol/query.rb +1 -1
  214. data/lib/mongo/protocol/registry.rb +1 -1
  215. data/lib/mongo/protocol/reply.rb +10 -10
  216. data/lib/mongo/protocol/serializers.rb +1 -1
  217. data/lib/mongo/protocol/update.rb +1 -1
  218. data/lib/mongo/retryable.rb +22 -14
  219. data/lib/mongo/server.rb +1 -1
  220. data/lib/mongo/server/connectable.rb +1 -1
  221. data/lib/mongo/server/connection.rb +16 -4
  222. data/lib/mongo/server/connection_pool.rb +1 -1
  223. data/lib/mongo/server/connection_pool/queue.rb +1 -1
  224. data/lib/mongo/server/context.rb +1 -1
  225. data/lib/mongo/server/description.rb +14 -2
  226. data/lib/mongo/server/description/features.rb +10 -9
  227. data/lib/mongo/server/description/inspector.rb +1 -1
  228. data/lib/mongo/server/description/inspector/description_changed.rb +1 -1
  229. data/lib/mongo/server/description/inspector/member_discovered.rb +1 -1
  230. data/lib/mongo/server/description/inspector/primary_elected.rb +1 -1
  231. data/lib/mongo/server/description/inspector/standalone_discovered.rb +1 -1
  232. data/lib/mongo/server/monitor.rb +15 -3
  233. data/lib/mongo/server/monitor/connection.rb +1 -1
  234. data/lib/mongo/server_selector.rb +1 -1
  235. data/lib/mongo/server_selector/nearest.rb +1 -1
  236. data/lib/mongo/server_selector/primary.rb +1 -1
  237. data/lib/mongo/server_selector/primary_preferred.rb +1 -1
  238. data/lib/mongo/server_selector/secondary.rb +1 -1
  239. data/lib/mongo/server_selector/secondary_preferred.rb +1 -1
  240. data/lib/mongo/server_selector/selectable.rb +7 -2
  241. data/lib/mongo/session.rb +389 -12
  242. data/lib/mongo/session/server_session.rb +7 -2
  243. data/lib/mongo/session/session_pool.rb +1 -1
  244. data/lib/mongo/socket.rb +1 -1
  245. data/lib/mongo/socket/ssl.rb +1 -1
  246. data/lib/mongo/socket/tcp.rb +1 -1
  247. data/lib/mongo/socket/unix.rb +1 -1
  248. data/lib/mongo/uri.rb +6 -4
  249. data/lib/mongo/uri/srv_protocol.rb +1 -1
  250. data/lib/mongo/version.rb +2 -2
  251. data/lib/mongo/write_concern.rb +1 -1
  252. data/lib/mongo/write_concern/acknowledged.rb +1 -1
  253. data/lib/mongo/write_concern/normalizable.rb +1 -1
  254. data/lib/mongo/write_concern/unacknowledged.rb +1 -1
  255. data/mongo.gemspec +4 -1
  256. data/spec/atlas/atlas_connectivity_spec.rb +54 -0
  257. data/spec/integration/bulk_insert_spec.rb +78 -0
  258. data/spec/integration/change_stream_spec.rb +365 -0
  259. data/spec/integration/command_monitoring_spec.rb +92 -0
  260. data/spec/lite_spec_helper.rb +63 -0
  261. data/spec/mongo/address/ipv6_spec.rb +29 -1
  262. data/spec/mongo/address_spec.rb +34 -0
  263. data/spec/mongo/auth/scram/conversation_spec.rb +326 -120
  264. data/spec/mongo/auth/scram/negotiation_spec.rb +574 -0
  265. data/spec/mongo/auth/scram_spec.rb +107 -38
  266. data/spec/mongo/auth/stringprep/profiles/sasl_spec.rb +113 -0
  267. data/spec/mongo/auth/stringprep_spec.rb +188 -0
  268. data/spec/mongo/auth/user/view_spec.rb +5 -2
  269. data/spec/mongo/auth/user_spec.rb +1 -1
  270. data/spec/mongo/bulk_write/result_spec.rb +120 -0
  271. data/spec/mongo/bulk_write_spec.rb +42 -2
  272. data/spec/mongo/client_spec.rb +121 -9
  273. data/spec/mongo/cluster/app_metadata_spec.rb +14 -1
  274. data/spec/mongo/cluster/topology_spec.rb +1 -23
  275. data/spec/mongo/collection/view/change_stream_spec.rb +62 -180
  276. data/spec/mongo/collection_spec.rb +45 -12
  277. data/spec/mongo/cursor/builder/get_more_command_spec.rb +7 -7
  278. data/spec/mongo/cursor_spec.rb +2 -2
  279. data/spec/mongo/database_spec.rb +3 -3
  280. data/spec/mongo/docs_examples_spec.rb +194 -0
  281. data/spec/mongo/error/operation_failure_spec.rb +152 -0
  282. data/spec/mongo/error/parser_spec.rb +127 -0
  283. data/spec/mongo/grid/fs_bucket_spec.rb +32 -0
  284. data/spec/mongo/grid/stream/write_spec.rb +40 -1
  285. data/spec/mongo/monitoring/event/command_failed_spec.rb +30 -0
  286. data/spec/mongo/monitoring/event/command_started_spec.rb +26 -4
  287. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +29 -7
  288. data/spec/mongo/monitoring_spec.rb +28 -3
  289. data/spec/mongo/protocol/get_more_spec.rb +2 -2
  290. data/spec/mongo/retryable_spec.rb +252 -34
  291. data/spec/mongo/retryable_writes_spec.rb +468 -544
  292. data/spec/mongo/server/connection_spec.rb +5 -5
  293. data/spec/mongo/server/description_spec.rb +23 -6
  294. data/spec/mongo/session/server_session_spec.rb +2 -2
  295. data/spec/mongo/session/session_pool_spec.rb +2 -2
  296. data/spec/mongo/transactions_examples_spec.rb +227 -0
  297. data/spec/mongo/transactions_spec.rb +44 -0
  298. data/spec/spec_helper.rb +135 -49
  299. data/spec/spec_tests/change_streams_spec.rb +42 -0
  300. data/spec/{mongo → spec_tests}/command_monitoring_spec.rb +8 -2
  301. data/spec/{mongo → spec_tests}/connection_string_spec.rb +1 -1
  302. data/spec/{mongo → spec_tests}/crud_spec.rb +5 -7
  303. data/spec/{mongo → spec_tests}/dns_seedlist_discovery_spec.rb +1 -1
  304. data/spec/{mongo → spec_tests}/gridfs_spec.rb +0 -0
  305. data/spec/{mongo → spec_tests}/max_staleness_spec.rb +0 -0
  306. data/spec/spec_tests/retryable_writes_spec.rb +78 -0
  307. data/spec/{mongo → spec_tests}/sdam_monitoring_spec.rb +4 -3
  308. data/spec/{mongo → spec_tests}/sdam_spec.rb +7 -7
  309. data/spec/{mongo → spec_tests}/server_selection_rtt_spec.rb +0 -0
  310. data/spec/{mongo → spec_tests}/server_selection_spec.rb +0 -0
  311. data/spec/support/authorization.rb +18 -6
  312. data/spec/support/change_streams.rb +265 -0
  313. data/spec/support/change_streams/operation.rb +62 -0
  314. data/spec/support/change_streams_tests/change-streams-errors.yml +53 -0
  315. data/spec/support/change_streams_tests/change-streams.yml +299 -0
  316. data/spec/support/command_monitoring.rb +1 -1
  317. data/spec/support/command_monitoring/bulkWrite.yml +4 -28
  318. data/spec/support/command_monitoring/command.yml +19 -0
  319. data/spec/support/command_monitoring/find.yml +17 -19
  320. data/spec/support/command_monitoring/insertMany.yml +2 -8
  321. data/spec/support/command_monitoring/unacknowledgedBulkWrite.yml +34 -0
  322. data/spec/support/connection_string.rb +1 -1
  323. data/spec/support/constraints.rb +56 -0
  324. data/spec/support/crud.rb +9 -4
  325. data/spec/support/crud/read.rb +24 -3
  326. data/spec/support/crud/write.rb +7 -2
  327. data/spec/support/crud_tests/read/count-collation.yml +12 -2
  328. data/spec/support/crud_tests/read/count.yml +43 -5
  329. data/spec/support/gridfs.rb +1 -1
  330. data/spec/support/primary_socket.rb +21 -0
  331. data/spec/support/retryable_writes_tests/bulkWrite-serverErrors.yml +90 -0
  332. data/spec/support/retryable_writes_tests/bulkWrite.yml +99 -1
  333. data/spec/support/retryable_writes_tests/deleteOne-serverErrors.yml +50 -0
  334. data/spec/support/retryable_writes_tests/deleteOne.yml +10 -1
  335. data/spec/support/retryable_writes_tests/findOneAndDelete-serverErrors.yml +50 -0
  336. data/spec/support/retryable_writes_tests/findOneAndDelete.yml +39 -30
  337. data/spec/support/retryable_writes_tests/findOneAndReplace-serverErrors.yml +54 -0
  338. data/spec/support/retryable_writes_tests/findOneAndReplace.yml +9 -0
  339. data/spec/support/retryable_writes_tests/findOneAndUpdate-serverErrors.yml +54 -0
  340. data/spec/support/retryable_writes_tests/findOneAndUpdate.yml +9 -0
  341. data/spec/support/retryable_writes_tests/insertMany-serverErrors.yml +59 -0
  342. data/spec/support/retryable_writes_tests/insertMany.yml +11 -6
  343. data/spec/support/retryable_writes_tests/insertOne-serverErrors.yml +471 -0
  344. data/spec/support/retryable_writes_tests/insertOne.yml +9 -0
  345. data/spec/support/retryable_writes_tests/replaceOne-serverErrors.yml +58 -0
  346. data/spec/support/retryable_writes_tests/replaceOne.yml +9 -0
  347. data/spec/support/retryable_writes_tests/updateOne-serverErrors.yml +58 -0
  348. data/spec/support/retryable_writes_tests/updateOne.yml +71 -53
  349. data/spec/support/sdam/rs/normalize_case_me.yml +100 -0
  350. data/spec/support/sdam/sharded/compatible.yml +38 -0
  351. data/spec/support/sdam/sharded/mongos_disconnect.yml +9 -3
  352. data/spec/support/sdam/sharded/multiple_mongoses.yml +6 -2
  353. data/spec/support/sdam/sharded/non_mongos_removed.yml +6 -2
  354. data/spec/support/sdam/sharded/too_new.yml +36 -0
  355. data/spec/support/sdam/sharded/too_old.yml +36 -0
  356. data/spec/support/sdam/single/compatible.yml +26 -0
  357. data/spec/support/sdam/single/direct_connection_external_ip.yml +3 -1
  358. data/spec/support/sdam/single/direct_connection_mongos.yml +3 -1
  359. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +3 -1
  360. data/spec/support/sdam/single/direct_connection_rsprimary.yml +3 -1
  361. data/spec/support/sdam/single/direct_connection_rssecondary.yml +3 -1
  362. data/spec/support/sdam/single/direct_connection_slave.yml +3 -1
  363. data/spec/support/sdam/single/direct_connection_standalone.yml +3 -1
  364. data/spec/support/sdam/single/not_ok_response.yml +6 -2
  365. data/spec/support/sdam/single/standalone_removed.yml +3 -1
  366. data/spec/support/sdam/single/too_new.yml +26 -0
  367. data/spec/support/sdam/single/too_old.yml +24 -0
  368. data/spec/support/shared/session.rb +107 -0
  369. data/spec/support/transactions.rb +391 -0
  370. data/spec/support/transactions/operation.rb +373 -0
  371. data/spec/support/transactions_tests/abort.yml +403 -0
  372. data/spec/support/transactions_tests/bulk.yml +267 -0
  373. data/spec/support/transactions_tests/causal-consistency.yml +173 -0
  374. data/spec/support/transactions_tests/commit.yml +593 -0
  375. data/spec/support/transactions_tests/delete.yml +184 -0
  376. data/spec/support/transactions_tests/error-labels.yml +948 -0
  377. data/spec/support/transactions_tests/errors.yml +125 -0
  378. data/spec/support/transactions_tests/findOneAndDelete.yml +126 -0
  379. data/spec/support/transactions_tests/findOneAndReplace.yml +140 -0
  380. data/spec/support/transactions_tests/findOneAndUpdate.yml +228 -0
  381. data/spec/support/transactions_tests/insert.yml +264 -0
  382. data/spec/support/transactions_tests/isolation.yml +125 -0
  383. data/spec/support/transactions_tests/read-pref.yml +340 -0
  384. data/spec/support/transactions_tests/reads.yml +298 -0
  385. data/spec/support/transactions_tests/retryable-abort.yml +1292 -0
  386. data/spec/support/transactions_tests/retryable-commit.yml +1332 -0
  387. data/spec/support/transactions_tests/retryable-writes.yml +208 -0
  388. data/spec/support/transactions_tests/run-command.yml +189 -0
  389. data/spec/support/transactions_tests/transaction-options.yml +877 -0
  390. data/spec/support/transactions_tests/update.yml +246 -0
  391. data/spec/support/transactions_tests/write-concern.yml +236 -0
  392. metadata +494 -359
  393. metadata.gz.sig +0 -0
  394. data/lib/csasl/csasl.bundle +0 -0
@@ -0,0 +1,125 @@
1
+ database_name: &database_name "ruby-driver"
2
+ collection_name: &collection_name "transactions-tests"
3
+
4
+ data: []
5
+ tests:
6
+ - description: start insert start
7
+
8
+ operations:
9
+ - name: startTransaction
10
+ object: session0
11
+ - name: insertOne
12
+ object: collection
13
+ arguments:
14
+ session: session0
15
+ document:
16
+ _id: 1
17
+ result:
18
+ insertedId: 1
19
+ - name: startTransaction
20
+ object: session0
21
+ result:
22
+ # Client-side error.
23
+ errorContains: transaction already in progress
24
+ # Just to clean up.
25
+ - name: commitTransaction
26
+ object: session0
27
+
28
+ - description: start twice
29
+
30
+ operations:
31
+ - name: startTransaction
32
+ object: session0
33
+ - name: startTransaction
34
+ object: session0
35
+ result:
36
+ # Client-side error.
37
+ errorContains: transaction already in progress
38
+
39
+ - description: commit and start twice
40
+
41
+ operations:
42
+ - name: startTransaction
43
+ object: session0
44
+ - name: insertOne
45
+ object: collection
46
+ arguments:
47
+ session: session0
48
+ document:
49
+ _id: 1
50
+ result:
51
+ insertedId: 1
52
+ - name: commitTransaction
53
+ object: session0
54
+ - name: startTransaction
55
+ object: session0
56
+ - name: startTransaction
57
+ object: session0
58
+ result:
59
+ # Client-side error.
60
+ errorContains: transaction already in progress
61
+
62
+ - description: write conflict commit
63
+
64
+ operations:
65
+ - name: startTransaction
66
+ object: session0
67
+ - name: insertOne
68
+ object: collection
69
+ arguments:
70
+ session: session0
71
+ document:
72
+ _id: 1
73
+ result:
74
+ insertedId: 1
75
+ - name: startTransaction
76
+ object: session1
77
+ - name: insertOne
78
+ object: collection
79
+ arguments:
80
+ session: session1
81
+ document:
82
+ _id: 1
83
+ result:
84
+ errorCodeName: WriteConflict
85
+ errorLabelsContain: ["TransientTransactionError"]
86
+ errorLabelsOmit: ["UnknownTransactionCommitResult"]
87
+ - name: commitTransaction
88
+ object: session0
89
+ - name: commitTransaction
90
+ object: session1
91
+ result:
92
+ errorCodeName: NoSuchTransaction
93
+ errorLabelsContain: ["TransientTransactionError"]
94
+ errorLabelsOmit: ["UnknownTransactionCommitResult"]
95
+
96
+ - description: write conflict abort
97
+
98
+ operations:
99
+ - name: startTransaction
100
+ object: session0
101
+ - name: insertOne
102
+ object: collection
103
+ arguments:
104
+ session: session0
105
+ document:
106
+ _id: 1
107
+ result:
108
+ insertedId: 1
109
+ - name: startTransaction
110
+ object: session1
111
+ - name: insertOne
112
+ object: collection
113
+ arguments:
114
+ session: session1
115
+ document:
116
+ _id: 1
117
+ result:
118
+ errorCodeName: WriteConflict
119
+ errorLabelsContain: ["TransientTransactionError"]
120
+ errorLabelsOmit: ["UnknownTransactionCommitResult"]
121
+ - name: commitTransaction
122
+ object: session0
123
+ # Driver ignores "NoSuchTransaction" error.
124
+ - name: abortTransaction
125
+ object: session1
@@ -0,0 +1,126 @@
1
+ database_name: &database_name "ruby-driver"
2
+ collection_name: &collection_name "transactions-tests"
3
+
4
+ data:
5
+ - _id: 1
6
+ - _id: 2
7
+ - _id: 3
8
+
9
+ tests:
10
+ - description: findOneAndDelete
11
+
12
+ operations:
13
+ - name: startTransaction
14
+ object: session0
15
+ - name: findOneAndDelete
16
+ object: collection
17
+ arguments:
18
+ session: session0
19
+ filter: {_id: 3}
20
+ result: {_id: 3}
21
+ - name: findOneAndDelete
22
+ object: collection
23
+ arguments:
24
+ session: session0
25
+ filter: {_id: 4}
26
+ result:
27
+ - name: commitTransaction
28
+ object: session0
29
+
30
+ expectations:
31
+ - command_started_event:
32
+ command:
33
+ findAndModify: *collection_name
34
+ query: {_id: 3}
35
+ remove: True
36
+ lsid: session0
37
+ txnNumber:
38
+ $numberLong: "1"
39
+ startTransaction: true
40
+ autocommit: false
41
+ readConcern:
42
+ writeConcern:
43
+ command_name: findAndModify
44
+ database_name: *database_name
45
+ - command_started_event:
46
+ command:
47
+ findAndModify: *collection_name
48
+ query: {_id: 4}
49
+ remove: True
50
+ lsid: session0
51
+ txnNumber:
52
+ $numberLong: "1"
53
+ startTransaction:
54
+ autocommit: false
55
+ readConcern:
56
+ writeConcern:
57
+ command_name: findAndModify
58
+ database_name: *database_name
59
+ - command_started_event:
60
+ command:
61
+ commitTransaction: 1
62
+ lsid: session0
63
+ txnNumber:
64
+ $numberLong: "1"
65
+ startTransaction:
66
+ autocommit: false
67
+ readConcern:
68
+ writeConcern:
69
+ command_name: commitTransaction
70
+ database_name: admin
71
+
72
+ outcome:
73
+ collection:
74
+ data:
75
+ - {_id: 1}
76
+ - {_id: 2}
77
+
78
+ - description: collection writeConcern ignored for findOneAndDelete
79
+
80
+ operations:
81
+ - name: startTransaction
82
+ object: session0
83
+ arguments:
84
+ options:
85
+ writeConcern:
86
+ w: majority
87
+ - name: findOneAndDelete
88
+ object: collection
89
+ collectionOptions:
90
+ writeConcern:
91
+ w: majority
92
+ arguments:
93
+ session: session0
94
+ filter: {_id: 3}
95
+ result: {_id: 3}
96
+ - name: commitTransaction
97
+ object: session0
98
+
99
+ expectations:
100
+ - command_started_event:
101
+ command:
102
+ findAndModify: *collection_name
103
+ query: {_id: 3}
104
+ remove: True
105
+ lsid: session0
106
+ txnNumber:
107
+ $numberLong: "1"
108
+ startTransaction: true
109
+ autocommit: false
110
+ readConcern:
111
+ writeConcern:
112
+ command_name: findAndModify
113
+ database_name: *database_name
114
+ - command_started_event:
115
+ command:
116
+ commitTransaction: 1
117
+ lsid: session0
118
+ txnNumber:
119
+ $numberLong: "1"
120
+ startTransaction:
121
+ autocommit: false
122
+ readConcern:
123
+ writeConcern:
124
+ w: majority
125
+ command_name: commitTransaction
126
+ database_name: admin
@@ -0,0 +1,140 @@
1
+ database_name: &database_name "ruby-driver"
2
+ collection_name: &collection_name "transactions-tests"
3
+
4
+ data:
5
+ - _id: 1
6
+ - _id: 2
7
+ - _id: 3
8
+
9
+ tests:
10
+ - description: findOneAndReplace
11
+
12
+ operations:
13
+ - name: startTransaction
14
+ object: session0
15
+ - name: findOneAndReplace
16
+ object: collection
17
+ arguments:
18
+ session: session0
19
+ filter: {_id: 3}
20
+ replacement: {x: 1}
21
+ returnDocument: Before
22
+ result: {_id: 3}
23
+ - name: findOneAndReplace
24
+ object: collection
25
+ arguments:
26
+ session: session0
27
+ filter: {_id: 4}
28
+ replacement: {x: 1}
29
+ upsert: true
30
+ returnDocument: After
31
+ result: {_id: 4, x: 1}
32
+ - name: commitTransaction
33
+ object: session0
34
+
35
+ expectations:
36
+ - command_started_event:
37
+ command:
38
+ findAndModify: *collection_name
39
+ query: {_id: 3}
40
+ update: {x: 1}
41
+ new: false
42
+ lsid: session0
43
+ txnNumber:
44
+ $numberLong: "1"
45
+ startTransaction: true
46
+ autocommit: false
47
+ readConcern:
48
+ writeConcern:
49
+ command_name: findAndModify
50
+ database_name: *database_name
51
+ - command_started_event:
52
+ command:
53
+ findAndModify: *collection_name
54
+ query: {_id: 4}
55
+ update: {x: 1}
56
+ new: true
57
+ upsert: true
58
+ lsid: session0
59
+ txnNumber:
60
+ $numberLong: "1"
61
+ startTransaction:
62
+ autocommit: false
63
+ readConcern:
64
+ writeConcern:
65
+ command_name: findAndModify
66
+ database_name: *database_name
67
+ - command_started_event:
68
+ command:
69
+ commitTransaction: 1
70
+ lsid: session0
71
+ txnNumber:
72
+ $numberLong: "1"
73
+ startTransaction:
74
+ autocommit: false
75
+ readConcern:
76
+ writeConcern:
77
+ command_name: commitTransaction
78
+ database_name: admin
79
+
80
+ outcome:
81
+ collection:
82
+ data:
83
+ - {_id: 1}
84
+ - {_id: 2}
85
+ - {_id: 3, x: 1}
86
+ - {_id: 4, x: 1}
87
+
88
+ - description: collection writeConcern ignored for findOneAndReplace
89
+
90
+ operations:
91
+ - name: startTransaction
92
+ object: session0
93
+ arguments:
94
+ options:
95
+ writeConcern:
96
+ w: majority
97
+ - name: findOneAndReplace
98
+ object: collection
99
+ collectionOptions:
100
+ writeConcern:
101
+ w: majority
102
+ arguments:
103
+ session: session0
104
+ filter: {_id: 3}
105
+ replacement: {x: 1}
106
+ returnDocument: Before
107
+ result: {_id: 3}
108
+ - name: commitTransaction
109
+ object: session0
110
+
111
+ expectations:
112
+ - command_started_event:
113
+ command:
114
+ findAndModify: *collection_name
115
+ query: {_id: 3}
116
+ update: {x: 1}
117
+ new: false
118
+ lsid: session0
119
+ txnNumber:
120
+ $numberLong: "1"
121
+ startTransaction: true
122
+ autocommit: false
123
+ readConcern:
124
+ writeConcern:
125
+ command_name: findAndModify
126
+ database_name: *database_name
127
+ - command_started_event:
128
+ command:
129
+ commitTransaction: 1
130
+ lsid: session0
131
+ txnNumber:
132
+ $numberLong: "1"
133
+ startTransaction:
134
+ autocommit: false
135
+ readConcern:
136
+ writeConcern:
137
+ w: majority
138
+ command_name: commitTransaction
139
+ database_name: admin
140
+
@@ -0,0 +1,228 @@
1
+ database_name: &database_name "ruby-driver"
2
+ collection_name: &collection_name "transactions-tests"
3
+
4
+ data:
5
+ - _id: 1
6
+ - _id: 2
7
+ - _id: 3
8
+
9
+ tests:
10
+ - description: findOneAndUpdate
11
+
12
+ operations:
13
+ - name: startTransaction
14
+ object: session0
15
+ - name: findOneAndUpdate
16
+ object: collection
17
+ arguments:
18
+ session: session0
19
+ filter: {_id: 3}
20
+ update:
21
+ $inc: {x: 1}
22
+ returnDocument: Before
23
+ result: {_id: 3}
24
+ - name: findOneAndUpdate
25
+ object: collection
26
+ arguments:
27
+ session: session0
28
+ filter: {_id: 4}
29
+ update:
30
+ $inc: {x: 1}
31
+ upsert: true
32
+ returnDocument: After
33
+ result: {_id: 4, x: 1}
34
+ - name: commitTransaction
35
+ object: session0
36
+ - name: startTransaction
37
+ object: session0
38
+ # Test a second time to ensure txnNumber is incremented.
39
+ - name: findOneAndUpdate
40
+ object: collection
41
+ arguments:
42
+ session: session0
43
+ filter: {_id: 3}
44
+ update:
45
+ $inc: {x: 1}
46
+ returnDocument: Before
47
+ result: {_id: 3, x: 1}
48
+ - name: commitTransaction
49
+ object: session0
50
+ # Test a third time to ensure abort works.
51
+ - name: startTransaction
52
+ object: session0
53
+ - name: findOneAndUpdate
54
+ object: collection
55
+ arguments:
56
+ session: session0
57
+ filter: {_id: 3}
58
+ update:
59
+ $inc: {x: 1}
60
+ returnDocument: Before
61
+ result: {_id: 3, x: 2}
62
+ - name: abortTransaction
63
+ object: session0
64
+
65
+ expectations:
66
+ - command_started_event:
67
+ command:
68
+ findAndModify: *collection_name
69
+ query: {_id: 3}
70
+ update: {$inc: {x: 1}}
71
+ new: false
72
+ lsid: session0
73
+ txnNumber:
74
+ $numberLong: "1"
75
+ startTransaction: true
76
+ autocommit: false
77
+ readConcern:
78
+ writeConcern:
79
+ command_name: findAndModify
80
+ database_name: *database_name
81
+ - command_started_event:
82
+ command:
83
+ findAndModify: *collection_name
84
+ query: {_id: 4}
85
+ update: {$inc: {x: 1}}
86
+ new: true
87
+ upsert: true
88
+ lsid: session0
89
+ txnNumber:
90
+ $numberLong: "1"
91
+ startTransaction:
92
+ autocommit: false
93
+ readConcern:
94
+ writeConcern:
95
+ command_name: findAndModify
96
+ database_name: *database_name
97
+ - command_started_event:
98
+ command:
99
+ commitTransaction: 1
100
+ lsid: session0
101
+ txnNumber:
102
+ $numberLong: "1"
103
+ startTransaction:
104
+ autocommit: false
105
+ readConcern:
106
+ writeConcern:
107
+ command_name: commitTransaction
108
+ database_name: admin
109
+ - command_started_event:
110
+ command:
111
+ findAndModify: *collection_name
112
+ query: {_id: 3}
113
+ update: {$inc: {x: 1}}
114
+ new: false
115
+ lsid: session0
116
+ txnNumber:
117
+ $numberLong: "2"
118
+ startTransaction: true
119
+ autocommit: false
120
+ readConcern:
121
+ afterClusterTime: 42
122
+ writeConcern:
123
+ command_name: findAndModify
124
+ database_name: *database_name
125
+ - command_started_event:
126
+ command:
127
+ commitTransaction: 1
128
+ lsid: session0
129
+ txnNumber:
130
+ $numberLong: "2"
131
+ startTransaction:
132
+ autocommit: false
133
+ readConcern:
134
+ writeConcern:
135
+ command_name: commitTransaction
136
+ database_name: admin
137
+ - command_started_event:
138
+ command:
139
+ findAndModify: *collection_name
140
+ query: {_id: 3}
141
+ update: {$inc: {x: 1}}
142
+ new: false
143
+ lsid: session0
144
+ txnNumber:
145
+ $numberLong: "3"
146
+ startTransaction: true
147
+ autocommit: false
148
+ readConcern:
149
+ afterClusterTime: 42
150
+ writeConcern:
151
+ command_name: findAndModify
152
+ database_name: *database_name
153
+ - command_started_event:
154
+ command:
155
+ abortTransaction: 1
156
+ lsid: session0
157
+ txnNumber:
158
+ $numberLong: "3"
159
+ startTransaction:
160
+ autocommit: false
161
+ readConcern:
162
+ writeConcern:
163
+ command_name: abortTransaction
164
+ database_name: admin
165
+
166
+ outcome:
167
+ collection:
168
+ data:
169
+ - {_id: 1}
170
+ - {_id: 2}
171
+ - {_id: 3, x: 2}
172
+ - {_id: 4, x: 1}
173
+
174
+ - description: collection writeConcern ignored for findOneAndUpdate
175
+
176
+ operations:
177
+ - name: startTransaction
178
+ object: session0
179
+ arguments:
180
+ options:
181
+ writeConcern:
182
+ w: majority
183
+ - name: findOneAndUpdate
184
+ object: collection
185
+ collectionOptions:
186
+ writeConcern:
187
+ w: majority
188
+ arguments:
189
+ session: session0
190
+ filter: {_id: 3}
191
+ update:
192
+ $inc: {x: 1}
193
+ returnDocument: Before
194
+ result: {_id: 3}
195
+ - name: commitTransaction
196
+ object: session0
197
+
198
+ expectations:
199
+ - command_started_event:
200
+ command:
201
+ findAndModify: *collection_name
202
+ query: {_id: 3}
203
+ update:
204
+ $inc: {x: 1}
205
+ new: false
206
+ lsid: session0
207
+ txnNumber:
208
+ $numberLong: "1"
209
+ startTransaction: true
210
+ autocommit: false
211
+ readConcern:
212
+ writeConcern:
213
+ command_name: findAndModify
214
+ database_name: *database_name
215
+ - command_started_event:
216
+ command:
217
+ commitTransaction: 1
218
+ lsid: session0
219
+ txnNumber:
220
+ $numberLong: "1"
221
+ startTransaction:
222
+ autocommit: false
223
+ readConcern:
224
+ writeConcern:
225
+ w: majority
226
+ command_name: commitTransaction
227
+ database_name: admin
228
+