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,252 +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 GridIOTest < Test::Unit::TestCase
18
-
19
- context "GridIO" do
20
- setup do
21
- @db = standard_connection.db(TEST_DB)
22
- @files = @db.collection('fs.files')
23
- @chunks = @db.collection('fs.chunks')
24
- @chunks.create_index([['files_id', Mongo::ASCENDING], ['n', Mongo::ASCENDING]])
25
- end
26
-
27
- teardown do
28
- @files.remove
29
- @chunks.remove
30
- end
31
-
32
- context "Options" do
33
- setup do
34
- @filename = 'test'
35
- @mode = 'w'
36
- end
37
-
38
- should "set default 255k chunk size" do
39
- file = GridIO.new(@files, @chunks, @filename, @mode)
40
- assert_equal 255 * 1024, file.chunk_size
41
- end
42
-
43
- should "set chunk size" do
44
- file = GridIO.new(@files, @chunks, @filename, @mode, :chunk_size => 1000)
45
- assert_equal 1000, file.chunk_size
46
- end
47
- end
48
-
49
- context "StringIO methods" do
50
- setup do
51
- @filename = 'test'
52
- @mode = 'w'
53
- @data = "012345678\n" * 100000
54
- @file = GridIO.new(@files, @chunks, @filename, @mode)
55
- @file.write(@data)
56
- @file.close
57
- end
58
-
59
- should "read data character by character using" do
60
- bytes = 0
61
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
62
- while file.getc
63
- bytes += 1
64
- end
65
- assert_equal bytes, 1_000_000
66
- end
67
-
68
- should "read length is a length is given" do
69
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
70
- string = file.gets(1000)
71
- assert_equal string.length, 1000
72
- bytes = 0
73
- bytes += string.length
74
- while string = file.gets(1000)
75
- bytes += string.length
76
- end
77
- assert_equal bytes, 1_000_000
78
- end
79
-
80
- should "read to the end of the line by default and assign to $_" do
81
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
82
- string = file.gets
83
- assert_equal 10, string.length
84
- end
85
-
86
- should "read to the end of the file one line at a time" do
87
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
88
- bytes = 0
89
- while string = file.gets
90
- bytes += string.length
91
- end
92
- assert_equal 1_000_000, bytes
93
- end
94
-
95
- should "read to the end of the file one multi-character separator at a time" do
96
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
97
- bytes = 0
98
- while string = file.gets("45")
99
- bytes += string.length
100
- end
101
- assert_equal 1_000_000, bytes
102
- end
103
-
104
- should "read to a given separator" do
105
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
106
- string = file.gets("5")
107
- assert_equal 6, string.length
108
- end
109
-
110
- should "read a multi-character separator" do
111
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
112
- string = file.gets("45")
113
- assert_equal 6, string.length
114
- string = file.gets("45")
115
- assert_equal "678\n012345", string
116
- string = file.gets("\n01")
117
- assert_equal "678\n01", string
118
- end
119
-
120
- should "read a mult-character separator with a length" do
121
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
122
- string = file.gets("45", 3)
123
- assert_equal 3, string.length
124
- end
125
-
126
- should "tell position, eof, and rewind" do
127
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
128
- file.read(1000)
129
- assert_equal 1000, file.pos
130
- assert !file.eof?
131
- file.read
132
- assert file.eof?
133
- file.rewind
134
- assert_equal 0, file.pos
135
- assert_equal 1_000_000, file.read.length
136
- end
137
- end
138
-
139
- context "Writing" do
140
- setup do
141
- @filename = 'test'
142
- @length = 50000
143
- @times = 10
144
- end
145
-
146
- should "correctly write multiple chunks from mutiple writes" do
147
- file = GridIO.new(@files, @chunks, @filename, 'w')
148
-
149
- @times.times do
150
- file.write("1" * @length)
151
- end
152
-
153
- file.close
154
-
155
- file = GridIO.new(@files, @chunks, @filename, 'r')
156
-
157
- total_size = 0
158
- while !file.eof?
159
- total_size += file.read(@length).length
160
- end
161
-
162
- file.close
163
-
164
- assert_equal total_size, @times * @length
165
- end
166
- end
167
-
168
- context "Seeking" do
169
- setup do
170
- @filename = 'test'
171
- @mode = 'w'
172
- @data = "1" * 1024 * 1024
173
- @file = GridIO.new(@files, @chunks, @filename, @mode)
174
- @file.write(@data)
175
- @file.close
176
- end
177
-
178
- should "read all data using read_length and then be able to seek" do
179
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
180
- assert_equal @data, file.read(1024 * 1024)
181
- file.seek(0)
182
- assert_equal @data, file.read
183
- end
184
-
185
- should "read all data using read_all and then be able to seek" do
186
- file = GridIO.new(@files, @chunks, nil, "r", :query => {:_id => @file.files_id})
187
- assert_equal @data, file.read
188
- file.seek(0)
189
- assert_equal @data, file.read
190
- file.seek(1024 * 512)
191
- assert_equal 524288, file.file_position
192
- assert_equal @data.length / 2, file.read.length
193
- assert_equal 1048576, file.file_position
194
- assert_nil file.read
195
- file.seek(1024 * 512)
196
- assert_equal 524288, file.file_position
197
- end
198
-
199
- end
200
-
201
- context "Grid MD5 check" do
202
- should "run in safe mode" do
203
- file = GridIO.new(@files, @chunks, 'smallfile', 'w')
204
- file.write("DATA" * 100)
205
- assert file.close
206
- assert_equal file.server_md5, file.client_md5
207
- end
208
-
209
- should "validate with a large file" do
210
- io = File.open(File.join(TEST_DATA, 'sample_file.pdf'), 'r')
211
- file = GridIO.new(@files, @chunks, 'bigfile', 'w')
212
- file.write(io)
213
- assert file.close
214
- assert_equal file.server_md5, file.client_md5
215
- end
216
-
217
- should "raise an exception when check fails" do
218
- io = File.open(File.join(TEST_DATA, 'sample_file.pdf'), 'r')
219
- @db.stubs(:command).returns({'md5' => '12345'})
220
- file = GridIO.new(@files, @chunks, 'bigfile', 'w')
221
- file.write(io)
222
- assert_raise GridMD5Failure do
223
- assert file.close
224
- end
225
- assert_not_equal file.server_md5, file.client_md5
226
- end
227
- end
228
-
229
- context "Content types" do
230
- if defined?(MIME)
231
- should "determine common content types from the extension" do
232
- file = GridIO.new(@files, @chunks, 'sample.pdf', 'w')
233
- assert_equal 'application/pdf', file.content_type
234
-
235
- file = GridIO.new(@files, @chunks, 'sample.txt', 'w')
236
- assert_equal 'text/plain', file.content_type
237
- end
238
- end
239
-
240
- should "default to binary/octet-stream when type is unknown" do
241
- file = GridIO.new(@files, @chunks, 'sample.l33t', 'w')
242
- assert_equal 'binary/octet-stream', file.content_type
243
- end
244
-
245
- should "use any provided content type by default" do
246
- file = GridIO.new(@files, @chunks, 'sample.l33t', 'w', :content_type => 'image/jpg')
247
- assert_equal 'image/jpg', file.content_type
248
- end
249
- end
250
- end
251
-
252
- end
@@ -1,273 +0,0 @@
1
- # Copyright (C) 2009-2013 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'test_helper'
16
- include Mongo
17
-
18
- def read_and_write_stream(filename, read_length, opts={})
19
- io = File.open(File.join(TEST_DATA, filename), 'r+b')
20
- id = @grid.put(io, opts.merge!(:filename => filename + read_length.to_s))
21
- file = @grid.get(id)
22
- io.rewind
23
- data = io.read
24
- if data.respond_to?(:force_encoding)
25
- data.force_encoding("binary")
26
- end
27
- read_data = ""
28
- while(chunk = file.read(read_length))
29
- read_data << chunk
30
- break if chunk.empty?
31
- end
32
- assert_equal data.length, read_data.length
33
- end
34
-
35
- class GridTest < Test::Unit::TestCase
36
- context "Tests:" do
37
- setup do
38
- @db = standard_connection.db(TEST_DB)
39
- @files = @db.collection('test-fs.files')
40
- @chunks = @db.collection('test-fs.chunks')
41
- end
42
-
43
- teardown do
44
- @files.remove
45
- @chunks.remove
46
- end
47
-
48
- context "A one-chunk grid-stored file" do
49
- setup do
50
- @data = "GRIDDATA" * 5
51
- @grid = Grid.new(@db, 'test-fs')
52
- @id = @grid.put(@data, :filename => 'sample',
53
- :metadata => {'app' => 'photos'})
54
- end
55
-
56
- should "retrieve the file" do
57
- data = @grid.get(@id).data
58
- assert_equal @data, data
59
- end
60
-
61
- end
62
-
63
- context "A basic grid-stored file" do
64
- setup do
65
- @data = "GRIDDATA" * 50000
66
- @grid = Grid.new(@db, 'test-fs')
67
- @id = @grid.put(@data, :filename => 'sample',
68
- :metadata => {'app' => 'photos'})
69
- end
70
-
71
- should "check existence" do
72
- file = @grid.exist?(:filename => 'sample')
73
- assert_equal 'sample', file['filename']
74
- end
75
-
76
- should "return nil if it doesn't exist" do
77
- assert_nil @grid.exist?(:metadata => 'foo')
78
- end
79
-
80
- should "retrieve the stored data" do
81
- data = @grid.get(@id).data
82
- assert_equal @data.length, data.length
83
- end
84
-
85
- should "have a unique index on chunks" do
86
- assert @chunks.index_information['files_id_1_n_1']['unique']
87
- end
88
-
89
- should "store the filename" do
90
- file = @grid.get(@id)
91
- assert_equal 'sample', file.filename
92
- end
93
-
94
- should "store any relevant metadata" do
95
- file = @grid.get(@id)
96
- assert_equal 'photos', file.metadata['app']
97
- end
98
-
99
- should "delete the file and any chunks" do
100
- @grid.delete(@id)
101
- assert_raise GridFileNotFound do
102
- @grid.get(@id)
103
- end
104
- assert_equal nil, @db['test-fs']['chunks'].find_one({:files_id => @id})
105
- end
106
- end
107
-
108
- context "Filename not required" do
109
- setup do
110
- @data = "GRIDDATA" * 50000
111
- @grid = Grid.new(@db, 'test-fs')
112
- @metadata = {'app' => 'photos'}
113
- end
114
-
115
- should "store the file with the old filename api" do
116
- id = @grid.put(@data, :filename => 'sample', :metadata => @metadata)
117
- file = @grid.get(id)
118
- assert_equal 'sample', file.filename
119
- assert_equal @metadata, file.metadata
120
- end
121
-
122
- should "store without a filename" do
123
- id = @grid.put(@data, :metadata => @metadata)
124
- file = @grid.get(id)
125
- assert_nil file.filename
126
- file_doc = @files.find_one({'_id' => id})
127
- assert !file_doc.has_key?('filename')
128
- assert_equal @metadata, file.metadata
129
- end
130
-
131
- should "store with filename and metadata with the new api" do
132
- id = @grid.put(@data, :filename => 'sample', :metadata => @metadata)
133
- file = @grid.get(id)
134
- assert_equal 'sample', file.filename
135
- assert_equal @metadata, file.metadata
136
- end
137
- end
138
-
139
- context "Writing arbitrary data fields" do
140
- setup do
141
- @data = "GRIDDATA" * 50000
142
- @grid = Grid.new(@db, 'test-fs')
143
- end
144
-
145
- should "write random keys to the files collection" do
146
- id = @grid.put(@data, :phrases => ["blimey", "ahoy!"])
147
- file = @grid.get(id)
148
-
149
- assert_equal ["blimey", "ahoy!"], file['phrases']
150
- end
151
-
152
- should "ignore special keys" do
153
- id = silently do
154
- @grid.put(@data, :file_length => 100, :phrase => "blimey")
155
- end
156
- file = @grid.get(id)
157
-
158
- assert_equal "blimey", file['phrase']
159
- assert_equal 400_000, file.file_length
160
- end
161
- end
162
-
163
- context "Storing data with a length of zero" do
164
- setup do
165
- @grid = Grid.new(@db, 'test-fs')
166
- @id = silently do
167
- @grid.put('', :filename => 'sample', :metadata => {'app' => 'photos'})
168
- end
169
- end
170
-
171
- should "return the zero length" do
172
- data = @grid.get(@id)
173
- assert_equal 0, data.read.length
174
- end
175
- end
176
-
177
- context "Grid streaming: " do
178
- setup do
179
- @grid = Grid.new(@db, 'test-fs')
180
- filename = 'sample_data'
181
- @io = File.open(File.join(TEST_DATA, filename), 'r')
182
- id = @grid.put(@io, :filename => filename)
183
- @file = @grid.get(id)
184
- @io.rewind
185
- @data = @io.read
186
- if @data.respond_to?(:force_encoding)
187
- @data.force_encoding("binary")
188
- end
189
- end
190
-
191
- should "be equal in length" do
192
- @io.rewind
193
- assert_equal @io.read.length, @file.read.length
194
- end
195
-
196
- should "read the file" do
197
- read_data = ""
198
- @file.each do |chunk|
199
- read_data << chunk
200
- end
201
- assert_equal @data.length, read_data.length
202
- end
203
-
204
- should "read the file if no block is given" do
205
- read_data = @file.each
206
- assert_equal @data.length, read_data.length
207
- end
208
- end
209
-
210
- context "Grid streaming an empty file: " do
211
- setup do
212
- @grid = Grid.new(@db, 'test-fs')
213
- filename = 'empty_data'
214
- @io = File.open(File.join(TEST_DATA, filename), 'r')
215
- id = silently do
216
- @grid.put(@io, :filename => filename)
217
- end
218
- @file = @grid.get(id)
219
- @io.rewind
220
- @data = @io.read
221
- if @data.respond_to?(:force_encoding)
222
- @data.force_encoding("binary")
223
- end
224
- end
225
-
226
- should "be equal in length" do
227
- @io.rewind
228
- assert_equal @io.read.length, @file.read.length
229
- end
230
-
231
- should "read the file" do
232
- read_data = ""
233
- @file.each do |chunk|
234
- read_data << chunk
235
- end
236
- assert_equal @data.length, read_data.length
237
- end
238
-
239
- should "read the file if no block is given" do
240
- read_data = @file.each
241
- assert_equal @data.length, read_data.length
242
- end
243
- end
244
-
245
- context "Streaming: " do || {}
246
- setup do
247
- @grid = Grid.new(@db, 'test-fs')
248
- end
249
-
250
- should "put and get a small io object with a small chunk size" do
251
- read_and_write_stream('small_data.txt', 1, :chunk_size => 2)
252
- end
253
-
254
- should "put and get an empty io object" do
255
- silently do
256
- read_and_write_stream('empty_data', 1)
257
- end
258
- end
259
-
260
- should "put and get a small io object" do
261
- read_and_write_stream('small_data.txt', 1)
262
- end
263
-
264
- should "put and get a large io object if reading less than the chunk size" do
265
- read_and_write_stream('sample_data', 255 * 1024)
266
- end
267
-
268
- should "put and get a large io object if reading more than the chunk size" do
269
- read_and_write_stream('sample_data', 300 * 1024)
270
- end
271
- end
272
- end
273
- end
@@ -1,136 +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 PoolTest < Test::Unit::TestCase
18
- include Mongo
19
-
20
- def setup
21
- @client ||= standard_connection({:pool_size => 15, :pool_timeout => 5})
22
- @db = @client.db(TEST_DB)
23
- @collection = @db.collection("pool_test")
24
- end
25
-
26
- def test_pool_affinity
27
- pool = Pool.new(@client, TEST_HOST, TEST_PORT, :size => 5)
28
-
29
- threads = []
30
- 10.times do
31
- threads << Thread.new do
32
- original_socket = pool.checkout
33
- pool.checkin(original_socket)
34
- 500.times do
35
- socket = pool.checkout
36
- assert_equal original_socket, socket
37
- pool.checkin(socket)
38
- end
39
- end
40
- end
41
-
42
- threads.each { |t| t.join }
43
- end
44
-
45
- def test_pool_affinity_max_size
46
- client = standard_connection({:pool_size => 15, :pool_timeout => 5,
47
- :op_timeout => nil})
48
- coll = client[TEST_DB]['pool_test']
49
- docs = []
50
- 8000.times {|x| docs << {:value => x}}
51
- coll.insert(docs)
52
-
53
- threads = []
54
- threads << Thread.new do
55
- coll.find({"value" => {"$lt" => 100}}).each {|e| e}
56
- Thread.pass
57
- sleep(0.125)
58
- coll.find({"value" => {"$gt" => 100}}).each {|e| e}
59
- end
60
- threads << Thread.new do
61
- coll.find({'$where' => "function() {for(i=0;i<500;i++) {this.value};}"}).each {|e| e}
62
- end
63
- threads.each(&:join)
64
- end
65
-
66
- def test_auth_network_error
67
- # Make sure there's no semaphore leak if we get a network error
68
- # when authenticating a new socket with cached credentials.
69
-
70
- # Get a client with one socket so we detect if it's leaked.
71
- client = MongoClient.new(TEST_HOST, TEST_PORT, :pool_size => 1, :pool_timeout => 1)
72
- assert_equal 1, client.pool_size
73
-
74
- # Set up the client with a pool
75
- client[TEST_DB].command(:ping => 1)
76
-
77
- # Close the one socket in the pool
78
- pool = client.primary_pool
79
- socket = pool.instance_variable_get(:@sockets).first
80
- socket.close
81
-
82
- # Simulate an authenticate() call on a different socket.
83
- # Cache the creds on the client.
84
- creds = {
85
- :db_name => TEST_DB,
86
- :username => TEST_USER,
87
- :password => TEST_USER_PWD,
88
- :source => TEST_DB,
89
- :extra => {}
90
- }
91
- client.auths << creds
92
-
93
- # The client authenticates its socket with the
94
- # new credential, but gets a socket.error.
95
- client[TEST_DB]['ruby-test'].find_one
96
-
97
- # # No semaphore leak, the pool is allowed to make a new socket.
98
- assert_equal 1, pool.instance_variable_get(:@sockets).size
99
- end
100
-
101
- def test_socket_cleanup
102
- # Get a client with one socket so we detect if it's leaked.
103
- client = MongoClient.new(TEST_HOST, TEST_PORT, :pool_size => 1, :pool_timeout => 1)
104
- assert_equal 1, client.pool_size
105
-
106
- # Set up the client with a pool
107
- client[TEST_DB].command(:ping => 1)
108
-
109
- # Simulate an authenticate() call on a different socket.
110
- # Cache the creds on the client.
111
- creds = {
112
- :db_name => TEST_DB,
113
- :username => TEST_USER,
114
- :password => TEST_USER_PWD,
115
- :source => TEST_DB,
116
- :extra => {}
117
- }
118
- client.auths << creds
119
-
120
- # Mock the socket to raise a ConnectionFailure when applying auths
121
- pool = client.primary_pool
122
- socket = pool.instance_variable_get(:@sockets).first
123
- socket.expects(:send).raises(ConnectionFailure)
124
-
125
- # Checkout a socket from the pool to force it to get a new socket
126
- pool.checkout
127
- new_socket = pool.instance_variable_get(:@sockets).first
128
-
129
- # Make sure the pool is cleaned up properly
130
- assert_not_equal socket, new_socket
131
- assert_equal 1, pool.instance_variable_get(:@sockets).size
132
- assert_equal 1, pool.instance_variable_get(:@thread_ids_to_sockets).size
133
- assert !pool.instance_variable_get(:@checked_out).include?(socket)
134
- assert !pool.instance_variable_get(:@sockets).include?(socket)
135
- end
136
- end