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,160 +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 MongoConfig < Test::Unit::TestCase
18
-
19
- def startup
20
- @sys_proc = nil
21
- end
22
-
23
- def shutdown
24
- @sys_proc.stop if @sys_proc && @sys_proc.running?
25
- end
26
-
27
- test "config defaults" do
28
- [ Mongo::Config::DEFAULT_BASE_OPTS,
29
- Mongo::Config::DEFAULT_REPLICA_SET,
30
- Mongo::Config::DEFAULT_SHARDED_SIMPLE,
31
- Mongo::Config::DEFAULT_SHARDED_REPLICA
32
- ].each do |params|
33
- config = Mongo::Config.cluster(params)
34
- assert(config.size > 0)
35
- end
36
- end
37
-
38
- test "get available port" do
39
- assert_not_nil(Mongo::Config.get_available_port)
40
- end
41
-
42
- test "SysProc start" do
43
- cmd = "true"
44
- @sys_proc = Mongo::Config::SysProc.new(cmd)
45
- assert_equal(cmd, @sys_proc.cmd)
46
- assert_nil(@sys_proc.pid)
47
- start_and_assert_running?(@sys_proc)
48
- end
49
-
50
- test "SysProc wait" do
51
- @sys_proc = Mongo::Config::SysProc.new("true")
52
- start_and_assert_running?(@sys_proc)
53
- assert(@sys_proc.running?)
54
- @sys_proc.wait
55
- assert(!@sys_proc.running?)
56
- end
57
-
58
- test "SysProc kill" do
59
- @sys_proc = Mongo::Config::SysProc.new("true")
60
- start_and_assert_running?(@sys_proc)
61
- @sys_proc.kill
62
- @sys_proc.wait
63
- assert(!@sys_proc.running?)
64
- end
65
-
66
- test "SysProc stop" do
67
- @sys_proc = Mongo::Config::SysProc.new("true")
68
- start_and_assert_running?(@sys_proc)
69
- @sys_proc.stop
70
- assert(!@sys_proc.running?)
71
- end
72
-
73
- test "SysProc zombie respawn" do
74
- @sys_proc = Mongo::Config::SysProc.new("true")
75
- start_and_assert_running?(@sys_proc)
76
- prev_pid = @sys_proc.pid
77
- @sys_proc.kill
78
- # don't wait, leaving a zombie
79
- assert(@sys_proc.running?)
80
- start_and_assert_running?(@sys_proc)
81
- assert(prev_pid && @sys_proc.pid && prev_pid != @sys_proc.pid, 'SysProc#start should spawn a new process after a zombie')
82
- @sys_proc.stop
83
- assert(!@sys_proc.running?)
84
- end
85
-
86
- test "Server" do
87
- server = Mongo::Config::Server.new('a cmd', 'host', 1234)
88
- assert_equal('a cmd', server.cmd)
89
- assert_equal('host', server.host)
90
- assert_equal(1234, server.port)
91
- end
92
-
93
- test "DbServer" do
94
- config = Mongo::Config::DEFAULT_BASE_OPTS
95
- server = Mongo::Config::DbServer.new(config)
96
- assert_equal(config, server.config)
97
- assert_equal("mongod --dbpath data --logpath data/log", server.cmd)
98
- assert_equal(config[:host], server.host)
99
- assert_equal(config[:port], server.port)
100
- end
101
-
102
- def cluster_test(opts)
103
- #debug 1, opts.inspect
104
- config = Mongo::Config.cluster(opts)
105
- #debug 1, config.inspect
106
- manager = Mongo::Config::ClusterManager.new(config)
107
- assert_equal(config, manager.config)
108
- manager.start
109
- yield manager
110
- manager.stop
111
- manager.servers.each{|s| assert(!s.running?)}
112
- manager.clobber
113
- end
114
-
115
- test "cluster manager base" do
116
- cluster_test(Mongo::Config::DEFAULT_BASE_OPTS) do |manager|
117
-
118
- end
119
- end
120
-
121
- test "cluster manager replica set" do
122
- cluster_test(Mongo::Config::DEFAULT_REPLICA_SET) do |manager|
123
- servers = manager.servers
124
- servers.each do |server|
125
- assert_not_nil(Mongo::MongoClient.new(server.host, server.port))
126
- assert_match(/oplogSize/, server.cmd, '--oplogSize option should be specified')
127
- assert_match(/smallfiles/, server.cmd, '--smallfiles option should be specified')
128
- assert_no_match(/nojournal/, server.cmd, '--nojournal option should not be specified')
129
- assert_match(/noprealloc/, server.cmd, '--noprealloc option should be specified')
130
- end
131
- end
132
- end
133
-
134
- test "cluster manager sharded simple" do
135
- cluster_test(Mongo::Config::DEFAULT_SHARDED_SIMPLE) do |manager|
136
- servers = manager.shards + manager.configs
137
- servers.each do |server|
138
- assert_not_nil(Mongo::MongoClient.new(server.host, server.port))
139
- assert_match(/oplogSize/, server.cmd, '--oplogSize option should be specified')
140
- assert_match(/smallfiles/, server.cmd, '--smallfiles option should be specified')
141
- assert_no_match(/nojournal/, server.cmd, '--nojournal option should not be specified')
142
- assert_match(/noprealloc/, server.cmd, '--noprealloc option should be specified')
143
- end
144
- end
145
- end
146
-
147
- test "cluster manager sharded replica" do
148
- #cluster_test(Mongo::Config::DEFAULT_SHARDED_REPLICA) # not yet supported by ClusterManager
149
- end
150
-
151
- private
152
-
153
- def start_and_assert_running?(sys_proc)
154
- assert_not_nil(sys_proc.start(0))
155
- assert_not_nil(sys_proc.pid)
156
- assert(sys_proc.running?)
157
- end
158
-
159
- end
160
-
@@ -1,381 +0,0 @@
1
- # Copyright (C) 2009-2013 MongoDB, Inc.
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
-
15
- require 'test_helper'
16
- include Mongo
17
-
18
- class ClientUnitTest < Test::Unit::TestCase
19
- context "Mongo::MongoClient initialization " do
20
- context "given a single node" do
21
- setup do
22
- @client = MongoClient.new('localhost', 27017, :connect => false)
23
- TCPSocket.stubs(:new).returns(new_mock_socket)
24
-
25
- admin_db = new_mock_db
26
- admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1})
27
- @client.expects(:[]).with('admin').returns(admin_db)
28
- @client.connect
29
- end
30
-
31
- should "gle writes by default" do
32
- assert_equal 1, @client.write_concern[:w]
33
- end
34
-
35
- should "set localhost and port to master" do
36
- assert_equal 'localhost', @client.primary_pool.host
37
- assert_equal 27017, @client.primary_pool.port
38
- end
39
-
40
- should "set connection pool to 1" do
41
- assert_equal 1, @client.primary_pool.size
42
- end
43
-
44
- should "set op timeout to default" do
45
- assert_equal Mongo::MongoClient::DEFAULT_OP_TIMEOUT, @client.op_timeout
46
- end
47
-
48
- should "default slave_ok to false" do
49
- assert !@client.slave_ok?
50
- end
51
-
52
- should "not raise error if no host or port is supplied" do
53
- assert_nothing_raised do
54
- MongoClient.new(:w => 1, :connect => false)
55
- end
56
- assert_nothing_raised do
57
- MongoClient.new('localhost', :w => 1, :connect=> false)
58
- end
59
- end
60
-
61
- should "warn if invalid options are specified" do
62
- client = MongoClient.allocate
63
- opts = {:connect => false}
64
-
65
- MongoReplicaSetClient::REPL_SET_OPTS.each do |opt|
66
- client.expects(:warn).with("#{opt} is not a valid option for #{client.class}")
67
- opts[opt] = true
68
- end
69
-
70
- args = ['localhost', 27017, opts]
71
- client.send(:initialize, *args)
72
- end
73
-
74
- context 'specifying nil op timeout explicitly' do
75
- setup do
76
- @client = MongoClient.new('localhost', 27017, :connect => false, :op_timeout => nil)
77
- end
78
-
79
- should 'set op timeout to nil' do
80
- assert_equal nil, @client.op_timeout
81
- end
82
- end
83
-
84
- context 'specifying a different op timeout than default' do
85
- setup do
86
- @client = MongoClient.new('localhost', 27017, :connect => false, :op_timeout => 50)
87
- end
88
-
89
- should 'set op timeout to the specified value' do
90
- assert_equal 50, @client.op_timeout
91
- end
92
- end
93
-
94
- context "given a replica set" do
95
-
96
- should "warn if invalid options are specified" do
97
- client = MongoReplicaSetClient.allocate
98
- opts = {:connect => false}
99
-
100
- MongoClient::CLIENT_ONLY_OPTS.each do |opt|
101
- client.expects(:warn).with("#{opt} is not a valid option for #{client.class}")
102
- opts[opt] = true
103
- end
104
-
105
- args = [['localhost:27017'], opts]
106
- client.send(:initialize, *args)
107
- end
108
-
109
- should "throw error if superflous arguments are specified" do
110
- assert_raise MongoArgumentError do
111
- MongoReplicaSetClient.new(['localhost:27017'], ['localhost:27018'], {:connect => false})
112
- end
113
- end
114
- end
115
- end
116
-
117
- context "initializing with a unix socket" do
118
- setup do
119
- @client = MongoClient.new('/tmp/mongod.sock', :connect => false)
120
- UNIXSocket.stubs(:new).returns(new_mock_unix_socket)
121
- end
122
- should "parse a unix socket" do
123
- assert_equal "/tmp/mongod.sock", @client.host_port.first
124
- end
125
- end
126
-
127
- context "initializing with a unix socket in uri" do
128
- setup do
129
- @client = MongoClient.from_uri("mongodb:///tmp/mongod.sock", :connect => false)
130
- UNIXSocket.stubs(:new).returns(new_mock_unix_socket)
131
- end
132
- should "parse a unix socket" do
133
- assert_equal "/tmp/mongod.sock", @client.host_port.first
134
- end
135
- end
136
-
137
- context "initializing with a mongodb uri" do
138
- should "parse a simple uri" do
139
- @client = MongoClient.from_uri("mongodb://localhost", :connect => false)
140
- assert_equal ['localhost', 27017], @client.host_port
141
- end
142
-
143
- should "set auth source" do
144
- @client = MongoClient.from_uri("mongodb://user:pass@localhost?authSource=foo", :connect => false)
145
- assert_equal 'foo', @client.auths.first[:source]
146
- end
147
-
148
- should "set auth mechanism" do
149
- @client = MongoClient.from_uri("mongodb://user@localhost?authMechanism=MONGODB-X509", :connect => false)
150
- assert_equal 'MONGODB-X509', @client.auths.first[:mechanism]
151
-
152
- assert_raise MongoArgumentError do
153
- MongoClient.from_uri("mongodb://user@localhost?authMechanism=INVALID", :connect => false)
154
- end
155
- end
156
-
157
- should "allow a complex host names" do
158
- host_name = "foo.bar-12345.org"
159
- @client = MongoClient.from_uri("mongodb://#{host_name}", :connect => false)
160
- assert_equal [host_name, 27017], @client.host_port
161
- end
162
-
163
- should "allow db without username and password" do
164
- host_name = "foo.bar-12345.org"
165
- @client = MongoClient.from_uri("mongodb://#{host_name}/foo", :connect => false)
166
- assert_equal [host_name, 27017], @client.host_port
167
- end
168
-
169
- should "set write concern options on connection" do
170
- host_name = "localhost"
171
- opts = "w=2&wtimeoutMS=1000&fsync=true&journal=true"
172
- @client = MongoClient.from_uri("mongodb://#{host_name}/foo?#{opts}", :connect => false)
173
- assert_equal({:w => 2, :wtimeout => 1000, :fsync => true, :j => true}, @client.write_concern)
174
- end
175
-
176
- should "set timeout options on connection" do
177
- host_name = "localhost"
178
- opts = "connectTimeoutMS=1000&socketTimeoutMS=5000"
179
- @client = MongoClient.from_uri("mongodb://#{host_name}/foo?#{opts}", :connect => false)
180
- assert_equal 1, @client.connect_timeout
181
- assert_equal 5, @client.op_timeout
182
- end
183
-
184
- should "parse a uri with a hyphen & underscore in the username or password" do
185
- @client = MongoClient.from_uri("mongodb://hyphen-user_name:p-s_s@localhost:27017/db", :connect => false)
186
- assert_equal ['localhost', 27017], @client.host_port
187
-
188
- auth_hash = {
189
- :db_name => 'db',
190
- :extra=>{},
191
- :username => 'hyphen-user_name',
192
- :password => 'p-s_s',
193
- :source => 'db',
194
- :mechanism => nil
195
- }
196
- assert_equal auth_hash, @client.auths.first
197
- end
198
-
199
- should "attempt to connect" do
200
- TCPSocket.stubs(:new).returns(new_mock_socket)
201
- @client = MongoClient.from_uri("mongodb://localhost", :connect => false)
202
-
203
- admin_db = new_mock_db
204
- admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1})
205
- @client.expects(:[]).with('admin').returns(admin_db)
206
- @client.connect
207
- end
208
-
209
- should "raise an error on invalid uris" do
210
- assert_raise MongoArgumentError do
211
- MongoClient.from_uri("mongo://localhost", :connect => false)
212
- end
213
-
214
- assert_raise MongoArgumentError do
215
- MongoClient.from_uri("mongodb://localhost:abc", :connect => false)
216
- end
217
- end
218
-
219
- should "require password if using legacy auth and username present" do
220
- assert MongoClient.from_uri("mongodb://kyle:jones@localhost/db", :connect => false)
221
-
222
- assert_raise MongoArgumentError do
223
- MongoClient.from_uri("mongodb://kyle:@localhost", :connect => false)
224
- end
225
-
226
- assert_raise MongoArgumentError do
227
- MongoClient.from_uri("mongodb://kyle@localhost", :connect => false)
228
- end
229
- end
230
- end
231
-
232
- context "initializing with ENV['MONGODB_URI']" do
233
- should "parse a simple uri" do
234
- uri = "mongodb://localhost?connect=false"
235
- with_preserved_env_uri(uri) do
236
- @client = MongoClient.new
237
- assert_equal ['localhost', 27017], @client.host_port
238
- end
239
- end
240
-
241
- should "set auth source" do
242
- uri = "mongodb://user:pass@localhost?authSource=foo&connect=false"
243
- with_preserved_env_uri(uri) do
244
- @client = MongoClient.new
245
- assert_equal 'foo', @client.auths.first[:source]
246
- end
247
- end
248
-
249
- should "set auth mechanism" do
250
- uri = "mongodb://user@localhost?authMechanism=MONGODB-X509&connect=false"
251
- with_preserved_env_uri(uri) do
252
- @client = MongoClient.new
253
- assert_equal 'MONGODB-X509', @client.auths.first[:mechanism]
254
-
255
- ENV['MONGODB_URI'] = "mongodb://user@localhost?authMechanism=INVALID&connect=false"
256
- assert_raise MongoArgumentError do
257
- MongoClient.new
258
- end
259
- end
260
- end
261
-
262
- should "allow a complex host names" do
263
- host_name = "foo.bar-12345.org"
264
- uri = "mongodb://#{host_name}?connect=false"
265
- with_preserved_env_uri(uri) do
266
- @client = MongoClient.new
267
- assert_equal [host_name, 27017], @client.host_port
268
- end
269
- end
270
-
271
- should "allow db without username and password" do
272
- host_name = "foo.bar-12345.org"
273
- uri = "mongodb://#{host_name}/foo?connect=false"
274
- with_preserved_env_uri(uri) do
275
- @client = MongoClient.new
276
- assert_equal [host_name, 27017], @client.host_port
277
- end
278
- end
279
-
280
- should "set write concern options on connection" do
281
- host_name = "localhost"
282
- opts = "w=2&wtimeoutMS=1000&fsync=true&journal=true&connect=false"
283
- uri = "mongodb://#{host_name}/foo?#{opts}"
284
- with_preserved_env_uri(uri) do
285
- @client = MongoClient.new
286
- assert_equal({:w => 2, :wtimeout => 1000, :fsync => true, :j => true}, @client.write_concern)
287
- end
288
- end
289
-
290
- should "set timeout options on connection" do
291
- host_name = "localhost"
292
- opts = "connectTimeoutMS=1000&socketTimeoutMS=5000&connect=false"
293
- uri = "mongodb://#{host_name}/foo?#{opts}"
294
- with_preserved_env_uri(uri) do
295
- @client = MongoClient.new
296
- assert_equal 1, @client.connect_timeout
297
- assert_equal 5, @client.op_timeout
298
- end
299
- end
300
-
301
- should "parse a uri with a hyphen & underscore in the username or password" do
302
- uri = "mongodb://hyphen-user_name:p-s_s@localhost:27017/db?connect=false"
303
- with_preserved_env_uri(uri) do
304
- @client = MongoClient.new
305
- assert_equal ['localhost', 27017], @client.host_port
306
-
307
- auth_hash = {
308
- :db_name => 'db',
309
- :extra=>{},
310
- :username => 'hyphen-user_name',
311
- :password => 'p-s_s',
312
- :source => 'db',
313
- :mechanism => nil
314
- }
315
- assert_equal auth_hash, @client.auths.first
316
- end
317
- end
318
-
319
- should "attempt to connect" do
320
- TCPSocket.stubs(:new).returns(new_mock_socket)
321
- uri = "mongodb://localhost?connect=false"
322
- with_preserved_env_uri(uri) do
323
- @client = MongoClient.new
324
-
325
- admin_db = new_mock_db
326
- admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1})
327
- @client.expects(:[]).with('admin').returns(admin_db)
328
- @client.connect
329
- end
330
- end
331
-
332
- should "raise an error on invalid uris" do
333
- uri = "mongo://localhost"
334
- with_preserved_env_uri(uri) do
335
- assert_raise MongoArgumentError do
336
- MongoClient.new
337
- end
338
-
339
- ENV['MONGODB_URI'] = "mongodb://localhost:abc?connect=false"
340
- assert_raise MongoArgumentError do
341
- MongoClient.new
342
- end
343
- end
344
- end
345
-
346
- should "require password if using legacy auth and username present" do
347
- uri = "mongodb://kyle:jones@localhost?connect=false"
348
- with_preserved_env_uri(uri) do
349
- assert MongoClient.new
350
-
351
- ENV['MONGODB_URI'] = "mongodb://kyle:@localhost?connect=false"
352
- assert_raise MongoArgumentError do
353
- MongoClient.new
354
- end
355
-
356
- ENV['MONGODB_URI'] = "mongodb://kyle@localhost?connect=false"
357
- assert_raise MongoArgumentError do
358
- MongoClient.new
359
- end
360
- end
361
- end
362
-
363
- should "require password if using PLAIN auth and username present" do
364
- uri = "mongodb://kyle:jones@localhost?connect=false&authMechanism=PLAIN"
365
- with_preserved_env_uri(uri) do
366
- assert MongoClient.new
367
-
368
- ENV['MONGODB_URI'] = "mongodb://kyle:@localhost?connect=false&authMechanism=PLAIN"
369
- assert_raise MongoArgumentError do
370
- MongoClient.new
371
- end
372
-
373
- ENV['MONGODB_URI'] = "mongodb://kyle@localhost?connect=false&authMechanism=PLAIN"
374
- assert_raise MongoArgumentError do
375
- MongoClient.new
376
- end
377
- end
378
- end
379
- end
380
- end
381
- end
@@ -1,166 +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
- module Mongo
18
- class Collection
19
- attr_reader :operation_writer,
20
- :command_writer
21
- end
22
- end
23
-
24
- class CollectionUnitTest < Test::Unit::TestCase
25
-
26
- context "Basic operations: " do
27
- setup do
28
- @logger = mock()
29
- @logger.stubs(:level => 0)
30
- @logger.expects(:debug)
31
-
32
- @client = MongoClient.new('localhost', 27017, :logger => @logger, :connect => false)
33
- @db = @client[TEST_DB]
34
- @coll = @db.collection('collection-unit-test')
35
- end
36
-
37
- should "send update message" do
38
- @client.expects(:send_message_with_gle).with do |op, msg, log|
39
- op == 2001
40
- end
41
- @coll.operation_writer.stubs(:log_operation)
42
- @coll.update({}, {:title => 'Moby Dick'})
43
- end
44
-
45
- should "send insert message" do
46
- @client.expects(:send_message_with_gle).with do |op, msg, log|
47
- op == 2002
48
- end
49
- @coll.operation_writer.expects(:log_operation).with do |name, payload|
50
- (name == :insert) && payload[:documents][:title].include?('Moby')
51
- end
52
- @coll.insert({:title => 'Moby Dick'})
53
- end
54
-
55
- should "send sort data" do
56
- @client.expects(:checkout_reader).returns(new_mock_socket)
57
- @client.expects(:receive_message).with do |op, msg, log, sock|
58
- op == 2004
59
- end.returns([[], 0, 0])
60
- @logger.expects(:debug)
61
- @coll.find({:title => 'Moby Dick'}).sort([['title', 1], ['author', 1]]).next_document
62
- end
63
-
64
- should "not log binary data" do
65
- data = BSON::Binary.new(("BINARY " * 1000).unpack("c*"))
66
- @client.expects(:send_message_with_gle).with do |op, msg, log|
67
- op == 2002
68
- end
69
- @coll.operation_writer.expects(:log_operation).with do |name, payload|
70
- (name == :insert) && payload[:documents][:data].inspect.include?('Binary')
71
- end
72
- @coll.insert({:data => data})
73
- end
74
-
75
- should "send safe update message" do
76
- @client.expects(:send_message_with_gle).with do |op, msg, db_name, log|
77
- op == 2001
78
- end
79
- @coll.operation_writer.expects(:log_operation).with do |name, payload|
80
- (name == :update) && payload[:documents][:title].include?('Moby')
81
- end
82
- @coll.update({}, {:title => 'Moby Dick'})
83
- end
84
-
85
- should "send safe update message with legacy" do
86
- connection = Connection.new('localhost', 27017, :safe => true, :connect => false)
87
- db = connection[TEST_DB]
88
- coll = db.collection('collection-unit-test')
89
- connection.expects(:send_message_with_gle).with do |op, msg, db_name, log|
90
- op == 2001
91
- end
92
- coll.operation_writer.expects(:log_operation).with do |name, payload|
93
- (name == :update) && payload[:documents][:title].include?('Moby')
94
- end
95
- coll.update({}, {:title => 'Moby Dick'})
96
- end
97
-
98
- should "send safe insert message" do
99
- @client.expects(:send_message_with_gle).with do |op, msg, db_name, log|
100
- op == 2001
101
- end
102
- @coll.operation_writer.stubs(:log_operation)
103
- @coll.update({}, {:title => 'Moby Dick'})
104
- end
105
-
106
- should "not call insert for each ensure_index call" do
107
- @coll.expects(:generate_indexes).once
108
-
109
- @coll.ensure_index [["x", Mongo::DESCENDING]]
110
- @coll.ensure_index [["x", Mongo::DESCENDING]]
111
- end
112
-
113
- should "call generate_indexes for a new type on the same field for ensure_index" do
114
- @coll.expects(:generate_indexes).twice
115
-
116
- @coll.ensure_index [["x", Mongo::DESCENDING]]
117
- @coll.ensure_index [["x", Mongo::ASCENDING]]
118
- end
119
-
120
- should "call generate_indexes twice because the cache time is 0 seconds" do
121
- @db.cache_time = 0
122
- @coll = @db.collection('collection-unit-test')
123
- @coll.expects(:generate_indexes).twice
124
-
125
- @coll.ensure_index [["x", Mongo::DESCENDING]]
126
- @coll.ensure_index [["x", Mongo::DESCENDING]]
127
- end
128
-
129
- should "call generate_indexes for each key when calling ensure_indexes" do
130
- @db.cache_time = 300
131
- @coll = @db.collection('collection-unit-test')
132
- @coll.expects(:generate_indexes).once.with do |a, b, c|
133
- a == {"x"=>-1, "y"=>-1}
134
- end
135
-
136
- @coll.ensure_index [["x", Mongo::DESCENDING], ["y", Mongo::DESCENDING]]
137
- end
138
-
139
- should "call generate_indexes for each key when calling ensure_indexes with a hash" do
140
- @db.cache_time = 300
141
- @coll = @db.collection('collection-unit-test')
142
- oh = BSON::OrderedHash.new
143
- oh['x'] = Mongo::DESCENDING
144
- oh['y'] = Mongo::DESCENDING
145
- @coll.expects(:generate_indexes).once.with do |a, b, c|
146
- a == oh
147
- end
148
-
149
- if RUBY_VERSION > '1.9'
150
- @coll.ensure_index({"x" => Mongo::DESCENDING, "y" => Mongo::DESCENDING})
151
- else
152
- ordered_hash = BSON::OrderedHash.new
153
- ordered_hash['x'] = Mongo::DESCENDING
154
- ordered_hash['y'] = Mongo::DESCENDING
155
- @coll.ensure_index(ordered_hash)
156
- end
157
- end
158
-
159
- should "use the connection's logger" do
160
- @logger.expects(:warn).with do |msg|
161
- msg == "MONGODB [WARNING] test warning"
162
- end
163
- @coll.log(:warn, "test warning")
164
- end
165
- end
166
- end