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,211 +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 ReplicaSetRefreshTest < Test::Unit::TestCase
18
-
19
- def setup
20
- ensure_cluster(:rs)
21
- end
22
-
23
- def test_connect_and_manual_refresh_with_secondary_down
24
- num_secondaries = @rs.secondaries.size
25
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :refresh_mode => false,
26
- :op_timeout => TEST_OP_TIMEOUT)
27
- authenticate_client(client)
28
-
29
- assert_equal num_secondaries, client.secondaries.size
30
- assert client.connected?
31
- assert_equal client.read_pool, client.primary_pool
32
- old_refresh_version = client.refresh_version
33
-
34
- @rs.stop_secondary
35
-
36
- client.refresh
37
- assert_equal num_secondaries - 1, client.secondaries.size
38
- assert client.connected?
39
- assert_equal client.read_pool, client.primary_pool
40
- assert client.refresh_version > old_refresh_version
41
- old_refresh_version = client.refresh_version
42
-
43
- # Test no changes after restart until manual refresh
44
- @rs.restart
45
- assert_equal num_secondaries - 1, client.secondaries.size
46
- assert client.connected?
47
- assert_equal client.read_pool, client.primary_pool
48
- assert_equal client.refresh_version, old_refresh_version
49
-
50
- # Refresh and ensure state
51
- client.refresh
52
- assert_equal num_secondaries, client.secondaries.size
53
- assert client.connected?
54
- assert_equal client.read_pool, client.primary_pool
55
- assert client.refresh_version > old_refresh_version
56
- end
57
-
58
- def test_automated_refresh_with_secondary_down
59
- num_secondaries = @rs.secondaries.size
60
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
61
- :refresh_interval => 1, :refresh_mode => :sync, :read => :secondary_preferred,
62
- :op_timeout => TEST_OP_TIMEOUT)
63
- authenticate_client(client)
64
-
65
- # Ensure secondaries are all recognized by client and client is connected
66
- assert_equal num_secondaries, client.secondaries.size
67
- assert client.connected?
68
- assert client.secondary_pools.include?(client.read_pool)
69
- pool = client.read_pool
70
-
71
- @rs.member_by_name(pool.host_string).stop
72
- sleep(2)
73
-
74
- old_refresh_version = client.refresh_version
75
- # Trigger synchronous refresh
76
- client[TEST_DB]['rs-refresh-test'].find_one
77
-
78
- assert client.connected?
79
- assert client.refresh_version > old_refresh_version
80
- assert_equal num_secondaries - 1, client.secondaries.size
81
- assert client.secondary_pools.include?(client.read_pool)
82
- assert_not_equal pool, client.read_pool
83
-
84
- # Restart nodes and ensure refresh interval has passed
85
- @rs.restart
86
- sleep(2)
87
-
88
- old_refresh_version = client.refresh_version
89
- # Trigger synchronous refresh
90
- client[TEST_DB]['rs-refresh-test'].find_one
91
-
92
- assert client.connected?
93
- assert client.refresh_version > old_refresh_version,
94
- "Refresh version hasn't changed."
95
- assert_equal num_secondaries, client.secondaries.size
96
- "No secondaries have been added."
97
- assert_equal num_secondaries, client.secondary_pools.size
98
- end
99
-
100
- def test_concurrent_refreshes
101
- factor = 5
102
- nthreads = factor * 10
103
- threads = []
104
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :refresh_mode => :sync,
105
- :refresh_interval => 1, :op_timeout => TEST_OP_TIMEOUT)
106
- authenticate_client(client)
107
-
108
- nthreads.times do |i|
109
- threads << Thread.new do
110
- # force a connection failure every couple of threads that causes a refresh
111
- if i % factor == 0
112
- cursor = client[TEST_DB]['rs-refresh-test'].find
113
- cursor.stubs(:checkout_socket_from_connection).raises(ConnectionFailure)
114
- begin
115
- cursor.next
116
- rescue => ex
117
- raise ex unless ex.class == ConnectionFailure
118
- next
119
- end
120
- else
121
- # synchronous refreshes will happen every couple of find_ones
122
- cursor = client[TEST_DB]['rs-refresh-test'].find_one
123
- end
124
- end
125
- end
126
-
127
- threads.each do |t|
128
- t.join
129
- end
130
- end
131
-
132
- def test_manager_recursive_locking
133
- # See RUBY-775
134
- # This tests that there isn't recursive locking when a pool manager reconnects
135
- # to all replica set members. The bug in RUBY-775 occurred because the same lock
136
- # acquired in order to connect the pool manager was used to read the pool manager's
137
- # state.
138
- client = MongoReplicaSetClient.from_uri(@uri)
139
-
140
- cursor = client[TEST_DB]['rs-refresh-test'].find
141
- client.stubs(:receive_message).raises(ConnectionFailure)
142
- client.manager.stubs(:refresh_required?).returns(true)
143
- client.manager.stubs(:check_connection_health).returns(true)
144
- assert_raise ConnectionFailure do
145
- cursor.next
146
- end
147
- end
148
-
149
- def test_ping_with_op_timeout
150
- [nil, 10].each do |op_timeout|
151
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :op_timeout => op_timeout)
152
- pool = client.primary_pool
153
- admin_db = pool.client['admin']
154
- admin_db.expects(:command).with({:ping => 1}, :socket => pool.node.socket,
155
- :timeout => op_timeout || MongoClient::DEFAULT_OP_TIMEOUT).returns({'ok' => 1})
156
- client.expects(:[]).with('admin').returns(admin_db)
157
- assert pool.ping
158
- end
159
- end
160
-
161
- =begin
162
- def test_automated_refresh_with_removed_node
163
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds,
164
- :refresh_interval => 1, :refresh_mode => :sync)
165
- authenticate_client(client)
166
-
167
- num_secondaries = client.secondary_pools.length
168
- old_refresh_version = client.refresh_version
169
-
170
- n = @rs.repl_set_remove_node(2)
171
- sleep(2)
172
-
173
- rescue_connection_failure do
174
- client[TEST_DB]['rs-refresh-test'].find_one
175
- end
176
-
177
- assert client.refresh_version > old_refresh_version,
178
- "Refresh version hasn't changed."
179
- assert_equal num_secondaries - 1, client.secondaries.length
180
- assert_equal num_secondaries - 1, client.secondary_pools.length
181
-
182
- #@rs.add_node(n)
183
- end
184
-
185
- def test_adding_and_removing_nodes
186
- client = MongoReplicaSetClient.new(build_seeds(3),
187
- :refresh_interval => 2, :refresh_mode => :sync)
188
-
189
- @rs.add_node
190
- sleep(4)
191
- client[TEST_DB]['rs-refresh-test'].find_one
192
-
193
- @conn2 = MongoReplicaSetClient.new(build_seeds(3),
194
- :refresh_interval => 2, :refresh_mode => :sync)
195
-
196
- assert @conn2.secondaries.sort == client.secondaries.sort,
197
- "Second connection secondaries not equal to first."
198
- assert_equal 3, client.secondary_pools.length
199
- assert_equal 3, client.secondaries.length
200
-
201
- config = client['admin'].command({:ismaster => 1})
202
-
203
- @rs.remove_secondary_node
204
- sleep(4)
205
- config = client['admin'].command({:ismaster => 1})
206
-
207
- assert_equal 2, client.secondary_pools.length
208
- assert_equal 2, client.secondaries.length
209
- end
210
- =end
211
- end
@@ -1,95 +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 ReplicaSetAckTest < Test::Unit::TestCase
18
-
19
- def setup
20
- ensure_cluster(:rs)
21
- @client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
22
-
23
- @slave1 = MongoClient.new(
24
- @client.secondary_pools.first.host,
25
- @client.secondary_pools.first.port, :slave_ok => true)
26
- authenticate_client(@slave1)
27
-
28
- assert !@slave1.read_primary?
29
-
30
- @db = @client.db(TEST_DB)
31
- @db.drop_collection("test-sets")
32
- @col = @db.collection("test-sets")
33
- end
34
-
35
- def teardown
36
- @client.close if @client
37
- end
38
-
39
- def test_safe_mode_with_w_failure
40
- assert_raise_error WriteConcernError do
41
- @col.insert({:foo => 1}, :w => 4, :wtimeout => 1, :fsync => true)
42
- end
43
- assert_raise_error WriteConcernError do
44
- @col.update({:foo => 1}, {:foo => 2}, :w => 4, :wtimeout => 1, :fsync => true)
45
- end
46
- assert_raise_error WriteConcernError do
47
- @col.remove({:foo => 2}, :w => 4, :wtimeout => 1, :fsync => true)
48
- end
49
- if @client.server_version >= '2.5.4'
50
- assert_raise_error WriteConcernError do
51
- @col.insert({:foo => 3}, :w => "test-tag")
52
- end
53
- else # indistinguishable "errmsg"=>"exception: unrecognized getLastError mode: test-tag"
54
- assert_raise_error OperationFailure do
55
- @col.insert({:foo => 3}, :w => "test-tag")
56
- end
57
- end
58
- end
59
-
60
- def test_safe_mode_replication_ack
61
- @col.insert({:baz => "bar"}, :w => 3, :wtimeout => 5000)
62
-
63
- assert @col.insert({:foo => "0" * 5000}, :w => 3, :wtimeout => 5000)
64
- assert_equal 2, @slave1[TEST_DB]["test-sets"].count
65
-
66
- assert @col.update({:baz => "bar"}, {:baz => "foo"}, :w => 3, :wtimeout => 5000)
67
- assert @slave1[TEST_DB]["test-sets"].find_one({:baz => "foo"})
68
-
69
- assert @col.insert({:foo => "bar"}, :w => "majority")
70
-
71
- assert @col.insert({:bar => "baz"}, :w => :majority)
72
-
73
- assert @col.remove({}, :w => 3, :wtimeout => 5000)
74
- assert_equal 0, @slave1[TEST_DB]["test-sets"].count
75
- end
76
-
77
- def test_last_error_responses
78
- 20.times { @col.insert({:baz => "bar"}) }
79
- response = @db.get_last_error(:w => 3, :wtimeout => 5000)
80
- assert response['ok'] == 1
81
- assert response['lastOp']
82
-
83
- @col.update({}, {:baz => "foo"})
84
- response = @db.get_last_error(:w => 3, :wtimeout => 5000)
85
- assert response['ok'] == 1
86
- assert response['lastOp']
87
-
88
- @col.remove({})
89
- response = @db.get_last_error(:w => 3, :wtimeout => 5000)
90
- assert response['ok'] == 1
91
- assert response['n'] == 20
92
- assert response['lastOp']
93
- end
94
-
95
- end
@@ -1,203 +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
- include Mongo
17
-
18
- class Cursor
19
- public :construct_query_spec
20
- end
21
-
22
- class ShardedClusterBasicTest < Test::Unit::TestCase
23
-
24
- def setup
25
- ensure_cluster(:sc)
26
- @document = { "name" => "test_user" }
27
- @seeds = @sc.mongos_seeds
28
- end
29
-
30
- # TODO member.primary? ==> true
31
- def test_connect
32
- @client = sharded_connection
33
- assert @client.connected?
34
- assert_equal(@seeds.size, @client.seeds.size)
35
- probe(@seeds.size)
36
- @client.close
37
- end
38
-
39
- def test_connect_from_standard_client
40
- mongos = @seeds.first
41
- @client = MongoClient.new(*mongos.split(':'))
42
- assert @client.connected?
43
- assert @client.mongos?
44
- @client.close
45
- end
46
-
47
- def test_read_from_client
48
- host, port = @seeds.first.split(':')
49
- tags = [{:dc => "mongolia"}]
50
- @client = MongoClient.new(host, port, {:read => :secondary, :tag_sets => tags})
51
- assert @client.connected?
52
- cursor = Cursor.new(@client[TEST_DB]['whatever'], {})
53
- assert_equal cursor.construct_query_spec['$readPreference'], {:mode => 'secondary', :tags => tags}
54
- end
55
-
56
- def test_find_one_with_read_secondary
57
- @client = sharded_connection(:read => :secondary)
58
- @client[TEST_DB]["users"].insert([ @document ])
59
- assert_equal @client[TEST_DB]['users'].find_one["name"], "test_user"
60
- end
61
-
62
- def test_find_one_with_read_secondary_preferred
63
- @client = sharded_connection(:read => :secondary_preferred)
64
- @client[TEST_DB]["users"].insert([ @document ])
65
- assert_equal @client[TEST_DB]['users'].find_one["name"], "test_user"
66
- end
67
-
68
- def test_find_one_with_read_primary
69
- @client = sharded_connection(:read => :primary)
70
- @client[TEST_DB]["users"].insert([ @document ])
71
- assert_equal @client[TEST_DB]['users'].find_one["name"], "test_user"
72
- end
73
-
74
- def test_find_one_with_read_primary_preferred
75
- @client = sharded_connection(:read => :primary_preferred)
76
- @client[TEST_DB]["users"].insert([ @document ])
77
- assert_equal @client[TEST_DB]['users'].find_one["name"], "test_user"
78
- end
79
-
80
- def test_read_from_sharded_client
81
- tags = [{:dc => "mongolia"}]
82
- @client = sharded_connection(:read => :secondary, :tag_sets => tags)
83
- assert @client.connected?
84
- cursor = Cursor.new(@client[TEST_DB]['whatever'], {})
85
- assert_equal cursor.construct_query_spec['$readPreference'], {:mode => 'secondary', :tags => tags}
86
- end
87
-
88
- def test_hard_refresh
89
- @client = sharded_connection
90
- assert @client.connected?
91
- @client.hard_refresh!
92
- assert @client.connected?
93
- @client.close
94
- end
95
-
96
- def test_reconnect
97
- @client = sharded_connection
98
- assert @client.connected?
99
- router = @sc.servers(:routers).first
100
- router.stop
101
- probe(@seeds.size)
102
- assert @client.connected?
103
- @client.close
104
- end
105
-
106
- def test_mongos_failover
107
- @client = sharded_connection(:refresh_interval => 5, :refresh_mode => :sync)
108
- assert @client.connected?
109
- # do a find to pin a pool
110
- @client[TEST_DB]['test'].find_one
111
- original_primary = @client.manager.primary
112
- # stop the pinned member
113
- @sc.member_by_name("#{original_primary[0]}:#{original_primary[1]}").stop
114
- # assert that the client fails over to the next available mongos
115
- assert_nothing_raised do
116
- @client[TEST_DB]['test'].find_one
117
- end
118
-
119
- assert_not_equal original_primary, @client.manager.primary
120
- assert @client.connected?
121
- @client.close
122
- end
123
-
124
- def test_all_down
125
- @client = sharded_connection
126
- assert @client.connected?
127
- @sc.servers(:routers).each{|router| router.stop}
128
- assert_raises Mongo::ConnectionFailure do
129
- probe(@seeds.size)
130
- end
131
- assert_false @client.connected?
132
- @client.close
133
- end
134
-
135
- def test_cycle
136
- @client = sharded_connection
137
- assert @client.connected?
138
- routers = @sc.servers(:routers)
139
- while routers.size > 0 do
140
- rescue_connection_failure do
141
- probe(@seeds.size)
142
- end
143
- probe(@seeds.size)
144
- router = routers.detect{|r| r.port == @client.manager.primary.last}
145
- routers.delete(router)
146
- router.stop
147
- end
148
- assert_raises Mongo::ConnectionFailure do
149
- probe(@seeds.size)
150
- end
151
- assert_false @client.connected?
152
- routers = @sc.servers(:routers).reverse
153
- routers.each do |r|
154
- r.start
155
- @client.hard_refresh!
156
- rescue_connection_failure do
157
- probe(@seeds.size)
158
- end
159
- probe(@seeds.size)
160
- end
161
- @client.close
162
- end
163
-
164
- def test_wire_version_not_in_range
165
- [
166
- [Mongo::MongoClient::MAX_WIRE_VERSION+1, Mongo::MongoClient::MAX_WIRE_VERSION+1],
167
- [Mongo::MongoClient::MIN_WIRE_VERSION-1, Mongo::MongoClient::MIN_WIRE_VERSION-1]
168
- ].each do |min_wire_version_value, max_wire_version_value|
169
- Mongo.module_eval <<-EVAL
170
- class ShardingPoolManager
171
- def max_wire_version
172
- return #{max_wire_version_value}
173
- end
174
- def min_wire_version
175
- return #{min_wire_version_value}
176
- end
177
- end
178
- EVAL
179
- @client = MongoShardedClient.new(@seeds, :connect => false)
180
- assert !@client.connected?
181
- assert_raises Mongo::ConnectionFailure do
182
- @client.connect
183
- end
184
- end
185
- Mongo.module_eval <<-EVAL
186
- class ShardingPoolManager
187
- attr_reader :max_wire_version, :min_wire_version
188
- end
189
- EVAL
190
- end
191
-
192
- private
193
-
194
- def sharded_connection(opts={})
195
- client = MongoShardedClient.new(@seeds, opts)
196
- authenticate_client(client)
197
- end
198
-
199
- def probe(size)
200
- authenticate_client(@client)
201
- assert_equal(size, @client['config']['mongos'].find.to_a.size)
202
- end
203
- end