mongo 1.12.5 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CONTRIBUTING.md +64 -0
  4. data/LICENSE +1 -1
  5. data/README.md +21 -126
  6. data/Rakefile +39 -21
  7. data/bin/mongo_console +6 -38
  8. data/lib/mongo/address/ipv4.rb +85 -0
  9. data/lib/mongo/address/ipv6.rb +85 -0
  10. data/lib/mongo/address/unix.rb +76 -0
  11. data/lib/mongo/address.rb +111 -0
  12. data/lib/mongo/auth/cr/conversation.rb +119 -0
  13. data/lib/mongo/auth/cr.rb +44 -0
  14. data/lib/mongo/auth/executable.rb +52 -0
  15. data/lib/mongo/auth/ldap/conversation.rb +92 -0
  16. data/lib/mongo/auth/ldap.rb +48 -0
  17. data/lib/mongo/auth/roles.rb +104 -0
  18. data/lib/mongo/auth/scram/conversation.rb +450 -0
  19. data/lib/mongo/auth/scram.rb +53 -0
  20. data/lib/mongo/auth/user/view.rb +102 -0
  21. data/lib/mongo/auth/user.rb +159 -0
  22. data/lib/mongo/auth/x509/conversation.rb +92 -0
  23. data/lib/mongo/auth/x509.rb +48 -0
  24. data/lib/mongo/auth.rb +108 -0
  25. data/lib/mongo/bulk_write/bulk_writable.rb +191 -0
  26. data/lib/mongo/bulk_write/deletable.rb +60 -0
  27. data/lib/mongo/bulk_write/insertable.rb +52 -0
  28. data/lib/mongo/bulk_write/ordered_bulk_write.rb +48 -0
  29. data/lib/mongo/bulk_write/replacable.rb +57 -0
  30. data/lib/mongo/bulk_write/unordered_bulk_write.rb +46 -0
  31. data/lib/mongo/bulk_write/updatable.rb +68 -0
  32. data/lib/mongo/bulk_write.rb +52 -0
  33. data/lib/mongo/client.rb +246 -0
  34. data/lib/mongo/cluster/topology/replica_set.rb +160 -0
  35. data/lib/mongo/cluster/topology/sharded.rb +132 -0
  36. data/lib/mongo/cluster/topology/standalone.rb +132 -0
  37. data/lib/mongo/cluster/topology/unknown.rb +155 -0
  38. data/lib/mongo/cluster/topology.rb +60 -0
  39. data/lib/mongo/cluster.rb +203 -0
  40. data/lib/mongo/collection/view/aggregation.rb +108 -0
  41. data/lib/mongo/collection/view/explainable.rb +49 -0
  42. data/lib/mongo/collection/view/immutable.rb +43 -0
  43. data/lib/mongo/collection/view/iterable.rb +48 -0
  44. data/lib/mongo/collection/view/map_reduce.rb +191 -0
  45. data/lib/mongo/collection/view/readable.rb +363 -0
  46. data/lib/mongo/collection/view/writable.rb +185 -0
  47. data/lib/mongo/collection/view.rb +169 -0
  48. data/lib/mongo/collection.rb +130 -1101
  49. data/lib/mongo/cursor.rb +78 -681
  50. data/lib/mongo/database/view.rb +101 -0
  51. data/lib/mongo/database.rb +224 -0
  52. data/lib/mongo/error/bulk_write_error.rb +41 -0
  53. data/lib/mongo/error/invalid_bulk_operation.rb +36 -0
  54. data/lib/mongo/error/invalid_bulk_operation_type.rb +36 -0
  55. data/lib/mongo/error/invalid_collection_name.rb +39 -0
  56. data/lib/mongo/error/invalid_database_name.rb +39 -0
  57. data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
  58. data/lib/mongo/error/invalid_file.rb +38 -0
  59. data/lib/mongo/error/invalid_nonce.rb +46 -0
  60. data/lib/mongo/error/invalid_replacement_document.rb +39 -0
  61. data/lib/mongo/error/invalid_signature.rb +47 -0
  62. data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
  63. data/lib/mongo/error/max_bson_size.rb +40 -0
  64. data/lib/mongo/error/max_message_size.rb +42 -0
  65. data/{test/functional/db_connection_test.rb → lib/mongo/error/multi_index_drop.rb} +17 -8
  66. data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
  67. data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
  68. data/lib/mongo/error/parser.rb +77 -0
  69. data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
  70. data/lib/mongo/error/socket_timeout_error.rb +23 -0
  71. data/lib/mongo/error/unsupported_features.rb +43 -0
  72. data/lib/mongo/error.rb +82 -0
  73. data/lib/mongo/event/listeners.rb +63 -0
  74. data/lib/mongo/event/primary_elected.rb +53 -0
  75. data/lib/mongo/event/publisher.rb +42 -0
  76. data/lib/mongo/event/server_added.rb +53 -0
  77. data/lib/mongo/event/server_removed.rb +53 -0
  78. data/lib/mongo/event/subscriber.rb +41 -0
  79. data/lib/mongo/event.rb +40 -0
  80. data/lib/mongo/grid/file/chunk.rb +184 -0
  81. data/lib/mongo/grid/file/metadata.rb +229 -0
  82. data/lib/mongo/grid/file.rb +106 -0
  83. data/lib/mongo/grid/fs.rb +149 -0
  84. data/lib/mongo/{gridfs.rb → grid.rb} +3 -5
  85. data/lib/mongo/index/view.rb +261 -0
  86. data/lib/mongo/index.rb +64 -0
  87. data/lib/mongo/loggable.rb +126 -0
  88. data/lib/mongo/logger.rb +132 -0
  89. data/lib/mongo/operation/aggregate/result.rb +88 -0
  90. data/lib/mongo/operation/aggregate.rb +100 -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 +114 -0
  96. data/lib/mongo/operation/list_indexes/result.rb +118 -0
  97. data/lib/mongo/operation/map_reduce/result.rb +122 -0
  98. data/lib/mongo/operation/map_reduce.rb +96 -0
  99. data/lib/mongo/operation/read/collections_info.rb +67 -0
  100. data/lib/mongo/operation/read/get_more.rb +71 -0
  101. data/lib/mongo/operation/read/indexes.rb +68 -0
  102. data/lib/mongo/operation/read/list_collections.rb +75 -0
  103. data/lib/mongo/operation/read/list_indexes.rb +77 -0
  104. data/lib/mongo/operation/read/query.rb +71 -0
  105. data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
  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 +397 -0
  109. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +75 -0
  110. data/lib/mongo/operation/write/bulk/bulk_delete.rb +144 -0
  111. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +68 -0
  112. data/lib/mongo/operation/write/bulk/bulk_insert.rb +129 -0
  113. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +67 -0
  114. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +162 -0
  115. data/lib/mongo/operation/write/bulk/bulk_update.rb +153 -0
  116. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +83 -0
  117. data/lib/mongo/operation/write/bulk.rb +17 -0
  118. data/lib/mongo/operation/write/command/create_index.rb +50 -0
  119. data/lib/mongo/operation/write/command/create_user.rb +43 -0
  120. data/lib/mongo/operation/write/command/delete.rb +56 -0
  121. data/lib/mongo/operation/write/command/drop_index.rb +51 -0
  122. data/lib/mongo/operation/write/command/insert.rb +55 -0
  123. data/lib/mongo/operation/write/command/remove_user.rb +42 -0
  124. data/lib/mongo/operation/write/command/update.rb +60 -0
  125. data/lib/mongo/operation/write/command/writable.rb +61 -0
  126. data/lib/mongo/operation/write/command.rb +22 -0
  127. data/lib/mongo/operation/write/create_index.rb +89 -0
  128. data/lib/mongo/operation/write/create_user.rb +75 -0
  129. data/lib/mongo/operation/write/delete/result.rb +40 -0
  130. data/lib/mongo/operation/write/delete.rb +93 -0
  131. data/lib/mongo/operation/write/drop_index.rb +62 -0
  132. data/lib/mongo/{utils/thread_local_variable_manager.rb → operation/write/insert/result.rb} +15 -8
  133. data/lib/mongo/operation/write/insert.rb +90 -0
  134. data/lib/mongo/operation/write/remove_user.rb +70 -0
  135. data/lib/mongo/operation/write/update/result.rb +160 -0
  136. data/lib/mongo/operation/write/update.rb +103 -0
  137. data/lib/mongo/{connection/socket/socket_util.rb → operation/write.rb} +10 -24
  138. data/lib/mongo/operation.rb +25 -0
  139. data/lib/mongo/options/mapper.rb +78 -0
  140. data/lib/mongo/options.rb +15 -0
  141. data/lib/mongo/protocol/bit_vector.rb +61 -0
  142. data/lib/mongo/protocol/delete.rb +94 -0
  143. data/lib/mongo/protocol/get_more.rb +99 -0
  144. data/lib/mongo/protocol/insert.rb +99 -0
  145. data/lib/mongo/protocol/kill_cursors.rb +74 -0
  146. data/lib/mongo/protocol/message.rb +252 -0
  147. data/lib/mongo/protocol/query.rb +147 -0
  148. data/lib/mongo/protocol/reply.rb +72 -0
  149. data/lib/mongo/protocol/serializers.rb +180 -0
  150. data/lib/mongo/protocol/update.rb +111 -0
  151. data/lib/mongo/protocol.rb +15 -0
  152. data/lib/mongo/server/connectable.rb +110 -0
  153. data/lib/mongo/server/connection.rb +134 -0
  154. data/lib/mongo/server/connection_pool/queue.rb +182 -0
  155. data/lib/mongo/server/connection_pool.rb +141 -0
  156. data/lib/mongo/server/context.rb +66 -0
  157. data/lib/mongo/server/description/features.rb +85 -0
  158. data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
  159. data/lib/mongo/server/description/inspector/server_added.rb +59 -0
  160. data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
  161. data/lib/mongo/server/description/inspector.rb +79 -0
  162. data/lib/mongo/server/description.rb +450 -0
  163. data/lib/mongo/server/monitor/connection.rb +89 -0
  164. data/lib/mongo/server/monitor.rb +176 -0
  165. data/lib/mongo/server.rb +163 -0
  166. data/lib/mongo/server_selector/nearest.rb +94 -0
  167. data/lib/mongo/server_selector/primary.rb +88 -0
  168. data/lib/mongo/server_selector/primary_preferred.rb +94 -0
  169. data/lib/mongo/server_selector/secondary.rb +91 -0
  170. data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
  171. data/lib/mongo/server_selector/selectable.rb +209 -0
  172. data/lib/mongo/server_selector.rb +81 -0
  173. data/lib/mongo/socket/ssl.rb +130 -0
  174. data/lib/mongo/socket/tcp.rb +69 -0
  175. data/lib/mongo/socket/unix.rb +64 -0
  176. data/lib/mongo/socket.rb +179 -0
  177. data/lib/mongo/uri.rb +504 -0
  178. data/lib/mongo/version.rb +21 -0
  179. data/lib/mongo/write_concern/acknowledged.rb +52 -0
  180. data/lib/mongo/write_concern/normalizable.rb +51 -0
  181. data/lib/mongo/write_concern/unacknowledged.rb +55 -0
  182. data/lib/mongo/write_concern.rb +99 -0
  183. data/lib/mongo.rb +24 -82
  184. data/mongo.gemspec +17 -14
  185. data/spec/certificates/ca.pem +17 -0
  186. data/spec/certificates/client.pem +101 -0
  187. data/spec/certificates/crl.pem +10 -0
  188. data/spec/certificates/crl_client_revoked.pem +12 -0
  189. data/spec/certificates/password_protected.pem +51 -0
  190. data/spec/certificates/server.pem +34 -0
  191. data/spec/mongo/address/ipv4_spec.rb +74 -0
  192. data/spec/mongo/address/ipv6_spec.rb +74 -0
  193. data/spec/mongo/address/unix_spec.rb +30 -0
  194. data/spec/mongo/address_spec.rb +206 -0
  195. data/spec/mongo/auth/cr_spec.rb +59 -0
  196. data/spec/mongo/auth/ldap_spec.rb +40 -0
  197. data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
  198. data/spec/mongo/auth/scram_spec.rb +55 -0
  199. data/spec/mongo/auth/user/view_spec.rb +76 -0
  200. data/spec/mongo/auth/user_spec.rb +190 -0
  201. data/spec/mongo/auth/x509_spec.rb +40 -0
  202. data/spec/mongo/auth_spec.rb +65 -0
  203. data/spec/mongo/bulk/bulk_write_spec.rb +262 -0
  204. data/spec/mongo/client_spec.rb +564 -0
  205. data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
  206. data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
  207. data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
  208. data/spec/mongo/cluster/topology_spec.rb +65 -0
  209. data/spec/mongo/cluster_spec.rb +129 -0
  210. data/spec/mongo/collection/view/aggregation_spec.rb +148 -0
  211. data/spec/mongo/collection/view/explainable_spec.rb +32 -0
  212. data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
  213. data/spec/mongo/collection/view/readable_spec.rb +603 -0
  214. data/spec/mongo/collection/view/writable_spec.rb +679 -0
  215. data/spec/mongo/collection/view_spec.rb +530 -0
  216. data/spec/mongo/collection_spec.rb +362 -0
  217. data/spec/mongo/crud_spec.rb +42 -0
  218. data/spec/mongo/cursor_spec.rb +295 -0
  219. data/spec/mongo/database_spec.rb +302 -0
  220. data/spec/mongo/error/parser_spec.rb +119 -0
  221. data/spec/mongo/event/publisher_spec.rb +50 -0
  222. data/spec/mongo/event/subscriber_spec.rb +34 -0
  223. data/spec/mongo/grid/file/chunk_spec.rb +226 -0
  224. data/spec/mongo/grid/file/metadata_spec.rb +92 -0
  225. data/spec/mongo/grid/file_spec.rb +172 -0
  226. data/spec/mongo/grid/fs_spec.rb +129 -0
  227. data/spec/mongo/index/view_spec.rb +330 -0
  228. data/spec/mongo/loggable_spec.rb +62 -0
  229. data/spec/mongo/logger_spec.rb +97 -0
  230. data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
  231. data/spec/mongo/operation/aggregate_spec.rb +127 -0
  232. data/spec/mongo/operation/command_spec.rb +98 -0
  233. data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
  234. data/spec/mongo/operation/limited_spec.rb +50 -0
  235. data/spec/mongo/operation/map_reduce_spec.rb +143 -0
  236. data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
  237. data/spec/mongo/operation/read/get_more_spec.rb +81 -0
  238. data/spec/mongo/operation/read/indexes_spec.rb +31 -0
  239. data/spec/mongo/operation/read/query_spec.rb +84 -0
  240. data/spec/mongo/operation/result_spec.rb +275 -0
  241. data/spec/mongo/operation/specifiable_spec.rb +53 -0
  242. data/spec/mongo/operation/write/bulk_delete_spec.rb +235 -0
  243. data/spec/mongo/operation/write/bulk_insert_spec.rb +235 -0
  244. data/spec/mongo/operation/write/bulk_update_spec.rb +236 -0
  245. data/spec/mongo/operation/write/command/delete_spec.rb +103 -0
  246. data/spec/mongo/operation/write/command/insert_spec.rb +103 -0
  247. data/spec/mongo/operation/write/command/update_spec.rb +109 -0
  248. data/spec/mongo/operation/write/create_index_spec.rb +63 -0
  249. data/spec/mongo/operation/write/create_user_spec.rb +44 -0
  250. data/spec/mongo/operation/write/delete_spec.rb +186 -0
  251. data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
  252. data/spec/mongo/operation/write/insert_spec.rb +244 -0
  253. data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
  254. data/spec/mongo/operation/write/response_spec.rb +85 -0
  255. data/spec/mongo/operation/write/update_spec.rb +228 -0
  256. data/spec/mongo/protocol/delete_spec.rb +167 -0
  257. data/spec/mongo/protocol/get_more_spec.rb +146 -0
  258. data/spec/mongo/protocol/insert_spec.rb +161 -0
  259. data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
  260. data/spec/mongo/protocol/query_spec.rb +285 -0
  261. data/spec/mongo/protocol/reply_spec.rb +157 -0
  262. data/spec/mongo/protocol/update_spec.rb +186 -0
  263. data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
  264. data/spec/mongo/server/connection_pool_spec.rb +120 -0
  265. data/spec/mongo/server/connection_spec.rb +312 -0
  266. data/spec/mongo/server/description/features_spec.rb +138 -0
  267. data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
  268. data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
  269. data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
  270. data/spec/mongo/server/description_spec.rb +510 -0
  271. data/spec/mongo/server/monitor_spec.rb +144 -0
  272. data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
  273. data/spec/mongo/server_selection_rtt_spec.rb +104 -0
  274. data/spec/mongo/server_selection_spec.rb +89 -0
  275. data/spec/mongo/server_selector/nearest_spec.rb +250 -0
  276. data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
  277. data/spec/mongo/server_selector/primary_spec.rb +114 -0
  278. data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
  279. data/spec/mongo/server_selector/secondary_spec.rb +196 -0
  280. data/spec/mongo/server_selector_spec.rb +101 -0
  281. data/spec/mongo/server_spec.rb +131 -0
  282. data/spec/mongo/uri_spec.rb +517 -0
  283. data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
  284. data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
  285. data/spec/spec_helper.rb +133 -0
  286. data/spec/support/authorization.rb +247 -0
  287. data/spec/support/crud/read.rb +144 -0
  288. data/spec/support/crud/write.rb +214 -0
  289. data/spec/support/crud.rb +203 -0
  290. data/spec/support/crud_tests/read/aggregate.yml +43 -0
  291. data/spec/support/crud_tests/read/count.yml +37 -0
  292. data/spec/support/crud_tests/read/distinct.yml +33 -0
  293. data/spec/support/crud_tests/read/find.yml +50 -0
  294. data/spec/support/crud_tests/write/deleteMany.yml +36 -0
  295. data/spec/support/crud_tests/write/deleteOne.yml +49 -0
  296. data/spec/support/crud_tests/write/findOneAndDelete.yml +54 -0
  297. data/spec/support/crud_tests/write/findOneAndReplace.yml +153 -0
  298. data/spec/support/crud_tests/write/findOneAndUpdate.yml +161 -0
  299. data/spec/support/crud_tests/write/insertMany.yml +24 -0
  300. data/spec/support/crud_tests/write/insertOne.yml +19 -0
  301. data/spec/support/crud_tests/write/replaceOne.yml +96 -0
  302. data/spec/support/crud_tests/write/updateMany.yml +83 -0
  303. data/spec/support/crud_tests/write/updateOne.yml +80 -0
  304. data/spec/support/helpers.rb +140 -0
  305. data/spec/support/matchers.rb +37 -0
  306. data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
  307. data/spec/support/sdam/rs/discover_passives.yml +41 -0
  308. data/spec/support/sdam/rs/discover_primary.yml +40 -0
  309. data/spec/support/sdam/rs/discover_secondary.yml +41 -0
  310. data/spec/support/sdam/rs/discovery.yml +195 -0
  311. data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
  312. data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
  313. data/spec/support/sdam/rs/member_reconfig.yml +68 -0
  314. data/spec/support/sdam/rs/member_standalone.yml +60 -0
  315. data/spec/support/sdam/rs/new_primary.yml +74 -0
  316. data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
  317. data/spec/support/sdam/rs/non_rs_member.yml +31 -0
  318. data/spec/support/sdam/rs/normalize_case.yml +49 -0
  319. data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
  320. data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
  321. data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
  322. data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
  323. data/spec/support/sdam/rs/response_from_removed.yml +63 -0
  324. data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
  325. data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
  326. data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
  327. data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
  328. data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
  329. data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
  330. data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
  331. data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
  332. data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
  333. data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
  334. data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
  335. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
  336. data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
  337. data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
  338. data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
  339. data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
  340. data/spec/support/sdam/single/not_ok_response.yml +39 -0
  341. data/spec/support/sdam/single/standalone_removed.yml +32 -0
  342. data/spec/support/sdam/single/unavailable_seed.yml +28 -0
  343. data/spec/support/server_discovery_and_monitoring.rb +167 -0
  344. data/spec/support/server_selection/rtt/first_value.yml +4 -0
  345. data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
  346. data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
  347. data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
  348. data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
  349. data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
  350. data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
  351. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +26 -0
  352. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +21 -0
  353. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +21 -0
  354. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +26 -0
  355. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +21 -0
  356. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +26 -0
  357. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +26 -0
  358. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +21 -0
  359. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +21 -0
  360. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +33 -0
  361. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +26 -0
  362. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +29 -0
  363. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +29 -0
  364. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +29 -0
  365. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary.yml +31 -0
  366. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred.yml +31 -0
  367. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/SecondaryPreferred_non_matching.yml +29 -0
  368. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Secondary_non_matching.yml +26 -0
  369. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +26 -0
  370. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +19 -0
  371. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +11 -0
  372. data/spec/support/server_selection.rb +157 -0
  373. data/spec/support/server_selection_rtt.rb +41 -0
  374. data/spec/support/shared/bulk_write.rb +535 -0
  375. data/spec/support/shared/cursor.rb +38 -0
  376. data/spec/support/shared/operation.rb +77 -0
  377. data/spec/support/shared/protocol.rb +31 -0
  378. data/spec/support/shared/server_selector.rb +111 -0
  379. data/spec/support/shared/socket.rb +82 -0
  380. data/spec/support/travis.rb +14 -0
  381. data.tar.gz.sig +2 -3
  382. metadata +583 -186
  383. metadata.gz.sig +0 -0
  384. data/VERSION +0 -1
  385. data/lib/mongo/bulk_write_collection_view.rb +0 -387
  386. data/lib/mongo/collection_writer.rb +0 -364
  387. data/lib/mongo/connection/node.rb +0 -249
  388. data/lib/mongo/connection/pool.rb +0 -340
  389. data/lib/mongo/connection/pool_manager.rb +0 -320
  390. data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
  391. data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
  392. data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
  393. data/lib/mongo/connection/socket/unix_socket.rb +0 -39
  394. data/lib/mongo/db.rb +0 -808
  395. data/lib/mongo/exception.rb +0 -145
  396. data/lib/mongo/functional/authentication.rb +0 -455
  397. data/lib/mongo/functional/logging.rb +0 -85
  398. data/lib/mongo/functional/read_preference.rb +0 -183
  399. data/lib/mongo/functional/scram.rb +0 -556
  400. data/lib/mongo/functional/uri_parser.rb +0 -409
  401. data/lib/mongo/functional/write_concern.rb +0 -66
  402. data/lib/mongo/gridfs/grid.rb +0 -112
  403. data/lib/mongo/gridfs/grid_ext.rb +0 -53
  404. data/lib/mongo/gridfs/grid_file_system.rb +0 -163
  405. data/lib/mongo/gridfs/grid_io.rb +0 -484
  406. data/lib/mongo/legacy.rb +0 -140
  407. data/lib/mongo/mongo_client.rb +0 -697
  408. data/lib/mongo/mongo_replica_set_client.rb +0 -535
  409. data/lib/mongo/mongo_sharded_client.rb +0 -159
  410. data/lib/mongo/networking.rb +0 -372
  411. data/lib/mongo/utils/conversions.rb +0 -110
  412. data/lib/mongo/utils/core_ext.rb +0 -70
  413. data/lib/mongo/utils/server_version.rb +0 -69
  414. data/lib/mongo/utils/support.rb +0 -80
  415. data/test/functional/authentication_test.rb +0 -39
  416. data/test/functional/bulk_api_stress_test.rb +0 -133
  417. data/test/functional/bulk_write_collection_view_test.rb +0 -1198
  418. data/test/functional/client_test.rb +0 -627
  419. data/test/functional/collection_test.rb +0 -2175
  420. data/test/functional/collection_writer_test.rb +0 -83
  421. data/test/functional/conversions_test.rb +0 -163
  422. data/test/functional/cursor_fail_test.rb +0 -57
  423. data/test/functional/cursor_message_test.rb +0 -56
  424. data/test/functional/cursor_test.rb +0 -683
  425. data/test/functional/db_api_test.rb +0 -835
  426. data/test/functional/db_test.rb +0 -348
  427. data/test/functional/grid_file_system_test.rb +0 -285
  428. data/test/functional/grid_io_test.rb +0 -252
  429. data/test/functional/grid_test.rb +0 -273
  430. data/test/functional/pool_test.rb +0 -136
  431. data/test/functional/safe_test.rb +0 -98
  432. data/test/functional/support_test.rb +0 -62
  433. data/test/functional/timeout_test.rb +0 -60
  434. data/test/functional/uri_test.rb +0 -446
  435. data/test/functional/write_concern_test.rb +0 -118
  436. data/test/helpers/general.rb +0 -50
  437. data/test/helpers/test_unit.rb +0 -476
  438. data/test/replica_set/authentication_test.rb +0 -37
  439. data/test/replica_set/basic_test.rb +0 -189
  440. data/test/replica_set/client_test.rb +0 -393
  441. data/test/replica_set/connection_test.rb +0 -138
  442. data/test/replica_set/count_test.rb +0 -66
  443. data/test/replica_set/cursor_test.rb +0 -220
  444. data/test/replica_set/insert_test.rb +0 -157
  445. data/test/replica_set/max_values_test.rb +0 -151
  446. data/test/replica_set/pinning_test.rb +0 -105
  447. data/test/replica_set/query_test.rb +0 -73
  448. data/test/replica_set/read_preference_test.rb +0 -219
  449. data/test/replica_set/refresh_test.rb +0 -211
  450. data/test/replica_set/replication_ack_test.rb +0 -95
  451. data/test/sharded_cluster/basic_test.rb +0 -203
  452. data/test/shared/authentication/basic_auth_shared.rb +0 -260
  453. data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
  454. data/test/shared/authentication/gssapi_shared.rb +0 -176
  455. data/test/shared/authentication/sasl_plain_shared.rb +0 -96
  456. data/test/shared/authentication/scram_shared.rb +0 -92
  457. data/test/shared/ssl_shared.rb +0 -235
  458. data/test/test_helper.rb +0 -61
  459. data/test/threading/basic_test.rb +0 -120
  460. data/test/tools/mongo_config.rb +0 -708
  461. data/test/tools/mongo_config_test.rb +0 -160
  462. data/test/unit/client_test.rb +0 -381
  463. data/test/unit/collection_test.rb +0 -166
  464. data/test/unit/connection_test.rb +0 -335
  465. data/test/unit/cursor_test.rb +0 -307
  466. data/test/unit/db_test.rb +0 -136
  467. data/test/unit/grid_test.rb +0 -76
  468. data/test/unit/mongo_sharded_client_test.rb +0 -48
  469. data/test/unit/node_test.rb +0 -93
  470. data/test/unit/pool_manager_test.rb +0 -111
  471. data/test/unit/read_pref_test.rb +0 -406
  472. data/test/unit/read_test.rb +0 -159
  473. data/test/unit/safe_test.rb +0 -158
  474. data/test/unit/sharding_pool_manager_test.rb +0 -84
  475. data/test/unit/write_concern_test.rb +0 -175
@@ -0,0 +1,275 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::Operation::Result do
4
+
5
+ let(:result) do
6
+ described_class.new(reply)
7
+ end
8
+
9
+ let(:cursor_id) { 0 }
10
+ let(:documents) { [] }
11
+ let(:flags) { [] }
12
+ let(:starting_from) { 0 }
13
+
14
+ let(:reply) do
15
+ Mongo::Protocol::Reply.new.tap do |reply|
16
+ reply.instance_variable_set(:@flags, flags)
17
+ reply.instance_variable_set(:@cursor_id, cursor_id)
18
+ reply.instance_variable_set(:@starting_from, starting_from)
19
+ reply.instance_variable_set(:@number_returned, documents.size)
20
+ reply.instance_variable_set(:@documents, documents)
21
+ end
22
+ end
23
+
24
+ describe '#acknowledged?' do
25
+
26
+ context 'when the reply is for a read command' do
27
+
28
+ let(:documents) do
29
+ [{ 'ismaster' => true, 'ok' => 1.0 }]
30
+ end
31
+
32
+ it 'returns true' do
33
+ expect(result).to be_acknowledged
34
+ end
35
+ end
36
+
37
+ context 'when the reply is for a write command' do
38
+
39
+ context 'when the command was acknowledged' do
40
+
41
+ let(:documents) do
42
+ [{ "ok" => 1, "n" => 2 }]
43
+ end
44
+
45
+ it 'returns true' do
46
+ expect(result).to be_acknowledged
47
+ end
48
+ end
49
+
50
+ context 'when the command was not acknowledged' do
51
+
52
+ let(:reply) { nil }
53
+
54
+ it 'returns false' do
55
+ expect(result).to_not be_acknowledged
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ describe '#cursor_id' do
62
+
63
+ context 'when the reply exists' do
64
+
65
+ let(:cursor_id) { 5 }
66
+
67
+ it 'delegates to the reply' do
68
+ expect(result.cursor_id).to eq(5)
69
+ end
70
+ end
71
+
72
+ context 'when the reply does not exist' do
73
+
74
+ let(:reply) { nil }
75
+
76
+ it 'returns zero' do
77
+ expect(result.cursor_id).to eq(0)
78
+ end
79
+ end
80
+ end
81
+
82
+ describe '#documents' do
83
+
84
+ context 'when the result is for a command' do
85
+
86
+ context 'when a reply is received' do
87
+
88
+ let(:documents) do
89
+ [{ "ok" => 1, "n" => 2 }]
90
+ end
91
+
92
+ it 'returns the documents' do
93
+ expect(result.documents).to eq(documents)
94
+ end
95
+ end
96
+
97
+ context 'when a reply is not received' do
98
+
99
+ let(:reply) { nil }
100
+
101
+ it 'returns an empty array' do
102
+ expect(result.documents).to be_empty
103
+ end
104
+ end
105
+ end
106
+ end
107
+
108
+ describe '#each' do
109
+
110
+ let(:documents) do
111
+ [{ "ok" => 1, "n" => 2 }]
112
+ end
113
+
114
+ context 'when a block is given' do
115
+
116
+ it 'yields to each document' do
117
+ result.each do |document|
118
+ expect(document).to eq(documents.first)
119
+ end
120
+ end
121
+ end
122
+
123
+ context 'when no block is given' do
124
+
125
+ it 'returns an enumerator' do
126
+ expect(result.each).to be_a(Enumerator)
127
+ end
128
+ end
129
+ end
130
+
131
+ describe '#initialize' do
132
+
133
+ it 'sets the replies' do
134
+ expect(result.replies).to eq([ reply ])
135
+ end
136
+ end
137
+
138
+ describe '#returned_count' do
139
+
140
+ context 'when the reply is for a read command' do
141
+
142
+ let(:documents) do
143
+ [{ 'ismaster' => true, 'ok' => 1.0 }]
144
+ end
145
+
146
+ it 'returns the number returned' do
147
+ expect(result.returned_count).to eq(1)
148
+ end
149
+ end
150
+
151
+ context 'when the reply is for a write command' do
152
+
153
+ context 'when the write is acknowledged' do
154
+
155
+ let(:documents) do
156
+ [{ "ok" => 1, "n" => 2 }]
157
+ end
158
+
159
+ it 'returns the number returned' do
160
+ expect(result.returned_count).to eq(1)
161
+ end
162
+ end
163
+
164
+ context 'when the write is not acknowledged' do
165
+
166
+ let(:reply) { nil }
167
+
168
+ it 'returns zero' do
169
+ expect(result.returned_count).to eq(0)
170
+ end
171
+ end
172
+ end
173
+ end
174
+
175
+ describe '#successful?' do
176
+
177
+ context 'when the reply is for a read command' do
178
+
179
+ let(:documents) do
180
+ [{ 'ismaster' => true, 'ok' => 1.0 }]
181
+ end
182
+
183
+ it 'returns true' do
184
+ expect(result).to be_successful
185
+ end
186
+ end
187
+
188
+ context 'when the reply is for a query' do
189
+
190
+ context 'when the query has no errors' do
191
+
192
+ let(:documents) do
193
+ [{ 'field' => 'name' }]
194
+ end
195
+
196
+ it 'returns true' do
197
+ expect(result).to be_successful
198
+ end
199
+ end
200
+
201
+ context 'when the query has errors' do
202
+
203
+ let(:documents) do
204
+ [{ '$err' => 'not authorized for query on test.system.namespaces', 'code'=> 16550 }]
205
+ end
206
+
207
+ it 'returns false' do
208
+ expect(result).to_not be_successful
209
+ end
210
+ end
211
+ end
212
+
213
+ context 'when the reply is for a write command' do
214
+
215
+ context 'when the write is acknowledged' do
216
+
217
+ context 'when ok is 1' do
218
+
219
+ let(:documents) do
220
+ [{ "ok" => 1, "n" => 2 }]
221
+ end
222
+
223
+ it 'returns true' do
224
+ expect(result).to be_successful
225
+ end
226
+ end
227
+
228
+ context 'when ok is not 1' do
229
+
230
+ let(:documents) do
231
+ [{ "ok" => 0, "n" => 0 }]
232
+ end
233
+
234
+ it 'returns false' do
235
+ expect(result).to_not be_successful
236
+ end
237
+ end
238
+ end
239
+
240
+ context 'when the write is not acknowledged' do
241
+
242
+ let(:reply) { nil }
243
+
244
+ it 'returns true' do
245
+ expect(result).to be_successful
246
+ end
247
+ end
248
+ end
249
+ end
250
+
251
+ describe '#written_count' do
252
+
253
+ context 'when the reply is for a read command' do
254
+
255
+ let(:documents) do
256
+ [{ 'ismaster' => true, 'ok' => 1.0 }]
257
+ end
258
+
259
+ it 'returns the number written' do
260
+ expect(result.written_count).to eq(0)
261
+ end
262
+ end
263
+
264
+ context 'when the reply is for a write command' do
265
+
266
+ let(:documents) do
267
+ [{ "ok" => 1, "n" => 2 }]
268
+ end
269
+
270
+ it 'returns the number written' do
271
+ expect(result.written_count).to eq(2)
272
+ end
273
+ end
274
+ end
275
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::Operation::Specifiable do
4
+
5
+ let(:spec) do
6
+ {}
7
+ end
8
+
9
+ let(:specifiable) do
10
+ Class.new do
11
+ include Mongo::Operation::Specifiable
12
+ end.new(spec)
13
+ end
14
+
15
+ describe '#==' do
16
+
17
+ context 'when the other object is a specifiable' do
18
+
19
+ context 'when the specs are equal' do
20
+
21
+ let(:other) do
22
+ Class.new do
23
+ include Mongo::Operation::Specifiable
24
+ end.new(spec)
25
+ end
26
+
27
+ it 'returns true' do
28
+ expect(specifiable).to eq(other)
29
+ end
30
+ end
31
+
32
+ context 'when the specs are not equal' do
33
+
34
+ let(:other) do
35
+ Class.new do
36
+ include Mongo::Operation::Specifiable
37
+ end.new({ :db_name => 'test' })
38
+ end
39
+
40
+ it 'returns false' do
41
+ expect(specifiable).to_not eq(other)
42
+ end
43
+ end
44
+ end
45
+
46
+ context 'when the other object is not a specifiable' do
47
+
48
+ it 'returns false' do
49
+ expect(specifiable).to_not eq('test')
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,235 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::Operation::Write::BulkDelete do
4
+ include_context 'operation'
5
+
6
+ let(:documents) do
7
+ [ { q: { foo: 1 }, limit: 1 } ]
8
+ end
9
+
10
+ let(:spec) do
11
+ { :deletes => documents,
12
+ :db_name => db_name,
13
+ :coll_name => coll_name,
14
+ :write_concern => write_concern,
15
+ :ordered => true
16
+ }
17
+ end
18
+
19
+ let(:op) { described_class.new(spec) }
20
+
21
+ describe '#initialize' do
22
+
23
+ context 'spec' do
24
+
25
+ it 'sets the spec' do
26
+ expect(op.spec).to eq(spec)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe '#==' do
32
+
33
+ context 'spec' do
34
+
35
+ context 'when two ops have the same specs' do
36
+ let(:other) { described_class.new(spec) }
37
+
38
+ it 'returns true' do
39
+ expect(op).to eq(other)
40
+ end
41
+ end
42
+
43
+ context 'when two ops have different specs' do
44
+ let(:other_docs) do
45
+ [ { q: { bar: 1 }, limit: 1 } ]
46
+ end
47
+
48
+ let(:other_spec) do
49
+ { :deletes => other_docs,
50
+ :db_name => db_name,
51
+ :coll_name => coll_name,
52
+ :write_concern => write_concern,
53
+ :ordered => true
54
+ }
55
+ end
56
+ let(:other) { described_class.new(other_spec) }
57
+
58
+ it 'returns false' do
59
+ expect(op).not_to eq(other)
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ describe '#dup' do
66
+
67
+ context 'deep copy' do
68
+
69
+ it 'copies the list of deletes' do
70
+ copy = op.dup
71
+ expect(copy.spec[:deletes]).not_to be(op.spec[:deletes])
72
+ end
73
+ end
74
+ end
75
+
76
+ describe '#execute' do
77
+
78
+ before do
79
+ authorized_collection.insert_many([
80
+ { name: 'test', field: 'test' },
81
+ { name: 'testing', field: 'test' }
82
+ ])
83
+ end
84
+
85
+ after do
86
+ authorized_collection.find.delete_many
87
+ end
88
+
89
+ context 'when deleting a single document' do
90
+
91
+ let(:op) do
92
+ described_class.new({
93
+ deletes: documents,
94
+ db_name: TEST_DB,
95
+ coll_name: TEST_COLL,
96
+ write_concern: Mongo::WriteConcern.get(w: 1)
97
+ })
98
+ end
99
+
100
+ context 'when the delete succeeds' do
101
+
102
+ let(:documents) do
103
+ [{ q: { field: 'test' }, limit: 1 }]
104
+ end
105
+
106
+ it 'deletes the document from the database' do
107
+ op.execute(authorized_primary.context)
108
+ expect(authorized_collection.find.count).to eq(1)
109
+ end
110
+ end
111
+ end
112
+
113
+ context 'when deleting multiple documents' do
114
+
115
+ let(:op) do
116
+ described_class.new({
117
+ deletes: documents,
118
+ db_name: TEST_DB,
119
+ coll_name: TEST_COLL,
120
+ write_concern: Mongo::WriteConcern.get(w: 1)
121
+ })
122
+ end
123
+
124
+ context 'when the deletes succeed' do
125
+
126
+ let(:documents) do
127
+ [{ q: { field: 'test' }, limit: 0 }]
128
+ end
129
+
130
+ it 'deletes the documents from the database' do
131
+ op.execute(authorized_primary.context)
132
+ expect(authorized_collection.find.count).to eq(0)
133
+ end
134
+ end
135
+ end
136
+
137
+ context 'when the deletes are ordered' do
138
+
139
+ let(:documents) do
140
+ [ failing_delete_doc,
141
+ { q: { field: 'test' }, limit: 1 }
142
+ ]
143
+ end
144
+
145
+ let(:spec) do
146
+ { :deletes => documents,
147
+ :db_name => TEST_DB,
148
+ :coll_name => TEST_COLL,
149
+ :write_concern => write_concern,
150
+ :ordered => true
151
+ }
152
+ end
153
+
154
+ let(:failing_delete) do
155
+ described_class.new(spec)
156
+ end
157
+
158
+ context 'when the delete fails' do
159
+
160
+ context 'when write concern is acknowledged' do
161
+
162
+ let(:write_concern) do
163
+ Mongo::WriteConcern.get(w: 1)
164
+ end
165
+
166
+ it 'aborts after first error' do
167
+ failing_delete.execute(authorized_primary.context)
168
+ expect(authorized_collection.find.count).to eq(2)
169
+ end
170
+ end
171
+
172
+ context 'when write concern is unacknowledged' do
173
+
174
+ let(:write_concern) do
175
+ Mongo::WriteConcern.get(w: 0)
176
+ end
177
+
178
+ it 'aborts after first error' do
179
+ failing_delete.execute(authorized_primary.context)
180
+ expect(authorized_collection.find.count).to eq(2)
181
+ end
182
+ end
183
+ end
184
+ end
185
+
186
+ context 'when the deletes are unordered' do
187
+
188
+ let(:documents) do
189
+ [ failing_delete_doc,
190
+ { q: { field: 'test' }, limit: 1 }
191
+ ]
192
+ end
193
+
194
+ let(:spec) do
195
+ { :deletes => documents,
196
+ :db_name => TEST_DB,
197
+ :coll_name => TEST_COLL,
198
+ :write_concern => write_concern,
199
+ :ordered => false
200
+ }
201
+ end
202
+
203
+ let(:failing_delete) do
204
+ described_class.new(spec)
205
+ end
206
+
207
+ context 'when the delete fails' do
208
+
209
+ context 'when write concern is acknowledged' do
210
+
211
+ let(:write_concern) do
212
+ Mongo::WriteConcern.get(w: 1)
213
+ end
214
+
215
+ it 'does not abort after first error' do
216
+ failing_delete.execute(authorized_primary.context)
217
+ expect(authorized_collection.find.count).to eq(1)
218
+ end
219
+ end
220
+
221
+ context 'when write concern is unacknowledged' do
222
+
223
+ let(:write_concern) do
224
+ Mongo::WriteConcern.get(w: 0)
225
+ end
226
+
227
+ it 'does not abort after first error' do
228
+ failing_delete.execute(authorized_primary.context)
229
+ expect(authorized_collection.find.count).to eq(1)
230
+ end
231
+ end
232
+ end
233
+ end
234
+ end
235
+ end