mongo 1.12.5 → 2.0.0.beta

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 (437) 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 +64 -0
  5. data/LICENSE +1 -1
  6. data/README.md +23 -125
  7. data/Rakefile +26 -21
  8. data/bin/mongo_console +6 -38
  9. data/lib/mongo.rb +23 -82
  10. data/lib/mongo/address.rb +111 -0
  11. data/lib/mongo/address/ipv4.rb +85 -0
  12. data/lib/mongo/address/ipv6.rb +85 -0
  13. data/lib/mongo/address/unix.rb +76 -0
  14. data/lib/mongo/auth.rb +108 -0
  15. data/lib/mongo/auth/cr.rb +44 -0
  16. data/lib/mongo/auth/cr/conversation.rb +119 -0
  17. data/lib/mongo/auth/executable.rb +52 -0
  18. data/lib/mongo/auth/ldap.rb +48 -0
  19. data/lib/mongo/auth/ldap/conversation.rb +92 -0
  20. data/lib/mongo/auth/roles.rb +104 -0
  21. data/lib/mongo/auth/scram.rb +53 -0
  22. data/lib/mongo/auth/scram/conversation.rb +450 -0
  23. data/lib/mongo/auth/user.rb +159 -0
  24. data/lib/mongo/auth/user/view.rb +102 -0
  25. data/lib/mongo/auth/x509.rb +48 -0
  26. data/lib/mongo/auth/x509/conversation.rb +92 -0
  27. data/lib/mongo/{gridfs.rb → bulk.rb} +2 -5
  28. data/lib/mongo/bulk/bulk_write.rb +307 -0
  29. data/lib/mongo/client.rb +233 -0
  30. data/lib/mongo/cluster.rb +203 -0
  31. data/lib/mongo/cluster/topology.rb +60 -0
  32. data/lib/mongo/cluster/topology/replica_set.rb +160 -0
  33. data/lib/mongo/cluster/topology/sharded.rb +132 -0
  34. data/lib/mongo/cluster/topology/standalone.rb +132 -0
  35. data/lib/mongo/cluster/topology/unknown.rb +155 -0
  36. data/lib/mongo/collection.rb +130 -1101
  37. data/lib/mongo/collection/view.rb +169 -0
  38. data/lib/mongo/collection/view/aggregation.rb +108 -0
  39. data/lib/mongo/collection/view/explainable.rb +49 -0
  40. data/lib/mongo/collection/view/immutable.rb +43 -0
  41. data/lib/mongo/collection/view/iterable.rb +48 -0
  42. data/lib/mongo/collection/view/map_reduce.rb +191 -0
  43. data/lib/mongo/collection/view/readable.rb +363 -0
  44. data/lib/mongo/collection/view/writable.rb +169 -0
  45. data/lib/mongo/cursor.rb +79 -680
  46. data/lib/mongo/database.rb +224 -0
  47. data/lib/mongo/database/view.rb +101 -0
  48. data/lib/mongo/error.rb +81 -0
  49. data/lib/mongo/error/bulk_write_failure.rb +41 -0
  50. data/lib/mongo/{utils/thread_local_variable_manager.rb → error/empty_batch.rb} +22 -8
  51. data/{test/functional/db_connection_test.rb → lib/mongo/error/invalid_bulk_operation.rb} +19 -8
  52. data/lib/mongo/error/invalid_collection_name.rb +39 -0
  53. data/lib/mongo/error/invalid_database_name.rb +39 -0
  54. data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
  55. data/lib/mongo/error/invalid_file.rb +38 -0
  56. data/lib/mongo/error/invalid_nonce.rb +46 -0
  57. data/lib/mongo/error/invalid_replacement_document.rb +39 -0
  58. data/lib/mongo/error/invalid_signature.rb +47 -0
  59. data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
  60. data/lib/mongo/error/max_bson_size.rb +40 -0
  61. data/lib/mongo/error/max_message_size.rb +42 -0
  62. data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
  63. data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
  64. data/lib/mongo/error/parser.rb +77 -0
  65. data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
  66. data/lib/mongo/error/socket_timeout_error.rb +23 -0
  67. data/lib/mongo/error/unsupported_features.rb +43 -0
  68. data/lib/mongo/event.rb +40 -0
  69. data/lib/mongo/event/listeners.rb +63 -0
  70. data/lib/mongo/event/primary_elected.rb +53 -0
  71. data/lib/mongo/event/publisher.rb +42 -0
  72. data/lib/mongo/event/server_added.rb +53 -0
  73. data/lib/mongo/event/server_removed.rb +53 -0
  74. data/lib/mongo/event/subscriber.rb +41 -0
  75. data/lib/mongo/grid.rb +16 -0
  76. data/lib/mongo/grid/file.rb +94 -0
  77. data/lib/mongo/grid/file/chunk.rb +184 -0
  78. data/lib/mongo/grid/file/metadata.rb +223 -0
  79. data/lib/mongo/grid/fs.rb +149 -0
  80. data/lib/mongo/index.rb +64 -0
  81. data/lib/mongo/index/view.rb +205 -0
  82. data/lib/mongo/loggable.rb +126 -0
  83. data/lib/mongo/logger.rb +132 -0
  84. data/lib/mongo/operation.rb +26 -0
  85. data/lib/mongo/operation/aggregate.rb +100 -0
  86. data/lib/mongo/operation/aggregate/result.rb +84 -0
  87. data/lib/mongo/operation/batchable.rb +103 -0
  88. data/lib/mongo/operation/bulk_delete/result.rb +197 -0
  89. data/lib/mongo/operation/bulk_insert/result.rb +195 -0
  90. data/lib/mongo/operation/bulk_update/result.rb +295 -0
  91. data/lib/mongo/operation/command.rb +62 -0
  92. data/lib/mongo/operation/executable.rb +105 -0
  93. data/lib/mongo/operation/kill_cursors.rb +39 -0
  94. data/lib/mongo/operation/limited.rb +37 -0
  95. data/lib/mongo/operation/list_collections/result.rb +116 -0
  96. data/lib/mongo/operation/list_indexes/result.rb +118 -0
  97. data/lib/mongo/operation/map_reduce.rb +96 -0
  98. data/lib/mongo/operation/map_reduce/result.rb +122 -0
  99. data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
  100. data/lib/mongo/operation/read/collections_info.rb +67 -0
  101. data/lib/mongo/operation/read/get_more.rb +71 -0
  102. data/lib/mongo/operation/read/indexes.rb +68 -0
  103. data/lib/mongo/operation/read/list_collections.rb +75 -0
  104. data/lib/mongo/operation/read/list_indexes.rb +77 -0
  105. data/lib/mongo/operation/read/query.rb +71 -0
  106. data/lib/mongo/operation/read_preferrable.rb +34 -0
  107. data/lib/mongo/operation/result.rb +259 -0
  108. data/lib/mongo/operation/specifiable.rb +380 -0
  109. data/lib/mongo/operation/write.rb +25 -0
  110. data/lib/mongo/operation/write/bulk_delete.rb +158 -0
  111. data/lib/mongo/operation/write/bulk_insert.rb +160 -0
  112. data/lib/mongo/operation/write/bulk_update.rb +167 -0
  113. data/lib/mongo/{connection/socket/socket_util.rb → operation/write/command.rb} +9 -24
  114. data/lib/mongo/operation/write/command/create_user.rb +43 -0
  115. data/lib/mongo/operation/write/command/delete.rb +56 -0
  116. data/lib/mongo/operation/write/command/drop_index.rb +51 -0
  117. data/lib/mongo/operation/write/command/ensure_index.rb +55 -0
  118. data/lib/mongo/operation/write/command/insert.rb +55 -0
  119. data/lib/mongo/operation/write/command/remove_user.rb +42 -0
  120. data/lib/mongo/operation/write/command/update.rb +60 -0
  121. data/lib/mongo/operation/write/command/writable.rb +61 -0
  122. data/lib/mongo/operation/write/create_index.rb +84 -0
  123. data/lib/mongo/operation/write/create_user.rb +75 -0
  124. data/lib/mongo/operation/write/delete.rb +91 -0
  125. data/lib/mongo/operation/write/drop_index.rb +62 -0
  126. data/lib/mongo/operation/write/insert.rb +88 -0
  127. data/lib/mongo/operation/write/remove_user.rb +70 -0
  128. data/lib/mongo/operation/write/update.rb +98 -0
  129. data/lib/mongo/protocol.rb +15 -0
  130. data/lib/mongo/protocol/bit_vector.rb +61 -0
  131. data/lib/mongo/protocol/delete.rb +94 -0
  132. data/lib/mongo/protocol/get_more.rb +99 -0
  133. data/lib/mongo/protocol/insert.rb +99 -0
  134. data/lib/mongo/protocol/kill_cursors.rb +74 -0
  135. data/lib/mongo/protocol/message.rb +252 -0
  136. data/lib/mongo/protocol/query.rb +147 -0
  137. data/lib/mongo/protocol/reply.rb +72 -0
  138. data/lib/mongo/protocol/serializers.rb +180 -0
  139. data/lib/mongo/protocol/update.rb +111 -0
  140. data/lib/mongo/server.rb +163 -0
  141. data/lib/mongo/server/connectable.rb +99 -0
  142. data/lib/mongo/server/connection.rb +133 -0
  143. data/lib/mongo/server/connection_pool.rb +141 -0
  144. data/lib/mongo/server/connection_pool/queue.rb +182 -0
  145. data/lib/mongo/server/context.rb +66 -0
  146. data/lib/mongo/server/description.rb +450 -0
  147. data/lib/mongo/server/description/features.rb +85 -0
  148. data/lib/mongo/server/description/inspector.rb +79 -0
  149. data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
  150. data/lib/mongo/server/description/inspector/server_added.rb +59 -0
  151. data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
  152. data/lib/mongo/server/monitor.rb +160 -0
  153. data/lib/mongo/server/monitor/connection.rb +88 -0
  154. data/lib/mongo/server_selector.rb +81 -0
  155. data/lib/mongo/server_selector/nearest.rb +94 -0
  156. data/lib/mongo/server_selector/primary.rb +88 -0
  157. data/lib/mongo/server_selector/primary_preferred.rb +94 -0
  158. data/lib/mongo/server_selector/secondary.rb +91 -0
  159. data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
  160. data/lib/mongo/server_selector/selectable.rb +209 -0
  161. data/lib/mongo/socket.rb +179 -0
  162. data/lib/mongo/socket/ssl.rb +108 -0
  163. data/lib/mongo/socket/tcp.rb +69 -0
  164. data/lib/mongo/socket/unix.rb +66 -0
  165. data/lib/mongo/uri.rb +504 -0
  166. data/lib/mongo/version.rb +21 -0
  167. data/lib/mongo/write_concern.rb +99 -0
  168. data/lib/mongo/write_concern/acknowledged.rb +38 -0
  169. data/lib/mongo/write_concern/normalizable.rb +73 -0
  170. data/lib/mongo/write_concern/unacknowledged.rb +43 -0
  171. data/mongo.gemspec +17 -14
  172. data/spec/mongo/address/ipv4_spec.rb +74 -0
  173. data/spec/mongo/address/ipv6_spec.rb +74 -0
  174. data/spec/mongo/address/unix_spec.rb +30 -0
  175. data/spec/mongo/address_spec.rb +206 -0
  176. data/spec/mongo/auth/cr_spec.rb +59 -0
  177. data/spec/mongo/auth/ldap_spec.rb +40 -0
  178. data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
  179. data/spec/mongo/auth/scram_spec.rb +55 -0
  180. data/spec/mongo/auth/user/view_spec.rb +76 -0
  181. data/spec/mongo/auth/user_spec.rb +190 -0
  182. data/spec/mongo/auth/x509_spec.rb +40 -0
  183. data/spec/mongo/auth_spec.rb +65 -0
  184. data/spec/mongo/bulk/bulk_write_spec.rb +175 -0
  185. data/spec/mongo/client_spec.rb +564 -0
  186. data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
  187. data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
  188. data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
  189. data/spec/mongo/cluster/topology_spec.rb +65 -0
  190. data/spec/mongo/cluster_spec.rb +129 -0
  191. data/spec/mongo/collection/view/aggregation_spec.rb +135 -0
  192. data/spec/mongo/collection/view/explainable_spec.rb +32 -0
  193. data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
  194. data/spec/mongo/collection/view/readable_spec.rb +603 -0
  195. data/spec/mongo/collection/view/writable_spec.rb +504 -0
  196. data/spec/mongo/collection/view_spec.rb +521 -0
  197. data/spec/mongo/collection_spec.rb +362 -0
  198. data/spec/mongo/cursor_spec.rb +295 -0
  199. data/spec/mongo/database_spec.rb +306 -0
  200. data/spec/mongo/error/parser_spec.rb +119 -0
  201. data/spec/mongo/event/publisher_spec.rb +50 -0
  202. data/spec/mongo/event/subscriber_spec.rb +34 -0
  203. data/spec/mongo/grid/file/chunk_spec.rb +226 -0
  204. data/spec/mongo/grid/file/metadata_spec.rb +69 -0
  205. data/spec/mongo/grid/file_spec.rb +138 -0
  206. data/spec/mongo/grid/fs_spec.rb +129 -0
  207. data/spec/mongo/index/view_spec.rb +226 -0
  208. data/spec/mongo/loggable_spec.rb +62 -0
  209. data/spec/mongo/logger_spec.rb +97 -0
  210. data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
  211. data/spec/mongo/operation/aggregate_spec.rb +135 -0
  212. data/spec/mongo/operation/command_spec.rb +106 -0
  213. data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
  214. data/spec/mongo/operation/limited_spec.rb +50 -0
  215. data/spec/mongo/operation/map_reduce_spec.rb +143 -0
  216. data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
  217. data/spec/mongo/operation/read/get_more_spec.rb +81 -0
  218. data/spec/mongo/operation/read/indexes_spec.rb +31 -0
  219. data/spec/mongo/operation/read/query_spec.rb +84 -0
  220. data/spec/mongo/operation/result_spec.rb +275 -0
  221. data/spec/mongo/operation/specifiable_spec.rb +53 -0
  222. data/spec/mongo/operation/write/bulk_delete_spec.rb +473 -0
  223. data/spec/mongo/operation/write/bulk_insert_spec.rb +466 -0
  224. data/spec/mongo/operation/write/bulk_update_spec.rb +524 -0
  225. data/spec/mongo/operation/write/command/delete_spec.rb +116 -0
  226. data/spec/mongo/operation/write/command/insert_spec.rb +117 -0
  227. data/spec/mongo/operation/write/command/update_spec.rb +123 -0
  228. data/spec/mongo/operation/write/create_user_spec.rb +44 -0
  229. data/spec/mongo/operation/write/delete_spec.rb +178 -0
  230. data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
  231. data/spec/mongo/operation/write/ensure_index_spec.rb +81 -0
  232. data/spec/mongo/operation/write/insert_spec.rb +231 -0
  233. data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
  234. data/spec/mongo/operation/write/response_spec.rb +85 -0
  235. data/spec/mongo/operation/write/update_spec.rb +177 -0
  236. data/spec/mongo/protocol/delete_spec.rb +167 -0
  237. data/spec/mongo/protocol/get_more_spec.rb +146 -0
  238. data/spec/mongo/protocol/insert_spec.rb +161 -0
  239. data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
  240. data/spec/mongo/protocol/query_spec.rb +285 -0
  241. data/spec/mongo/protocol/reply_spec.rb +157 -0
  242. data/spec/mongo/protocol/update_spec.rb +186 -0
  243. data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
  244. data/spec/mongo/server/connection_pool_spec.rb +120 -0
  245. data/spec/mongo/server/connection_spec.rb +289 -0
  246. data/spec/mongo/server/description/features_spec.rb +138 -0
  247. data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
  248. data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
  249. data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
  250. data/spec/mongo/server/description_spec.rb +510 -0
  251. data/spec/mongo/server/monitor_spec.rb +130 -0
  252. data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
  253. data/spec/mongo/server_selection_rtt_spec.rb +104 -0
  254. data/spec/mongo/server_selection_spec.rb +89 -0
  255. data/spec/mongo/server_selector/nearest_spec.rb +250 -0
  256. data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
  257. data/spec/mongo/server_selector/primary_spec.rb +114 -0
  258. data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
  259. data/spec/mongo/server_selector/secondary_spec.rb +196 -0
  260. data/spec/mongo/server_selector_spec.rb +101 -0
  261. data/spec/mongo/server_spec.rb +131 -0
  262. data/spec/mongo/uri_spec.rb +517 -0
  263. data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
  264. data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
  265. data/spec/mongo_orchestration_spec.rb +70 -0
  266. data/spec/spec_helper.rb +148 -0
  267. data/spec/support/authorization.rb +245 -0
  268. data/spec/support/helpers.rb +140 -0
  269. data/spec/support/matchers.rb +37 -0
  270. data/spec/support/mongo_orchestration.rb +61 -0
  271. data/spec/support/mongo_orchestration/requestable.rb +109 -0
  272. data/spec/support/mongo_orchestration/standalone.rb +57 -0
  273. data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
  274. data/spec/support/sdam/rs/discover_passives.yml +41 -0
  275. data/spec/support/sdam/rs/discover_primary.yml +40 -0
  276. data/spec/support/sdam/rs/discover_secondary.yml +41 -0
  277. data/spec/support/sdam/rs/discovery.yml +195 -0
  278. data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
  279. data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
  280. data/spec/support/sdam/rs/member_reconfig.yml +68 -0
  281. data/spec/support/sdam/rs/member_standalone.yml +60 -0
  282. data/spec/support/sdam/rs/new_primary.yml +74 -0
  283. data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
  284. data/spec/support/sdam/rs/non_rs_member.yml +31 -0
  285. data/spec/support/sdam/rs/normalize_case.yml +49 -0
  286. data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
  287. data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
  288. data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
  289. data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
  290. data/spec/support/sdam/rs/response_from_removed.yml +63 -0
  291. data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
  292. data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
  293. data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
  294. data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
  295. data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
  296. data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
  297. data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
  298. data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
  299. data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
  300. data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
  301. data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
  302. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
  303. data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
  304. data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
  305. data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
  306. data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
  307. data/spec/support/sdam/single/not_ok_response.yml +39 -0
  308. data/spec/support/sdam/single/standalone_removed.yml +32 -0
  309. data/spec/support/sdam/single/unavailable_seed.yml +28 -0
  310. data/spec/support/server_discovery_and_monitoring.rb +167 -0
  311. data/spec/support/server_selection.rb +140 -0
  312. data/spec/support/server_selection/rtt/first_value.yml +4 -0
  313. data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
  314. data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
  315. data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
  316. data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
  317. data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
  318. data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
  319. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +32 -0
  320. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +27 -0
  321. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +23 -0
  322. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +32 -0
  323. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +27 -0
  324. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +32 -0
  325. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +32 -0
  326. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +27 -0
  327. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +27 -0
  328. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +41 -0
  329. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +34 -0
  330. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +33 -0
  331. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +39 -0
  332. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +36 -0
  333. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +32 -0
  334. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +23 -0
  335. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +13 -0
  336. data/spec/support/server_selection_rtt.rb +41 -0
  337. data/spec/support/shared/bulk_write.rb +498 -0
  338. data/spec/support/shared/cursor.rb +38 -0
  339. data/spec/support/shared/operation.rb +77 -0
  340. data/spec/support/shared/protocol.rb +31 -0
  341. data/spec/support/shared/server_selector.rb +111 -0
  342. data/spec/support/shared/socket.rb +82 -0
  343. data/spec/support/travis.rb +14 -0
  344. metadata +523 -189
  345. metadata.gz.sig +0 -0
  346. data/VERSION +0 -1
  347. data/lib/mongo/bulk_write_collection_view.rb +0 -387
  348. data/lib/mongo/collection_writer.rb +0 -364
  349. data/lib/mongo/connection/node.rb +0 -249
  350. data/lib/mongo/connection/pool.rb +0 -340
  351. data/lib/mongo/connection/pool_manager.rb +0 -320
  352. data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
  353. data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
  354. data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
  355. data/lib/mongo/connection/socket/unix_socket.rb +0 -39
  356. data/lib/mongo/db.rb +0 -808
  357. data/lib/mongo/exception.rb +0 -145
  358. data/lib/mongo/functional/authentication.rb +0 -455
  359. data/lib/mongo/functional/logging.rb +0 -85
  360. data/lib/mongo/functional/read_preference.rb +0 -183
  361. data/lib/mongo/functional/scram.rb +0 -556
  362. data/lib/mongo/functional/uri_parser.rb +0 -409
  363. data/lib/mongo/functional/write_concern.rb +0 -66
  364. data/lib/mongo/gridfs/grid.rb +0 -112
  365. data/lib/mongo/gridfs/grid_ext.rb +0 -53
  366. data/lib/mongo/gridfs/grid_file_system.rb +0 -163
  367. data/lib/mongo/gridfs/grid_io.rb +0 -484
  368. data/lib/mongo/legacy.rb +0 -140
  369. data/lib/mongo/mongo_client.rb +0 -697
  370. data/lib/mongo/mongo_replica_set_client.rb +0 -535
  371. data/lib/mongo/mongo_sharded_client.rb +0 -159
  372. data/lib/mongo/networking.rb +0 -372
  373. data/lib/mongo/utils/conversions.rb +0 -110
  374. data/lib/mongo/utils/core_ext.rb +0 -70
  375. data/lib/mongo/utils/server_version.rb +0 -69
  376. data/lib/mongo/utils/support.rb +0 -80
  377. data/test/functional/authentication_test.rb +0 -39
  378. data/test/functional/bulk_api_stress_test.rb +0 -133
  379. data/test/functional/bulk_write_collection_view_test.rb +0 -1198
  380. data/test/functional/client_test.rb +0 -627
  381. data/test/functional/collection_test.rb +0 -2175
  382. data/test/functional/collection_writer_test.rb +0 -83
  383. data/test/functional/conversions_test.rb +0 -163
  384. data/test/functional/cursor_fail_test.rb +0 -57
  385. data/test/functional/cursor_message_test.rb +0 -56
  386. data/test/functional/cursor_test.rb +0 -683
  387. data/test/functional/db_api_test.rb +0 -835
  388. data/test/functional/db_test.rb +0 -348
  389. data/test/functional/grid_file_system_test.rb +0 -285
  390. data/test/functional/grid_io_test.rb +0 -252
  391. data/test/functional/grid_test.rb +0 -273
  392. data/test/functional/pool_test.rb +0 -136
  393. data/test/functional/safe_test.rb +0 -98
  394. data/test/functional/support_test.rb +0 -62
  395. data/test/functional/timeout_test.rb +0 -60
  396. data/test/functional/uri_test.rb +0 -446
  397. data/test/functional/write_concern_test.rb +0 -118
  398. data/test/helpers/general.rb +0 -50
  399. data/test/helpers/test_unit.rb +0 -476
  400. data/test/replica_set/authentication_test.rb +0 -37
  401. data/test/replica_set/basic_test.rb +0 -189
  402. data/test/replica_set/client_test.rb +0 -393
  403. data/test/replica_set/connection_test.rb +0 -138
  404. data/test/replica_set/count_test.rb +0 -66
  405. data/test/replica_set/cursor_test.rb +0 -220
  406. data/test/replica_set/insert_test.rb +0 -157
  407. data/test/replica_set/max_values_test.rb +0 -151
  408. data/test/replica_set/pinning_test.rb +0 -105
  409. data/test/replica_set/query_test.rb +0 -73
  410. data/test/replica_set/read_preference_test.rb +0 -219
  411. data/test/replica_set/refresh_test.rb +0 -211
  412. data/test/replica_set/replication_ack_test.rb +0 -95
  413. data/test/sharded_cluster/basic_test.rb +0 -203
  414. data/test/shared/authentication/basic_auth_shared.rb +0 -260
  415. data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
  416. data/test/shared/authentication/gssapi_shared.rb +0 -176
  417. data/test/shared/authentication/sasl_plain_shared.rb +0 -96
  418. data/test/shared/authentication/scram_shared.rb +0 -92
  419. data/test/shared/ssl_shared.rb +0 -235
  420. data/test/test_helper.rb +0 -61
  421. data/test/threading/basic_test.rb +0 -120
  422. data/test/tools/mongo_config.rb +0 -708
  423. data/test/tools/mongo_config_test.rb +0 -160
  424. data/test/unit/client_test.rb +0 -381
  425. data/test/unit/collection_test.rb +0 -166
  426. data/test/unit/connection_test.rb +0 -335
  427. data/test/unit/cursor_test.rb +0 -307
  428. data/test/unit/db_test.rb +0 -136
  429. data/test/unit/grid_test.rb +0 -76
  430. data/test/unit/mongo_sharded_client_test.rb +0 -48
  431. data/test/unit/node_test.rb +0 -93
  432. data/test/unit/pool_manager_test.rb +0 -111
  433. data/test/unit/read_pref_test.rb +0 -406
  434. data/test/unit/read_test.rb +0 -159
  435. data/test/unit/safe_test.rb +0 -158
  436. data/test/unit/sharding_pool_manager_test.rb +0 -84
  437. data/test/unit/write_concern_test.rb +0 -175
@@ -0,0 +1,120 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::Server::ConnectionPool do
4
+
5
+ let(:address) do
6
+ Mongo::Address.new('127.0.0.1:27017')
7
+ end
8
+
9
+ describe '#checkin' do
10
+
11
+ let(:server) do
12
+ Mongo::Server.new(address, Mongo::Event::Listeners.new)
13
+ end
14
+
15
+ let(:pool) do
16
+ described_class.get(server)
17
+ end
18
+
19
+ context 'when a connection is checked out on the thread' do
20
+
21
+ let!(:connection) do
22
+ pool.checkout
23
+ end
24
+
25
+ before do
26
+ pool.checkin(connection)
27
+ end
28
+
29
+ let(:queue) do
30
+ pool.send(:queue).queue
31
+ end
32
+
33
+ it 'returns the connection to the queue' do
34
+ expect(queue.size).to eq(1)
35
+ end
36
+ end
37
+ end
38
+
39
+ describe '#checkout' do
40
+
41
+ let(:server) do
42
+ Mongo::Server.new(address, Mongo::Event::Listeners.new)
43
+ end
44
+
45
+ let(:pool) do
46
+ described_class.get(server)
47
+ end
48
+
49
+ context 'when no connection is checked out on the same thread' do
50
+
51
+ let!(:connection) do
52
+ pool.checkout
53
+ end
54
+
55
+ it 'returns a new connection' do
56
+ expect(connection.address).to eq(server.address)
57
+ end
58
+ end
59
+
60
+ context 'when a connection is checked out on the same thread' do
61
+
62
+ before do
63
+ pool.checkout
64
+ end
65
+
66
+ it 'returns the threads connection' do
67
+ expect(pool.checkout.address).to eq(server.address)
68
+ end
69
+ end
70
+
71
+ context 'when a connection is checked out on a different thread' do
72
+
73
+ let!(:connection) do
74
+ Thread.new { pool.checkout }.value
75
+ end
76
+
77
+ it 'returns a new connection' do
78
+ expect(pool.checkout.address).to eq(server.address)
79
+ end
80
+
81
+ it 'does not return the same connection instance' do
82
+ expect(pool.checkout).to_not eql(connection)
83
+ end
84
+ end
85
+ end
86
+
87
+ describe '.get' do
88
+
89
+ let(:server) do
90
+ Mongo::Server.new(address, Mongo::Event::Listeners.new)
91
+ end
92
+
93
+ let(:pool) do
94
+ described_class.get(server)
95
+ end
96
+
97
+ it 'returns the pool for the server' do
98
+ expect(pool).to eql(described_class.get(server))
99
+ end
100
+ end
101
+
102
+ describe '#inspect' do
103
+
104
+ let(:server) do
105
+ Mongo::Server.new(address, Mongo::Event::Listeners.new)
106
+ end
107
+
108
+ let(:pool) do
109
+ described_class.get(server)
110
+ end
111
+
112
+ it 'includes the object id' do
113
+ expect(pool.inspect).to include(pool.object_id.to_s)
114
+ end
115
+
116
+ it 'includes the queue inspection' do
117
+ expect(pool.inspect).to include(pool.__send__(:queue).inspect)
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,289 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::Server::Connection do
4
+
5
+ let(:address) do
6
+ Mongo::Address.new(DEFAULT_ADDRESS)
7
+ end
8
+
9
+ let(:server) do
10
+ Mongo::Server.new(address, Mongo::Event::Listeners.new)
11
+ end
12
+
13
+ describe '#connect!' do
14
+
15
+ context 'when no socket exists' do
16
+
17
+ let(:connection) do
18
+ described_class.new(server)
19
+ end
20
+
21
+ let!(:result) do
22
+ connection.connect!
23
+ end
24
+
25
+ let(:socket) do
26
+ connection.send(:socket)
27
+ end
28
+
29
+ it 'returns true' do
30
+ expect(result).to be true
31
+ end
32
+
33
+ it 'creates a socket' do
34
+ expect(socket).to_not be_nil
35
+ end
36
+
37
+ it 'connects the socket' do
38
+ expect(socket).to be_alive
39
+ end
40
+ end
41
+
42
+ context 'when a socket exists' do
43
+
44
+ let(:connection) do
45
+ described_class.new(server)
46
+ end
47
+
48
+ before do
49
+ connection.connect!
50
+ connection.connect!
51
+ end
52
+
53
+ let(:socket) do
54
+ connection.send(:socket)
55
+ end
56
+
57
+ it 'keeps the socket alive' do
58
+ expect(socket).to be_alive
59
+ end
60
+ end
61
+
62
+ context 'when user credentials exist' do
63
+
64
+ context 'when the user is not authorized' do
65
+
66
+ let(:connection) do
67
+ described_class.new(
68
+ server,
69
+ :user => 'notauser',
70
+ :password => 'password',
71
+ :database => TEST_DB
72
+ )
73
+ end
74
+
75
+ it 'raises an error' do
76
+ expect {
77
+ connection.connect!
78
+ }.to raise_error(Mongo::Auth::Unauthorized)
79
+ end
80
+ end
81
+
82
+ describe 'when the user is authorized' do
83
+
84
+ let(:connection) do
85
+ described_class.new(
86
+ server,
87
+ :user => TEST_USER.name,
88
+ :password => TEST_USER.password,
89
+ :database => TEST_DB
90
+ )
91
+ end
92
+
93
+ before do
94
+ connection.connect!
95
+ end
96
+
97
+ it 'sets the connection as authenticated' do
98
+ expect(connection).to be_authenticated
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ describe '#disconnect!' do
105
+
106
+ context 'when a socket is not connected' do
107
+
108
+ let(:connection) do
109
+ described_class.new(server)
110
+ end
111
+
112
+ it 'does not raise an error' do
113
+ expect(connection.disconnect!).to be true
114
+ end
115
+ end
116
+
117
+ context 'when a socket is connected' do
118
+
119
+ let(:connection) do
120
+ described_class.new(server)
121
+ end
122
+
123
+ before do
124
+ connection.connect!
125
+ connection.disconnect!
126
+ end
127
+
128
+ it 'disconnects the socket' do
129
+ expect(connection.send(:socket)).to be_nil
130
+ end
131
+ end
132
+ end
133
+
134
+ describe '#dispatch' do
135
+
136
+ let!(:connection) do
137
+ described_class.new(
138
+ server,
139
+ :user => TEST_USER.name,
140
+ :password => TEST_USER.password,
141
+ :database => TEST_DB
142
+ )
143
+ end
144
+
145
+ let(:documents) do
146
+ [{ 'name' => 'testing' }]
147
+ end
148
+
149
+ let(:insert) do
150
+ Mongo::Protocol::Insert.new(TEST_DB, TEST_COLL, documents)
151
+ end
152
+
153
+ let(:query) do
154
+ Mongo::Protocol::Query.new(TEST_DB, TEST_COLL, { 'name' => 'testing' })
155
+ end
156
+
157
+ let(:delete) do
158
+ Mongo::Protocol::Delete.new(TEST_DB, TEST_COLL, {})
159
+ end
160
+
161
+ context 'when providing a single message' do
162
+
163
+ let(:reply) do
164
+ connection.dispatch([ insert, query ])
165
+ end
166
+
167
+ # @todo: Can remove this once we have more implemented with global hooks.
168
+ after do
169
+ connection.dispatch([ delete ])
170
+ end
171
+
172
+ it 'it dispatchs the message to the socket' do
173
+ expect(reply.documents.first['name']).to eq('testing')
174
+ end
175
+ end
176
+
177
+ context 'when providing multiple messages' do
178
+
179
+ let(:selector) do
180
+ { :getlasterror => 1 }
181
+ end
182
+
183
+ let(:command) do
184
+ Mongo::Protocol::Query.new(TEST_DB, '$cmd', selector, :limit => -1)
185
+ end
186
+
187
+ let(:reply) do
188
+ connection.dispatch([ insert, command ])
189
+ end
190
+
191
+ # @todo: Can remove this once we have more implemented with global hooks.
192
+ after do
193
+ connection.dispatch([ delete ])
194
+ end
195
+
196
+ it 'it dispatchs the message to the socket' do
197
+ expect(reply.documents.first['ok']).to eq(1.0)
198
+ end
199
+ end
200
+
201
+ context 'when a network or socket error occurs' do
202
+
203
+ let(:socket) do
204
+ connection.connect!
205
+ connection.instance_variable_get(:@socket)
206
+ end
207
+
208
+ before do
209
+ expect(socket).to receive(:write).and_raise(Mongo::Error::SocketError)
210
+ end
211
+
212
+ it 'disconnects and raises the exception' do
213
+ expect {
214
+ connection.dispatch([ insert ])
215
+ }.to raise_error(Mongo::Error::SocketError)
216
+ expect(connection).to_not be_connected
217
+ end
218
+ end
219
+ end
220
+
221
+ describe '#initialize' do
222
+
223
+ context 'when host and port are provided' do
224
+
225
+ let(:connection) do
226
+ described_class.new(server)
227
+ end
228
+
229
+ it 'sets the address' do
230
+ expect(connection.address).to eq(server.address)
231
+ end
232
+
233
+ it 'sets the socket to nil' do
234
+ expect(connection.send(:socket)).to be_nil
235
+ end
236
+
237
+ it 'sets the timeout to the default' do
238
+ expect(connection.timeout).to eq(5)
239
+ end
240
+ end
241
+
242
+ context 'when timeout options are provided' do
243
+
244
+ let(:connection) do
245
+ described_class.new(server, socket_timeout: 10)
246
+ end
247
+
248
+ it 'sets the timeout' do
249
+ expect(connection.timeout).to eq(10)
250
+ end
251
+ end
252
+
253
+ context 'when ssl options are provided' do
254
+
255
+ let(:connection) do
256
+ described_class.new(server, :ssl => true)
257
+ end
258
+
259
+ it 'sets the ssl options' do
260
+ expect(connection.send(:ssl_options)).to eq(:ssl => true)
261
+ end
262
+ end
263
+
264
+ context 'when authentication options are provided' do
265
+
266
+ let(:connection) do
267
+ described_class.new(
268
+ server,
269
+ :user => TEST_USER.name,
270
+ :password => TEST_USER.password,
271
+ :database => TEST_DB,
272
+ :auth_mech => :mongodb_cr
273
+ )
274
+ end
275
+
276
+ let(:user) do
277
+ Mongo::Auth::User.new(
278
+ database: TEST_DB,
279
+ user: TEST_USER.name,
280
+ password: TEST_USER.password
281
+ )
282
+ end
283
+
284
+ it 'sets the authentication strategy for the connection' do
285
+ expect(connection.authenticator.user).to eq(user)
286
+ end
287
+ end
288
+ end
289
+ end
@@ -0,0 +1,138 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::Server::Description::Features do
4
+
5
+ describe '#initialize' do
6
+
7
+ context 'when the server wire version range is the same' do
8
+
9
+ let(:features) do
10
+ described_class.new(0..3)
11
+ end
12
+
13
+ it 'sets the server wire version range' do
14
+ expect(features.server_wire_versions).to eq(0..3)
15
+ end
16
+ end
17
+
18
+ context 'when the server wire version range is higher' do
19
+
20
+ it 'raises an exception' do
21
+ expect {
22
+ described_class.new(0..4)
23
+ }.to raise_error(Mongo::Error::UnsupportedFeatures)
24
+ end
25
+ end
26
+
27
+ context 'when the server wire version range is lower' do
28
+
29
+ let(:features) do
30
+ described_class.new(0..2)
31
+ end
32
+
33
+ it 'sets the server wire version range' do
34
+ expect(features.server_wire_versions).to eq(0..2)
35
+ end
36
+ end
37
+ end
38
+
39
+ describe '#list_collections_enabled?' do
40
+
41
+ context 'when the wire range includes 3' do
42
+
43
+ let(:features) do
44
+ described_class.new(0..3)
45
+ end
46
+
47
+ it 'returns true' do
48
+ expect(features).to be_list_collections_enabled
49
+ end
50
+ end
51
+
52
+ context 'when the wire range does not include 3' do
53
+
54
+ let(:features) do
55
+ described_class.new(0..2)
56
+ end
57
+
58
+ it 'returns false' do
59
+ expect(features).to_not be_list_collections_enabled
60
+ end
61
+ end
62
+ end
63
+
64
+ describe '#list_indexes_enabled?' do
65
+
66
+ context 'when the wire range includes 3' do
67
+
68
+ let(:features) do
69
+ described_class.new(0..3)
70
+ end
71
+
72
+ it 'returns true' do
73
+ expect(features).to be_list_indexes_enabled
74
+ end
75
+ end
76
+
77
+ context 'when the wire range does not include 3' do
78
+
79
+ let(:features) do
80
+ described_class.new(0..2)
81
+ end
82
+
83
+ it 'returns false' do
84
+ expect(features).to_not be_list_indexes_enabled
85
+ end
86
+ end
87
+ end
88
+
89
+ describe '#write_command_enabled?' do
90
+
91
+ context 'when the wire range includes 2' do
92
+
93
+ let(:features) do
94
+ described_class.new(0..3)
95
+ end
96
+
97
+ it 'returns true' do
98
+ expect(features).to be_write_command_enabled
99
+ end
100
+ end
101
+
102
+ context 'when the wire range does not include 2' do
103
+
104
+ let(:features) do
105
+ described_class.new(0..1)
106
+ end
107
+
108
+ it 'returns false' do
109
+ expect(features).to_not be_write_command_enabled
110
+ end
111
+ end
112
+ end
113
+
114
+ describe '#scram_sha_1_enabled?' do
115
+
116
+ context 'when the wire range includes 3' do
117
+
118
+ let(:features) do
119
+ described_class.new(0..3)
120
+ end
121
+
122
+ it 'returns true' do
123
+ expect(features).to be_scram_sha_1_enabled
124
+ end
125
+ end
126
+
127
+ context 'when the wire range does not include 3' do
128
+
129
+ let(:features) do
130
+ described_class.new(0..2)
131
+ end
132
+
133
+ it 'returns false' do
134
+ expect(features).to_not be_scram_sha_1_enabled
135
+ end
136
+ end
137
+ end
138
+ end