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,138 +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 ReplicaSetConnectionTest < Test::Unit::TestCase
18
-
19
- def setup
20
- ensure_cluster(:rs)
21
- end
22
-
23
- def test_connect_with_deprecated_multi
24
- silently do
25
- @connection = Connection.multi(@rs.repl_set_seeds_old, :name => @rs.repl_set_name)
26
- end
27
- assert !@connection.nil?
28
- assert @connection.connected?
29
- end
30
-
31
- def test_connect_bad_name
32
- assert_raise_error(ReplicaSetConnectionError, "-wrong") do
33
- @connection = ReplSetConnection.new(@rs.repl_set_seeds, :safe => true, :name => @rs.repl_set_name + "-wrong")
34
- end
35
- end
36
-
37
- def test_connect_with_first_secondary_node_terminated
38
- @rs.secondaries.first.stop
39
-
40
- rescue_connection_failure do
41
- @connection = ReplSetConnection.new @rs.repl_set_seeds
42
- end
43
- assert @connection.connected?
44
- end
45
-
46
- def test_connect_with_last_secondary_node_terminated
47
- @rs.secondaries.last.stop
48
-
49
- rescue_connection_failure do
50
- @connection = ReplSetConnection.new @rs.repl_set_seeds
51
- end
52
- assert @connection.connected?
53
- end
54
-
55
- def test_connect_with_connection_string
56
- @connection = Connection.from_uri("mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name}")
57
- assert !@connection.nil?
58
- assert @connection.connected?
59
- end
60
-
61
- def test_connect_with_connection_string_in_env_var
62
- uri = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name}"
63
- with_preserved_env_uri(uri) do
64
- @connection = ReplSetConnection.new
65
- assert !@connection.nil?
66
- assert_equal 3, @connection.seeds.length
67
- assert_equal @rs.replicas[0].host, @connection.seeds[0][0]
68
- assert_equal @rs.replicas[1].host, @connection.seeds[1][0]
69
- assert_equal @rs.replicas[2].host, @connection.seeds[2][0]
70
- assert_equal @rs.replicas[0].port, @connection.seeds[0][1]
71
- assert_equal @rs.replicas[1].port, @connection.seeds[1][1]
72
- assert_equal @rs.replicas[2].port, @connection.seeds[2][1]
73
- assert_equal @rs.repl_set_name, @connection.replica_set_name
74
- assert @connection.connected?
75
- end
76
- end
77
-
78
- def test_connect_with_connection_string_in_implicit_mongodb_uri
79
- uri = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name}"
80
- with_preserved_env_uri(uri) do
81
- @connection = Connection.from_uri
82
- assert !@connection.nil?
83
- assert_equal 3, @connection.seeds.length
84
- assert_equal @rs.replicas[0].host, @connection.seeds[0][0]
85
- assert_equal @rs.replicas[1].host, @connection.seeds[1][0]
86
- assert_equal @rs.replicas[2].host, @connection.seeds[2][0]
87
- assert_equal @rs.replicas[0].port, @connection.seeds[0][1]
88
- assert_equal @rs.replicas[1].port, @connection.seeds[1][1]
89
- assert_equal @rs.replicas[2].port, @connection.seeds[2][1]
90
- assert_equal @rs.repl_set_name, @connection.replica_set_name
91
- assert @connection.connected?
92
- end
93
- end
94
-
95
- def test_connect_with_new_seed_format
96
- @connection = ReplSetConnection.new @rs.repl_set_seeds
97
- assert @connection.connected?
98
- end
99
-
100
- def test_connect_with_old_seed_format
101
- silently do
102
- @connection = ReplSetConnection.new(@rs.repl_set_seeds_old)
103
- end
104
- assert @connection.connected?
105
- end
106
-
107
- def test_connect_with_full_connection_string
108
- @connection = Connection.from_uri("mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name};safe=true;w=2;fsync=true;slaveok=true")
109
- assert !@connection.nil?
110
- assert @connection.connected?
111
- assert_equal 2, @connection.write_concern[:w]
112
- assert @connection.write_concern[:fsync]
113
- assert @connection.read_pool
114
- end
115
-
116
- def test_connect_with_full_connection_string_in_env_var
117
- uri = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name};safe=true;w=2;fsync=true;slaveok=true"
118
- with_preserved_env_uri(uri) do
119
- @connection = ReplSetConnection.new
120
- assert !@connection.nil?
121
- assert @connection.connected?
122
- assert_equal 2, @connection.write_concern[:w]
123
- assert @connection.write_concern[:fsync]
124
- assert @connection.read_pool
125
- end
126
- end
127
-
128
- def test_connect_options_override_env_var
129
- uri = "mongodb://#{@rs.repl_set_seeds_uri}?replicaset=#{@rs.repl_set_name};safe=true;w=2;fsync=true;slaveok=true"
130
- with_preserved_env_uri(uri) do
131
- @connection = ReplSetConnection.new({:safe => {:w => 1}})
132
- assert !@connection.nil?
133
- assert @connection.connected?
134
- assert_equal 1, @connection.write_concern[:w]
135
- end
136
- end
137
-
138
- end
@@ -1,66 +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 ReplicaSetCountTest < Test::Unit::TestCase
18
-
19
- def setup
20
- ensure_cluster(:rs)
21
- @client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :read => :primary_preferred, :op_timeout => TEST_OP_TIMEOUT)
22
- authenticate_client(@client)
23
- assert @client.primary_pool
24
- @primary = MongoClient.new(@client.primary_pool.host, @client.primary_pool.port)
25
- authenticate_client(@primary)
26
- @db = @client.db(TEST_DB)
27
- @db.drop_collection("test-sets")
28
- @coll = @db.collection("test-sets")
29
- end
30
-
31
- def teardown
32
- @client.close if @conn
33
- end
34
-
35
- def test_correct_count_after_insertion_reconnect
36
- @coll.insert({:a => 20}, :w => 3, :wtimeout => 10000)
37
- assert_equal 1, @coll.count
38
-
39
- # Kill the current master node
40
- @rs.primary.stop
41
-
42
- rescue_connection_failure do
43
- @coll.insert({:a => 30})
44
- end
45
-
46
- @coll.insert({:a => 40})
47
- assert_equal 3, @coll.count, "Second count failed"
48
- end
49
-
50
- def test_count_command_sent_to_primary
51
- @coll.insert({:a => 20}, :w => 3, :wtimeout => 10000)
52
- count_before = @primary['admin'].command({:serverStatus => 1})['opcounters']['command']
53
- assert_equal 1, @coll.count
54
- count_after = @primary['admin'].command({:serverStatus => 1})['opcounters']['command']
55
- assert_equal 2, count_after - count_before
56
- end
57
-
58
- def test_count_with_read
59
- @coll.insert({:a => 20}, :w => 3, :wtimeout => 10000)
60
- count_before = @primary['admin'].command({:serverStatus => 1})['opcounters']['command']
61
- assert_equal 1, @coll.count(:read => :secondary)
62
- assert_equal 1, @coll.find({}, :read => :secondary).count()
63
- count_after = @primary['admin'].command({:serverStatus => 1})['opcounters']['command']
64
- assert_equal 1, count_after - count_before
65
- end
66
- end
@@ -1,220 +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 ReplicaSetCursorTest < Test::Unit::TestCase
18
-
19
- def setup
20
- ensure_cluster(:rs)
21
- end
22
-
23
- def test_get_more_primary
24
- setup_client(:primary)
25
- cursor_get_more_test(:primary)
26
- end
27
-
28
- def test_get_more_secondary
29
- setup_client(:secondary)
30
- cursor_get_more_test(:secondary)
31
- end
32
-
33
- def test_close_primary
34
- setup_client(:primary)
35
- kill_cursor_test(:primary)
36
- end
37
-
38
- def test_close_secondary
39
- setup_client(:secondary)
40
- kill_cursor_test(:secondary)
41
- end
42
-
43
- def test_cursors_get_closed
44
- setup_client
45
- assert_cursors_on_members
46
- end
47
-
48
- def test_cursors_get_closed_secondary
49
- setup_client(:secondary)
50
- assert_cursors_on_members(:secondary)
51
- end
52
-
53
- def test_cursors_get_closed_secondary_query
54
- setup_client(:primary)
55
- assert_cursors_on_members(:secondary)
56
- end
57
-
58
- def test_intervening_query_secondary
59
- setup_client(:primary)
60
- refresh_while_iterating(:secondary)
61
- end
62
-
63
- private
64
-
65
- def setup_client(read=:primary)
66
- route_read ||= read
67
- # Setup ReplicaSet Connection
68
- @client = MongoReplicaSetClient.new(@rs.repl_set_seeds, :read => read, :op_timeout => TEST_OP_TIMEOUT)
69
- authenticate_client(@client)
70
-
71
- @db = @client.db(TEST_DB)
72
- @db.drop_collection("cursor_tests")
73
- @coll = @db.collection("cursor_tests")
74
- insert_docs
75
-
76
- # Setup Direct Connections
77
- @primary = Mongo::MongoClient.new(*@client.manager.primary)
78
- authenticate_client(@primary)
79
- end
80
-
81
- def insert_docs
82
- @n_docs = 102 # batch size is 101
83
- @n_docs.times do |i|
84
- @coll.insert({ "x" => i }, :w => 3)
85
- end
86
- end
87
-
88
- def set_read_client_and_tag(read)
89
- read_opts = {:read => read}
90
- @tag = (0...3).map{|i|i.to_s}.detect do |tag|
91
- begin
92
- read_opts[:tag_sets] = [{:node => tag}] unless read == :primary
93
- cursor = @coll.find({}, read_opts)
94
- cursor.next
95
- pool = cursor.instance_variable_get(:@pool)
96
- cursor.close
97
- @read = Mongo::MongoClient.new(pool.host, pool.port, :slave_ok => true)
98
- authenticate_client(@read)
99
- tag
100
- rescue Mongo::ConnectionFailure
101
- false
102
- end
103
- end
104
- end
105
-
106
- def route_query(read)
107
- read_opts = {:read => read}
108
- read_opts[:tag_sets] = [{:node => @tag}] unless read == :primary
109
- object_id = BSON::ObjectId.new
110
- read_opts[:comment] = object_id
111
-
112
- # set profiling level to 2 on client and member to which the query will be routed
113
- @client.db(TEST_DB).profiling_level = :all
114
- @client.secondaries.each do |node|
115
- node = Mongo::MongoClient.new(node[0], node[1], :slave_ok => true)
116
- authenticate_client(node)
117
- node.db(TEST_DB).profiling_level = :all
118
- end
119
-
120
- @cursor = @coll.find({}, read_opts)
121
- @cursor.next
122
-
123
- # on client and other members set profiling level to 0
124
- @client.db(TEST_DB).profiling_level = :off
125
- @client.secondaries.each do |node|
126
- node = Mongo::MongoClient.new(node[0], node[1], :slave_ok => true)
127
- authenticate_client(node)
128
- node.db(TEST_DB).profiling_level = :off
129
- end
130
- # do a query on system.profile of the reader to see if it was used for the query
131
- profiled_queries = @read.db(TEST_DB).collection('system.profile').find({
132
- 'ns' => "#{TEST_DB}.cursor_tests", "query.$comment" => object_id })
133
-
134
- assert_equal 1, profiled_queries.count
135
- end
136
-
137
- # batch from send_initial_query is 101 documents
138
- # check that you get n_docs back from the query, with the same port
139
- def cursor_get_more_test(read=:primary)
140
- return if subject_to_server_4754?(@client)
141
- set_read_client_and_tag(read)
142
- 10.times do
143
- # assert that the query went to the correct member
144
- route_query(read)
145
- docs_count = 1
146
- port = @cursor.instance_variable_get(:@pool).port
147
- assert @cursor.alive?
148
- while @cursor.has_next?
149
- docs_count += 1
150
- @cursor.next
151
- assert_equal port, @cursor.instance_variable_get(:@pool).port
152
- end
153
- assert !@cursor.alive?
154
- assert_equal @n_docs, docs_count
155
- @cursor.close #cursor is already closed
156
- end
157
- end
158
-
159
- # batch from get_more can be huge, so close after send_initial_query
160
- def kill_cursor_test(read=:primary)
161
- return if subject_to_server_4754?(@client)
162
- set_read_client_and_tag(read)
163
- 10.times do
164
- # assert that the query went to the correct member
165
- route_query(read)
166
- cursor_id = @cursor.cursor_id
167
- cursor_clone = @cursor.clone
168
- assert_equal cursor_id, cursor_clone.cursor_id
169
- assert @cursor.instance_variable_get(:@pool)
170
- # .next was called once already and leave one for get more
171
- (@n_docs-2).times { @cursor.next }
172
- @cursor.close
173
- # an exception confirms the cursor has indeed been closed
174
- assert_raise Mongo::OperationFailure do
175
- cursor_clone.next
176
- end
177
- end
178
- end
179
-
180
- def assert_cursors_on_members(read=:primary)
181
- return if subject_to_server_4754?(@client)
182
- set_read_client_and_tag(read)
183
- # assert that the query went to the correct member
184
- route_query(read)
185
- cursor_id = @cursor.cursor_id
186
- cursor_clone = @cursor.clone
187
- assert_equal cursor_id, cursor_clone.cursor_id
188
- assert @cursor.instance_variable_get(:@pool)
189
- port = @cursor.instance_variable_get(:@pool).port
190
- while @cursor.has_next?
191
- @cursor.next
192
- assert_equal port, @cursor.instance_variable_get(:@pool).port
193
- end
194
- # an exception confirms the cursor has indeed been closed after query
195
- assert_raise Mongo::OperationFailure do
196
- cursor_clone.next
197
- end
198
- end
199
-
200
- def refresh_while_iterating(read)
201
- set_read_client_and_tag(read)
202
-
203
- read_opts = {:read => read}
204
- read_opts[:tag_sets] = [{:node => @tag}]
205
- read_opts[:batch_size] = 2
206
- cursor = @coll.find({}, read_opts)
207
-
208
- 2.times { cursor.next }
209
- port = cursor.instance_variable_get(:@pool).port
210
- host = cursor.instance_variable_get(:@pool).host
211
- # Refresh connection
212
- @client.refresh
213
- assert_nothing_raised do
214
- cursor.next
215
- end
216
-
217
- assert_equal port, cursor.instance_variable_get(:@pool).port
218
- assert_equal host, cursor.instance_variable_get(:@pool).host
219
- end
220
- end
@@ -1,157 +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 ReplicaSetInsertTest < Test::Unit::TestCase
18
-
19
- def setup
20
- ensure_cluster(:rs)
21
- @client = MongoReplicaSetClient.from_uri(@uri, :op_timeout => TEST_OP_TIMEOUT)
22
- @version = @client.server_version
23
- @db = @client.db(TEST_DB)
24
- @db.drop_collection("test-sets")
25
- @coll = @db.collection("test-sets")
26
- end
27
-
28
- def teardown
29
- @client.close if @conn
30
- end
31
-
32
- def test_insert
33
- @coll.save({:a => 20}, :w => 3)
34
-
35
- @rs.primary.stop
36
-
37
- rescue_connection_failure do
38
- @coll.save({:a => 30}, :w => 1)
39
- end
40
-
41
- @coll.save({:a => 40}, :w => 1)
42
- @coll.save({:a => 50}, :w => 1)
43
- @coll.save({:a => 60}, :w => 1)
44
- @coll.save({:a => 70}, :w => 1)
45
-
46
- # Restart the old master and wait for sync
47
- @rs.start
48
- sleep(5)
49
- results = []
50
-
51
- rescue_connection_failure do
52
- @coll.find.each {|r| results << r}
53
- [20, 30, 40, 50, 60, 70].each do |a|
54
- assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a}"
55
- end
56
- end
57
-
58
- @coll.save({:a => 80}, :w => 3)
59
- @coll.find.each {|r| results << r}
60
- [20, 30, 40, 50, 60, 70, 80].each do |a|
61
- assert results.any? {|r| r['a'] == a}, "Could not find record for a => #{a} on second find"
62
- end
63
- end
64
-
65
- context "Bulk API CollectionView" do
66
- setup do
67
- setup
68
- end
69
-
70
- should "handle error with deferred write concern error - spec Merging Results" do
71
- if @client.wire_version_feature?(MongoClient::MONGODB_3_0)
72
- @coll.remove
73
- @coll.ensure_index(BSON::OrderedHash[:a, Mongo::ASCENDING], {:unique => true})
74
- bulk = @coll.initialize_ordered_bulk_op
75
- bulk.insert({:a => 1})
76
- bulk.find({:a => 2}).upsert.update({'$set' => {:a => 2}})
77
- bulk.insert({:a => 1})
78
- secondary = MongoClient.new(@rs.secondaries.first.host, @rs.secondaries.first.port)
79
- cmd = BSON::OrderedHash[:configureFailPoint, 'rsSyncApplyStop', :mode, 'alwaysOn']
80
- secondary['admin'].command(cmd)
81
- ex = assert_raise BulkWriteError do
82
- bulk.execute({:w => @rs.servers.size, :wtimeout => 1})
83
- end
84
- cmd = BSON::OrderedHash[:configureFailPoint, 'rsSyncApplyStop', :mode, 'off']
85
- secondary['admin'].command(cmd)
86
- else
87
- with_write_commands_and_operations(@db.connection) do |wire_version|
88
- @coll.remove
89
- @coll.ensure_index(BSON::OrderedHash[:a, Mongo::ASCENDING], {:unique => true})
90
- bulk = @coll.initialize_ordered_bulk_op
91
- bulk.insert({:a => 1})
92
- bulk.find({:a => 2}).upsert.update({'$set' => {:a => 2}})
93
- bulk.insert({:a => 1})
94
- ex = assert_raise BulkWriteError do
95
- bulk.execute({:w => 5, :wtimeout => 1})
96
- end
97
- end
98
- end
99
- result = ex.result
100
- assert_match_document(
101
- {
102
- "ok" => 1,
103
- "n" => 2,
104
- "writeErrors" => [
105
- {
106
- "index" => 2,
107
- "code" => 11000,
108
- "errmsg" => /duplicate key error/,
109
- }
110
- ],
111
- "writeConcernError" => [
112
- {
113
- "errmsg" => /waiting for replication timed out|timed out waiting for slaves|timeout/,
114
- "code" => 64,
115
- "errInfo" => {"wtimeout" => true},
116
- "index" => 0
117
- },
118
- {
119
- "errmsg" => /waiting for replication timed out|timed out waiting for slaves|timeout/,
120
- "code" => 64,
121
- "errInfo" => {"wtimeout" => true},
122
- "index" => 1
123
- }
124
- ],
125
- "code" => 65,
126
- "errmsg" => "batch item errors occurred",
127
- "nInserted" => 1
128
- }, result)
129
- assert_equal 2, @coll.find.to_a.size
130
- end
131
-
132
- should "handle unordered errors with deferred write concern error - spec Merging Results" do # TODO - spec review
133
- with_write_commands_and_operations(@db.connection) do |wire_version|
134
- @coll.remove
135
- @coll.ensure_index(BSON::OrderedHash[:a, Mongo::ASCENDING], {:unique => true})
136
- bulk = @coll.initialize_unordered_bulk_op
137
- bulk.insert({:a => 1})
138
- bulk.find({:a => 2}).upsert.update({'$set' => {:a => 1}})
139
- bulk.insert({:a => 3})
140
- ex = assert_raise BulkWriteError do
141
- bulk.execute({:w => 5, :wtimeout => 1})
142
- end
143
- result = ex.result # unordered varies, don't use assert_bulk_exception
144
- assert_equal(1, result["ok"], "wire_version:#{wire_version}")
145
- assert_equal(2, result["n"], "wire_version:#{wire_version}")
146
- assert(result["nInserted"] >= 1, "wire_version:#{wire_version}")
147
- assert_equal(65, result["code"], "wire_version:#{wire_version}")
148
- assert_equal("batch item errors occurred", result["errmsg"], "wire_version:#{wire_version}")
149
- assert(result["writeErrors"].size >= 1, "wire_version:#{wire_version}")
150
- assert(result["writeConcernError"].size >= 1, "wire_version:#{wire_version}") if wire_version >= 2
151
- assert(@coll.size >= 1, "wire_version:#{wire_version}")
152
- end
153
- end
154
-
155
- end
156
-
157
- end