mongo 1.12.5 → 2.0.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (437) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CONTRIBUTING.md +64 -0
  5. data/LICENSE +1 -1
  6. data/README.md +23 -125
  7. data/Rakefile +26 -21
  8. data/bin/mongo_console +6 -38
  9. data/lib/mongo.rb +23 -82
  10. data/lib/mongo/address.rb +111 -0
  11. data/lib/mongo/address/ipv4.rb +85 -0
  12. data/lib/mongo/address/ipv6.rb +85 -0
  13. data/lib/mongo/address/unix.rb +76 -0
  14. data/lib/mongo/auth.rb +108 -0
  15. data/lib/mongo/auth/cr.rb +44 -0
  16. data/lib/mongo/auth/cr/conversation.rb +119 -0
  17. data/lib/mongo/auth/executable.rb +52 -0
  18. data/lib/mongo/auth/ldap.rb +48 -0
  19. data/lib/mongo/auth/ldap/conversation.rb +92 -0
  20. data/lib/mongo/auth/roles.rb +104 -0
  21. data/lib/mongo/auth/scram.rb +53 -0
  22. data/lib/mongo/auth/scram/conversation.rb +450 -0
  23. data/lib/mongo/auth/user.rb +159 -0
  24. data/lib/mongo/auth/user/view.rb +102 -0
  25. data/lib/mongo/auth/x509.rb +48 -0
  26. data/lib/mongo/auth/x509/conversation.rb +92 -0
  27. data/lib/mongo/{gridfs.rb → bulk.rb} +2 -5
  28. data/lib/mongo/bulk/bulk_write.rb +307 -0
  29. data/lib/mongo/client.rb +233 -0
  30. data/lib/mongo/cluster.rb +203 -0
  31. data/lib/mongo/cluster/topology.rb +60 -0
  32. data/lib/mongo/cluster/topology/replica_set.rb +160 -0
  33. data/lib/mongo/cluster/topology/sharded.rb +132 -0
  34. data/lib/mongo/cluster/topology/standalone.rb +132 -0
  35. data/lib/mongo/cluster/topology/unknown.rb +155 -0
  36. data/lib/mongo/collection.rb +130 -1101
  37. data/lib/mongo/collection/view.rb +169 -0
  38. data/lib/mongo/collection/view/aggregation.rb +108 -0
  39. data/lib/mongo/collection/view/explainable.rb +49 -0
  40. data/lib/mongo/collection/view/immutable.rb +43 -0
  41. data/lib/mongo/collection/view/iterable.rb +48 -0
  42. data/lib/mongo/collection/view/map_reduce.rb +191 -0
  43. data/lib/mongo/collection/view/readable.rb +363 -0
  44. data/lib/mongo/collection/view/writable.rb +169 -0
  45. data/lib/mongo/cursor.rb +79 -680
  46. data/lib/mongo/database.rb +224 -0
  47. data/lib/mongo/database/view.rb +101 -0
  48. data/lib/mongo/error.rb +81 -0
  49. data/lib/mongo/error/bulk_write_failure.rb +41 -0
  50. data/lib/mongo/{utils/thread_local_variable_manager.rb → error/empty_batch.rb} +22 -8
  51. data/{test/functional/db_connection_test.rb → lib/mongo/error/invalid_bulk_operation.rb} +19 -8
  52. data/lib/mongo/error/invalid_collection_name.rb +39 -0
  53. data/lib/mongo/error/invalid_database_name.rb +39 -0
  54. data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
  55. data/lib/mongo/error/invalid_file.rb +38 -0
  56. data/lib/mongo/error/invalid_nonce.rb +46 -0
  57. data/lib/mongo/error/invalid_replacement_document.rb +39 -0
  58. data/lib/mongo/error/invalid_signature.rb +47 -0
  59. data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
  60. data/lib/mongo/error/max_bson_size.rb +40 -0
  61. data/lib/mongo/error/max_message_size.rb +42 -0
  62. data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
  63. data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
  64. data/lib/mongo/error/parser.rb +77 -0
  65. data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
  66. data/lib/mongo/error/socket_timeout_error.rb +23 -0
  67. data/lib/mongo/error/unsupported_features.rb +43 -0
  68. data/lib/mongo/event.rb +40 -0
  69. data/lib/mongo/event/listeners.rb +63 -0
  70. data/lib/mongo/event/primary_elected.rb +53 -0
  71. data/lib/mongo/event/publisher.rb +42 -0
  72. data/lib/mongo/event/server_added.rb +53 -0
  73. data/lib/mongo/event/server_removed.rb +53 -0
  74. data/lib/mongo/event/subscriber.rb +41 -0
  75. data/lib/mongo/grid.rb +16 -0
  76. data/lib/mongo/grid/file.rb +94 -0
  77. data/lib/mongo/grid/file/chunk.rb +184 -0
  78. data/lib/mongo/grid/file/metadata.rb +223 -0
  79. data/lib/mongo/grid/fs.rb +149 -0
  80. data/lib/mongo/index.rb +64 -0
  81. data/lib/mongo/index/view.rb +205 -0
  82. data/lib/mongo/loggable.rb +126 -0
  83. data/lib/mongo/logger.rb +132 -0
  84. data/lib/mongo/operation.rb +26 -0
  85. data/lib/mongo/operation/aggregate.rb +100 -0
  86. data/lib/mongo/operation/aggregate/result.rb +84 -0
  87. data/lib/mongo/operation/batchable.rb +103 -0
  88. data/lib/mongo/operation/bulk_delete/result.rb +197 -0
  89. data/lib/mongo/operation/bulk_insert/result.rb +195 -0
  90. data/lib/mongo/operation/bulk_update/result.rb +295 -0
  91. data/lib/mongo/operation/command.rb +62 -0
  92. data/lib/mongo/operation/executable.rb +105 -0
  93. data/lib/mongo/operation/kill_cursors.rb +39 -0
  94. data/lib/mongo/operation/limited.rb +37 -0
  95. data/lib/mongo/operation/list_collections/result.rb +116 -0
  96. data/lib/mongo/operation/list_indexes/result.rb +118 -0
  97. data/lib/mongo/operation/map_reduce.rb +96 -0
  98. data/lib/mongo/operation/map_reduce/result.rb +122 -0
  99. data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
  100. data/lib/mongo/operation/read/collections_info.rb +67 -0
  101. data/lib/mongo/operation/read/get_more.rb +71 -0
  102. data/lib/mongo/operation/read/indexes.rb +68 -0
  103. data/lib/mongo/operation/read/list_collections.rb +75 -0
  104. data/lib/mongo/operation/read/list_indexes.rb +77 -0
  105. data/lib/mongo/operation/read/query.rb +71 -0
  106. data/lib/mongo/operation/read_preferrable.rb +34 -0
  107. data/lib/mongo/operation/result.rb +259 -0
  108. data/lib/mongo/operation/specifiable.rb +380 -0
  109. data/lib/mongo/operation/write.rb +25 -0
  110. data/lib/mongo/operation/write/bulk_delete.rb +158 -0
  111. data/lib/mongo/operation/write/bulk_insert.rb +160 -0
  112. data/lib/mongo/operation/write/bulk_update.rb +167 -0
  113. data/lib/mongo/{connection/socket/socket_util.rb → operation/write/command.rb} +9 -24
  114. data/lib/mongo/operation/write/command/create_user.rb +43 -0
  115. data/lib/mongo/operation/write/command/delete.rb +56 -0
  116. data/lib/mongo/operation/write/command/drop_index.rb +51 -0
  117. data/lib/mongo/operation/write/command/ensure_index.rb +55 -0
  118. data/lib/mongo/operation/write/command/insert.rb +55 -0
  119. data/lib/mongo/operation/write/command/remove_user.rb +42 -0
  120. data/lib/mongo/operation/write/command/update.rb +60 -0
  121. data/lib/mongo/operation/write/command/writable.rb +61 -0
  122. data/lib/mongo/operation/write/create_index.rb +84 -0
  123. data/lib/mongo/operation/write/create_user.rb +75 -0
  124. data/lib/mongo/operation/write/delete.rb +91 -0
  125. data/lib/mongo/operation/write/drop_index.rb +62 -0
  126. data/lib/mongo/operation/write/insert.rb +88 -0
  127. data/lib/mongo/operation/write/remove_user.rb +70 -0
  128. data/lib/mongo/operation/write/update.rb +98 -0
  129. data/lib/mongo/protocol.rb +15 -0
  130. data/lib/mongo/protocol/bit_vector.rb +61 -0
  131. data/lib/mongo/protocol/delete.rb +94 -0
  132. data/lib/mongo/protocol/get_more.rb +99 -0
  133. data/lib/mongo/protocol/insert.rb +99 -0
  134. data/lib/mongo/protocol/kill_cursors.rb +74 -0
  135. data/lib/mongo/protocol/message.rb +252 -0
  136. data/lib/mongo/protocol/query.rb +147 -0
  137. data/lib/mongo/protocol/reply.rb +72 -0
  138. data/lib/mongo/protocol/serializers.rb +180 -0
  139. data/lib/mongo/protocol/update.rb +111 -0
  140. data/lib/mongo/server.rb +163 -0
  141. data/lib/mongo/server/connectable.rb +99 -0
  142. data/lib/mongo/server/connection.rb +133 -0
  143. data/lib/mongo/server/connection_pool.rb +141 -0
  144. data/lib/mongo/server/connection_pool/queue.rb +182 -0
  145. data/lib/mongo/server/context.rb +66 -0
  146. data/lib/mongo/server/description.rb +450 -0
  147. data/lib/mongo/server/description/features.rb +85 -0
  148. data/lib/mongo/server/description/inspector.rb +79 -0
  149. data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
  150. data/lib/mongo/server/description/inspector/server_added.rb +59 -0
  151. data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
  152. data/lib/mongo/server/monitor.rb +160 -0
  153. data/lib/mongo/server/monitor/connection.rb +88 -0
  154. data/lib/mongo/server_selector.rb +81 -0
  155. data/lib/mongo/server_selector/nearest.rb +94 -0
  156. data/lib/mongo/server_selector/primary.rb +88 -0
  157. data/lib/mongo/server_selector/primary_preferred.rb +94 -0
  158. data/lib/mongo/server_selector/secondary.rb +91 -0
  159. data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
  160. data/lib/mongo/server_selector/selectable.rb +209 -0
  161. data/lib/mongo/socket.rb +179 -0
  162. data/lib/mongo/socket/ssl.rb +108 -0
  163. data/lib/mongo/socket/tcp.rb +69 -0
  164. data/lib/mongo/socket/unix.rb +66 -0
  165. data/lib/mongo/uri.rb +504 -0
  166. data/lib/mongo/version.rb +21 -0
  167. data/lib/mongo/write_concern.rb +99 -0
  168. data/lib/mongo/write_concern/acknowledged.rb +38 -0
  169. data/lib/mongo/write_concern/normalizable.rb +73 -0
  170. data/lib/mongo/write_concern/unacknowledged.rb +43 -0
  171. data/mongo.gemspec +17 -14
  172. data/spec/mongo/address/ipv4_spec.rb +74 -0
  173. data/spec/mongo/address/ipv6_spec.rb +74 -0
  174. data/spec/mongo/address/unix_spec.rb +30 -0
  175. data/spec/mongo/address_spec.rb +206 -0
  176. data/spec/mongo/auth/cr_spec.rb +59 -0
  177. data/spec/mongo/auth/ldap_spec.rb +40 -0
  178. data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
  179. data/spec/mongo/auth/scram_spec.rb +55 -0
  180. data/spec/mongo/auth/user/view_spec.rb +76 -0
  181. data/spec/mongo/auth/user_spec.rb +190 -0
  182. data/spec/mongo/auth/x509_spec.rb +40 -0
  183. data/spec/mongo/auth_spec.rb +65 -0
  184. data/spec/mongo/bulk/bulk_write_spec.rb +175 -0
  185. data/spec/mongo/client_spec.rb +564 -0
  186. data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
  187. data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
  188. data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
  189. data/spec/mongo/cluster/topology_spec.rb +65 -0
  190. data/spec/mongo/cluster_spec.rb +129 -0
  191. data/spec/mongo/collection/view/aggregation_spec.rb +135 -0
  192. data/spec/mongo/collection/view/explainable_spec.rb +32 -0
  193. data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
  194. data/spec/mongo/collection/view/readable_spec.rb +603 -0
  195. data/spec/mongo/collection/view/writable_spec.rb +504 -0
  196. data/spec/mongo/collection/view_spec.rb +521 -0
  197. data/spec/mongo/collection_spec.rb +362 -0
  198. data/spec/mongo/cursor_spec.rb +295 -0
  199. data/spec/mongo/database_spec.rb +306 -0
  200. data/spec/mongo/error/parser_spec.rb +119 -0
  201. data/spec/mongo/event/publisher_spec.rb +50 -0
  202. data/spec/mongo/event/subscriber_spec.rb +34 -0
  203. data/spec/mongo/grid/file/chunk_spec.rb +226 -0
  204. data/spec/mongo/grid/file/metadata_spec.rb +69 -0
  205. data/spec/mongo/grid/file_spec.rb +138 -0
  206. data/spec/mongo/grid/fs_spec.rb +129 -0
  207. data/spec/mongo/index/view_spec.rb +226 -0
  208. data/spec/mongo/loggable_spec.rb +62 -0
  209. data/spec/mongo/logger_spec.rb +97 -0
  210. data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
  211. data/spec/mongo/operation/aggregate_spec.rb +135 -0
  212. data/spec/mongo/operation/command_spec.rb +106 -0
  213. data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
  214. data/spec/mongo/operation/limited_spec.rb +50 -0
  215. data/spec/mongo/operation/map_reduce_spec.rb +143 -0
  216. data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
  217. data/spec/mongo/operation/read/get_more_spec.rb +81 -0
  218. data/spec/mongo/operation/read/indexes_spec.rb +31 -0
  219. data/spec/mongo/operation/read/query_spec.rb +84 -0
  220. data/spec/mongo/operation/result_spec.rb +275 -0
  221. data/spec/mongo/operation/specifiable_spec.rb +53 -0
  222. data/spec/mongo/operation/write/bulk_delete_spec.rb +473 -0
  223. data/spec/mongo/operation/write/bulk_insert_spec.rb +466 -0
  224. data/spec/mongo/operation/write/bulk_update_spec.rb +524 -0
  225. data/spec/mongo/operation/write/command/delete_spec.rb +116 -0
  226. data/spec/mongo/operation/write/command/insert_spec.rb +117 -0
  227. data/spec/mongo/operation/write/command/update_spec.rb +123 -0
  228. data/spec/mongo/operation/write/create_user_spec.rb +44 -0
  229. data/spec/mongo/operation/write/delete_spec.rb +178 -0
  230. data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
  231. data/spec/mongo/operation/write/ensure_index_spec.rb +81 -0
  232. data/spec/mongo/operation/write/insert_spec.rb +231 -0
  233. data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
  234. data/spec/mongo/operation/write/response_spec.rb +85 -0
  235. data/spec/mongo/operation/write/update_spec.rb +177 -0
  236. data/spec/mongo/protocol/delete_spec.rb +167 -0
  237. data/spec/mongo/protocol/get_more_spec.rb +146 -0
  238. data/spec/mongo/protocol/insert_spec.rb +161 -0
  239. data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
  240. data/spec/mongo/protocol/query_spec.rb +285 -0
  241. data/spec/mongo/protocol/reply_spec.rb +157 -0
  242. data/spec/mongo/protocol/update_spec.rb +186 -0
  243. data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
  244. data/spec/mongo/server/connection_pool_spec.rb +120 -0
  245. data/spec/mongo/server/connection_spec.rb +289 -0
  246. data/spec/mongo/server/description/features_spec.rb +138 -0
  247. data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
  248. data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
  249. data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
  250. data/spec/mongo/server/description_spec.rb +510 -0
  251. data/spec/mongo/server/monitor_spec.rb +130 -0
  252. data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
  253. data/spec/mongo/server_selection_rtt_spec.rb +104 -0
  254. data/spec/mongo/server_selection_spec.rb +89 -0
  255. data/spec/mongo/server_selector/nearest_spec.rb +250 -0
  256. data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
  257. data/spec/mongo/server_selector/primary_spec.rb +114 -0
  258. data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
  259. data/spec/mongo/server_selector/secondary_spec.rb +196 -0
  260. data/spec/mongo/server_selector_spec.rb +101 -0
  261. data/spec/mongo/server_spec.rb +131 -0
  262. data/spec/mongo/uri_spec.rb +517 -0
  263. data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
  264. data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
  265. data/spec/mongo_orchestration_spec.rb +70 -0
  266. data/spec/spec_helper.rb +148 -0
  267. data/spec/support/authorization.rb +245 -0
  268. data/spec/support/helpers.rb +140 -0
  269. data/spec/support/matchers.rb +37 -0
  270. data/spec/support/mongo_orchestration.rb +61 -0
  271. data/spec/support/mongo_orchestration/requestable.rb +109 -0
  272. data/spec/support/mongo_orchestration/standalone.rb +57 -0
  273. data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
  274. data/spec/support/sdam/rs/discover_passives.yml +41 -0
  275. data/spec/support/sdam/rs/discover_primary.yml +40 -0
  276. data/spec/support/sdam/rs/discover_secondary.yml +41 -0
  277. data/spec/support/sdam/rs/discovery.yml +195 -0
  278. data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
  279. data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
  280. data/spec/support/sdam/rs/member_reconfig.yml +68 -0
  281. data/spec/support/sdam/rs/member_standalone.yml +60 -0
  282. data/spec/support/sdam/rs/new_primary.yml +74 -0
  283. data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
  284. data/spec/support/sdam/rs/non_rs_member.yml +31 -0
  285. data/spec/support/sdam/rs/normalize_case.yml +49 -0
  286. data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
  287. data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
  288. data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
  289. data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
  290. data/spec/support/sdam/rs/response_from_removed.yml +63 -0
  291. data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
  292. data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
  293. data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
  294. data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
  295. data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
  296. data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
  297. data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
  298. data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
  299. data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
  300. data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
  301. data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
  302. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
  303. data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
  304. data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
  305. data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
  306. data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
  307. data/spec/support/sdam/single/not_ok_response.yml +39 -0
  308. data/spec/support/sdam/single/standalone_removed.yml +32 -0
  309. data/spec/support/sdam/single/unavailable_seed.yml +28 -0
  310. data/spec/support/server_discovery_and_monitoring.rb +167 -0
  311. data/spec/support/server_selection.rb +140 -0
  312. data/spec/support/server_selection/rtt/first_value.yml +4 -0
  313. data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
  314. data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
  315. data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
  316. data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
  317. data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
  318. data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
  319. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +32 -0
  320. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +27 -0
  321. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +23 -0
  322. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +32 -0
  323. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +27 -0
  324. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +32 -0
  325. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +32 -0
  326. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +27 -0
  327. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +27 -0
  328. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +41 -0
  329. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +34 -0
  330. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +33 -0
  331. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +39 -0
  332. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +36 -0
  333. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +32 -0
  334. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +23 -0
  335. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +13 -0
  336. data/spec/support/server_selection_rtt.rb +41 -0
  337. data/spec/support/shared/bulk_write.rb +498 -0
  338. data/spec/support/shared/cursor.rb +38 -0
  339. data/spec/support/shared/operation.rb +77 -0
  340. data/spec/support/shared/protocol.rb +31 -0
  341. data/spec/support/shared/server_selector.rb +111 -0
  342. data/spec/support/shared/socket.rb +82 -0
  343. data/spec/support/travis.rb +14 -0
  344. metadata +523 -189
  345. metadata.gz.sig +0 -0
  346. data/VERSION +0 -1
  347. data/lib/mongo/bulk_write_collection_view.rb +0 -387
  348. data/lib/mongo/collection_writer.rb +0 -364
  349. data/lib/mongo/connection/node.rb +0 -249
  350. data/lib/mongo/connection/pool.rb +0 -340
  351. data/lib/mongo/connection/pool_manager.rb +0 -320
  352. data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
  353. data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
  354. data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
  355. data/lib/mongo/connection/socket/unix_socket.rb +0 -39
  356. data/lib/mongo/db.rb +0 -808
  357. data/lib/mongo/exception.rb +0 -145
  358. data/lib/mongo/functional/authentication.rb +0 -455
  359. data/lib/mongo/functional/logging.rb +0 -85
  360. data/lib/mongo/functional/read_preference.rb +0 -183
  361. data/lib/mongo/functional/scram.rb +0 -556
  362. data/lib/mongo/functional/uri_parser.rb +0 -409
  363. data/lib/mongo/functional/write_concern.rb +0 -66
  364. data/lib/mongo/gridfs/grid.rb +0 -112
  365. data/lib/mongo/gridfs/grid_ext.rb +0 -53
  366. data/lib/mongo/gridfs/grid_file_system.rb +0 -163
  367. data/lib/mongo/gridfs/grid_io.rb +0 -484
  368. data/lib/mongo/legacy.rb +0 -140
  369. data/lib/mongo/mongo_client.rb +0 -697
  370. data/lib/mongo/mongo_replica_set_client.rb +0 -535
  371. data/lib/mongo/mongo_sharded_client.rb +0 -159
  372. data/lib/mongo/networking.rb +0 -372
  373. data/lib/mongo/utils/conversions.rb +0 -110
  374. data/lib/mongo/utils/core_ext.rb +0 -70
  375. data/lib/mongo/utils/server_version.rb +0 -69
  376. data/lib/mongo/utils/support.rb +0 -80
  377. data/test/functional/authentication_test.rb +0 -39
  378. data/test/functional/bulk_api_stress_test.rb +0 -133
  379. data/test/functional/bulk_write_collection_view_test.rb +0 -1198
  380. data/test/functional/client_test.rb +0 -627
  381. data/test/functional/collection_test.rb +0 -2175
  382. data/test/functional/collection_writer_test.rb +0 -83
  383. data/test/functional/conversions_test.rb +0 -163
  384. data/test/functional/cursor_fail_test.rb +0 -57
  385. data/test/functional/cursor_message_test.rb +0 -56
  386. data/test/functional/cursor_test.rb +0 -683
  387. data/test/functional/db_api_test.rb +0 -835
  388. data/test/functional/db_test.rb +0 -348
  389. data/test/functional/grid_file_system_test.rb +0 -285
  390. data/test/functional/grid_io_test.rb +0 -252
  391. data/test/functional/grid_test.rb +0 -273
  392. data/test/functional/pool_test.rb +0 -136
  393. data/test/functional/safe_test.rb +0 -98
  394. data/test/functional/support_test.rb +0 -62
  395. data/test/functional/timeout_test.rb +0 -60
  396. data/test/functional/uri_test.rb +0 -446
  397. data/test/functional/write_concern_test.rb +0 -118
  398. data/test/helpers/general.rb +0 -50
  399. data/test/helpers/test_unit.rb +0 -476
  400. data/test/replica_set/authentication_test.rb +0 -37
  401. data/test/replica_set/basic_test.rb +0 -189
  402. data/test/replica_set/client_test.rb +0 -393
  403. data/test/replica_set/connection_test.rb +0 -138
  404. data/test/replica_set/count_test.rb +0 -66
  405. data/test/replica_set/cursor_test.rb +0 -220
  406. data/test/replica_set/insert_test.rb +0 -157
  407. data/test/replica_set/max_values_test.rb +0 -151
  408. data/test/replica_set/pinning_test.rb +0 -105
  409. data/test/replica_set/query_test.rb +0 -73
  410. data/test/replica_set/read_preference_test.rb +0 -219
  411. data/test/replica_set/refresh_test.rb +0 -211
  412. data/test/replica_set/replication_ack_test.rb +0 -95
  413. data/test/sharded_cluster/basic_test.rb +0 -203
  414. data/test/shared/authentication/basic_auth_shared.rb +0 -260
  415. data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
  416. data/test/shared/authentication/gssapi_shared.rb +0 -176
  417. data/test/shared/authentication/sasl_plain_shared.rb +0 -96
  418. data/test/shared/authentication/scram_shared.rb +0 -92
  419. data/test/shared/ssl_shared.rb +0 -235
  420. data/test/test_helper.rb +0 -61
  421. data/test/threading/basic_test.rb +0 -120
  422. data/test/tools/mongo_config.rb +0 -708
  423. data/test/tools/mongo_config_test.rb +0 -160
  424. data/test/unit/client_test.rb +0 -381
  425. data/test/unit/collection_test.rb +0 -166
  426. data/test/unit/connection_test.rb +0 -335
  427. data/test/unit/cursor_test.rb +0 -307
  428. data/test/unit/db_test.rb +0 -136
  429. data/test/unit/grid_test.rb +0 -76
  430. data/test/unit/mongo_sharded_client_test.rb +0 -48
  431. data/test/unit/node_test.rb +0 -93
  432. data/test/unit/pool_manager_test.rb +0 -111
  433. data/test/unit/read_pref_test.rb +0 -406
  434. data/test/unit/read_test.rb +0 -159
  435. data/test/unit/safe_test.rb +0 -158
  436. data/test/unit/sharding_pool_manager_test.rb +0 -84
  437. data/test/unit/write_concern_test.rb +0 -175
@@ -1,151 +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 MaxValuesTest < Test::Unit::TestCase
18
-
19
- include Mongo
20
-
21
- def setup
22
- ensure_cluster(:rs)
23
- @client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
24
- @db = new_mock_db
25
- @client.stubs(:[]).returns(@db)
26
- @ismaster = {
27
- 'hosts' => @client.local_manager.hosts.to_a,
28
- 'arbiters' => @client.local_manager.arbiters
29
- }
30
- end
31
-
32
- def test_initial_max_and_min_values
33
- assert @client.max_bson_size
34
- assert @client.max_message_size
35
- assert @client.max_wire_version
36
- assert @client.min_wire_version
37
- end
38
-
39
- def test_updated_max_and_min_sizes_after_node_config_change
40
- @db.stubs(:command).returns(
41
- @ismaster.merge({'ismaster' => true}),
42
- @ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * MESSAGE_SIZE_FACTOR}),
43
- @ismaster.merge({'secondary' => true, 'maxBsonObjectSize' => 1024}),
44
- @ismaster.merge({'secondary' => true, 'maxWireVersion' => 0}),
45
- @ismaster.merge({'secondary' => true, 'minWireVersion' => 0})
46
- )
47
- @client.local_manager.stubs(:refresh_required?).returns(true)
48
- @client.refresh
49
-
50
- assert_equal 1024, @client.max_bson_size
51
- assert_equal 1024 * MESSAGE_SIZE_FACTOR, @client.max_message_size
52
- assert_equal 0, @client.max_wire_version
53
- assert_equal 0, @client.min_wire_version
54
- end
55
-
56
- def test_no_values_in_config
57
- @db.stubs(:command).returns(
58
- @ismaster.merge({'ismaster' => true}),
59
- @ismaster.merge({'secondary' => true}),
60
- @ismaster.merge({'secondary' => true})
61
- )
62
- @client.local_manager.stubs(:refresh_required?).returns(true)
63
- @client.refresh
64
-
65
- assert_equal DEFAULT_MAX_BSON_SIZE, @client.max_bson_size
66
- assert_equal DEFAULT_MAX_BSON_SIZE * MESSAGE_SIZE_FACTOR, @client.max_message_size
67
- assert_equal 0, @client.max_wire_version
68
- assert_equal 0, @client.min_wire_version
69
- end
70
-
71
- def test_only_bson_size_in_config
72
- @db.stubs(:command).returns(
73
- @ismaster.merge({'ismaster' => true}),
74
- @ismaster.merge({'secondary' => true}),
75
- @ismaster.merge({'secondary' => true, 'maxBsonObjectSize' => 1024})
76
- )
77
- @client.local_manager.stubs(:refresh_required?).returns(true)
78
- @client.refresh
79
-
80
- assert_equal 1024, @client.max_bson_size
81
- assert_equal 1024 * MESSAGE_SIZE_FACTOR, @client.max_message_size
82
- assert_equal 0, @client.max_wire_version
83
- assert_equal 0, @client.min_wire_version
84
- end
85
-
86
- def test_values_in_config
87
- #ismaster is called three times on the first node
88
- @db.stubs(:command).returns(
89
- @ismaster.merge({'ismaster' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
90
- 'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 1}),
91
- @ismaster.merge({'ismaster' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
92
- 'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 1}),
93
- @ismaster.merge({'ismaster' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
94
- 'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 1}),
95
- @ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
96
- 'maxBsonObjectSize' => 1024, 'maxWireVersion' => 2, 'minWireVersion' => 0}),
97
- @ismaster.merge({'secondary' => true, 'maxMessageSizeBytes' => 1024 * 2 * MESSAGE_SIZE_FACTOR,
98
- 'maxBsonObjectSize' => 1024, 'maxWireVersion' => 1, 'minWireVersion' => 0})
99
- )
100
- @client.local_manager.stubs(:refresh_required?).returns(true)
101
- @client.refresh
102
-
103
- assert_equal 1024, @client.max_bson_size
104
- assert_equal 1024 * 2 * MESSAGE_SIZE_FACTOR, @client.max_message_size
105
- assert_equal 1, @client.max_wire_version # minimum of all max_wire_version
106
- assert_equal 1, @client.min_wire_version # maximum of all min_wire_version
107
- end
108
-
109
- def test_wire_version_not_in_range
110
- min_wire_version, max_wire_version = [Mongo::MongoClient::MIN_WIRE_VERSION-1, Mongo::MongoClient::MIN_WIRE_VERSION-1]
111
- #ismaster is called three times on the first node
112
- @db.stubs(:command).returns(
113
- @ismaster.merge({'ismaster' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
114
- @ismaster.merge({'ismaster' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
115
- @ismaster.merge({'ismaster' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
116
- @ismaster.merge({'secondary' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version}),
117
- @ismaster.merge({'secondary' => true, 'maxWireVersion' => max_wire_version, 'minWireVersion' => min_wire_version})
118
- )
119
- @client.local_manager.stubs(:refresh_required?).returns(true)
120
- assert_raises Mongo::ConnectionFailure do
121
- @client.refresh
122
- end
123
- end
124
-
125
- def test_use_write_command
126
- with_write_commands(@client) do
127
- assert_true @client.use_write_command?({:w => 1})
128
- assert_false @client.use_write_command?({:w => 0})
129
- end
130
- with_write_operations(@client) do
131
- assert_false @client.use_write_command?({:w => 1})
132
- assert_false @client.use_write_command?({:w => 0})
133
- end
134
- @client.local_manager.primary_pool.node.expects(:wire_version_feature?).at_least_once.returns(true)
135
- assert_true @client.use_write_command?({:w => 1})
136
- assert_false @client.use_write_command?({:w => 0})
137
- end
138
-
139
- def test_max_write_batch_size
140
- assert_equal Mongo::MongoClient::DEFAULT_MAX_WRITE_BATCH_SIZE, @client.max_write_batch_size
141
- @client.local_manager.primary_pool.node.stubs(:max_write_batch_size).returns(999)
142
- assert_equal 999, @client.max_write_batch_size
143
- end
144
-
145
- def test_max_write_batch_size_no_manager
146
- # Simulate no local manager being set yet - RUBY-759
147
- @client.stubs(:local_manager).returns(nil)
148
- assert_equal Mongo::MongoClient::DEFAULT_MAX_WRITE_BATCH_SIZE, @client.max_write_batch_size
149
- end
150
- end
151
-
@@ -1,105 +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 ReplicaSetPinningTest < Test::Unit::TestCase
18
- def setup
19
- ensure_cluster(:rs)
20
- @client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
21
- @db = @client.db(TEST_DB)
22
- @coll = @db.collection("test-sets")
23
- @coll.insert({:a => 1})
24
- end
25
-
26
- def test_unpinning
27
- # pin primary
28
- @coll.find_one
29
- assert_equal @client.pinned_pool[:pool], @client.primary_pool
30
-
31
- # pin secondary
32
- @coll.find_one({}, :read => :secondary_preferred)
33
- assert @client.secondary_pools.include? @client.pinned_pool[:pool]
34
-
35
- # repin primary
36
- @coll.find_one({}, :read => :primary_preferred)
37
- assert_equal @client.pinned_pool[:pool], @client.primary_pool
38
- end
39
-
40
- def test_pinned_pool_is_local_to_thread
41
- threads = []
42
- 30.times do |i|
43
- threads << Thread.new do
44
- if i % 2 == 0
45
- @coll.find_one({}, :read => :secondary_preferred)
46
- assert @client.secondary_pools.include? @client.pinned_pool[:pool]
47
- else
48
- @coll.find_one({}, :read => :primary_preferred)
49
- assert_equal @client.pinned_pool[:pool], @client.primary_pool
50
- end
51
- end
52
- end
53
- threads.each(&:join)
54
- end
55
-
56
- def test_aggregation_cursor_pinning
57
- return unless @client.server_version >= '2.5.1'
58
- @coll.drop
59
-
60
- [10, 1000].each do |size|
61
- @coll.drop
62
- size.times {|i| @coll.insert({ :_id => i }) }
63
- expected_sum = size.times.reduce(:+)
64
-
65
- cursor = @coll.aggregate(
66
- [{ :$project => {:_id => '$_id'}} ],
67
- :cursor => { :batchSize => 1 }
68
- )
69
-
70
- assert_equal Mongo::Cursor, cursor.class
71
-
72
- cursor_sum = cursor.reduce(0) do |sum, doc|
73
- sum += doc['_id']
74
- end
75
-
76
- assert_equal expected_sum, cursor_sum
77
- end
78
- @coll.drop
79
- end
80
-
81
- def test_parallel_scan_pinning
82
- return unless @client.server_version >= '2.5.5'
83
- @coll.drop
84
-
85
- 8000.times { |i| @coll.insert({ :_id => i }) }
86
-
87
- lock = Mutex.new
88
- doc_ids = Set.new
89
- threads = []
90
- cursors = @coll.parallel_scan(3)
91
- cursors.each_with_index do |cursor, i|
92
- threads << Thread.new do
93
- docs = cursor.to_a
94
- lock.synchronize do
95
- docs.each do |doc|
96
- doc_ids << doc['_id']
97
- end
98
- end
99
- end
100
- end
101
- threads.each(&:join)
102
- assert_equal 8000, doc_ids.count
103
- @coll.drop
104
- end
105
- end
@@ -1,73 +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 ReplicaSetQueryTest < Test::Unit::TestCase
18
-
19
- def setup
20
- ensure_cluster(:rs)
21
- @client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
22
- @db = @client.db(TEST_DB)
23
- @db.drop_collection("test-sets")
24
- @coll = @db.collection("test-sets")
25
- end
26
-
27
- def teardown
28
- @client.close if @client
29
- end
30
-
31
- def test_query
32
- @coll.save({:a => 20}, :w => 3)
33
- @coll.save({:a => 30}, :w => 3)
34
- @coll.save({:a => 40}, :w => 3)
35
- results = []
36
- @coll.find.each {|r| results << r}
37
- [20, 30, 40].each do |a|
38
- assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
39
- end
40
-
41
- @rs.primary.stop
42
-
43
- results = []
44
- rescue_connection_failure do
45
- @coll.find.each {|r| results << r}
46
- [20, 30, 40].each do |a|
47
- assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
48
- end
49
- end
50
- end
51
-
52
- # Create a large collection and do a secondary query that returns
53
- # enough records to require sending a GETMORE. In between opening
54
- # the cursor and sending the GETMORE, do a :primary query. Confirm
55
- # that the cursor reading from the secondary continues to talk to
56
- # the secondary, rather than trying to read the cursor from the
57
- # primary, where it does not exist.
58
- # def test_secondary_getmore
59
- # 200.times do |i|
60
- # @coll.save({:a => i}, :w => 3)
61
- # end
62
- # as = []
63
- # # Set an explicit batch size, in case the default ever changes.
64
- # @coll.find({}, { :batch_size => 100, :read => :secondary }) do |c|
65
- # c.each do |result|
66
- # as << result['a']
67
- # @coll.find({:a => result['a']}, :read => :primary).map
68
- # end
69
- # end
70
- # assert_equal(as.sort, 0.upto(199).to_a)
71
- # end
72
-
73
- end
@@ -1,219 +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 ReadPreferenceTest < Test::Unit::TestCase
18
-
19
- def setup
20
- ensure_cluster(:rs)
21
- client = make_connection
22
- db = client.db(TEST_DB)
23
- coll = db.collection('test-sets')
24
- coll.save({:a => 20}, {:w => 2})
25
- end
26
-
27
- def test_read_primary
28
- client = make_connection
29
- rescue_connection_failure do
30
- assert client.read_primary?
31
- assert client.primary?
32
- end
33
-
34
- client = make_connection(:primary_preferred)
35
- rescue_connection_failure do
36
- assert client.read_primary?
37
- assert client.primary?
38
- end
39
-
40
- client = make_connection(:secondary)
41
- rescue_connection_failure do
42
- assert !client.read_primary?
43
- assert !client.primary?
44
- end
45
-
46
- client = make_connection(:secondary_preferred)
47
- rescue_connection_failure do
48
- assert !client.read_primary?
49
- assert !client.primary?
50
- end
51
- end
52
-
53
- def test_connection_pools
54
- client = make_connection
55
- assert client.primary_pool, "No primary pool!"
56
- assert client.read_pool, "No read pool!"
57
- assert client.primary_pool.port == client.read_pool.port,
58
- "Primary port and read port are not the same!"
59
-
60
-
61
- client = make_connection(:primary_preferred)
62
- assert client.primary_pool, "No primary pool!"
63
- assert client.read_pool, "No read pool!"
64
- assert client.primary_pool.port == client.read_pool.port,
65
- "Primary port and read port are not the same!"
66
-
67
- client = make_connection(:secondary)
68
- assert client.primary_pool, "No primary pool!"
69
- assert client.read_pool, "No read pool!"
70
- assert client.primary_pool.port != client.read_pool.port,
71
- "Primary port and read port are the same!"
72
-
73
- client = make_connection(:secondary_preferred)
74
- assert client.primary_pool, "No primary pool!"
75
- assert client.read_pool, "No read pool!"
76
- assert client.primary_pool.port != client.read_pool.port,
77
- "Primary port and read port are the same!"
78
- end
79
-
80
- def test_read_routing
81
- prepare_routing_test
82
-
83
- # Test that reads are going to the right members
84
- assert_query_route(@primary, :primary)
85
- assert_query_route(@primary_preferred, :primary)
86
- assert_query_route(@secondary, :secondary)
87
- assert_query_route(@secondary_preferred, :secondary)
88
- end
89
-
90
- def test_read_routing_with_primary_down
91
- prepare_routing_test
92
-
93
- # Test that reads are going to the right members
94
- assert_query_route(@primary, :primary)
95
- assert_query_route(@primary_preferred, :primary)
96
- assert_query_route(@secondary, :secondary)
97
- assert_query_route(@secondary_preferred, :secondary)
98
-
99
- # Kill the primary so the remaining two members are secondaries
100
- @rs.primary.kill
101
- sleep(2)
102
- # Test that reads are going to the right members
103
- assert_raise_error ConnectionFailure do
104
- @primary[TEST_DB]['test-sets'].find_one
105
- end
106
- assert_query_route(@primary_preferred, :secondary)
107
- assert_query_route(@secondary, :secondary)
108
- assert_query_route(@secondary_preferred, :secondary)
109
-
110
- # Restore set
111
- @rs.restart
112
- sleep(1)
113
- @repl_cons.each { |con| con.refresh }
114
- sleep(1)
115
-
116
- # Test that reads are going to the right members
117
- assert_query_route(@primary, :primary)
118
- assert_query_route(@primary_preferred, :primary)
119
- assert_query_route(@secondary, :secondary)
120
- assert_query_route(@secondary_preferred, :secondary)
121
- end
122
-
123
- def test_read_routing_with_secondary_down
124
- prepare_routing_test
125
-
126
- # Test that reads are going to the right members
127
- assert_query_route(@primary, :primary)
128
- assert_query_route(@primary_preferred, :primary)
129
- assert_query_route(@secondary, :secondary)
130
- assert_query_route(@secondary_preferred, :secondary)
131
-
132
- secondaries = @rs.secondaries
133
- secondaries[0].kill
134
- assert_query_route(@secondary_preferred, :secondary)
135
-
136
- secondaries[1].kill
137
- sleep(2)
138
-
139
- recovered = false
140
- until recovered
141
- begin
142
- @secondary[TEST_DB]['test-sets'].find_one
143
- recovered = true
144
- rescue ConnectionFailure
145
- end
146
- end
147
-
148
- assert_query_route(@secondary_preferred, :secondary)
149
- assert_query_route(@secondary, :secondary)
150
- assert_query_route(@primary_preferred, :secondary)
151
-
152
- # Restore set
153
- @rs.restart
154
- sleep(1)
155
- @repl_cons.each { |con| con.refresh }
156
- sleep(1)
157
-
158
- # Test that reads are going to the right members
159
- assert_query_route(@primary, :primary)
160
- assert_query_route(@primary_preferred, :primary)
161
- assert_query_route(@secondary, :secondary)
162
- assert_query_route(@secondary_preferred, :secondary)
163
- end
164
-
165
- def test_write_lots_of_data
166
- client = make_connection(:secondary_preferred)
167
- db = client[TEST_DB]
168
- coll = db.collection("test-sets", {:w => 2})
169
-
170
- 6000.times do |n|
171
- coll.save({:a => n})
172
- end
173
-
174
- cursor = coll.find()
175
- cursor.next
176
- cursor.close
177
- end
178
-
179
- private
180
-
181
- def prepare_routing_test
182
- # Setup replica set connections
183
- @primary = make_connection(:primary)
184
- @primary_preferred = make_connection(:primary_preferred)
185
- @secondary = make_connection(:secondary)
186
- @secondary_preferred = make_connection(:secondary_preferred)
187
- @repl_cons = [@primary, @primary_preferred, @secondary, @secondary_preferred]
188
-
189
- @repl_cons.each do |client|
190
- client.stubs(:pinned_pool).returns(nil)
191
- end
192
- end
193
-
194
- def make_connection(mode = :primary, opts = {})
195
- opts.merge!(:read => mode)
196
- opts.merge!(:op_timeout => nil)
197
- client = MongoReplicaSetClient.new(@rs.repl_set_seeds, opts)
198
- authenticate_client(client)
199
- end
200
-
201
- def query_count(connection)
202
- connection['admin'].command({:serverStatus => 1})['opcounters']['query']
203
- end
204
-
205
- def assert_query_route(test_connection, type)
206
- secondary = type == :secondary
207
- authenticate_client(test_connection)
208
- cursor = test_connection[TEST_DB]['test-sets'].find
209
- assert_nothing_raised do
210
- cursor.next
211
- end
212
- pool = cursor.instance_variable_get("@pool")
213
- assert_equal secondary, secondary?(MongoClient.new(pool.host, pool.port))
214
- end
215
-
216
- def secondary?(client)
217
- client['admin'].command(:isMaster => 1)['secondary']
218
- end
219
- end