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
@@ -1,189 +0,0 @@
1
- # Copyright (C) 2009-2013 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'test_helper'
16
-
17
- class ReplicaSetBasicTest < Test::Unit::TestCase
18
-
19
- def setup
20
- ensure_cluster(:rs)
21
- end
22
-
23
- def test_connect
24
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :name => @rs.repl_set_name, :op_timeout => TEST_OP_TIMEOUT)
25
- assert client.connected?
26
- assert_equal @rs.primary_name, client.primary.join(':')
27
- assert_equal @rs.secondary_names.sort, client.secondaries.collect{|s| s.join(':')}.sort
28
- assert_equal @rs.arbiter_names.sort, client.arbiters.collect{|s| s.join(':')}.sort
29
- client.close
30
-
31
- silently do
32
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds_old, :name => @rs.repl_set_name)
33
- end
34
-
35
- assert client.connected?
36
- client.close
37
- end
38
-
39
- def test_safe_option
40
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :name => @rs.repl_set_name)
41
- assert client.connected?
42
- assert client.write_concern[:w] > 0
43
- client.close
44
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :name => @rs.repl_set_name, :w => 0)
45
- assert client.connected?
46
- assert client.write_concern[:w] < 1
47
- client.close
48
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :name => @rs.repl_set_name, :w => 2)
49
- assert client.connected?
50
- assert client.write_concern[:w] > 0
51
- client.close
52
- end
53
-
54
- def test_multiple_concurrent_replica_set_connection
55
- client1 = MongoReplicaSetClient.new(@rs.repl_set_seeds, :name => @rs.repl_set_name)
56
- client2 = MongoReplicaSetClient.new(@rs.repl_set_seeds, :name => @rs.repl_set_name)
57
- assert client1.connected?
58
- assert client2.connected?
59
- assert client1.manager != client2.manager
60
- assert client1.local_manager != client2.local_manager
61
- client1.close
62
- client2.close
63
- end
64
-
65
- def test_cache_original_seed_nodes
66
- host = @rs.servers.first.host
67
- seeds = @rs.repl_set_seeds << "#{host}:19356"
68
- client = MongoReplicaSetClient.new(seeds, :name => @rs.repl_set_name)
69
- assert client.connected?
70
- assert client.seeds.include?([host, 19356]), "Original seed nodes not cached!"
71
- assert_equal [host, 19356], client.seeds.last, "Original seed nodes not cached!"
72
- client.close
73
- end
74
-
75
- def test_accessors
76
- client = MongoReplicaSetClient.from_uri(@uri)
77
- assert_equal @rs.primary_name, [client.host, client.port].join(':')
78
- assert_equal client.host, client.primary_pool.host
79
- assert_equal client.port, client.primary_pool.port
80
- assert_equal 2, client.secondaries.length
81
- assert_equal 2, client.secondary_pools.length
82
- assert_equal @rs.repl_set_name, client.replica_set_name
83
- assert client.secondary_pools.include?(client.read_pool({:mode => :secondary}))
84
- assert_equal 90, client.refresh_interval
85
- assert_equal client.refresh_mode, false
86
- client.close
87
- end
88
-
89
- def test_write_commands_and_operations
90
- @client = MongoReplicaSetClient.from_uri(@uri)
91
- @coll = @client[TEST_DB]['test-write-commands-and-operations']
92
- with_write_commands_and_operations(@client) do
93
- @coll.remove
94
- @coll.insert({:foo => "bar"})
95
- assert_equal(1, @coll.count)
96
- end
97
- end
98
-
99
- def test_wnote_does_not_raise_exception_with_err_nil
100
- @client = MongoReplicaSetClient.from_uri(@uri)
101
- if @client.server_version < '2.5.5'
102
- @coll = @client[TEST_DB]['test-wnote']
103
- begin
104
- result = @coll.remove({:foo => 1}, :w => 2)
105
- rescue => ex
106
- assert(false, "should not raise an exception for a wnote response field from a remove that does not match any documents")
107
- end
108
- assert_nil result["err"]
109
- assert_true result.has_key?("wnote")
110
- end
111
- end
112
-
113
- def test_sockets_used_by_forked_process
114
- @client = MongoReplicaSetClient.from_uri(@uri)
115
- primary_node = @client.manager.primary_pool.node
116
- primary_socket = primary_node.socket
117
- primary_socket.instance_variable_set(:@pid, primary_socket.pid + 1)
118
- primary_node.set_config
119
- assert primary_socket != primary_node.socket
120
- end
121
-
122
- context "Socket pools" do
123
- context "checking out writers" do
124
- setup do
125
- @client = MongoReplicaSetClient.from_uri(@uri)
126
- @coll = @client[TEST_DB]['test-connection-exceptions']
127
- end
128
-
129
- should "close the connection on send_message for major exceptions" do
130
- with_write_operations(@client) do # explicit even if w 0 maps to write operations
131
- @client.expects(:checkout_writer).raises(SystemStackError)
132
- @client.expects(:close)
133
- begin
134
- @coll.insert({:foo => "bar"}, :w => 0)
135
- rescue SystemStackError
136
- end
137
- end
138
- end
139
-
140
- should "close the connection on send_write_command for major exceptions" do
141
- with_write_commands(@client) do
142
- @client.expects(:checkout_reader).raises(SystemStackError)
143
- @client.expects(:close)
144
- begin
145
- @coll.insert({:foo => "bar"})
146
- rescue SystemStackError
147
- end
148
- end
149
- end
150
-
151
- should "close the connection on send_message_with_gle for major exceptions" do
152
- with_write_operations(@client) do
153
- @client.expects(:checkout_writer).raises(SystemStackError)
154
- @client.expects(:close)
155
- begin
156
- @coll.insert({:foo => "bar"})
157
- rescue SystemStackError
158
- end
159
- end
160
- end
161
-
162
- should "close the connection on receive_message for major exceptions" do
163
- @client.expects(:checkout_reader).raises(SystemStackError)
164
- @client.expects(:close)
165
- begin
166
- @coll.find({}, :read => :primary).next
167
- rescue SystemStackError
168
- end
169
- end
170
- end
171
-
172
- context "checking out readers" do
173
- setup do
174
- @client = MongoReplicaSetClient.from_uri(@uri)
175
- @coll = @client[TEST_DB]['test-connection-exceptions']
176
- end
177
-
178
- should "close the connection on receive_message for major exceptions" do
179
- @client.expects(:checkout_reader).raises(SystemStackError)
180
- @client.expects(:close)
181
- begin
182
- @coll.find({}, :read => :secondary).next
183
- rescue SystemStackError
184
- end
185
- end
186
- end
187
- end
188
-
189
- end
@@ -1,393 +0,0 @@
1
- # Copyright (C) 2009-2013 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'test_helper'
16
-
17
- class ReplicaSetClientTest < Test::Unit::TestCase
18
-
19
- def setup
20
- ensure_cluster(:rs)
21
- @client = nil
22
- end
23
-
24
- def teardown
25
- @client.close if @client
26
- end
27
-
28
- def test_reconnection
29
- @client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
30
- assert @client.connected?
31
-
32
- manager = @client.local_manager
33
-
34
- @client.close
35
- assert !@client.connected?
36
- assert !@client.local_manager
37
-
38
- @client.connect
39
- assert @client.connected?
40
- assert_equal @client.local_manager, manager
41
- end
42
-
43
- def test_reconnect_method
44
- @client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
45
- assert @client.connected?
46
-
47
- manager = @client.local_manager
48
-
49
- @client.close
50
- assert !@client.connected?
51
- assert !@client.local_manager
52
-
53
- @client.reconnect
54
- assert @client.connected?
55
- assert_equal @client.local_manager, manager
56
- end
57
-
58
- # TODO: test connect timeout.
59
-
60
- def test_connect_with_deprecated_multi
61
- silently do
62
- # guaranteed to have one data-holding member
63
- @client = MongoClient.multi(@rs.repl_set_seeds_old, :name => @rs.repl_set_name)
64
- end
65
- assert !@client.nil?
66
- assert @client.connected?
67
- end
68
-
69
- def test_connect_bad_name
70
- assert_raise_error(ReplicaSetConnectionError, "-wrong") do
71
- @client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :name => @rs.repl_set_name + "-wrong")
72
- end
73
- end
74
-
75
- def test_connect_with_first_secondary_node_terminated
76
- @rs.secondaries.first.stop
77
-
78
- rescue_connection_failure do
79
- @client = MongoReplicaSetClient.new @rs.repl_set_seeds
80
- end
81
- assert @client.connected?
82
- end
83
-
84
- def test_connect_with_last_secondary_node_terminated
85
- @rs.secondaries.last.stop
86
-
87
- rescue_connection_failure do
88
- @client = MongoReplicaSetClient.new @rs.repl_set_seeds
89
- end
90
- assert @client.connected?
91
- end
92
-
93
- def test_connect_with_primary_stepped_down
94
- @client = MongoReplicaSetClient.from_uri(@uri)
95
- @client[TEST_DB]['bar'].save({:a => 1}, {:w => 3})
96
- assert @client[TEST_DB]['bar'].find_one
97
-
98
- primary = Mongo::MongoClient.new(*@client.primary)
99
- authenticate_client(primary)
100
- assert_raise Mongo::ConnectionFailure do
101
- perform_step_down(primary)
102
- end
103
- assert @client.connected?
104
-
105
- rescue_connection_failure do
106
- @client[TEST_DB]['bar'].find_one
107
- end
108
- @client[TEST_DB]['bar'].find_one
109
- end
110
-
111
- def test_connect_with_primary_killed
112
- @client = MongoReplicaSetClient.from_uri(@uri)
113
- assert @client.connected?
114
- @client[TEST_DB]['bar'].save({:a => 1}, {:w => 3})
115
- assert @client[TEST_DB]['bar'].find_one
116
-
117
- @rs.primary.kill(Signal.list['KILL'])
118
-
119
- sleep(3)
120
-
121
- rescue_connection_failure do
122
- @client[TEST_DB]['bar'].find_one
123
- end
124
- @client[TEST_DB]['bar'].find_one
125
- end
126
-
127
- def test_save_with_primary_stepped_down
128
- @client = MongoReplicaSetClient.from_uri(@uri)
129
- assert @client.connected?
130
-
131
- primary = Mongo::MongoClient.new(*@client.primary)
132
- authenticate_client(primary)
133
- assert_raise Mongo::ConnectionFailure do
134
- perform_step_down(primary)
135
- end
136
-
137
- rescue_connection_failure do
138
- @client[TEST_DB]['bar'].save({:a => 1}, {:w => 2})
139
- end
140
- @client[TEST_DB]['bar'].find_one
141
- end
142
-
143
- # def test_connect_with_first_node_removed
144
- # @client = MongoReplicaSetClient.from_uri(@uri)
145
- # @client[TEST_DB]['bar'].save({:a => 1}, {:w => 3})
146
-
147
- # # Make sure everyone's views of optimes are caught up
148
- # loop do
149
- # break if @rs.repl_set_get_status.all? do |status|
150
- # members = status['members']
151
- # primary_optime = members.find{|m| m['state'] == 1}['optime'].seconds
152
- # members.any?{|m| m['state'] == 2 && primary_optime - m['optime'].seconds < 5}
153
- # end
154
- # sleep 1
155
- # end
156
-
157
- # old_primary = [@client.primary_pool.host, @client.primary_pool.port]
158
- # old_primary_conn = Mongo::MongoClient.new(*old_primary)
159
-
160
- # assert_raise Mongo::ConnectionFailure do
161
- # perform_step_down(old_primary_conn)
162
- # end
163
-
164
- # # Wait for new primary
165
- # rescue_connection_failure do
166
- # sleep 1 until @rs.primary
167
- # end
168
-
169
- # new_primary = [@rs.primary.host, @rs.primary.port]
170
- # new_primary_conn = Mongo::MongoClient.new(*new_primary)
171
-
172
- # assert new_primary != old_primary
173
-
174
- # config = nil
175
-
176
- # # Remove old primary from replset
177
- # rescue_connection_failure do
178
- # config = @client['local']['system.replset'].find_one
179
- # end
180
-
181
- # old_member = config['members'].select {|m| m['host'] == old_primary.join(':')}.first
182
- # config['members'].reject! {|m| m['host'] == old_primary.join(':')}
183
- # config['version'] += 1
184
-
185
- # begin
186
- # new_primary_conn['admin'].command({'replSetReconfig' => config})
187
- # rescue Mongo::ConnectionFailure
188
- # end
189
-
190
- # # Wait for the dust to settle
191
- # rescue_connection_failure do
192
- # assert @client[TEST_DB]['bar'].find_one
193
- # end
194
-
195
- # begin
196
- # # Make sure a new connection skips the old primary
197
- # @new_conn = MongoReplicaSetClient.new @rs.repl_set_seeds
198
- # @new_conn.connect
199
- # new_nodes = @new_conn.secondaries + [@new_conn.primary]
200
- # assert !new_nodes.include?(old_primary)
201
- # ensure
202
- # # Add the old primary back
203
- # config['members'] << old_member
204
- # config['version'] += 1
205
-
206
- # begin
207
- # new_primary_conn['admin'].command({'replSetReconfig' => config})
208
- # rescue Mongo::ConnectionFailure
209
- # end
210
- # end
211
- # end
212
-
213
- def test_connect_with_hung_first_node
214
- hung_node = nil
215
- begin
216
- hung_node = IO.popen('nc -lk 127.0.0.1 29999 >/dev/null 2>&1')
217
-
218
- Timeout.timeout(3) do
219
- @client = MongoReplicaSetClient.new(['localhost:29999'] + @rs.repl_set_seeds,
220
- :connect_timeout => 2)
221
- @client.connect
222
- end
223
- assert ['localhost:29999'] != @client.primary
224
- assert !@client.secondaries.include?('localhost:29999')
225
- ensure
226
- begin
227
- Process.kill("KILL", hung_node.pid) if hung_node
228
- rescue
229
- # the process ended, was killed already, or the system doesn't support nc
230
- end
231
- end
232
- end
233
-
234
- def test_read_pref_primary_with_tags
235
- parser = Mongo::URIParser.new("mongodb://#{@rs.replicas[0].host_port},#{@rs.replicas[1].host_port}" +
236
- "?replicaset=#{@rs.repl_set_name}&readPreference=primary&" +
237
- "readPreferenceTags=dc:ny,rack:1")
238
- assert_raise_error Mongo::MongoArgumentError do
239
- parser.connection.read_pool
240
- end
241
- end
242
-
243
- def test_read_pref_with_tags
244
- parser = Mongo::URIParser.new("mongodb://#{@rs.replicas[0].host_port},#{@rs.replicas[1].host_port}" +
245
- "?replicaset=#{@rs.repl_set_name}&" +
246
- "readPreferenceTags=dc:ny,rack:1")
247
- assert_raise_error Mongo::MongoArgumentError do
248
- parser.connection.read_pool
249
- end
250
- end
251
-
252
- def test_connect_with_connection_string
253
- @client = MongoClient.from_uri("mongodb://#{@rs.replicas[0].host_port},#{@rs.replicas[1].host_port}?replicaset=#{@rs.repl_set_name}")
254
- assert !@client.nil?
255
- assert @client.connected?
256
- end
257
-
258
- def test_connect_with_connection_string_in_env_var
259
- uri = "mongodb://#{@rs.replicas[0].host_port},#{@rs.replicas[1].host_port}?replicaset=#{@rs.repl_set_name}"
260
- with_preserved_env_uri(uri) do
261
- @client = MongoReplicaSetClient.new
262
- assert !@client.nil?
263
- assert_equal 2, @client.seeds.length
264
- assert_equal @rs.replicas[0].host, @client.seeds[0][0]
265
- assert_equal @rs.replicas[1].host, @client.seeds[1][0]
266
- assert_equal @rs.replicas[0].port, @client.seeds[0][1]
267
- assert_equal @rs.replicas[1].port, @client.seeds[1][1]
268
- assert_equal @rs.repl_set_name, @client.replica_set_name
269
- assert @client.connected?
270
- end
271
- end
272
-
273
- def test_connect_with_connection_string_in_implicit_mongodb_uri
274
- uri = "mongodb://#{@rs.replicas[0].host_port},#{@rs.replicas[1].host_port}?replicaset=#{@rs.repl_set_name}"
275
- with_preserved_env_uri(uri) do
276
- @client = MongoClient.from_uri
277
- assert !@client.nil?
278
- assert_equal 2, @client.seeds.length
279
- assert_equal @rs.replicas[0].host, @client.seeds[0][0]
280
- assert_equal @rs.replicas[1].host, @client.seeds[1][0]
281
- assert_equal @rs.replicas[0].port, @client.seeds[0][1]
282
- assert_equal @rs.replicas[1].port, @client.seeds[1][1]
283
- assert_equal @rs.repl_set_name, @client.replica_set_name
284
- assert @client.connected?
285
- end
286
- end
287
-
288
- def test_connect_with_new_seed_format
289
- @client = MongoReplicaSetClient.new @rs.repl_set_seeds
290
- assert @client.connected?
291
- end
292
-
293
- def test_connect_with_old_seed_format
294
- silently do
295
- @client = MongoReplicaSetClient.new(@rs.repl_set_seeds_old)
296
- end
297
- assert @client.connected?
298
- end
299
-
300
- def test_connect_with_full_connection_string
301
- @client = MongoClient.from_uri("mongodb://#{@rs.replicas[0].host_port},#{@rs.replicas[1].host_port}?replicaset=#{@rs.repl_set_name};w=2;fsync=true;slaveok=true")
302
- assert !@client.nil?
303
- assert @client.connected?
304
- assert_equal 2, @client.write_concern[:w]
305
- assert @client.write_concern[:fsync]
306
- assert @client.read_pool
307
- end
308
-
309
- def test_connect_with_full_connection_string_in_env_var
310
- uri = "mongodb://#{@rs.replicas[0].host_port},#{@rs.replicas[1].host_port}?replicaset=#{@rs.repl_set_name};w=2;fsync=true;slaveok=true"
311
- with_preserved_env_uri(uri) do
312
- @client = MongoReplicaSetClient.new
313
- assert !@client.nil?
314
- assert @client.connected?
315
- assert_equal 2, @client.write_concern[:w]
316
- assert @client.write_concern[:fsync]
317
- assert @client.read_pool
318
- end
319
- end
320
-
321
- def test_connect_options_override_env_var
322
- uri = "mongodb://#{@rs.replicas[0].host_port},#{@rs.replicas[1].host_port}?replicaset=#{@rs.repl_set_name};w=2;fsync=true;slaveok=true"
323
- with_preserved_env_uri(uri) do
324
- @client = MongoReplicaSetClient.new({:w => 0})
325
- assert !@client.nil?
326
- assert @client.connected?
327
- assert_equal 0, @client.write_concern[:w]
328
- end
329
- end
330
-
331
- def test_ipv6
332
- @client = MongoReplicaSetClient.new(@rs.repl_set_seeds)
333
- with_ipv6_enabled(@client) do
334
- assert MongoReplicaSetClient.new(["[::1]:#{@rs.replicas[0].port}"])
335
- end
336
- end
337
-
338
- def test_ipv6_with_uri
339
- @client = MongoReplicaSetClient.new(@rs.repl_set_seeds)
340
- with_ipv6_enabled(@client) do
341
- uri = "mongodb://[::1]:#{@rs.replicas[0].port},[::1]:#{@rs.replicas[1].port}"
342
- with_preserved_env_uri(uri) do
343
- assert MongoReplicaSetClient.new
344
- end
345
- end
346
- end
347
-
348
- def test_ipv6_with_uri_opts
349
- @client = MongoReplicaSetClient.new(@rs.repl_set_seeds)
350
- with_ipv6_enabled(@client) do
351
- uri = "mongodb://[::1]:#{@rs.replicas[0].port},[::1]:#{@rs.replicas[1].port}/?safe=true;"
352
- with_preserved_env_uri(uri) do
353
- assert MongoReplicaSetClient.new
354
- end
355
- end
356
- end
357
-
358
- def test_ipv6_with_different_formats
359
- @client = MongoReplicaSetClient.new(@rs.repl_set_seeds)
360
- with_ipv6_enabled(@client) do
361
- uri = "mongodb://[::1]:#{@rs.replicas[0].port},localhost:#{@rs.replicas[1].port}"
362
- with_preserved_env_uri(uri) do
363
- assert MongoReplicaSetClient.new
364
- end
365
- end
366
- end
367
-
368
- def test_find_and_modify_with_secondary_read_preference
369
- @client = MongoReplicaSetClient.from_uri(@uri)
370
- collection = @client[TEST_DB].collection('test', :read => :secondary)
371
- id = BSON::ObjectId.new
372
- collection << { :a => id, :processed => false }
373
-
374
- collection.find_and_modify(
375
- :query => { 'a' => id },
376
- :update => { "$set" => { :processed => true }}
377
- )
378
- assert_equal true, collection.find_one({ 'a' => id }, :read => :primary)['processed']
379
- end
380
-
381
- def test_op_timeout_option
382
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :connect => false,
383
- :op_timeout => nil)
384
- assert_equal nil, client.op_timeout
385
-
386
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :connect => false,
387
- :op_timeout => 50)
388
- assert_equal 50, client.op_timeout
389
-
390
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :connect => false)
391
- assert_equal Mongo::MongoClient::DEFAULT_OP_TIMEOUT, client.op_timeout
392
- end
393
- end