mongo 2.11.4 → 2.12.3

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 (357) 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 +1 -1
  5. data/README.md +2 -1
  6. data/lib/mongo.rb +3 -0
  7. data/lib/mongo/address.rb +44 -19
  8. data/lib/mongo/auth.rb +1 -0
  9. data/lib/mongo/auth/credential_cache.rb +51 -0
  10. data/lib/mongo/auth/scram/conversation.rb +20 -16
  11. data/lib/mongo/auth/user.rb +0 -8
  12. data/lib/mongo/auth/user/view.rb +4 -4
  13. data/lib/mongo/background_thread.rb +1 -1
  14. data/lib/mongo/bulk_write.rb +5 -5
  15. data/lib/mongo/client.rb +143 -14
  16. data/lib/mongo/client_encryption.rb +103 -0
  17. data/lib/mongo/cluster.rb +8 -4
  18. data/lib/mongo/cluster/reapers/cursor_reaper.rb +18 -6
  19. data/lib/mongo/cluster/sdam_flow.rb +54 -58
  20. data/lib/mongo/collection.rb +3 -3
  21. data/lib/mongo/collection/view.rb +1 -1
  22. data/lib/mongo/collection/view/aggregation.rb +1 -1
  23. data/lib/mongo/collection/view/change_stream.rb +12 -3
  24. data/lib/mongo/collection/view/iterable.rb +14 -5
  25. data/lib/mongo/collection/view/map_reduce.rb +2 -2
  26. data/lib/mongo/collection/view/readable.rb +9 -7
  27. data/lib/mongo/collection/view/writable.rb +7 -7
  28. data/lib/mongo/crypt.rb +33 -0
  29. data/lib/mongo/crypt/auto_decryption_context.rb +40 -0
  30. data/lib/mongo/crypt/auto_encrypter.rb +179 -0
  31. data/lib/mongo/crypt/auto_encryption_context.rb +44 -0
  32. data/lib/mongo/crypt/binary.rb +155 -0
  33. data/lib/mongo/crypt/binding.rb +1229 -0
  34. data/lib/mongo/crypt/context.rb +135 -0
  35. data/lib/mongo/crypt/data_key_context.rb +162 -0
  36. data/lib/mongo/crypt/encryption_io.rb +289 -0
  37. data/lib/mongo/crypt/explicit_decryption_context.rb +40 -0
  38. data/lib/mongo/crypt/explicit_encrypter.rb +117 -0
  39. data/lib/mongo/crypt/explicit_encryption_context.rb +89 -0
  40. data/lib/mongo/crypt/handle.rb +315 -0
  41. data/lib/mongo/crypt/hooks.rb +90 -0
  42. data/lib/mongo/crypt/kms_context.rb +67 -0
  43. data/lib/mongo/crypt/status.rb +131 -0
  44. data/lib/mongo/cursor.rb +64 -32
  45. data/lib/mongo/database.rb +23 -6
  46. data/lib/mongo/database/view.rb +13 -4
  47. data/lib/mongo/dbref.rb +9 -2
  48. data/lib/mongo/error.rb +5 -1
  49. data/lib/mongo/error/bulk_write_error.rb +16 -14
  50. data/lib/mongo/error/crypt_error.rb +31 -0
  51. data/lib/mongo/error/{failed_stringprep_validation.rb → failed_string_prep_validation.rb} +0 -0
  52. data/lib/mongo/error/invalid_cursor_operation.rb +27 -0
  53. data/lib/mongo/error/kms_error.rb +22 -0
  54. data/lib/mongo/error/max_bson_size.rb +14 -3
  55. data/lib/mongo/error/mongocryptd_spawn_error.rb +22 -0
  56. data/lib/mongo/error/no_server_available.rb +8 -3
  57. data/lib/mongo/error/notable.rb +0 -15
  58. data/lib/mongo/error/operation_failure.rb +1 -0
  59. data/lib/mongo/error/parser.rb +1 -1
  60. data/lib/mongo/grid/file.rb +5 -0
  61. data/lib/mongo/grid/file/chunk.rb +2 -0
  62. data/lib/mongo/grid/file/info.rb +3 -2
  63. data/lib/mongo/grid/fs_bucket.rb +15 -13
  64. data/lib/mongo/grid/stream/write.rb +9 -3
  65. data/lib/mongo/index/view.rb +3 -3
  66. data/lib/mongo/monitoring/event/cmap/connection_check_out_failed.rb +1 -1
  67. data/lib/mongo/monitoring/event/command_started.rb +6 -1
  68. data/lib/mongo/operation/collections_info.rb +6 -3
  69. data/lib/mongo/operation/delete/op_msg.rb +1 -1
  70. data/lib/mongo/operation/find/op_msg.rb +4 -1
  71. data/lib/mongo/operation/get_more/op_msg.rb +4 -1
  72. data/lib/mongo/operation/insert/command.rb +3 -2
  73. data/lib/mongo/operation/insert/legacy.rb +3 -2
  74. data/lib/mongo/operation/insert/op_msg.rb +3 -3
  75. data/lib/mongo/operation/result.rb +36 -27
  76. data/lib/mongo/operation/shared/executable.rb +11 -9
  77. data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
  78. data/lib/mongo/operation/shared/op_msg_or_command.rb +2 -2
  79. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +2 -2
  80. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +2 -2
  81. data/lib/mongo/operation/shared/read_preference_supported.rb +68 -19
  82. data/lib/mongo/operation/shared/response_handling.rb +1 -1
  83. data/lib/mongo/operation/shared/sessions_supported.rb +44 -3
  84. data/lib/mongo/operation/shared/write.rb +17 -10
  85. data/lib/mongo/operation/update/op_msg.rb +1 -1
  86. data/lib/mongo/protocol/bit_vector.rb +2 -1
  87. data/lib/mongo/protocol/compressed.rb +6 -5
  88. data/lib/mongo/protocol/insert.rb +3 -1
  89. data/lib/mongo/protocol/message.rb +94 -15
  90. data/lib/mongo/protocol/msg.rb +207 -37
  91. data/lib/mongo/protocol/query.rb +7 -9
  92. data/lib/mongo/protocol/serializers.rb +43 -15
  93. data/lib/mongo/retryable.rb +1 -1
  94. data/lib/mongo/server.rb +10 -4
  95. data/lib/mongo/server/connection.rb +20 -9
  96. data/lib/mongo/server/connection_base.rb +118 -18
  97. data/lib/mongo/server/connection_common.rb +61 -0
  98. data/lib/mongo/server/connection_pool.rb +37 -1
  99. data/lib/mongo/server/connection_pool/populator.rb +1 -1
  100. data/lib/mongo/server/description.rb +9 -11
  101. data/lib/mongo/server/monitor.rb +2 -0
  102. data/lib/mongo/server/monitor/connection.rb +3 -18
  103. data/lib/mongo/server/pending_connection.rb +2 -1
  104. data/lib/mongo/session.rb +3 -3
  105. data/lib/mongo/session/session_pool.rb +8 -3
  106. data/lib/mongo/socket.rb +29 -16
  107. data/lib/mongo/socket/ssl.rb +23 -8
  108. data/lib/mongo/socket/tcp.rb +12 -3
  109. data/lib/mongo/srv/monitor.rb +73 -42
  110. data/lib/mongo/srv/result.rb +0 -1
  111. data/lib/mongo/timeout.rb +49 -0
  112. data/lib/mongo/uri.rb +30 -1
  113. data/lib/mongo/uri/srv_protocol.rb +1 -1
  114. data/lib/mongo/version.rb +1 -1
  115. data/mongo.gemspec +1 -3
  116. data/spec/README.md +228 -7
  117. data/spec/integration/auth_spec.rb +53 -0
  118. data/spec/integration/bulk_write_spec.rb +19 -0
  119. data/spec/integration/{client_options_spec.rb → client_authentication_options_spec.rb} +10 -10
  120. data/spec/integration/client_construction_spec.rb +100 -1
  121. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +353 -0
  122. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +303 -0
  123. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +72 -0
  124. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +79 -0
  125. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +221 -0
  126. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +601 -0
  127. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +187 -0
  128. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +78 -0
  129. data/spec/integration/client_side_encryption/client_close_spec.rb +63 -0
  130. data/spec/integration/client_side_encryption/corpus_spec.rb +233 -0
  131. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +132 -0
  132. data/spec/integration/client_side_encryption/data_key_spec.rb +165 -0
  133. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +114 -0
  134. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +141 -0
  135. data/spec/integration/client_side_encryption/views_spec.rb +44 -0
  136. data/spec/integration/client_update_spec.rb +154 -0
  137. data/spec/integration/command_monitoring_spec.rb +3 -1
  138. data/spec/integration/command_spec.rb +44 -10
  139. data/spec/integration/connection_spec.rb +57 -0
  140. data/spec/integration/crud_spec.rb +89 -0
  141. data/spec/integration/grid_fs_bucket_spec.rb +48 -0
  142. data/spec/integration/read_preference_spec.rb +26 -0
  143. data/spec/integration/reconnect_spec.rb +7 -6
  144. data/spec/integration/size_limit_spec.rb +111 -0
  145. data/spec/integration/srv_monitoring_spec.rb +16 -8
  146. data/spec/integration/zlib_compression_spec.rb +25 -0
  147. data/spec/kerberos/kerberos_spec.rb +87 -0
  148. data/spec/lite_spec_helper.rb +34 -29
  149. data/spec/mongo/auth/cr_spec.rb +8 -0
  150. data/spec/mongo/auth/ldap_spec.rb +5 -1
  151. data/spec/mongo/auth/scram/conversation_spec.rb +5 -6
  152. data/spec/mongo/auth/scram/negotiation_spec.rb +74 -75
  153. data/spec/mongo/auth/scram_spec.rb +45 -35
  154. data/spec/mongo/auth/user/view_spec.rb +3 -6
  155. data/spec/mongo/auth/x509_spec.rb +5 -1
  156. data/spec/mongo/bulk_write/result_spec.rb +11 -7
  157. data/spec/mongo/client_construction_spec.rb +206 -2
  158. data/spec/mongo/client_encryption_spec.rb +405 -0
  159. data/spec/mongo/cluster/cursor_reaper_spec.rb +12 -8
  160. data/spec/mongo/cluster/socket_reaper_spec.rb +14 -3
  161. data/spec/mongo/collection/view/aggregation_spec.rb +0 -2
  162. data/spec/mongo/collection/view/change_stream_spec.rb +7 -7
  163. data/spec/mongo/collection/view/map_reduce_spec.rb +3 -3
  164. data/spec/mongo/collection/view_spec.rb +1 -1
  165. data/spec/mongo/collection_spec.rb +28 -9
  166. data/spec/mongo/crypt/auto_decryption_context_spec.rb +90 -0
  167. data/spec/mongo/crypt/auto_encrypter_spec.rb +187 -0
  168. data/spec/mongo/crypt/auto_encryption_context_spec.rb +107 -0
  169. data/spec/mongo/crypt/binary_spec.rb +115 -0
  170. data/spec/mongo/crypt/binding/binary_spec.rb +56 -0
  171. data/spec/mongo/crypt/binding/context_spec.rb +257 -0
  172. data/spec/mongo/crypt/binding/helpers_spec.rb +46 -0
  173. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +144 -0
  174. data/spec/mongo/crypt/binding/status_spec.rb +99 -0
  175. data/spec/mongo/crypt/binding/version_spec.rb +22 -0
  176. data/spec/mongo/crypt/binding_unloaded_spec.rb +20 -0
  177. data/spec/mongo/crypt/data_key_context_spec.rb +213 -0
  178. data/spec/mongo/crypt/encryption_io_spec.rb +136 -0
  179. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +72 -0
  180. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +170 -0
  181. data/spec/mongo/crypt/handle_spec.rb +232 -0
  182. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +108 -0
  183. data/spec/mongo/crypt/status_spec.rb +152 -0
  184. data/spec/mongo/cursor_spec.rb +24 -4
  185. data/spec/mongo/database_spec.rb +20 -0
  186. data/spec/mongo/error/bulk_write_error_spec.rb +49 -0
  187. data/spec/mongo/error/crypt_error_spec.rb +26 -0
  188. data/spec/mongo/error/max_bson_size_spec.rb +35 -0
  189. data/spec/mongo/error/no_server_available_spec.rb +11 -1
  190. data/spec/mongo/error/notable_spec.rb +59 -0
  191. data/spec/mongo/error/operation_failure_spec.rb +6 -6
  192. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  193. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  194. data/spec/mongo/operation/command_spec.rb +3 -3
  195. data/spec/mongo/operation/create_index_spec.rb +3 -3
  196. data/spec/mongo/operation/create_user_spec.rb +3 -3
  197. data/spec/mongo/operation/delete/bulk_spec.rb +6 -6
  198. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -6
  199. data/spec/mongo/operation/delete_spec.rb +7 -7
  200. data/spec/mongo/operation/drop_index_spec.rb +2 -2
  201. data/spec/mongo/operation/find/legacy_spec.rb +2 -1
  202. data/spec/mongo/operation/get_more_spec.rb +1 -1
  203. data/spec/mongo/operation/indexes_spec.rb +1 -1
  204. data/spec/mongo/operation/insert/bulk_spec.rb +7 -7
  205. data/spec/mongo/operation/insert/op_msg_spec.rb +3 -6
  206. data/spec/mongo/operation/insert_spec.rb +12 -12
  207. data/spec/mongo/operation/map_reduce_spec.rb +2 -2
  208. data/spec/mongo/operation/read_preference_legacy_spec.rb +351 -0
  209. data/spec/mongo/operation/read_preference_op_msg_spec.rb +194 -0
  210. data/spec/mongo/operation/remove_user_spec.rb +3 -3
  211. data/spec/mongo/operation/update/bulk_spec.rb +6 -6
  212. data/spec/mongo/operation/update/op_msg_spec.rb +3 -6
  213. data/spec/mongo/operation/update_spec.rb +7 -7
  214. data/spec/mongo/operation/update_user_spec.rb +1 -1
  215. data/spec/mongo/protocol/compressed_spec.rb +2 -3
  216. data/spec/mongo/protocol/delete_spec.rb +9 -8
  217. data/spec/mongo/protocol/get_more_spec.rb +9 -8
  218. data/spec/mongo/protocol/insert_spec.rb +9 -8
  219. data/spec/mongo/protocol/kill_cursors_spec.rb +6 -5
  220. data/spec/mongo/protocol/msg_spec.rb +57 -53
  221. data/spec/mongo/protocol/query_spec.rb +12 -12
  222. data/spec/mongo/protocol/registry_spec.rb +1 -1
  223. data/spec/mongo/protocol/reply_spec.rb +1 -1
  224. data/spec/mongo/protocol/update_spec.rb +10 -9
  225. data/spec/mongo/server/connection_pool_spec.rb +1 -1
  226. data/spec/mongo/server/connection_spec.rb +28 -7
  227. data/spec/mongo/socket_spec.rb +1 -1
  228. data/spec/mongo/srv/monitor_spec.rb +88 -69
  229. data/spec/mongo/timeout_spec.rb +85 -0
  230. data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
  231. data/spec/mongo/uri_spec.rb +52 -5
  232. data/spec/mongo/write_concern_spec.rb +13 -1
  233. data/spec/{support → runners}/auth.rb +14 -1
  234. data/spec/{support → runners}/change_streams.rb +1 -1
  235. data/spec/{support → runners}/change_streams/operation.rb +0 -0
  236. data/spec/{support → runners}/cmap.rb +1 -1
  237. data/spec/{support → runners}/cmap/verifier.rb +0 -0
  238. data/spec/{support → runners}/command_monitoring.rb +0 -0
  239. data/spec/runners/connection_string.rb +358 -4
  240. data/spec/{support → runners}/crud.rb +9 -9
  241. data/spec/{support → runners}/crud/context.rb +0 -0
  242. data/spec/{support → runners}/crud/operation.rb +7 -3
  243. data/spec/{support → runners}/crud/outcome.rb +0 -0
  244. data/spec/{support → runners}/crud/requirement.rb +1 -1
  245. data/spec/{support → runners}/crud/spec.rb +12 -1
  246. data/spec/{support → runners}/crud/test.rb +0 -0
  247. data/spec/{support → runners}/crud/test_base.rb +0 -0
  248. data/spec/{support → runners}/crud/verifier.rb +10 -12
  249. data/spec/{support → runners}/gridfs.rb +0 -0
  250. data/spec/{support → runners}/sdam_monitoring.rb +0 -0
  251. data/spec/{support → runners}/server_discovery_and_monitoring.rb +0 -0
  252. data/spec/{support → runners}/server_selection.rb +0 -0
  253. data/spec/{support → runners}/server_selection_rtt.rb +0 -0
  254. data/spec/{support → runners}/transactions.rb +9 -11
  255. data/spec/{support → runners}/transactions/context.rb +0 -0
  256. data/spec/{support → runners}/transactions/operation.rb +0 -0
  257. data/spec/{support → runners}/transactions/spec.rb +0 -0
  258. data/spec/{support → runners}/transactions/test.rb +37 -5
  259. data/spec/spec_helper.rb +0 -5
  260. data/spec/spec_tests/auth_spec.rb +3 -3
  261. data/spec/spec_tests/client_side_encryption_spec.rb +8 -0
  262. data/spec/spec_tests/connection_string_spec.rb +1 -1
  263. data/spec/spec_tests/data/auth/connection-string.yml +13 -0
  264. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +134 -0
  265. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +526 -0
  266. data/spec/spec_tests/data/client_side_encryption/badSchema.yml +73 -0
  267. data/spec/spec_tests/data/client_side_encryption/basic.yml +116 -0
  268. data/spec/spec_tests/data/client_side_encryption/bulk.yml +88 -0
  269. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +100 -0
  270. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +42 -0
  271. data/spec/spec_tests/data/client_side_encryption/count.yml +61 -0
  272. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +59 -0
  273. data/spec/spec_tests/data/client_side_encryption/delete.yml +105 -0
  274. data/spec/spec_tests/data/client_side_encryption/distinct.yml +73 -0
  275. data/spec/spec_tests/data/client_side_encryption/explain.yml +64 -0
  276. data/spec/spec_tests/data/client_side_encryption/find.yml +119 -0
  277. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +57 -0
  278. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +57 -0
  279. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +57 -0
  280. data/spec/spec_tests/data/client_side_encryption/getMore.yml +68 -0
  281. data/spec/spec_tests/data/client_side_encryption/insert.yml +102 -0
  282. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +71 -0
  283. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +54 -0
  284. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +72 -0
  285. data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +69 -0
  286. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +20 -0
  287. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +49 -0
  288. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +64 -0
  289. data/spec/spec_tests/data/client_side_encryption/types.yml +527 -0
  290. data/spec/spec_tests/data/client_side_encryption/unsupportedCommand.yml +25 -0
  291. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +77 -0
  292. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +171 -0
  293. data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +1 -4
  294. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +21 -0
  295. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +2 -4
  296. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +1 -1
  297. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +73 -0
  298. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +1 -2
  299. data/spec/spec_tests/data/sdam/rs/repeated.yml +101 -0
  300. data/spec/spec_tests/data/sdam/rs/{primary_address_change.yml → ruby_primary_address_change.yml} +2 -0
  301. 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
  302. data/spec/spec_tests/data/sdam/sharded/ruby_discovered_single_mongos.yml +27 -0
  303. data/spec/spec_tests/data/sdam/sharded/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
  304. data/spec/spec_tests/data/sdam/sharded/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
  305. data/spec/spec_tests/data/sdam/single/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
  306. data/spec/spec_tests/data/sdam/single/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
  307. data/spec/spec_tests/data/sdam_monitoring/{replica_set_with_primary_change.yml → replica_set_primary_address_change.yml} +27 -5
  308. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +26 -74
  309. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +20 -16
  310. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +73 -0
  311. data/spec/spec_tests/data/transactions/pin-mongos.yml +2 -3
  312. data/spec/spec_tests/data/uri_options/auth-options.yml +10 -0
  313. data/spec/spec_tests/data/uri_options/tls-options.yml +75 -4
  314. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  315. data/spec/spec_tests/uri_options_spec.rb +6 -8
  316. data/spec/stress/connection_pool_timing_spec.rb +6 -3
  317. data/spec/support/certificates/README.md +4 -0
  318. data/spec/support/certificates/server-second-level-bundle.pem +77 -77
  319. data/spec/support/certificates/server-second-level.crt +52 -52
  320. data/spec/support/certificates/server-second-level.key +25 -25
  321. data/spec/support/certificates/server-second-level.pem +77 -77
  322. data/spec/support/client_registry.rb +19 -3
  323. data/spec/support/cluster_config.rb +9 -1
  324. data/spec/support/cluster_tools.rb +6 -1
  325. data/spec/support/common_shortcuts.rb +12 -0
  326. data/spec/support/constraints.rb +16 -0
  327. data/spec/support/crypt.rb +154 -0
  328. data/spec/support/crypt/corpus/corpus-key-aws.json +33 -0
  329. data/spec/support/crypt/corpus/corpus-key-local.json +31 -0
  330. data/spec/support/crypt/corpus/corpus-schema.json +2057 -0
  331. data/spec/support/crypt/corpus/corpus.json +3657 -0
  332. data/spec/support/crypt/corpus/corpus_encrypted.json +4152 -0
  333. data/spec/support/crypt/data_keys/key_document_aws.json +34 -0
  334. data/spec/support/crypt/data_keys/key_document_local.json +31 -0
  335. data/spec/support/crypt/external/external-key.json +31 -0
  336. data/spec/support/crypt/external/external-schema.json +19 -0
  337. data/spec/support/crypt/limits/limits-doc.json +102 -0
  338. data/spec/support/crypt/limits/limits-key.json +31 -0
  339. data/spec/support/crypt/limits/limits-schema.json +1405 -0
  340. data/spec/support/crypt/schema_maps/schema_map_aws.json +17 -0
  341. data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  342. data/spec/support/crypt/schema_maps/schema_map_local.json +18 -0
  343. data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +12 -0
  344. data/spec/support/lite_constraints.rb +19 -1
  345. data/spec/support/matchers.rb +19 -0
  346. data/spec/support/shared/protocol.rb +2 -0
  347. data/spec/support/spec_config.rb +53 -13
  348. data/spec/support/utils.rb +140 -10
  349. metadata +894 -687
  350. metadata.gz.sig +0 -0
  351. data/lib/mongo/cluster/srv_monitor.rb +0 -127
  352. data/lib/mongo/srv/warning_result.rb +0 -35
  353. data/spec/enterprise_auth/kerberos_spec.rb +0 -58
  354. data/spec/mongo/cluster/srv_monitor_spec.rb +0 -214
  355. data/spec/mongo/operation/read_preference_spec.rb +0 -245
  356. data/spec/spec_tests/data/sdam/sharded/single_mongos.yml +0 -33
  357. data/spec/support/connection_string.rb +0 -354
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'lite_spec_helper'
2
2
 
3
3
  describe Mongo::Error::NoServerAvailable do
4
4
  describe 'message' do
@@ -18,5 +18,15 @@ describe Mongo::Error::NoServerAvailable do
18
18
  it 'is correct' do
19
19
  expect(error.message).to eq('No primary server is available in cluster: #<Cluster topology=Unknown[127.0.0.1:27017] servers=[#<Server address=127.0.0.1:27017 UNKNOWN>]> with timeout=30, LT=0.015')
20
20
  end
21
+
22
+ context 'when cluster is nil' do
23
+ let(:error) do
24
+ Mongo::Error::NoServerAvailable.new(selector, nil)
25
+ end
26
+
27
+ it 'is correct' do
28
+ expect(error.message).to eq('No primary server is available with timeout=30, LT=0.015')
29
+ end
30
+ end
21
31
  end
22
32
  end
@@ -0,0 +1,59 @@
1
+ require 'lite_spec_helper'
2
+
3
+ describe Mongo::Error::Notable do
4
+ let(:exception_cls) do
5
+ # Since Notable is a module, we need a class that includes it for testing
6
+ Mongo::Error
7
+ end
8
+
9
+ context 'when there are no notes' do
10
+ let(:exception) do
11
+ exception_cls.new('hello world')
12
+ end
13
+
14
+ describe '#message' do
15
+ it 'is correct' do
16
+ exception.message.should == 'hello world'
17
+ end
18
+ end
19
+
20
+ describe '#to_s' do
21
+ it 'is correct' do
22
+ exception.to_s.should == 'hello world'
23
+ end
24
+ end
25
+
26
+ describe '#inspect' do
27
+ it 'is correct' do
28
+ exception.inspect.should == '#<Mongo::Error: hello world>'
29
+ end
30
+ end
31
+ end
32
+
33
+ context 'when there are notes' do
34
+ let(:exception) do
35
+ exception_cls.new('hello world').tap do |exception|
36
+ exception.add_note('brilliant')
37
+ exception.add_note('weird')
38
+ end
39
+ end
40
+
41
+ describe '#message' do
42
+ it 'is correct' do
43
+ exception.message.should == 'hello world (brilliant, weird)'
44
+ end
45
+ end
46
+
47
+ describe '#to_s' do
48
+ it 'is correct' do
49
+ exception.to_s.should == 'hello world (brilliant, weird)'
50
+ end
51
+ end
52
+
53
+ describe '#inspect' do
54
+ it 'is correct' do
55
+ exception.inspect.should == '#<Mongo::Error: hello world (brilliant, weird)>'
56
+ end
57
+ end
58
+ end
59
+ end
@@ -72,7 +72,7 @@ describe Mongo::Error::OperationFailure do
72
72
  context 'when there is a network error' do
73
73
  context 'getMore' do
74
74
  let(:error) { Mongo::Error::OperationFailure.new('problem: socket exception',
75
- Mongo::Operation::GetMore::Result.new([])) }
75
+ Mongo::Operation::GetMore::Result.new(nil)) }
76
76
 
77
77
  it 'returns true' do
78
78
  expect(error.change_stream_resumable?).to be true
@@ -91,7 +91,7 @@ describe Mongo::Error::OperationFailure do
91
91
  context 'when there is a resumable message' do
92
92
  context 'getMore response' do
93
93
  let(:error) { Mongo::Error::OperationFailure.new('problem: node is recovering',
94
- Mongo::Operation::GetMore::Result.new([])) }
94
+ Mongo::Operation::GetMore::Result.new(nil)) }
95
95
 
96
96
  it 'returns true' do
97
97
  expect(error.change_stream_resumable?).to eql(true)
@@ -110,7 +110,7 @@ describe Mongo::Error::OperationFailure do
110
110
  context 'when there is a resumable code' do
111
111
  context 'getMore response' do
112
112
  let(:error) { Mongo::Error::OperationFailure.new('no message',
113
- Mongo::Operation::GetMore::Result.new([]),
113
+ Mongo::Operation::GetMore::Result.new(nil),
114
114
  :code => 91, :code_name => 'ShutdownInProgress') }
115
115
 
116
116
  it 'returns true' do
@@ -131,7 +131,7 @@ describe Mongo::Error::OperationFailure do
131
131
  context 'when there is a non-resumable code' do
132
132
  context 'getMore response' do
133
133
  let(:error) { Mongo::Error::OperationFailure.new('no message',
134
- Mongo::Operation::GetMore::Result.new([]),
134
+ Mongo::Operation::GetMore::Result.new(nil),
135
135
  :code => 136, :code_name => 'CappedPositionLost') }
136
136
 
137
137
  it 'returns false' do
@@ -152,7 +152,7 @@ describe Mongo::Error::OperationFailure do
152
152
  context 'when there is a non-resumable label' do
153
153
  context 'getMore response' do
154
154
  let(:error) { Mongo::Error::OperationFailure.new('no message',
155
- Mongo::Operation::GetMore::Result.new([]),
155
+ Mongo::Operation::GetMore::Result.new(nil),
156
156
  :code => 91, :code_name => 'ShutdownInProgress',
157
157
  :labels => ['NonResumableChangeStreamError']) }
158
158
 
@@ -175,7 +175,7 @@ describe Mongo::Error::OperationFailure do
175
175
  context 'when there is another label' do
176
176
  context 'getMore response' do
177
177
  let(:error) { Mongo::Error::OperationFailure.new('no message',
178
- Mongo::Operation::GetMore::Result.new([]),
178
+ Mongo::Operation::GetMore::Result.new(nil),
179
179
  :code => 91, :code_name => 'ShutdownInProgress',
180
180
  :labels => %w(TransientTransactionError)) }
181
181
 
@@ -64,7 +64,7 @@ describe Mongo::Operation::Aggregate do
64
64
 
65
65
  it 'raises an exception' do
66
66
  expect {
67
- op.execute(authorized_primary)
67
+ op.execute(authorized_primary, client: nil)
68
68
  }.to raise_error(Mongo::Error::OperationFailure)
69
69
  end
70
70
  end
@@ -31,7 +31,7 @@ describe Mongo::Operation::CollectionsInfo do
31
31
  end
32
32
 
33
33
  let(:info) do
34
- docs = op.execute(authorized_primary).documents
34
+ docs = op.execute(authorized_primary, client: nil).documents
35
35
  docs.collect { |info| info['name'].sub("#{SpecConfig.instance.test_db}.", '') }
36
36
  end
37
37
 
@@ -43,7 +43,7 @@ describe Mongo::Operation::Command do
43
43
  context 'when the command succeeds' do
44
44
 
45
45
  let(:response) do
46
- op.execute(authorized_primary)
46
+ op.execute(authorized_primary, client: nil)
47
47
  end
48
48
 
49
49
  it 'returns the reponse' do
@@ -59,7 +59,7 @@ describe Mongo::Operation::Command do
59
59
 
60
60
  it 'raises an exception' do
61
61
  expect {
62
- op.execute(authorized_primary)
62
+ op.execute(authorized_primary, client: nil)
63
63
  }.to raise_error(Mongo::Error::OperationFailure)
64
64
  end
65
65
  end
@@ -72,7 +72,7 @@ describe Mongo::Operation::Command do
72
72
 
73
73
  it 'raises an error' do
74
74
  expect {
75
- op.execute(authorized_primary)
75
+ op.execute(authorized_primary, client: nil)
76
76
  }.to raise_error(Mongo::Error::MaxBSONSize)
77
77
  end
78
78
  end
@@ -20,7 +20,7 @@ describe Mongo::Operation::CreateIndex do
20
20
  end
21
21
 
22
22
  let(:response) do
23
- operation.execute(authorized_primary)
23
+ operation.execute(authorized_primary, client: nil)
24
24
  end
25
25
 
26
26
  it 'returns ok' do
@@ -43,12 +43,12 @@ describe Mongo::Operation::CreateIndex do
43
43
  end
44
44
 
45
45
  before do
46
- operation.execute(authorized_primary)
46
+ operation.execute(authorized_primary, client: nil)
47
47
  end
48
48
 
49
49
  it 'raises an exception' do
50
50
  expect {
51
- second_operation.execute(authorized_primary)
51
+ second_operation.execute(authorized_primary, client: nil)
52
52
  }.to raise_error(Mongo::Error::OperationFailure)
53
53
  end
54
54
  end
@@ -26,7 +26,7 @@ describe Mongo::Operation::CreateUser do
26
26
  context 'when user creation was successful' do
27
27
 
28
28
  let!(:response) do
29
- operation.execute(root_authorized_primary)
29
+ operation.execute(root_authorized_primary, client: nil)
30
30
  end
31
31
 
32
32
  it 'saves the user in the database' do
@@ -38,8 +38,8 @@ describe Mongo::Operation::CreateUser do
38
38
 
39
39
  it 'raises an exception' do
40
40
  expect {
41
- operation.execute(root_authorized_primary)
42
- operation.execute(root_authorized_primary)
41
+ operation.execute(root_authorized_primary, client: nil)
42
+ operation.execute(root_authorized_primary, client: nil)
43
43
  }.to raise_error(Mongo::Error::OperationFailure)
44
44
  end
45
45
  end
@@ -99,7 +99,7 @@ describe Mongo::Operation::Delete do
99
99
  end
100
100
 
101
101
  it 'deletes the document from the database' do
102
- op.bulk_execute(authorized_primary)
102
+ op.bulk_execute(authorized_primary, client: nil)
103
103
  expect(authorized_collection.find.count).to eq(1)
104
104
  end
105
105
  end
@@ -122,7 +122,7 @@ describe Mongo::Operation::Delete do
122
122
  end
123
123
 
124
124
  it 'deletes the documents from the database' do
125
- op.bulk_execute(authorized_primary)
125
+ op.bulk_execute(authorized_primary, client: nil)
126
126
  expect(authorized_collection.find.count).to eq(0)
127
127
  end
128
128
  end
@@ -157,7 +157,7 @@ describe Mongo::Operation::Delete do
157
157
  end
158
158
 
159
159
  it 'aborts after first error' do
160
- failing_delete.bulk_execute(authorized_primary)
160
+ failing_delete.bulk_execute(authorized_primary, client: nil)
161
161
  expect(authorized_collection.find.count).to eq(2)
162
162
  end
163
163
  end
@@ -169,7 +169,7 @@ describe Mongo::Operation::Delete do
169
169
  end
170
170
 
171
171
  it 'aborts after first error' do
172
- failing_delete.bulk_execute(authorized_primary)
172
+ failing_delete.bulk_execute(authorized_primary, client: nil)
173
173
  expect(authorized_collection.find.count).to eq(2)
174
174
  end
175
175
  end
@@ -205,7 +205,7 @@ describe Mongo::Operation::Delete do
205
205
  end
206
206
 
207
207
  it 'does not abort after first error' do
208
- failing_delete.bulk_execute(authorized_primary)
208
+ failing_delete.bulk_execute(authorized_primary, client: nil)
209
209
  expect(authorized_collection.find.count).to eq(1)
210
210
  end
211
211
  end
@@ -217,7 +217,7 @@ describe Mongo::Operation::Delete do
217
217
  end
218
218
 
219
219
  it 'does not abort after first error' do
220
- failing_delete.bulk_execute(authorized_primary)
220
+ failing_delete.bulk_execute(authorized_primary, client: nil)
221
221
  expect(authorized_collection.find.count).to eq(1)
222
222
  end
223
223
  end
@@ -101,12 +101,7 @@ describe Mongo::Operation::Delete::OpMsg do
101
101
  end
102
102
 
103
103
  let(:expected_payload_1) do
104
- {
105
- type: 1,
106
- payload: { identifier: 'deletes',
107
- sequence: deletes
108
- }
109
- }
104
+ Mongo::Protocol::Msg::Section1.new('deletes', deletes)
110
105
  end
111
106
 
112
107
  let(:session) do
@@ -103,7 +103,7 @@ describe Mongo::Operation::Delete do
103
103
  end
104
104
 
105
105
  let(:result) do
106
- delete.execute(authorized_primary)
106
+ delete.execute(authorized_primary, client: nil)
107
107
  end
108
108
 
109
109
  it 'deletes the documents from the database' do
@@ -123,7 +123,7 @@ describe Mongo::Operation::Delete do
123
123
 
124
124
  it 'raises an exception' do
125
125
  expect {
126
- delete.execute(authorized_primary)
126
+ delete.execute(authorized_primary, client: nil)
127
127
  }.to raise_error(Mongo::Error::OperationFailure)
128
128
  end
129
129
  end
@@ -147,7 +147,7 @@ describe Mongo::Operation::Delete do
147
147
  end
148
148
 
149
149
  let(:result) do
150
- delete.execute(authorized_primary)
150
+ delete.execute(authorized_primary, client: nil)
151
151
  end
152
152
 
153
153
  it 'deletes the documents from the database' do
@@ -166,13 +166,13 @@ describe Mongo::Operation::Delete do
166
166
  end
167
167
 
168
168
  let(:result) do
169
- delete.execute(authorized_primary)
169
+ delete.execute(authorized_primary, client: nil)
170
170
  end
171
171
 
172
172
  it 'does not delete any documents' do
173
173
 
174
174
  expect {
175
- op.execute(authorized_primary)
175
+ op.execute(authorized_primary, client: nil)
176
176
  }.to raise_error(Mongo::Error::OperationFailure)
177
177
 
178
178
  expect(authorized_collection.find.count).to eq(2)
@@ -187,7 +187,7 @@ describe Mongo::Operation::Delete do
187
187
 
188
188
  it 'raises an error' do
189
189
  expect {
190
- op.execute(authorized_primary)
190
+ op.execute(authorized_primary, client: nil)
191
191
  }.to raise_error(Mongo::Error::MaxBSONSize)
192
192
  end
193
193
  end
@@ -211,7 +211,7 @@ describe Mongo::Operation::Delete do
211
211
  end
212
212
 
213
213
  let(:result) do
214
- delete.execute(authorized_primary)
214
+ delete.execute(authorized_primary, client: nil)
215
215
  end
216
216
 
217
217
  before do
@@ -26,7 +26,7 @@ describe Mongo::Operation::DropIndex do
26
26
  end
27
27
 
28
28
  let(:response) do
29
- operation.execute(authorized_primary)
29
+ operation.execute(authorized_primary, client: nil)
30
30
  end
31
31
 
32
32
  it 'removes the index' do
@@ -46,7 +46,7 @@ describe Mongo::Operation::DropIndex do
46
46
 
47
47
  it 'raises an exception' do
48
48
  expect {
49
- operation.execute(authorized_primary)
49
+ operation.execute(authorized_primary, client: nil)
50
50
  }.to raise_error(Mongo::Error::OperationFailure)
51
51
  end
52
52
  end
@@ -71,6 +71,7 @@ describe Mongo::Operation::Find::Legacy do
71
71
  let(:secondary_server_single) do
72
72
  double('secondary_server').tap do |server|
73
73
  allow(server).to receive(:mongos?) { false }
74
+ allow(server).to receive(:standalone?) { false }
74
75
  allow(server).to receive(:cluster) { cluster_single }
75
76
  allow(server).to receive(:features) { authorized_primary.features }
76
77
  end
@@ -96,7 +97,7 @@ describe Mongo::Operation::Find::Legacy do
96
97
  end
97
98
 
98
99
  it 'does not raise an exception' do
99
- expect(op.execute(authorized_primary)).to be_a(Mongo::Operation::Find::Legacy::Result)
100
+ expect(op.execute(authorized_primary, client: nil)).to be_a(Mongo::Operation::Find::Legacy::Result)
100
101
  end
101
102
  end
102
103
  end
@@ -47,7 +47,7 @@ describe Mongo::Operation::GetMore::Legacy do
47
47
 
48
48
  it 'creates a get more wire protocol message with correct specs' do
49
49
  expect(Mongo::Protocol::GetMore).to receive(:new).with(SpecConfig.instance.test_db, TEST_COLL, to_return, cursor_id).and_call_original
50
- begin; op.execute(authorized_primary); rescue; end
50
+ begin; op.execute(authorized_primary, client: nil); rescue; end
51
51
  end
52
52
  end
53
53
  end
@@ -24,7 +24,7 @@ describe Mongo::Operation::Indexes do
24
24
  end
25
25
 
26
26
  let(:indexes) do
27
- operation.execute(authorized_primary)
27
+ operation.execute(authorized_primary, client: nil)
28
28
  end
29
29
 
30
30
  it 'returns the indexes for the collection' do
@@ -99,7 +99,7 @@ describe Mongo::Operation::Insert do
99
99
  end
100
100
 
101
101
  let(:inserted_ids) do
102
- op.bulk_execute(authorized_primary).inserted_ids
102
+ op.bulk_execute(authorized_primary, client: nil).inserted_ids
103
103
  end
104
104
 
105
105
  let(:collection_ids) do
@@ -128,7 +128,7 @@ describe Mongo::Operation::Insert do
128
128
  context 'when the insert succeeds' do
129
129
 
130
130
  let(:response) do
131
- op.bulk_execute(authorized_primary)
131
+ op.bulk_execute(authorized_primary, client: nil)
132
132
  end
133
133
 
134
134
  it 'inserts the documents into the database' do
@@ -146,7 +146,7 @@ describe Mongo::Operation::Insert do
146
146
  end
147
147
 
148
148
  let(:response) do
149
- op.bulk_execute(authorized_primary)
149
+ op.bulk_execute(authorized_primary, client: nil)
150
150
  end
151
151
 
152
152
  it 'inserts the documents into the database' do
@@ -183,7 +183,7 @@ describe Mongo::Operation::Insert do
183
183
  context 'when the insert fails' do
184
184
 
185
185
  it 'aborts after first error' do
186
- failing_insert.bulk_execute(authorized_primary)
186
+ failing_insert.bulk_execute(authorized_primary, client: nil)
187
187
  expect(authorized_collection.find.count).to eq(1)
188
188
  end
189
189
  end
@@ -197,7 +197,7 @@ describe Mongo::Operation::Insert do
197
197
  context 'when the insert fails' do
198
198
 
199
199
  it 'aborts after first error' do
200
- failing_insert.bulk_execute(authorized_primary)
200
+ failing_insert.bulk_execute(authorized_primary, client: nil)
201
201
  expect(authorized_collection.find.count).to eq(1)
202
202
  end
203
203
  end
@@ -228,7 +228,7 @@ describe Mongo::Operation::Insert do
228
228
  context 'when the insert fails' do
229
229
 
230
230
  it 'does not abort after first error' do
231
- failing_insert.bulk_execute(authorized_primary)
231
+ failing_insert.bulk_execute(authorized_primary, client: nil)
232
232
  expect(authorized_collection.find.count).to eq(2)
233
233
  end
234
234
  end
@@ -243,7 +243,7 @@ describe Mongo::Operation::Insert do
243
243
  context 'when the insert fails' do
244
244
 
245
245
  it 'does not after first error' do
246
- failing_insert.bulk_execute(authorized_primary)
246
+ failing_insert.bulk_execute(authorized_primary, client: nil)
247
247
  expect(authorized_collection.find.count).to eq(2)
248
248
  end
249
249
  end