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,96 +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
- module SASLPlainTests
16
-
17
- # Tests for the PLAIN (LDAP) Authentication Mechanism.
18
- #
19
- # Note: These tests will be skipped automatically unless the test environment
20
- # has been configured.
21
- #
22
- # In order to run these tests, set the following environment variables:
23
- #
24
- # export MONGODB_SASL_HOST='server.domain.com'
25
- # export MONGODB_SASL_USER='application%2Fuser%40example.com'
26
- # export MONGODB_SASL_PASS='password'
27
- #
28
- # # optional (defaults to '$external')
29
- # export MONGODB_SASL_SOURCE='source_database'
30
- #
31
- if ENV.key?('MONGODB_SASL_HOST') && ENV.key?('MONGODB_SASL_USER') && ENV.key?('MONGODB_SASL_PASS')
32
-
33
- def test_plain_authenticate
34
- replica_set = @client.class.name == 'Mongo::MongoReplicaSetClient'
35
-
36
- # TODO: Remove this once we have a replica set configured for SASL in CI
37
- return if ENV.key?('CI') && replica_set
38
-
39
- host = replica_set ? [ENV['MONGODB_SASL_HOST']] : ENV['MONGODB_SASL_HOST']
40
- client = @client.class.new(host)
41
- source = ENV['MONGODB_SASL_SOURCE'] || '$external'
42
- db = client['test']
43
-
44
- # should successfully authenticate
45
- assert db.authenticate(ENV['MONGODB_SASL_USER'], ENV['MONGODB_SASL_PASS'], true, source, 'PLAIN')
46
- assert client[source].logout
47
-
48
- # should raise on missing password
49
- ex = assert_raise Mongo::MongoArgumentError do
50
- db.authenticate(ENV['MONGODB_SASL_USER'], nil, true, source, 'PLAIN')
51
- end
52
- assert_match /username and password are required/, ex.message
53
-
54
- # should raise on invalid password
55
- assert_raise Mongo::AuthenticationError do
56
- db.authenticate(ENV['MONGODB_SASL_USER'], 'foo', true, source, 'PLAIN')
57
- end
58
- end
59
-
60
- def test_plain_authenticate_from_uri
61
- source = ENV['MONGODB_SASL_SOURCE'] || '$external'
62
-
63
- uri = "mongodb://#{ENV['MONGODB_SASL_USER']}:#{ENV['MONGODB_SASL_PASS']}@" +
64
- "#{ENV['MONGODB_SASL_HOST']}/some_db?authSource=#{source}" +
65
- "&authMechanism=PLAIN"
66
-
67
- client = @client.class.from_uri(uri)
68
- db = client['test']
69
-
70
- # should be able to checkout a socket (authentication gets applied)
71
- assert socket = client.checkout_reader(:mode => :primary)
72
- client[source].logout(:socket => socket)
73
- client.checkin(socket)
74
-
75
- uri = "mongodb://#{ENV['MONGODB_SASL_USER']}@#{ENV['MONGODB_SASL_HOST']}/" +
76
- "some_db?authSource=#{source}&authMechanism=PLAIN"
77
-
78
- # should raise for missing password
79
- ex = assert_raise Mongo::MongoArgumentError do
80
- client = @client.class.from_uri(uri)
81
- end
82
- assert_match /username and password are required/, ex.message
83
-
84
- uri = "mongodb://#{ENV['MONGODB_SASL_USER']}:foo@#{ENV['MONGODB_SASL_HOST']}/" +
85
- "some_db?authSource=#{source}&authMechanism=PLAIN"
86
-
87
- # should raise for invalid password
88
- client = @client.class.from_uri(uri)
89
- assert_raise Mongo::AuthenticationError do
90
- client.checkout_reader(:mode => :primary)
91
- end
92
- end
93
-
94
- end
95
-
96
- end
@@ -1,92 +0,0 @@
1
- # Copyright (C) 2014 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
- module SCRAMTests
16
-
17
- def setup_conversation
18
- SecureRandom.expects(:base64).returns('NDA2NzU3MDY3MDYwMTgy')
19
- @password = Digest::MD5.hexdigest("user:mongo:pencil")
20
- @scram = Mongo::Authentication::SCRAM.new({ :username => 'user' }, @password)
21
- end
22
-
23
- def test_scram_authenticate
24
- if @version.to_s > '2.7'
25
- @client.clear_auths
26
- assert @db.authenticate(TEST_USER, TEST_USER_PWD, nil, 'admin', 'SCRAM-SHA-1')
27
- end
28
- end
29
-
30
- def test_scram_conversation_start
31
- setup_conversation
32
- command = @scram.start
33
- assert_equal 1, command['saslStart']
34
- assert_equal 'SCRAM-SHA-1', command['mechanism']
35
- assert_equal 'n,,n=user,r=NDA2NzU3MDY3MDYwMTgy', command['payload'].to_s
36
- end
37
-
38
- def test_scram_conversation_continue
39
- setup_conversation
40
- payload = BSON::Binary.new(
41
- 'r=NDA2NzU3MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,s=AVvQXzAbxweH2RYDICaplw==,i=10000'
42
- )
43
- reply = { 'conversationId' => 1, 'done' => false, 'payload' => payload, 'ok' => 1.0 }
44
- command = @scram.continue(reply)
45
- assert_equal 1, command['saslContinue']
46
- assert_equal 1, command['conversationId']
47
- assert_equal(
48
- 'c=biws,r=NDA2NzU3MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,p=qYUYNy6SQ9Jucq9rFA9nVgXQdbM=',
49
- command['payload'].to_s
50
- )
51
- end
52
-
53
- def test_scram_conversation_continue_with_invalid_nonce
54
- setup_conversation
55
- payload = BSON::Binary.new(
56
- 'r=NDA2NzU4MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,s=AVvQXzAbxweH2RYDICaplw==,i=10000'
57
- )
58
- reply = { 'conversationId' => 1, 'done' => false, 'payload' => payload, 'ok' => 1.0 }
59
- assert_raise_error Mongo::InvalidNonce do
60
- @scram.continue(reply)
61
- end
62
- end
63
-
64
- def test_scram_conversation_finalize
65
- setup_conversation
66
- continue_payload = BSON::Binary.new(
67
- 'r=NDA2NzU3MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,s=AVvQXzAbxweH2RYDICaplw==,i=10000'
68
- )
69
- continue_reply = { 'conversationId' => 1, 'done' => false, 'payload' => continue_payload, 'ok' => 1.0 }
70
- @scram.continue(continue_reply)
71
- payload = BSON::Binary.new('v=gwo9E8+uifshm7ixj441GvIfuUY=')
72
- reply = { 'conversationId' => 1, 'done' => false, 'payload' => payload, 'ok' => 1.0 }
73
- command = @scram.finalize(reply)
74
- assert_equal 1, command['saslContinue']
75
- assert_equal 1, command['conversationId']
76
- assert_equal '', command['payload'].to_s
77
- end
78
-
79
- def test_scram_conversation_finalize_with_invalid_server_signature
80
- setup_conversation
81
- continue_payload = BSON::Binary.new(
82
- 'r=NDA2NzU3MDY3MDYwMTgyt7/+IWaw1HaZZ5NmPJUTWapLpH2Gg+d8,s=AVvQXzAbxweH2RYDICaplw==,i=10000'
83
- )
84
- continue_reply = { 'conversationId' => 1, 'done' => false, 'payload' => continue_payload, 'ok' => 1.0 }
85
- @scram.continue(continue_reply)
86
- payload = BSON::Binary.new('v=LQ+8yhQeVL2a3Dh+TDJ7xHz4Srk=')
87
- reply = { 'conversationId' => 1, 'done' => false, 'payload' => payload, 'ok' => 1.0 }
88
- assert_raise_error Mongo::InvalidSignature do
89
- @scram.finalize(reply)
90
- end
91
- end
92
- end
@@ -1,235 +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
- module SSLTests
16
- include Mongo
17
-
18
- MONGODB_X509_USERNAME = 'CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US'
19
- CERT_PATH = "#{Dir.pwd}/test/fixtures/certificates/"
20
- CLIENT_CERT = "#{CERT_PATH}client.pem"
21
- CLIENT_CERT_PASS = "#{CERT_PATH}password_protected.pem"
22
- CA_CERT = "#{CERT_PATH}ca.pem"
23
- PASS_PHRASE = ENV['SSL_KEY_PASS_PHRASE']
24
-
25
- def create_client(*args)
26
- if @client_class == MongoClient
27
- @client_class.new(*args[0], args[1])
28
- else
29
- @client_class.new(args[0], args[1])
30
- end
31
- end
32
-
33
- # Requires MongoDB not built with SSL
34
- #
35
- def test_ssl_not_configured
36
- assert_raise Mongo::ConnectionTimeoutError do
37
- create_client(['localhost', 27017], :connect_timeout => 2, :ssl => true)
38
- end
39
- end
40
-
41
- # This test doesn't connect, no server config required
42
- def test_ssl_configuration
43
- # raises when ssl=false and ssl opts specified
44
- assert_raise MongoArgumentError do
45
- create_client(@connect_info, :connect => false,
46
- :ssl => false,
47
- :ssl_cert => CLIENT_CERT)
48
- end
49
-
50
- # raises when ssl=nil and ssl opts specified
51
- assert_raise MongoArgumentError do
52
- create_client(@connect_info, :connect => false,
53
- :ssl_key => CLIENT_CERT)
54
- end
55
-
56
- # raises when verify=true and no ca_cert
57
- assert_raise MongoArgumentError do
58
- create_client(@connect_info, :connect => false,
59
- :ssl => true,
60
- :ssl_key => CLIENT_CERT,
61
- :ssl_cert => CLIENT_CERT,
62
- :ssl_verify => true)
63
- end
64
-
65
- # raises when key passphrase is given without key file
66
- assert_raise MongoArgumentError do
67
- create_client(@connect_info, :connect => false,
68
- :ssl => true,
69
- :ssl_key_pass_phrase => PASS_PHRASE)
70
- end
71
- end
72
-
73
- # Requires MongoDB built with SSL and the following options:
74
- #
75
- # mongod --dbpath /path/to/data/directory --sslOnNormalPorts \
76
- # --sslPEMKeyFile /path/to/server.pem \
77
- # --sslCAFile /path/to/ca.pem \
78
- # --sslCRLFile /path/to/crl.pem \
79
- # --sslWeakCertificateValidation
80
- #
81
- # Make sure you have 'server' as an alias for localhost in /etc/hosts
82
- #
83
- def test_ssl_basic
84
- client = create_client(@connect_info, :connect => false, :ssl => true)
85
- assert client.connect
86
- end
87
-
88
- # Requires MongoDB built with SSL and the following options:
89
- #
90
- # mongod --dbpath /path/to/data/directory --sslOnNormalPorts \
91
- # --sslPEMKeyFile /path/to/server.pem \
92
- # --sslCAFile /path/to/ca.pem \
93
- # --sslCRLFile /path/to/crl.pem
94
- #
95
- # Make sure you have 'server' as an alias for localhost in /etc/hosts
96
- #
97
- def test_ssl_with_cert
98
- client = create_client(@connect_info, :connect => false,
99
- :ssl => true,
100
- :ssl_cert => CLIENT_CERT,
101
- :ssl_key => CLIENT_CERT)
102
- assert client.connect
103
- end
104
-
105
- def test_ssl_with_peer_cert_validation
106
- client = create_client(@connect_info, :connect => false,
107
- :ssl => true,
108
- :ssl_key => CLIENT_CERT,
109
- :ssl_cert => CLIENT_CERT,
110
- :ssl_verify => true,
111
- :ssl_ca_cert => CA_CERT)
112
- assert client.connect
113
- end
114
-
115
- def test_ssl_peer_cert_validation_hostname_fail
116
- client = create_client(@bad_connect_info, :connect => false,
117
- :ssl => true,
118
- :ssl_key => CLIENT_CERT,
119
- :ssl_cert => CLIENT_CERT,
120
- :ssl_verify => true,
121
- :ssl_ca_cert => CA_CERT)
122
- assert_raise ConnectionFailure do
123
- client.connect
124
- end
125
- end
126
-
127
- # Requires MongoDB built with SSL and the following options:
128
- #
129
- # mongod --dbpath /path/to/data/directory --sslOnNormalPorts \
130
- # --sslPEMKeyFile /path/to/password_protected.pem \
131
- # --sslCAFile /path/to/ca.pem \
132
- # --sslCRLFile /path/to/crl.pem
133
- #
134
- # Make sure you have 'server' as an alias for localhost in /etc/hosts.
135
- # If SSL_KEY_PASS_PHRASE is not set as an environment variable,
136
- # you will be prompted to enter a passphrase at runtime.
137
- #
138
- def test_ssl_with_key_pass_phrase
139
- client = create_client(@connect_info, :connect => false,
140
- :ssl => true,
141
- :ssl_cert => CLIENT_CERT_PASS,
142
- :ssl_key => CLIENT_CERT_PASS,
143
- :ssl_key_pass_phrase => PASS_PHRASE)
144
- assert client.connect
145
- end
146
-
147
- def test_ssl_with_key_pass_phrase_fail
148
- client = create_client(@connect_info, :connect => false,
149
- :ssl => true,
150
- :ssl_cert => CLIENT_CERT_PASS,
151
- :ssl_key => CLIENT_CERT_PASS,
152
- :ssl_key_pass_phrase => "secret")
153
- assert_raise OpenSSL::PKey::RSAError do
154
- client.connect
155
- end
156
- end
157
-
158
- # Requires mongod built with SSL and the following options:
159
- #
160
- # mongod --dbpath /path/to/data/directory --sslOnNormalPorts \
161
- # --sslPEMKeyFile /path/to/server.pem \
162
- # --sslCAFile /path/to/ca.pem \
163
- # --sslCRLFile /path/to/crl_client_revoked.pem
164
- #
165
- # Make sure you have 'server' as an alias for localhost in /etc/hosts
166
- #
167
- def test_ssl_with_invalid_cert
168
- assert_raise ConnectionFailure do
169
- create_client(@connect_info, :ssl => true,
170
- :ssl_key => CLIENT_CERT,
171
- :ssl_cert => CLIENT_CERT,
172
- :ssl_verify => true,
173
- :ssl_ca_cert => CA_CERT)
174
- end
175
- end
176
-
177
- # X509 Authentication Tests
178
- #
179
- # Requires MongoDB built with SSL and the following options:
180
- #
181
- # mongod --auth --dbpath /path/to/data/directory --sslOnNormalPorts \
182
- # --sslPEMKeyFile /path/to/server.pem \
183
- # --sslCAFile /path/to/ca.pem \
184
- # --sslCRLFile /path/to/crl.pem
185
- #
186
- # Note that the cert requires username:
187
- # 'CN=client,OU=kerneluser,O=10Gen,L=New York City,ST=New York,C=US'
188
- #
189
- def test_x509_authentication
190
- mechanism = 'MONGODB-X509'
191
-
192
- client = create_client(@connect_info, :ssl => true,
193
- :ssl_cert => CLIENT_CERT,
194
- :ssl_key => CLIENT_CERT)
195
-
196
- return unless client.server_version > '2.5.2'
197
-
198
- db = client.db('$external')
199
-
200
- # add user for test (enable auth)
201
- roles = [{:role => 'readWriteAnyDatabase', :db => 'admin'},
202
- {:role => 'userAdminAnyDatabase', :db => 'admin'}]
203
- db.add_user(MONGODB_X509_USERNAME, nil, false, :roles => roles)
204
-
205
- assert db.authenticate(MONGODB_X509_USERNAME, nil, nil, nil, mechanism)
206
- assert db.collection_names
207
-
208
- assert db.logout
209
- assert_raise Mongo::OperationFailure do
210
- db.collection_names
211
- end
212
-
213
- # username and valid certificate don't match
214
- assert_raise Mongo::AuthenticationError do
215
- db.authenticate('test', nil, nil, nil, mechanism)
216
- end
217
-
218
- # username required
219
- assert_raise Mongo::AuthenticationError do
220
- db.authenticate(nil, nil, nil, nil, mechanism)
221
- end
222
-
223
- assert MongoClient.from_uri(
224
- "mongodb://#{MONGODB_X509_USERNAME}@#{@uri_info}/?ssl=true;authMechanism=#{mechanism}",
225
- :ssl_cert => CLIENT_CERT,
226
- :ssl_key => CLIENT_CERT)
227
- assert db.authenticate(MONGODB_X509_USERNAME, nil, nil, nil, mechanism)
228
- assert db.collection_names
229
-
230
- # clean up and remove all users
231
- db.command(:dropAllUsersFromDatabase => 1)
232
- db.logout
233
- end
234
-
235
- end
data/test/test_helper.rb DELETED
@@ -1,61 +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
- # NOTE: on ruby <1.9 you need to run individual tests with 'bundle exec'
16
-
17
- unless RUBY_VERSION < '1.9' || ENV.key?('JENKINS_CI')
18
- require 'simplecov'
19
- require 'coveralls'
20
-
21
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
22
- SimpleCov::Formatter::HTMLFormatter,
23
- Coveralls::SimpleCov::Formatter
24
- ]
25
-
26
- SimpleCov.start do
27
- add_group 'Driver', 'lib/mongo'
28
- add_group 'BSON', 'lib/bson'
29
-
30
- add_filter 'tasks'
31
- add_filter 'test'
32
- add_filter 'bin'
33
- end
34
- end
35
-
36
- # required for at_exit, at_start hooks
37
- require 'test-unit'
38
-
39
- require 'test/unit'
40
- require 'shoulda'
41
- require 'mocha/setup'
42
-
43
- # cluster manager
44
- require 'tools/mongo_config'
45
-
46
- # For kerberos testing.
47
- begin
48
- require 'mongo_kerberos'
49
- rescue LoadError; end
50
-
51
- # test helpers
52
- require 'helpers/general'
53
- require 'helpers/test_unit'
54
-
55
- # optional development and debug utilities
56
- begin
57
- require 'pry-rescue'
58
- require 'pry-nav'
59
- rescue LoadError
60
- # failed to load, skipping pry
61
- end
@@ -1,120 +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 ThreadingTest < Test::Unit::TestCase
18
-
19
- include Mongo
20
-
21
- def setup
22
- @client = standard_connection(:pool_size => 10, :pool_timeout => 30)
23
- @db = @client.db(TEST_DB)
24
- @coll = @db.collection('thread-test-collection')
25
- @coll.drop
26
-
27
- collections = ['duplicate', 'unique']
28
-
29
- collections.each do |coll_name|
30
- coll = @db.collection(coll_name)
31
- coll.drop
32
- coll.insert("test" => "insert")
33
- coll.insert("test" => "update")
34
- instance_variable_set("@#{coll_name}", coll)
35
- end
36
-
37
- @unique.create_index("test", :unique => true)
38
- end
39
-
40
- def test_safe_update
41
- threads = []
42
- 300.times do |i|
43
- threads << Thread.new do
44
- if i % 2 == 0
45
- assert_raise Mongo::OperationFailure do
46
- @unique.update({"test" => "insert"}, {"$set" => {"test" => "update"}})
47
- end
48
- else
49
- @duplicate.update({"test" => "insert"}, {"$set" => {"test" => "update"}})
50
- @duplicate.update({"test" => "update"}, {"$set" => {"test" => "insert"}})
51
- end
52
- end
53
- end
54
-
55
- threads.each {|thread| thread.join}
56
- end
57
-
58
- def test_safe_insert
59
- threads = []
60
- 300.times do |i|
61
- threads << Thread.new do
62
- if i % 2 == 0
63
- assert_raise Mongo::OperationFailure do
64
- @unique.insert({"test" => "insert"})
65
- end
66
- else
67
- @duplicate.insert({"test" => "insert"})
68
- end
69
- end
70
- end
71
-
72
- threads.each {|thread| thread.join}
73
- end
74
-
75
- def test_concurrent_find
76
- n_threads = 50
77
-
78
- 1000.times do |i|
79
- @coll.insert({ "x" => "a" })
80
- end
81
-
82
- threads = []
83
- n_threads.times do |i|
84
- threads << Thread.new do
85
- sum = 0
86
- @coll.find.to_a.size
87
- end
88
- end
89
-
90
- thread_values = threads.map(&:value)
91
- assert thread_values.all?{|v| v == 1000}
92
- assert_equal thread_values.size, n_threads
93
- end
94
-
95
- def test_threading
96
- @coll.drop
97
- @coll = @db.collection('thread-test-collection')
98
-
99
- docs = []
100
- 1000.times {|i| docs << {:x => i}}
101
- @coll.insert(docs)
102
-
103
- threads = []
104
-
105
- 10.times do |i|
106
- threads[i] = Thread.new do
107
- sum = 0
108
- @coll.find().each do |document|
109
- sum += document["x"]
110
- end
111
- assert_equal 499500, sum
112
- end
113
- end
114
-
115
- 10.times do |i|
116
- threads[i].join
117
- end
118
- end
119
-
120
- end