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,18 +1,19 @@
1
- require 'spec_helper'
1
+ require 'lite_spec_helper'
2
+ require 'support/shared/protocol'
2
3
 
3
4
  describe Mongo::Protocol::Insert do
4
5
 
5
6
  let(:opcode) { 2002 }
6
7
  let(:db) { SpecConfig.instance.test_db }
7
- let(:coll) { TEST_COLL }
8
- let(:ns) { "#{db}.#{coll}" }
8
+ let(:collection_name) { 'protocol-test' }
9
+ let(:ns) { "#{db}.#{collection_name}" }
9
10
  let(:doc1) { { :name => 'Tyler' } }
10
11
  let(:doc2) { { :name => 'Brandon' } }
11
12
  let(:docs) { [doc1, doc2] }
12
13
  let(:options) { Hash.new }
13
14
 
14
15
  let(:message) do
15
- described_class.new(db, coll, docs, options)
16
+ described_class.new(db, collection_name, docs, options)
16
17
  end
17
18
 
18
19
  describe '#initialize' do
@@ -43,7 +44,7 @@ describe Mongo::Protocol::Insert do
43
44
 
44
45
  context 'when the fields are equal' do
45
46
  let(:other) do
46
- described_class.new(db, coll, docs, options)
47
+ described_class.new(db, collection_name, docs, options)
47
48
  end
48
49
 
49
50
  it 'returns true' do
@@ -53,7 +54,7 @@ describe Mongo::Protocol::Insert do
53
54
 
54
55
  context 'when the database is not equal' do
55
56
  let(:other) do
56
- described_class.new('tyler', coll, docs, options)
57
+ described_class.new('tyler', collection_name, docs, options)
57
58
  end
58
59
 
59
60
  it 'returns false' do
@@ -73,7 +74,7 @@ describe Mongo::Protocol::Insert do
73
74
 
74
75
  context 'when the documents are not equal' do
75
76
  let(:other) do
76
- described_class.new(db, coll, docs[1..1], options)
77
+ described_class.new(db, collection_name, docs[1..1], options)
77
78
  end
78
79
 
79
80
  it 'returns false' do
@@ -83,7 +84,7 @@ describe Mongo::Protocol::Insert do
83
84
 
84
85
  context 'when the options are not equal' do
85
86
  let(:other) do
86
- described_class.new(db, coll, docs, :flags => [:continue_on_error])
87
+ described_class.new(db, collection_name, docs, :flags => [:continue_on_error])
87
88
  end
88
89
 
89
90
  it 'returns false' do
@@ -1,14 +1,15 @@
1
- require 'spec_helper'
1
+ require 'lite_spec_helper'
2
+ require 'support/shared/protocol'
2
3
 
3
4
  describe Mongo::Protocol::KillCursors do
4
5
 
5
6
  let(:opcode) { 2007 }
6
7
  let(:cursor_ids) { [123, 456, 789] }
7
8
  let(:id_count) { cursor_ids.size }
8
- let(:collection) { TEST_COLL }
9
+ let(:collection_name) { 'protocol-test' }
9
10
  let(:database) { SpecConfig.instance.test_db }
10
11
  let(:message) do
11
- described_class.new(collection, database, cursor_ids)
12
+ described_class.new(collection_name, database, cursor_ids)
12
13
  end
13
14
 
14
15
  describe '#initialize' do
@@ -28,7 +29,7 @@ describe Mongo::Protocol::KillCursors do
28
29
 
29
30
  context 'when the cursor ids are equal' do
30
31
  let(:other) do
31
- described_class.new(collection, database, cursor_ids)
32
+ described_class.new(collection_name, database, cursor_ids)
32
33
  end
33
34
 
34
35
  it 'returns true' do
@@ -38,7 +39,7 @@ describe Mongo::Protocol::KillCursors do
38
39
 
39
40
  context 'when the cursor ids are not equal' do
40
41
  let(:other) do
41
- described_class.new(collection, database, [123, 456])
42
+ described_class.new(collection_name, database, [123, 456])
42
43
  end
43
44
 
44
45
  it 'returns false' do
@@ -6,11 +6,11 @@ describe Mongo::Protocol::Msg do
6
6
  let(:opcode) { 2013 }
7
7
  let(:flags) { [] }
8
8
  let(:options) { {} }
9
- let(:global_args) { { '$db' => SpecConfig.instance.test_db, ping: 1 } }
10
- let(:sections) { [ ] }
9
+ let(:main_document) { { '$db' => SpecConfig.instance.test_db, ping: 1 } }
10
+ let(:sequences) { [ ] }
11
11
 
12
12
  let(:message) do
13
- described_class.new(flags, options, global_args, *sections)
13
+ described_class.new(flags, options, main_document, *sequences)
14
14
  end
15
15
 
16
16
  let(:deserialized) do
@@ -19,8 +19,8 @@ describe Mongo::Protocol::Msg do
19
19
 
20
20
  describe '#initialize' do
21
21
 
22
- it 'adds the global_args to the sections' do
23
- expect(message.sections[0]).to eq(type: 0, payload: global_args)
22
+ it 'adds the main_document to the sections' do
23
+ expect(message.sections[0]).to eq(type: 0, payload: main_document)
24
24
  end
25
25
 
26
26
  context 'when flag bits are provided' do
@@ -59,13 +59,13 @@ describe Mongo::Protocol::Msg do
59
59
  end
60
60
  end
61
61
 
62
- context 'with user-provided and driver-generated keys in global_args' do
63
- let(:global_args) do
62
+ context 'with user-provided and driver-generated keys in main_document' do
63
+ let(:main_document) do
64
64
  { 'ping' => 1, 'lsid' => '__lsid__', 'a' => 'b', '$clusterTime' => '__ct__',
65
65
  'signature' => '__signature__', 'd' => 'f'}
66
66
  end
67
67
 
68
- it 'reorders global_args for better logging' do
68
+ it 'reorders main_document for better logging' do
69
69
  expect(message.payload[:command].keys).to eq(%w(ping a d lsid $clusterTime signature))
70
70
  end
71
71
  end
@@ -78,7 +78,7 @@ describe Mongo::Protocol::Msg do
78
78
  context 'when the fields are equal' do
79
79
 
80
80
  let(:other) do
81
- described_class.new(flags, options, global_args)
81
+ described_class.new(flags, options, main_document)
82
82
  end
83
83
 
84
84
  it 'returns true' do
@@ -89,7 +89,7 @@ describe Mongo::Protocol::Msg do
89
89
  context 'when the flags are not equal' do
90
90
 
91
91
  let(:other) do
92
- described_class.new([:more_to_come], options, global_args)
92
+ described_class.new([:more_to_come], options, main_document)
93
93
  end
94
94
 
95
95
  it 'returns false' do
@@ -97,10 +97,14 @@ describe Mongo::Protocol::Msg do
97
97
  end
98
98
  end
99
99
 
100
- context 'when the global_args are not equal' do
100
+ context 'when the main_document are not equal' do
101
+
102
+ let(:other_main_document) do
103
+ { '$db'=> SpecConfig.instance.test_db, ismaster: 1 }
104
+ end
101
105
 
102
106
  let(:other) do
103
- described_class.new(flags, nil, { '$db'=> SpecConfig.instance.test_db, ismaster: 1 })
107
+ described_class.new(flags, nil, other_main_document)
104
108
  end
105
109
 
106
110
  it 'returns false' do
@@ -158,7 +162,7 @@ describe Mongo::Protocol::Msg do
158
162
  let(:flag_bytes) { bytes.to_s[16..19] }
159
163
  let(:payload_type) { bytes.to_s[20] }
160
164
  let(:payload_bytes) { bytes.to_s[21..-1] }
161
- let(:global_args) { { ping: 1 } }
165
+ let(:main_document) { { ping: 1 } }
162
166
 
163
167
  include_examples 'message with a header'
164
168
 
@@ -205,13 +209,13 @@ describe Mongo::Protocol::Msg do
205
209
  end
206
210
 
207
211
  it 'serializes the global arguments' do
208
- expect(payload_bytes).to be_bson(global_args)
212
+ expect(payload_bytes).to be_bson(main_document)
209
213
  end
210
214
  end
211
215
 
212
- context 'when additional sections are provided' do
216
+ context 'when sequences are provided' do
213
217
 
214
- let(:sections) do
218
+ let(:sequences) do
215
219
  [ section ]
216
220
  end
217
221
 
@@ -224,12 +228,13 @@ describe Mongo::Protocol::Msg do
224
228
  end
225
229
 
226
230
  it 'raises an exception' do
227
- expect {
228
- message.serialize
229
- }.to raise_exception(Mongo::Error::UnknownPayloadType)
231
+ expect do
232
+ message
233
+ end.to raise_exception(ArgumentError, /All sequences must be Section1 instances/)
230
234
  end
231
235
  end
232
236
 
237
+ =begin no longer supported
233
238
  context 'when a 0 payload type is specified' do
234
239
 
235
240
  let(:section) do
@@ -265,13 +270,12 @@ describe Mongo::Protocol::Msg do
265
270
  expect(section_bytes).to be_bson(section[:payload])
266
271
  end
267
272
  end
273
+ =end
268
274
 
269
- context 'when a 1 payload type is specified' do
275
+ context 'when a payload of type 1 is specified' do
270
276
 
271
277
  let(:section) do
272
- { type: 1,
273
- payload: { identifier: 'documents',
274
- sequence: [ { a: 1 } ] } }
278
+ Mongo::Protocol::Msg::Section1.new('documents', [ { a: 1 } ])
275
279
  end
276
280
 
277
281
  let(:section_payload_type) { bytes.to_s[36] }
@@ -297,23 +301,23 @@ describe Mongo::Protocol::Msg do
297
301
 
298
302
  context 'when two sections are specified' do
299
303
 
300
- let(:sections) do
304
+ let(:sequences) do
301
305
  [ section1, section2 ]
302
306
  end
303
307
 
304
308
  let(:section1) do
305
- { type: 1,
306
- payload: { identifier: 'documents',
307
- sequence: [ { a: 1 } ] } }
309
+ Mongo::Protocol::Msg::Section1.new('documents', [ { a: 1 } ])
308
310
  end
309
311
 
310
312
  let(:section2) do
311
- { type: 1,
312
- payload: { identifier: 'updates',
313
- sequence: [ {:q => { :bar => 1 },
314
- :u => { :$set => { :bar => 2 } },
315
- :multi => true,
316
- :upsert => false } ] } }
313
+ Mongo::Protocol::Msg::Section1.new('updates', [
314
+ {
315
+ :q => { :bar => 1 },
316
+ :u => { :$set => { :bar => 2 } },
317
+ :multi => true,
318
+ :upsert => false,
319
+ }
320
+ ])
317
321
  end
318
322
 
319
323
  let(:section1_payload_type) { bytes.to_s[36] }
@@ -355,16 +359,16 @@ describe Mongo::Protocol::Msg do
355
359
  end
356
360
 
357
361
  it 'serializes the second section bytes' do
358
- expect(section2_bytes).to be_bson(section2[:payload][:sequence][0])
362
+ expect(section2_bytes).to be_bson(section2.documents[0])
359
363
  end
360
364
  end
361
365
  end
362
366
 
367
+ =begin no longer supported
363
368
  context 'when the sections are mixed types and payload type 1 comes before type 0' do
364
369
 
365
370
  let(:section1) do
366
- { type: 1,
367
- payload: { identifier: 'documents', sequence: [ { 'a' => 1 }]}}
371
+ Mongo::Protocol::Msg::Section1.new('documents', [ { a: 1 } ])
368
372
  end
369
373
 
370
374
  let(:section2) do
@@ -376,19 +380,20 @@ describe Mongo::Protocol::Msg do
376
380
  end
377
381
 
378
382
  it 'serializes all sections' do
379
- expect(deserialized.documents).to eq([ BSON::Document.new(global_args), { 'a' => 1 }, { 'b' => 2 }])
383
+ expect(deserialized.documents).to eq([ BSON::Document.new(main_document), { 'a' => 1 }, { 'b' => 2 }])
380
384
  end
381
385
  end
386
+ =end
382
387
  end
383
388
 
384
389
  context 'when the validating_keys option is true with payload 1' do
385
390
 
386
- let(:sections) do
391
+ let(:sequences) do
387
392
  [ section ]
388
393
  end
389
394
 
390
395
  let(:section) do
391
- { type: 1, payload: { identifier: 'documents', sequence: [ { '$b' => 2 } ] } }
396
+ Mongo::Protocol::Msg::Section1.new('documents', [ { '$b' => 2 } ])
392
397
  end
393
398
 
394
399
  let(:options) do
@@ -404,12 +409,12 @@ describe Mongo::Protocol::Msg do
404
409
 
405
410
  context 'when the validating_keys option is false with payload 1' do
406
411
 
407
- let(:sections) do
412
+ let(:sequences) do
408
413
  [ section ]
409
414
  end
410
415
 
411
416
  let(:section) do
412
- { type: 1, payload: { identifier: 'documents', sequence: [ { '$b' => 2 } ] } }
417
+ Mongo::Protocol::Msg::Section1.new('documents', [ { '$b' => 2 } ])
413
418
  end
414
419
 
415
420
  let(:options) do
@@ -427,7 +432,7 @@ describe Mongo::Protocol::Msg do
427
432
  context 'when the payload type is valid' do
428
433
 
429
434
  it 'deserializes the message' do
430
- expect(deserialized.documents).to eq([ BSON::Document.new(global_args) ])
435
+ expect(deserialized.documents).to eq([ BSON::Document.new(main_document) ])
431
436
  end
432
437
  end
433
438
 
@@ -440,9 +445,9 @@ describe Mongo::Protocol::Msg do
440
445
  end
441
446
 
442
447
  it 'raises an exception' do
443
- expect {
448
+ expect do
444
449
  Mongo::Protocol::Message.deserialize(StringIO.new(invalid_payload_message))
445
- }.to raise_exception(Mongo::Error::UnknownPayloadType)
450
+ end.to raise_exception(Mongo::Error::UnknownPayloadType)
446
451
  end
447
452
  end
448
453
  end
@@ -454,7 +459,7 @@ describe Mongo::Protocol::Msg do
454
459
  it 'creates a payload with the command' do
455
460
  expect(message.payload[:command_name]).to eq('ping')
456
461
  expect(message.payload[:database_name]).to eq(SpecConfig.instance.test_db)
457
- expect(message.payload[:command]).to eq('ping' => 1)
462
+ expect(message.payload[:command]).to eq('ping' => 1, '$db' => SpecConfig.instance.test_db)
458
463
  expect(message.payload[:request_id]).to eq(message.request_id)
459
464
  end
460
465
  end
@@ -462,27 +467,26 @@ describe Mongo::Protocol::Msg do
462
467
  context 'when the contains a payload type 1' do
463
468
 
464
469
  let(:section) do
465
- { type: 1,
466
- payload: { identifier: 'documents',
467
- sequence: [ { a: 1 } ] } }
470
+ Mongo::Protocol::Msg::Section1.new('documents', [ { a: 1 } ])
468
471
  end
469
472
 
470
- let(:global_args) do
473
+ let(:main_document) do
471
474
  { '$db' => SpecConfig.instance.test_db,
472
475
  'insert' => 'foo',
473
476
  'ordered' => true
474
477
  }
475
478
  end
476
479
 
477
- let(:sections) do
480
+ let(:sequences) do
478
481
  [ section ]
479
482
  end
480
483
 
481
484
  let(:expected_command_doc) do
482
485
  {
483
- 'insert' => 'foo',
484
- 'documents' => [{ 'a' => 1 }],
485
- 'ordered' => true
486
+ 'insert' => 'foo',
487
+ 'documents' => [{ 'a' => 1 }],
488
+ 'ordered' => true,
489
+ '$db' => SpecConfig.instance.test_db,
486
490
  }
487
491
  end
488
492
 
@@ -1,17 +1,17 @@
1
- # encoding: UTF-8
2
- require 'spec_helper'
1
+ require 'lite_spec_helper'
2
+ require 'support/shared/protocol'
3
3
 
4
4
  describe Mongo::Protocol::Query do
5
5
 
6
6
  let(:opcode) { 2004 }
7
7
  let(:db) { SpecConfig.instance.test_db }
8
- let(:coll) { TEST_COLL }
9
- let(:ns) { "#{db}.#{coll}" }
8
+ let(:collection_name) { 'protocol-test' }
9
+ let(:ns) { "#{db}.#{collection_name}" }
10
10
  let(:selector) { { :name => 'Tyler' } }
11
11
  let(:options) { Hash.new }
12
12
 
13
13
  let(:message) do
14
- described_class.new(db, coll, selector, options)
14
+ described_class.new(db, collection_name, selector, options)
15
15
  end
16
16
 
17
17
  describe '#initialize' do
@@ -66,7 +66,7 @@ describe Mongo::Protocol::Query do
66
66
 
67
67
  context 'when the fields are equal' do
68
68
  let(:other) do
69
- described_class.new(db, coll, selector, options)
69
+ described_class.new(db, collection_name, selector, options)
70
70
  end
71
71
 
72
72
  it 'returns true' do
@@ -76,7 +76,7 @@ describe Mongo::Protocol::Query do
76
76
 
77
77
  context 'when the database is not equal' do
78
78
  let(:other) do
79
- described_class.new('tyler', coll, selector, options)
79
+ described_class.new('tyler', collection_name, selector, options)
80
80
  end
81
81
 
82
82
  it 'returns false' do
@@ -96,7 +96,7 @@ describe Mongo::Protocol::Query do
96
96
 
97
97
  context 'when the selector is not equal' do
98
98
  let(:other) do
99
- described_class.new(db, coll, { :a => 1 }, options)
99
+ described_class.new(db, collection_name, { :a => 1 }, options)
100
100
  end
101
101
 
102
102
  it 'returns false' do
@@ -106,7 +106,7 @@ describe Mongo::Protocol::Query do
106
106
 
107
107
  context 'when the options are not equal' do
108
108
  let(:other) do
109
- described_class.new(db, coll, selector, :skip => 2)
109
+ described_class.new(db, collection_name, selector, :skip => 2)
110
110
  end
111
111
 
112
112
  it 'returns false' do
@@ -225,7 +225,7 @@ describe Mongo::Protocol::Query do
225
225
  context 'when the namespace contains unicode characters' do
226
226
  let(:field) { bytes.to_s[20..40] }
227
227
 
228
- let(:coll) do
228
+ let(:collection_name) do
229
229
  'områder'
230
230
  end
231
231
 
@@ -320,7 +320,7 @@ describe Mongo::Protocol::Query do
320
320
  end
321
321
 
322
322
  it 'returns a compressed message' do
323
- expect(message.compress!('zlib')).to be_a(Mongo::Protocol::Compressed)
323
+ expect(message.maybe_compress('zlib')).to be_a(Mongo::Protocol::Compressed)
324
324
  end
325
325
  end
326
326
 
@@ -335,7 +335,7 @@ describe Mongo::Protocol::Query do
335
335
  context "when the command is #{command}" do
336
336
 
337
337
  it 'does not allow compression for the command' do
338
- expect(message.compress!('zlib')).to be(message)
338
+ expect(message.maybe_compress('zlib')).to be(message)
339
339
  end
340
340
  end
341
341
  end