mongo 2.11.6 → 2.12.0.rc0

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 (327) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +2 -2
  3. data.tar.gz.sig +0 -0
  4. data/CONTRIBUTING.md +1 -1
  5. data/lib/mongo.rb +3 -0
  6. data/lib/mongo/address.rb +13 -2
  7. data/lib/mongo/auth.rb +1 -0
  8. data/lib/mongo/auth/credential_cache.rb +51 -0
  9. data/lib/mongo/auth/scram/conversation.rb +20 -16
  10. data/lib/mongo/auth/user.rb +0 -8
  11. data/lib/mongo/auth/user/view.rb +4 -4
  12. data/lib/mongo/background_thread.rb +1 -1
  13. data/lib/mongo/bulk_write.rb +5 -5
  14. data/lib/mongo/client.rb +126 -11
  15. data/lib/mongo/client_encryption.rb +103 -0
  16. data/lib/mongo/cluster.rb +2 -2
  17. data/lib/mongo/cluster/reapers/cursor_reaper.rb +18 -6
  18. data/lib/mongo/cluster/sdam_flow.rb +54 -58
  19. data/lib/mongo/cluster/srv_monitor.rb +1 -1
  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 +7 -9
  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 +42 -0
  30. data/lib/mongo/crypt/auto_encrypter.rb +169 -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 +1162 -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 +283 -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 +293 -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 +13 -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/crypt_error.rb +31 -0
  50. data/lib/mongo/error/{failed_stringprep_validation.rb → failed_string_prep_validation.rb} +0 -0
  51. data/lib/mongo/error/invalid_cursor_operation.rb +27 -0
  52. data/lib/mongo/error/kms_error.rb +22 -0
  53. data/lib/mongo/error/max_bson_size.rb +14 -3
  54. data/lib/mongo/error/mongocryptd_spawn_error.rb +22 -0
  55. data/lib/mongo/error/no_server_available.rb +8 -3
  56. data/lib/mongo/error/operation_failure.rb +1 -0
  57. data/lib/mongo/grid/file.rb +0 -5
  58. data/lib/mongo/grid/file/chunk.rb +0 -2
  59. data/lib/mongo/grid/file/info.rb +2 -1
  60. data/lib/mongo/grid/fs_bucket.rb +13 -15
  61. data/lib/mongo/grid/stream/write.rb +3 -9
  62. data/lib/mongo/index/view.rb +3 -3
  63. data/lib/mongo/monitoring/event/command_started.rb +6 -1
  64. data/lib/mongo/operation/collections_info.rb +6 -3
  65. data/lib/mongo/operation/delete/op_msg.rb +1 -1
  66. data/lib/mongo/operation/find/op_msg.rb +4 -1
  67. data/lib/mongo/operation/get_more/op_msg.rb +4 -1
  68. data/lib/mongo/operation/insert/command.rb +2 -2
  69. data/lib/mongo/operation/insert/legacy.rb +2 -2
  70. data/lib/mongo/operation/insert/op_msg.rb +3 -3
  71. data/lib/mongo/operation/result.rb +36 -27
  72. data/lib/mongo/operation/shared/executable.rb +10 -8
  73. data/lib/mongo/operation/shared/executable_no_validate.rb +2 -2
  74. data/lib/mongo/operation/shared/op_msg_or_command.rb +2 -2
  75. data/lib/mongo/operation/shared/op_msg_or_find_command.rb +2 -2
  76. data/lib/mongo/operation/shared/op_msg_or_list_indexes_command.rb +2 -2
  77. data/lib/mongo/operation/shared/write.rb +17 -10
  78. data/lib/mongo/operation/update/op_msg.rb +1 -1
  79. data/lib/mongo/protocol/compressed.rb +6 -5
  80. data/lib/mongo/protocol/insert.rb +3 -1
  81. data/lib/mongo/protocol/message.rb +72 -8
  82. data/lib/mongo/protocol/msg.rb +191 -37
  83. data/lib/mongo/protocol/query.rb +7 -9
  84. data/lib/mongo/protocol/serializers.rb +6 -2
  85. data/lib/mongo/server.rb +10 -4
  86. data/lib/mongo/server/connection.rb +20 -9
  87. data/lib/mongo/server/connection_base.rb +81 -12
  88. data/lib/mongo/server/connection_common.rb +61 -0
  89. data/lib/mongo/server/connection_pool.rb +37 -1
  90. data/lib/mongo/server/description.rb +9 -11
  91. data/lib/mongo/server/monitor.rb +2 -0
  92. data/lib/mongo/server/monitor/connection.rb +3 -18
  93. data/lib/mongo/server/pending_connection.rb +2 -1
  94. data/lib/mongo/session.rb +2 -2
  95. data/lib/mongo/session/session_pool.rb +8 -3
  96. data/lib/mongo/socket.rb +29 -16
  97. data/lib/mongo/socket/ssl.rb +23 -8
  98. data/lib/mongo/socket/tcp.rb +12 -3
  99. data/lib/mongo/timeout.rb +49 -0
  100. data/lib/mongo/uri.rb +30 -1
  101. data/lib/mongo/version.rb +1 -1
  102. data/mongo.gemspec +1 -1
  103. data/spec/README.md +134 -7
  104. data/spec/integration/auth_spec.rb +53 -0
  105. data/spec/integration/{client_options_spec.rb → client_authentication_options_spec.rb} +10 -10
  106. data/spec/integration/client_construction_spec.rb +76 -1
  107. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +351 -0
  108. data/spec/integration/client_side_encryption/auto_encryption_command_monitoring_spec.rb +301 -0
  109. data/spec/integration/client_side_encryption/auto_encryption_mongocryptd_spawn_spec.rb +71 -0
  110. data/spec/integration/client_side_encryption/auto_encryption_old_wire_version_spec.rb +76 -0
  111. data/spec/integration/client_side_encryption/auto_encryption_reconnect_spec.rb +216 -0
  112. data/spec/integration/client_side_encryption/auto_encryption_spec.rb +600 -0
  113. data/spec/integration/client_side_encryption/bson_size_limit_spec.rb +183 -0
  114. data/spec/integration/client_side_encryption/bypass_mongocryptd_spawn_spec.rb +74 -0
  115. data/spec/integration/client_side_encryption/client_close_spec.rb +59 -0
  116. data/spec/integration/client_side_encryption/corpus_spec.rb +228 -0
  117. data/spec/integration/client_side_encryption/custom_endpoint_spec.rb +132 -0
  118. data/spec/integration/client_side_encryption/data_key_spec.rb +163 -0
  119. data/spec/integration/client_side_encryption/explicit_encryption_spec.rb +114 -0
  120. data/spec/integration/client_side_encryption/external_key_vault_spec.rb +137 -0
  121. data/spec/integration/client_side_encryption/views_spec.rb +42 -0
  122. data/spec/integration/client_update_spec.rb +120 -0
  123. data/spec/integration/command_monitoring_spec.rb +3 -1
  124. data/spec/integration/command_spec.rb +44 -10
  125. data/spec/integration/connection_spec.rb +57 -0
  126. data/spec/integration/reconnect_spec.rb +7 -6
  127. data/spec/integration/size_limit_spec.rb +94 -0
  128. data/spec/integration/srv_monitoring_spec.rb +14 -6
  129. data/spec/lite_spec_helper.rb +31 -22
  130. data/spec/mongo/auth/cr_spec.rb +8 -0
  131. data/spec/mongo/auth/ldap_spec.rb +5 -1
  132. data/spec/mongo/auth/scram/conversation_spec.rb +5 -6
  133. data/spec/mongo/auth/scram/negotiation_spec.rb +74 -75
  134. data/spec/mongo/auth/scram_spec.rb +45 -35
  135. data/spec/mongo/auth/x509_spec.rb +5 -1
  136. data/spec/mongo/client_construction_spec.rb +206 -3
  137. data/spec/mongo/client_encryption_spec.rb +408 -0
  138. data/spec/mongo/cluster/cursor_reaper_spec.rb +12 -8
  139. data/spec/mongo/cluster/socket_reaper_spec.rb +14 -3
  140. data/spec/mongo/collection/view/aggregation_spec.rb +0 -2
  141. data/spec/mongo/collection/view/change_stream_spec.rb +7 -7
  142. data/spec/mongo/collection/view/map_reduce_spec.rb +3 -3
  143. data/spec/mongo/collection/view_spec.rb +1 -1
  144. data/spec/mongo/collection_spec.rb +4 -33
  145. data/spec/mongo/crypt/auto_decryption_context_spec.rb +90 -0
  146. data/spec/mongo/crypt/auto_encrypter_spec.rb +182 -0
  147. data/spec/mongo/crypt/auto_encryption_context_spec.rb +107 -0
  148. data/spec/mongo/crypt/binary_spec.rb +115 -0
  149. data/spec/mongo/crypt/binding/binary_spec.rb +56 -0
  150. data/spec/mongo/crypt/binding/context_spec.rb +257 -0
  151. data/spec/mongo/crypt/binding/helpers_spec.rb +46 -0
  152. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +144 -0
  153. data/spec/mongo/crypt/binding/status_spec.rb +99 -0
  154. data/spec/mongo/crypt/binding/version_spec.rb +22 -0
  155. data/spec/mongo/crypt/binding_unloaded_spec.rb +20 -0
  156. data/spec/mongo/crypt/data_key_context_spec.rb +213 -0
  157. data/spec/mongo/crypt/encryption_io_spec.rb +136 -0
  158. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +72 -0
  159. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +170 -0
  160. data/spec/mongo/crypt/handle_spec.rb +198 -0
  161. data/spec/mongo/crypt/helpers/mongo_crypt_spec_helper.rb +108 -0
  162. data/spec/mongo/crypt/status_spec.rb +152 -0
  163. data/spec/mongo/cursor_spec.rb +24 -4
  164. data/spec/mongo/database_spec.rb +20 -0
  165. data/spec/mongo/error/crypt_error_spec.rb +26 -0
  166. data/spec/mongo/error/max_bson_size_spec.rb +35 -0
  167. data/spec/mongo/error/no_server_available_spec.rb +11 -1
  168. data/spec/mongo/error/operation_failure_spec.rb +6 -6
  169. data/spec/mongo/operation/aggregate_spec.rb +1 -1
  170. data/spec/mongo/operation/collections_info_spec.rb +1 -1
  171. data/spec/mongo/operation/command_spec.rb +3 -3
  172. data/spec/mongo/operation/create_index_spec.rb +3 -3
  173. data/spec/mongo/operation/create_user_spec.rb +3 -3
  174. data/spec/mongo/operation/delete/bulk_spec.rb +6 -6
  175. data/spec/mongo/operation/delete/op_msg_spec.rb +1 -6
  176. data/spec/mongo/operation/delete_spec.rb +7 -7
  177. data/spec/mongo/operation/drop_index_spec.rb +2 -2
  178. data/spec/mongo/operation/find/legacy_spec.rb +1 -1
  179. data/spec/mongo/operation/get_more_spec.rb +1 -1
  180. data/spec/mongo/operation/indexes_spec.rb +1 -1
  181. data/spec/mongo/operation/insert/bulk_spec.rb +7 -7
  182. data/spec/mongo/operation/insert/op_msg_spec.rb +3 -6
  183. data/spec/mongo/operation/insert_spec.rb +12 -12
  184. data/spec/mongo/operation/map_reduce_spec.rb +2 -2
  185. data/spec/mongo/operation/remove_user_spec.rb +3 -3
  186. data/spec/mongo/operation/update/bulk_spec.rb +6 -6
  187. data/spec/mongo/operation/update/op_msg_spec.rb +3 -6
  188. data/spec/mongo/operation/update_spec.rb +7 -7
  189. data/spec/mongo/operation/update_user_spec.rb +1 -1
  190. data/spec/mongo/protocol/compressed_spec.rb +2 -3
  191. data/spec/mongo/protocol/delete_spec.rb +9 -8
  192. data/spec/mongo/protocol/get_more_spec.rb +9 -8
  193. data/spec/mongo/protocol/insert_spec.rb +9 -8
  194. data/spec/mongo/protocol/kill_cursors_spec.rb +6 -5
  195. data/spec/mongo/protocol/msg_spec.rb +57 -53
  196. data/spec/mongo/protocol/query_spec.rb +12 -12
  197. data/spec/mongo/protocol/registry_spec.rb +1 -1
  198. data/spec/mongo/protocol/reply_spec.rb +1 -1
  199. data/spec/mongo/protocol/update_spec.rb +10 -9
  200. data/spec/mongo/server/connection_pool_spec.rb +1 -1
  201. data/spec/mongo/server/connection_spec.rb +28 -7
  202. data/spec/mongo/socket_spec.rb +1 -1
  203. data/spec/mongo/timeout_spec.rb +85 -0
  204. data/spec/mongo/uri/srv_protocol_spec.rb +2 -2
  205. data/spec/mongo/uri_spec.rb +52 -5
  206. data/spec/mongo/write_concern_spec.rb +13 -1
  207. data/spec/{support → runners}/auth.rb +14 -1
  208. data/spec/{support → runners}/change_streams.rb +1 -1
  209. data/spec/{support → runners}/change_streams/operation.rb +0 -0
  210. data/spec/{support → runners}/cmap.rb +1 -1
  211. data/spec/{support → runners}/cmap/verifier.rb +0 -0
  212. data/spec/{support → runners}/command_monitoring.rb +0 -0
  213. data/spec/runners/connection_string.rb +358 -4
  214. data/spec/{support → runners}/crud.rb +9 -9
  215. data/spec/{support → runners}/crud/context.rb +0 -0
  216. data/spec/{support → runners}/crud/operation.rb +7 -3
  217. data/spec/{support → runners}/crud/outcome.rb +0 -0
  218. data/spec/{support → runners}/crud/requirement.rb +1 -1
  219. data/spec/{support → runners}/crud/spec.rb +12 -1
  220. data/spec/{support → runners}/crud/test.rb +0 -0
  221. data/spec/{support → runners}/crud/test_base.rb +0 -0
  222. data/spec/{support → runners}/crud/verifier.rb +10 -12
  223. data/spec/{support → runners}/gridfs.rb +0 -0
  224. data/spec/{support → runners}/sdam_monitoring.rb +0 -0
  225. data/spec/{support → runners}/server_discovery_and_monitoring.rb +0 -0
  226. data/spec/{support → runners}/server_selection.rb +0 -0
  227. data/spec/{support → runners}/server_selection_rtt.rb +0 -0
  228. data/spec/{support → runners}/transactions.rb +4 -4
  229. data/spec/{support → runners}/transactions/context.rb +0 -0
  230. data/spec/{support → runners}/transactions/operation.rb +0 -0
  231. data/spec/{support → runners}/transactions/spec.rb +0 -0
  232. data/spec/{support → runners}/transactions/test.rb +37 -5
  233. data/spec/spec_helper.rb +0 -5
  234. data/spec/spec_tests/auth_spec.rb +3 -3
  235. data/spec/spec_tests/client_side_encryption_spec.rb +13 -0
  236. data/spec/spec_tests/connection_string_spec.rb +1 -1
  237. data/spec/spec_tests/data/auth/connection-string.yml +13 -0
  238. data/spec/spec_tests/data/client_side_encryption/aggregate.yml +134 -0
  239. data/spec/spec_tests/data/client_side_encryption/badQueries.yml +526 -0
  240. data/spec/spec_tests/data/client_side_encryption/badSchema.yml +73 -0
  241. data/spec/spec_tests/data/client_side_encryption/basic.yml +116 -0
  242. data/spec/spec_tests/data/client_side_encryption/bulk.yml +85 -0
  243. data/spec/spec_tests/data/client_side_encryption/bypassAutoEncryption.yml +100 -0
  244. data/spec/spec_tests/data/client_side_encryption/bypassedCommand.yml +42 -0
  245. data/spec/spec_tests/data/client_side_encryption/count.yml +61 -0
  246. data/spec/spec_tests/data/client_side_encryption/countDocuments.yml +59 -0
  247. data/spec/spec_tests/data/client_side_encryption/delete.yml +105 -0
  248. data/spec/spec_tests/data/client_side_encryption/distinct.yml +73 -0
  249. data/spec/spec_tests/data/client_side_encryption/explain.yml +64 -0
  250. data/spec/spec_tests/data/client_side_encryption/find.yml +119 -0
  251. data/spec/spec_tests/data/client_side_encryption/findOneAndDelete.yml +57 -0
  252. data/spec/spec_tests/data/client_side_encryption/findOneAndReplace.yml +57 -0
  253. data/spec/spec_tests/data/client_side_encryption/findOneAndUpdate.yml +57 -0
  254. data/spec/spec_tests/data/client_side_encryption/getMore.yml +68 -0
  255. data/spec/spec_tests/data/client_side_encryption/insert.yml +102 -0
  256. data/spec/spec_tests/data/client_side_encryption/keyAltName.yml +71 -0
  257. data/spec/spec_tests/data/client_side_encryption/localKMS.yml +54 -0
  258. data/spec/spec_tests/data/client_side_encryption/localSchema.yml +72 -0
  259. data/spec/spec_tests/data/client_side_encryption/malformedCiphertext.yml +69 -0
  260. data/spec/spec_tests/data/client_side_encryption/maxWireVersion.yml +20 -0
  261. data/spec/spec_tests/data/client_side_encryption/missingKey.yml +49 -0
  262. data/spec/spec_tests/data/client_side_encryption/replaceOne.yml +61 -0
  263. data/spec/spec_tests/data/client_side_encryption/types.yml +527 -0
  264. data/spec/spec_tests/data/client_side_encryption/unsupportedCommand.yml +25 -0
  265. data/spec/spec_tests/data/client_side_encryption/updateMany.yml +77 -0
  266. data/spec/spec_tests/data/client_side_encryption/updateOne.yml +168 -0
  267. data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +1 -4
  268. data/spec/spec_tests/data/retryable_writes/insertOne-serverErrors.yml +21 -0
  269. data/spec/spec_tests/data/sdam/rs/incompatible_ghost.yml +2 -4
  270. data/spec/spec_tests/data/sdam/rs/incompatible_other.yml +1 -1
  271. data/spec/spec_tests/data/sdam/rs/primary_mismatched_me_not_removed.yml +73 -0
  272. data/spec/spec_tests/data/sdam/rs/primary_to_no_primary_mismatched_me.yml +1 -2
  273. data/spec/spec_tests/data/sdam/rs/repeated.yml +101 -0
  274. data/spec/spec_tests/data/sdam/rs/{primary_address_change.yml → ruby_primary_address_change.yml} +2 -0
  275. 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
  276. data/spec/spec_tests/data/sdam/sharded/ruby_discovered_single_mongos.yml +27 -0
  277. data/spec/spec_tests/data/sdam/sharded/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
  278. data/spec/spec_tests/data/sdam/sharded/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
  279. data/spec/spec_tests/data/sdam/single/{primary_address_change.yml → ruby_primary_different_address.yml} +1 -1
  280. data/spec/spec_tests/data/sdam/single/{primary_mismatched_me.yml → ruby_primary_mismatched_me.yml} +1 -1
  281. data/spec/spec_tests/data/sdam_monitoring/{replica_set_with_primary_change.yml → replica_set_primary_address_change.yml} +27 -5
  282. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_me_mismatch.yml +26 -74
  283. data/spec/spec_tests/data/sdam_monitoring/replica_set_with_removal.yml +20 -16
  284. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +73 -0
  285. data/spec/spec_tests/data/transactions/pin-mongos.yml +2 -3
  286. data/spec/spec_tests/data/uri_options/auth-options.yml +10 -0
  287. data/spec/spec_tests/data/uri_options/tls-options.yml +75 -4
  288. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +1 -1
  289. data/spec/spec_tests/uri_options_spec.rb +6 -8
  290. data/spec/stress/connection_pool_timing_spec.rb +6 -3
  291. data/spec/support/certificates/README.md +4 -0
  292. data/spec/support/certificates/server-second-level-bundle.pem +77 -77
  293. data/spec/support/certificates/server-second-level.crt +52 -52
  294. data/spec/support/certificates/server-second-level.key +25 -25
  295. data/spec/support/certificates/server-second-level.pem +77 -77
  296. data/spec/support/client_registry.rb +19 -3
  297. data/spec/support/cluster_config.rb +9 -1
  298. data/spec/support/common_shortcuts.rb +12 -0
  299. data/spec/support/constraints.rb +16 -0
  300. data/spec/support/crypt.rb +140 -0
  301. data/spec/support/crypt/corpus/corpus-key-aws.json +33 -0
  302. data/spec/support/crypt/corpus/corpus-key-local.json +31 -0
  303. data/spec/support/crypt/corpus/corpus-schema.json +2057 -0
  304. data/spec/support/crypt/corpus/corpus.json +3657 -0
  305. data/spec/support/crypt/corpus/corpus_encrypted.json +4152 -0
  306. data/spec/support/crypt/data_keys/key_document_aws.json +34 -0
  307. data/spec/support/crypt/data_keys/key_document_local.json +31 -0
  308. data/spec/support/crypt/external/external-key.json +31 -0
  309. data/spec/support/crypt/external/external-schema.json +19 -0
  310. data/spec/support/crypt/limits/limits-doc.json +102 -0
  311. data/spec/support/crypt/limits/limits-key.json +31 -0
  312. data/spec/support/crypt/limits/limits-schema.json +1405 -0
  313. data/spec/support/crypt/schema_maps/schema_map_aws.json +17 -0
  314. data/spec/support/crypt/schema_maps/schema_map_aws_key_alt_names.json +12 -0
  315. data/spec/support/crypt/schema_maps/schema_map_local.json +18 -0
  316. data/spec/support/crypt/schema_maps/schema_map_local_key_alt_names.json +12 -0
  317. data/spec/support/lite_constraints.rb +17 -1
  318. data/spec/support/matchers.rb +19 -0
  319. data/spec/support/shared/protocol.rb +2 -0
  320. data/spec/support/spec_config.rb +43 -13
  321. data/spec/support/utils.rb +132 -10
  322. metadata +277 -81
  323. metadata.gz.sig +0 -0
  324. data/spec/integration/grid_fs_bucket_spec.rb +0 -48
  325. data/spec/integration/zlib_compression_spec.rb +0 -25
  326. data/spec/spec_tests/data/sdam/sharded/single_mongos.yml +0 -33
  327. data/spec/support/connection_string.rb +0 -354
@@ -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
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require 'lite_spec_helper'
2
2
 
3
3
  describe Mongo::Protocol::Registry do
4
4
 
@@ -1,4 +1,4 @@
1
- require 'spec_helper'
1
+ require 'lite_spec_helper'
2
2
 
3
3
  describe Mongo::Protocol::Reply do
4
4
 
@@ -1,17 +1,18 @@
1
- require 'spec_helper'
1
+ require 'lite_spec_helper'
2
+ require 'support/shared/protocol'
2
3
 
3
4
  describe Mongo::Protocol::Update do
4
5
 
5
6
  let(:opcode) { 2001 }
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(:selector) { { :name => 'Tyler' } }
10
11
  let(:update_doc) { { :name => 'Bob' } }
11
12
  let(:options) { Hash.new }
12
13
 
13
14
  let(:message) do
14
- described_class.new(db, coll, selector, update_doc, options)
15
+ described_class.new(db, collection_name, selector, update_doc, options)
15
16
  end
16
17
 
17
18
  describe '#initialize' do
@@ -35,7 +36,7 @@ describe Mongo::Protocol::Update do
35
36
 
36
37
  context 'when the fields are equal' do
37
38
  let(:other) do
38
- described_class.new(db, coll, selector, update_doc, options)
39
+ described_class.new(db, collection_name, selector, update_doc, options)
39
40
  end
40
41
 
41
42
  it 'returns true' do
@@ -45,7 +46,7 @@ describe Mongo::Protocol::Update do
45
46
 
46
47
  context 'when the database is not equal' do
47
48
  let(:other) do
48
- described_class.new('tyler', coll, selector, update_doc, options)
49
+ described_class.new('tyler', collection_name, selector, update_doc, options)
49
50
  end
50
51
 
51
52
  it 'returns false' do
@@ -65,7 +66,7 @@ describe Mongo::Protocol::Update do
65
66
 
66
67
  context 'when the selector is not equal' do
67
68
  let(:other) do
68
- described_class.new(db, coll, { :a => 1 }, update_doc, options)
69
+ described_class.new(db, collection_name, { :a => 1 }, update_doc, options)
69
70
  end
70
71
 
71
72
  it 'returns false' do
@@ -75,7 +76,7 @@ describe Mongo::Protocol::Update do
75
76
 
76
77
  context 'when the update document is not equal' do
77
78
  let(:other) do
78
- described_class.new(db, coll, selector, { :a => 1 }, options)
79
+ described_class.new(db, collection_name, selector, { :a => 1 }, options)
79
80
  end
80
81
 
81
82
  it 'returns false' do
@@ -85,7 +86,7 @@ describe Mongo::Protocol::Update do
85
86
 
86
87
  context 'when the options are not equal' do
87
88
  let(:other) do
88
- described_class.new(db, coll, selector, update_doc,
89
+ described_class.new(db, collection_name, selector, update_doc,
89
90
  :flags => :upsert)
90
91
  end
91
92
 
@@ -487,7 +487,7 @@ describe Mongo::Server::ConnectionPool do
487
487
  expect {
488
488
  pool.check_out
489
489
  pool.check_out
490
- }.to raise_error(Timeout::Error)
490
+ }.to raise_error(::Timeout::Error)
491
491
  expect(pool.size).to eq(1)
492
492
  end
493
493
  end
@@ -532,7 +532,9 @@ describe Mongo::Server::Connection, retry: 3 do
532
532
  user: SpecConfig.instance.test_user.name,
533
533
  password: SpecConfig.instance.test_user.password,
534
534
  ))
535
- )
535
+ ).tap do |connection|
536
+ connection.connect!
537
+ end
536
538
  end
537
539
 
538
540
  let(:documents) do
@@ -627,14 +629,24 @@ describe Mongo::Server::Connection, retry: 3 do
627
629
  context 'linting' do
628
630
  require_linting
629
631
 
630
- it 'marks the connection no longer usable' do
632
+ it 'does not permit sending over the connection' do
631
633
  expect {
632
634
  connection.dispatch([ query_alice ])
633
635
  }.to raise_error(Mongo::Error::UnexpectedResponse)
634
636
 
635
637
  expect do
636
638
  connection.dispatch([ query_alice ]).documents
637
- end.to raise_error(Mongo::Error::LintError, /Reconnecting closed connections is no longer supported.*/)
639
+ end.to raise_error(Mongo::Error::LintError, /Trying to deliver a message over a disconnected connection/)
640
+ end
641
+
642
+ it 'marks the connection no longer usable' do
643
+ expect {
644
+ connection.dispatch([ query_alice ])
645
+ }.to raise_error(Mongo::Error::UnexpectedResponse)
646
+
647
+ expect do
648
+ connection.connect!
649
+ end.to raise_error(Mongo::Error::LintError, /Reconnecting closed connections is no longer supported/)
638
650
  end
639
651
  end
640
652
 
@@ -714,9 +726,15 @@ describe Mongo::Server::Connection, retry: 3 do
714
726
  end
715
727
 
716
728
  context 'when the message is a command' do
729
+ # Server description is frozen when linting is enabled, which is
730
+ # incompatible with expectations set on it in this test
731
+ skip_if_linting
717
732
 
718
733
  let(:selector) do
719
- { :getlasterror => '1' }
734
+ # The driver allows up to 16KiB for command overhead on top of
735
+ # the max bson object size reported by the server.
736
+ # Add that much padding.
737
+ { :getlasterror => '1', 'padding' => 'x'*16384 }
720
738
  end
721
739
 
722
740
  let(:command) do
@@ -730,7 +748,8 @@ describe Mongo::Server::Connection, retry: 3 do
730
748
  it 'checks the size against the max bson size' do
731
749
  # 100 works for non-x509 auth.
732
750
  # 10 is needed for x509 auth due to smaller payloads, apparently.
733
- expect_any_instance_of(Mongo::Server).to receive(:max_bson_object_size).at_least(:once).and_return(10)
751
+ expect_any_instance_of(Mongo::Server::Description).to receive(
752
+ :max_bson_object_size).at_least(:once).and_return(10)
734
753
  expect do
735
754
  reply
736
755
  end.to raise_exception(Mongo::Error::MaxBSONSize)
@@ -862,7 +881,9 @@ describe Mongo::Server::Connection, retry: 3 do
862
881
  context 'when the socket_timeout is negative' do
863
882
 
864
883
  let(:connection) do
865
- described_class.new(server, server.options)
884
+ described_class.new(server, server.options).tap do |connection|
885
+ connection.connect!
886
+ end
866
887
  end
867
888
 
868
889
  let(:message) do
@@ -871,7 +892,7 @@ describe Mongo::Server::Connection, retry: 3 do
871
892
 
872
893
  before do
873
894
  expect(message).to receive(:replyable?) { false }
874
- connection.send(:deliver, message)
895
+ connection.send(:deliver, message, nil)
875
896
 
876
897
  connection.send(:socket).instance_variable_set(:@timeout, -(Time.now.to_i))
877
898
  end
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Mongo::Socket do
4
4
 
5
5
  let(:socket) do
6
- described_class.new(Socket::PF_INET)
6
+ described_class.new
7
7
  end
8
8
 
9
9
  describe '#address' do
@@ -0,0 +1,85 @@
1
+ require 'lite_spec_helper'
2
+
3
+ describe Mongo::Timeout do
4
+ describe '#timeout' do
5
+ let(:default_error_message) { 'execution expired' }
6
+ let(:custom_error_class) { Mongo::Error::SocketTimeoutError }
7
+ let(:custom_error_message) { 'socket timed out' }
8
+
9
+ context 'Ruby version older than 2.4.0' do
10
+ before do
11
+ unless RUBY_VERSION < '2.4.0'
12
+ skip 'This test requires a Ruby version older than 2.4.0'
13
+ end
14
+ end
15
+
16
+ context 'with time argument' do
17
+ it 'raises StandardError' do
18
+ expect do
19
+ Mongo::Timeout.timeout(0.1) do
20
+ sleep 1
21
+ end
22
+ end.to raise_error(::Timeout::Error, default_error_message)
23
+ end
24
+ end
25
+
26
+ context 'with time and class arguments' do
27
+ it 'raises the specified error class' do
28
+ expect do
29
+ Mongo::Timeout.timeout(0.1, custom_error_class) do
30
+ sleep 1
31
+ end
32
+ end.to raise_error(custom_error_class, default_error_message)
33
+ end
34
+ end
35
+
36
+ context 'with time, class, and message arguments' do
37
+ it 'raises the specified error class but ignores the message' do
38
+ expect do
39
+ Mongo::Timeout.timeout(0.1, custom_error_class, custom_error_message) do
40
+ sleep 1
41
+ end
42
+ end.to raise_error(custom_error_class, default_error_message)
43
+ end
44
+ end
45
+ end
46
+
47
+ context 'Ruby 2.4.0 or newer' do
48
+ before do
49
+ unless RUBY_VERSION >= '2.4.0'
50
+ skip 'This test requires a Ruby 2.4.0 or newer'
51
+ end
52
+ end
53
+
54
+ context 'with time argument' do
55
+ it 'raises StandardError' do
56
+ expect do
57
+ Mongo::Timeout.timeout(0.1) do
58
+ sleep 1
59
+ end
60
+ end.to raise_error(::Timeout::Error, default_error_message)
61
+ end
62
+ end
63
+
64
+ context 'with time and class arguments' do
65
+ it 'raises the specified error class' do
66
+ expect do
67
+ Mongo::Timeout.timeout(0.1, custom_error_class) do
68
+ sleep 1
69
+ end
70
+ end.to raise_error(custom_error_class, default_error_message)
71
+ end
72
+ end
73
+
74
+ context 'with time, class, and message arguments' do
75
+ it 'raises the specified error class with message' do
76
+ expect do
77
+ Mongo::Timeout.timeout(0.1, custom_error_class, custom_error_message) do
78
+ sleep 1
79
+ end
80
+ end.to raise_error(custom_error_class, custom_error_message)
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
@@ -1,7 +1,7 @@
1
- require 'spec_helper'
1
+ require 'lite_spec_helper'
2
2
 
3
3
  describe Mongo::URI::SRVProtocol do
4
- clean_slate_for_all
4
+ clean_slate_for_all_if_possible
5
5
 
6
6
  let(:scheme) { 'mongodb+srv://' }
7
7
  let(:uri) { described_class.new(string) }
@@ -6,6 +6,40 @@ describe Mongo::URI do
6
6
 
7
7
  let(:uri) { described_class.get(string) }
8
8
 
9
+ describe 'invalid uris' do
10
+
11
+ context 'string is not uri' do
12
+
13
+ let(:string) { 'tyler' }
14
+
15
+ it 'raises an error' do
16
+ expect { uri }.to raise_error(Mongo::Error::InvalidURI)
17
+ end
18
+ end
19
+
20
+ context 'nil' do
21
+
22
+ let(:string) { nil }
23
+
24
+ it 'raises an error' do
25
+ expect do
26
+ uri
27
+ end.to raise_error(Mongo::Error::InvalidURI, /URI must be a string, not nil/)
28
+ end
29
+ end
30
+
31
+ context 'empty string' do
32
+
33
+ let(:string) { '' }
34
+
35
+ it 'raises an error' do
36
+ expect do
37
+ uri
38
+ end.to raise_error(Mongo::Error::InvalidURI, /Cannot parse an empty URI/)
39
+ end
40
+ end
41
+ end
42
+
9
43
  context 'when the scheme is mongodb://' do
10
44
 
11
45
  let(:string) do
@@ -55,12 +89,25 @@ describe Mongo::URI do
55
89
  end
56
90
  end
57
91
 
92
+ context 'nil' do
93
+
94
+ let(:string) { nil }
95
+
96
+ it 'raises an error' do
97
+ expect do
98
+ uri
99
+ end.to raise_error(Mongo::Error::InvalidURI, /URI must be a string, not nil/)
100
+ end
101
+ end
102
+
58
103
  context 'empty string' do
59
104
 
60
105
  let(:string) { '' }
61
106
 
62
107
  it 'raises an error' do
63
- expect { uri }.to raise_error(Mongo::Error::InvalidURI)
108
+ expect do
109
+ uri
110
+ end.to raise_error(Mongo::Error::InvalidURI, /Cannot parse an empty URI/)
64
111
  end
65
112
  end
66
113
 
@@ -880,9 +927,9 @@ describe Mongo::URI do
880
927
  let(:password) { 's3kr4t' }
881
928
 
882
929
  it 'does not allow a client to be created' do
883
- expect {
930
+ expect do
884
931
  new_local_client_nmio(string)
885
- }.to raise_error(Mongo::Auth::InvalidConfiguration, /password is not supported/)
932
+ end.to raise_error(Mongo::Auth::InvalidConfiguration, /Password is not supported/)
886
933
  end
887
934
  end
888
935
 
@@ -925,9 +972,9 @@ describe Mongo::URI do
925
972
  end
926
973
 
927
974
  it 'does not allow a client to be created with default auth mechanism' do
928
- expect {
975
+ expect do
929
976
  new_local_client_nmio(string)
930
- }.to raise_error(Mongo::Auth::InvalidConfiguration, /empty username is not supported/)
977
+ end.to raise_error(Mongo::Auth::InvalidConfiguration, /Empty username is not supported/)
931
978
  end
932
979
  end
933
980
  end