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
@@ -0,0 +1,161 @@
1
+ data:
2
+ - {_id: 1, x: 11}
3
+ - {_id: 2, x: 22}
4
+ - {_id: 3, x: 33}
5
+
6
+ tests:
7
+ -
8
+ description: "FindOneAndUpdate when many documents match returning the document before modification"
9
+ operation:
10
+ name: findOneAndUpdate
11
+ arguments:
12
+ filter:
13
+ _id: {$gt: 1}
14
+ update:
15
+ $inc: {x: 1}
16
+ projection: {x: 1, _id: 0}
17
+ sort: {x: 1}
18
+
19
+ outcome:
20
+ result: {x: 22}
21
+ collection:
22
+ data:
23
+ - {_id: 1, x: 11}
24
+ - {_id: 2, x: 23}
25
+ - {_id: 3, x: 33}
26
+ -
27
+ description: "FindOneAndUpdate when many documents match returning the document after modification"
28
+ operation:
29
+ name: findOneAndUpdate
30
+ arguments:
31
+ filter:
32
+ _id: {$gt: 1}
33
+ update:
34
+ $inc: {x: 1}
35
+ projection: {x: 1, _id: 0}
36
+ returnDocument: After
37
+ sort: {x: 1}
38
+
39
+ outcome:
40
+ result: {x: 23}
41
+ collection:
42
+ data:
43
+ - {_id: 1, x: 11}
44
+ - {_id: 2, x: 23}
45
+ - {_id: 3, x: 33}
46
+ -
47
+ description: "FindOneAndUpdate when one document matches returning the document before modification"
48
+ operation:
49
+ name: findOneAndUpdate
50
+ arguments:
51
+ filter: {_id: 2}
52
+ update:
53
+ $inc: {x: 1}
54
+ projection: {x: 1, _id: 0}
55
+ sort: {x: 1}
56
+
57
+ outcome:
58
+ result: {x: 22}
59
+ collection:
60
+ data:
61
+ - {_id: 1, x: 11}
62
+ - {_id: 2, x: 23}
63
+ - {_id: 3, x: 33}
64
+ -
65
+ description: "FindOneAndUpdate when one document matches returning the document after modification"
66
+ operation:
67
+ name: findOneAndUpdate
68
+ arguments:
69
+ filter: {_id: 2}
70
+ update:
71
+ $inc: {x: 1}
72
+ projection: {x: 1, _id: 0}
73
+ returnDocument: After
74
+ sort: {x: 1}
75
+
76
+ outcome:
77
+ result: {x: 23}
78
+ collection:
79
+ data:
80
+ - {_id: 1, x: 11}
81
+ - {_id: 2, x: 23}
82
+ - {_id: 3, x: 33}
83
+ -
84
+ description: "FindOneAndUpdate when no documents match returning the document before modification"
85
+ operation:
86
+ name: findOneAndUpdate
87
+ arguments:
88
+ filter: {_id: 4}
89
+ update:
90
+ $inc: {x: 1}
91
+ projection: {x: 1, _id: 0}
92
+ sort: {x: 1}
93
+
94
+ outcome:
95
+ result: null
96
+ collection:
97
+ data:
98
+ - {_id: 1, x: 11}
99
+ - {_id: 2, x: 22}
100
+ - {_id: 3, x: 33}
101
+ -
102
+ description: "FindOneAndUpdate when no documents match with upsert returning the document before modification"
103
+ operation:
104
+ name: findOneAndUpdate
105
+ arguments:
106
+ filter: {_id: 4}
107
+ update:
108
+ $inc: {x: 1}
109
+ projection: {x: 1, _id: 0}
110
+ sort: {x: 1}
111
+ upsert: true
112
+
113
+ outcome:
114
+ result: null
115
+ collection:
116
+ data:
117
+ - {_id: 1, x: 11}
118
+ - {_id: 2, x: 22}
119
+ - {_id: 3, x: 33}
120
+ - {_id: 4, x: 1}
121
+ -
122
+ description: "FindOneAndUpdate when no documents match returning the document after modification"
123
+ operation:
124
+ name: findOneAndUpdate
125
+ arguments:
126
+ filter: {_id: 4}
127
+ update:
128
+ $inc: {x: 1}
129
+ projection: {x: 1, _id: 0}
130
+ returnDocument: After
131
+ sort: {x: 1}
132
+
133
+ outcome:
134
+ result: null
135
+ collection:
136
+ data:
137
+ - {_id: 1, x: 11}
138
+ - {_id: 2, x: 22}
139
+ - {_id: 3, x: 33}
140
+ -
141
+ description: "FindOneAndUpdate when no documents match with upsert returning the document after modification"
142
+ operation:
143
+ name: findOneAndUpdate
144
+ arguments:
145
+ filter: {_id: 4}
146
+ update:
147
+ $inc: {x: 1}
148
+ projection: {x: 1, _id: 0}
149
+ returnDocument: After
150
+ sort: {x: 1}
151
+ upsert: true
152
+
153
+ outcome:
154
+ result: {x: 1}
155
+ collection:
156
+ data:
157
+ - {_id: 1, x: 11}
158
+ - {_id: 2, x: 22}
159
+ - {_id: 3, x: 33}
160
+ - {_id: 4, x: 1}
161
+
@@ -0,0 +1,24 @@
1
+ data:
2
+ - {_id: 1, x: 11}
3
+
4
+ tests:
5
+ -
6
+ description: "InsertMany with non-existing documents"
7
+ operation:
8
+ name: "insertMany"
9
+ arguments:
10
+ documents:
11
+ - {_id: 2, x: 22}
12
+ - {_id: 3, x: 33}
13
+
14
+ outcome:
15
+ result:
16
+ insertedIds:
17
+ - 2
18
+ - 3
19
+ collection:
20
+ data:
21
+ - {_id: 1, x: 11}
22
+ - {_id: 2, x: 22}
23
+ - {_id: 3, x: 33}
24
+
@@ -0,0 +1,19 @@
1
+ data:
2
+ - {_id: 1, x: 11}
3
+
4
+ tests:
5
+ -
6
+ description: "InsertOne with a non-existing document"
7
+ operation:
8
+ name: "insertOne"
9
+ arguments:
10
+ document: {_id: 2, x: 22}
11
+
12
+ outcome:
13
+ result:
14
+ insertedId: 2
15
+ collection:
16
+ data:
17
+ - {_id: 1, x: 11}
18
+ - {_id: 2, x: 22}
19
+
@@ -0,0 +1,96 @@
1
+ data:
2
+ - {_id: 1, x: 11}
3
+ - {_id: 2, x: 22}
4
+ - {_id: 3, x: 33}
5
+
6
+ tests:
7
+ -
8
+ description: "ReplaceOne when many documents match"
9
+ operation:
10
+ name: "replaceOne"
11
+ arguments:
12
+ filter:
13
+ _id: {$gt: 1}
14
+ replacement: {x: 111}
15
+
16
+ outcome:
17
+ result:
18
+ matchedCount: 1
19
+ modifiedCount: 1
20
+ # can't verify collection because we don't have a way
21
+ # of knowing which document gets updated.
22
+ -
23
+ description: "ReplaceOne when one document matches"
24
+ operation:
25
+ name: "replaceOne"
26
+ arguments:
27
+ filter: {_id: 1}
28
+ replacement: {_id: 1, x: 111}
29
+
30
+ outcome:
31
+ result:
32
+ matchedCount: 1
33
+ modifiedCount: 1
34
+ collection:
35
+ data:
36
+ - {_id: 1, x: 111}
37
+ - {_id: 2, x: 22}
38
+ - {_id: 3, x: 33}
39
+ -
40
+ description: "ReplaceOne when no documents match"
41
+ operation:
42
+ name: "replaceOne"
43
+ arguments:
44
+ filter: {_id: 4}
45
+ replacement: {_id: 4, x: 1}
46
+
47
+ outcome:
48
+ result:
49
+ matchedCount: 0
50
+ modifiedCount: 0
51
+ collection:
52
+ data:
53
+ - {_id: 1, x: 11}
54
+ - {_id: 2, x: 22}
55
+ - {_id: 3, x: 33}
56
+ -
57
+ description: "ReplaceOne with upsert when no documents match without an id specified"
58
+ operation:
59
+ name: "replaceOne"
60
+ arguments:
61
+ filter: {_id: 4}
62
+ replacement: {x: 1}
63
+ upsert: true
64
+
65
+ outcome:
66
+ result:
67
+ matchedCount: 0
68
+ modifiedCount: 0
69
+ upsertedId: 4
70
+ collection:
71
+ data:
72
+ - {_id: 1, x: 11}
73
+ - {_id: 2, x: 22}
74
+ - {_id: 3, x: 33}
75
+ - {_id: 4, x: 1}
76
+ -
77
+ description: "ReplaceOne with upsert when no documents match with an id specified"
78
+ operation:
79
+ name: "replaceOne"
80
+ arguments:
81
+ filter: {_id: 4}
82
+ replacement: {_id: 4, x: 1}
83
+ upsert: true
84
+
85
+ outcome:
86
+ result:
87
+ matchedCount: 0
88
+ modifiedCount: 0
89
+ upsertedId: 4
90
+ collection:
91
+ data:
92
+ - {_id: 1, x: 11}
93
+ - {_id: 2, x: 22}
94
+ - {_id: 3, x: 33}
95
+ - {_id: 4, x: 1}
96
+
@@ -0,0 +1,83 @@
1
+ data:
2
+ - {_id: 1, x: 11}
3
+ - {_id: 2, x: 22}
4
+ - {_id: 3, x: 33}
5
+
6
+ tests:
7
+ -
8
+ description: "UpdateMany when many documents match"
9
+ operation:
10
+ name: "updateMany"
11
+ arguments:
12
+ filter:
13
+ _id: {$gt: 1}
14
+ update:
15
+ $inc: {x: 1}
16
+
17
+ outcome:
18
+ result:
19
+ matchedCount: 2
20
+ modifiedCount: 2
21
+ collection:
22
+ data:
23
+ - {_id: 1, x: 11}
24
+ - {_id: 2, x: 23}
25
+ - {_id: 3, x: 34}
26
+ -
27
+ description: "UpdateMany when one document matches"
28
+ operation:
29
+ name: "updateMany"
30
+ arguments:
31
+ filter: {_id: 1}
32
+ update:
33
+ $inc: {x: 1}
34
+
35
+ outcome:
36
+ result:
37
+ matchedCount: 1
38
+ modifiedCount: 1
39
+ collection:
40
+ data:
41
+ - {_id: 1, x: 12}
42
+ - {_id: 2, x: 22}
43
+ - {_id: 3, x: 33}
44
+ -
45
+ description: "UpdateMany when no documents match"
46
+ operation:
47
+ name: "updateMany"
48
+ arguments:
49
+ filter: {_id: 4}
50
+ update:
51
+ $inc: {x: 1}
52
+
53
+ outcome:
54
+ result:
55
+ matchedCount: 0
56
+ modifiedCount: 0
57
+ collection:
58
+ data:
59
+ - {_id: 1, x: 11}
60
+ - {_id: 2, x: 22}
61
+ - {_id: 3, x: 33}
62
+ -
63
+ description: "UpdateMany with upsert when no documents match"
64
+ operation:
65
+ name: "updateMany"
66
+ arguments:
67
+ filter: {_id: 4}
68
+ update:
69
+ $inc: {x: 1}
70
+ upsert: true
71
+
72
+ outcome:
73
+ result:
74
+ matchedCount: 0
75
+ modifiedCount: 0
76
+ upsertedId: 4
77
+ collection:
78
+ data:
79
+ - {_id: 1, x: 11}
80
+ - {_id: 2, x: 22}
81
+ - {_id: 3, x: 33}
82
+ - {_id: 4, x: 1}
83
+
@@ -0,0 +1,80 @@
1
+ data:
2
+ - {_id: 1, x: 11}
3
+ - {_id: 2, x: 22}
4
+ - {_id: 3, x: 33}
5
+
6
+ tests:
7
+ -
8
+ description: "UpdateOne when many documents match"
9
+ operation:
10
+ name: "updateOne"
11
+ arguments:
12
+ filter:
13
+ _id: {$gt: 1}
14
+ update:
15
+ $inc: {x: 1}
16
+
17
+ outcome:
18
+ result:
19
+ matchedCount: 1
20
+ modifiedCount: 1
21
+ # can't verify collection because we don't have a way
22
+ # of knowing which document gets updated.
23
+ -
24
+ description: "UpdateOne when one document matches"
25
+ operation:
26
+ name: "updateOne"
27
+ arguments:
28
+ filter: {_id: 1}
29
+ update:
30
+ $inc: {x: 1}
31
+
32
+ outcome:
33
+ result:
34
+ matchedCount: 1
35
+ modifiedCount: 1
36
+ collection:
37
+ data:
38
+ - {_id: 1, x: 12}
39
+ - {_id: 2, x: 22}
40
+ - {_id: 3, x: 33}
41
+ -
42
+ description: "UpdateOne when no documents match"
43
+ operation:
44
+ name: "updateOne"
45
+ arguments:
46
+ filter: {_id: 4}
47
+ update:
48
+ $inc: {x: 1}
49
+
50
+ outcome:
51
+ result:
52
+ matchedCount: 0
53
+ modifiedCount: 0
54
+ collection:
55
+ data:
56
+ - {_id: 1, x: 11}
57
+ - {_id: 2, x: 22}
58
+ - {_id: 3, x: 33}
59
+ -
60
+ description: "UpdateOne with upsert when no documents match"
61
+ operation:
62
+ name: "updateOne"
63
+ arguments:
64
+ filter: {_id: 4}
65
+ update:
66
+ $inc: {x: 1}
67
+ upsert: true
68
+
69
+ outcome:
70
+ result:
71
+ matchedCount: 0
72
+ modifiedCount: 0
73
+ upsertedId: 4
74
+ collection:
75
+ data:
76
+ - {_id: 1, x: 11}
77
+ - {_id: 2, x: 22}
78
+ - {_id: 3, x: 33}
79
+ - {_id: 4, x: 1}
80
+
@@ -0,0 +1,140 @@
1
+ # Copyright (C) 2009-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
+ # Helper methods and utilities for testing.
16
+ module Helpers
17
+
18
+ # Helper method to allow temporary redirection of $stdout.
19
+ #
20
+ # @example
21
+ # silence do
22
+ # # your noisey code here
23
+ # end
24
+ #
25
+ # @param A code block to execute.
26
+ # @return Original $stdout value.
27
+ def silence(&block)
28
+ original_stdout = $stdout
29
+ original_stderr = $stderr
30
+ $stdout = $stderr = File.new('/dev/null', 'w')
31
+ yield block
32
+ ensure
33
+ $stdout = original_stdout
34
+ $stderr = original_stderr
35
+ end
36
+
37
+ TEST_KEY_RSA1024 = OpenSSL::PKey::RSA.new <<-_end_of_pem_
38
+ -----BEGIN RSA PRIVATE KEY-----
39
+ MIICXgIBAAKBgQDLwsSw1ECnPtT+PkOgHhcGA71nwC2/nL85VBGnRqDxOqjVh7Cx
40
+ aKPERYHsk4BPCkE3brtThPWc9kjHEQQ7uf9Y1rbCz0layNqHyywQEVLFmp1cpIt/
41
+ Q3geLv8ZD9pihowKJDyMDiN6ArYUmZczvW4976MU3+l54E6lF/JfFEU5hwIDAQAB
42
+ AoGBAKSl/MQarye1yOysqX6P8fDFQt68VvtXkNmlSiKOGuzyho0M+UVSFcs6k1L0
43
+ maDE25AMZUiGzuWHyaU55d7RXDgeskDMakD1v6ZejYtxJkSXbETOTLDwUWTn618T
44
+ gnb17tU1jktUtU67xK/08i/XodlgnQhs6VoHTuCh3Hu77O6RAkEA7+gxqBuZR572
45
+ 74/akiW/SuXm0SXPEviyO1MuSRwtI87B02D0qgV8D1UHRm4AhMnJ8MCs1809kMQE
46
+ JiQUCrp9mQJBANlt2ngBO14us6NnhuAseFDTBzCHXwUUu1YKHpMMmxpnGqaldGgX
47
+ sOZB3lgJsT9VlGf3YGYdkLTNVbogQKlKpB8CQQDiSwkb4vyQfDe8/NpU5Not0fII
48
+ 8jsDUCb+opWUTMmfbxWRR3FBNu8wnym/m19N4fFj8LqYzHX4KY0oVPu6qvJxAkEA
49
+ wa5snNekFcqONLIE4G5cosrIrb74sqL8GbGb+KuTAprzj5z1K8Bm0UW9lTjVDjDi
50
+ qRYgZfZSL+x1P/54+xTFSwJAY1FxA/N3QPCXCjPh5YqFxAMQs2VVYTfg+t0MEcJD
51
+ dPMQD5JX6g5HKnHFg2mZtoXQrWmJSn7p8GJK8yNTopEErA==
52
+ -----END RSA PRIVATE KEY-----
53
+ _end_of_pem_
54
+
55
+ def issue_cert(dn, key, serial, not_before, not_after, extensions, issuer, issuer_key, digest)
56
+ cert = OpenSSL::X509::Certificate.new
57
+ issuer = cert unless issuer
58
+ issuer_key = key unless issuer_key
59
+ cert.version = 2
60
+ cert.serial = serial
61
+ cert.subject = dn
62
+ cert.issuer = issuer.subject
63
+ cert.public_key = key.public_key
64
+ cert.not_before = not_before
65
+ cert.not_after = not_after
66
+ ef = OpenSSL::X509::ExtensionFactory.new
67
+ ef.subject_certificate = cert
68
+ ef.issuer_certificate = issuer
69
+ extensions.each do |oid, value, critical|
70
+ cert.add_extension(ef.create_extension(oid, value, critical))
71
+ end
72
+ cert.sign(issuer_key, digest)
73
+ cert
74
+ end
75
+
76
+ def collection(name, db)
77
+ documents = []
78
+ double(name.to_s).tap do |coll|
79
+
80
+ allow(coll).to receive(:db) { db }
81
+
82
+ allow(coll).to receive(:save) do |doc|
83
+ coll.remove({ :_id => doc[:_id] })
84
+ coll.insert(doc)
85
+ end
86
+
87
+ allow(coll).to receive(:count) { documents.length }
88
+
89
+ allow(coll).to receive(:insert) do |doc|
90
+ if !coll.find({ :_id => doc[:_id] }).empty?
91
+ raise GridError, "duplicate key error, _id"
92
+ end
93
+ documents.push(doc)
94
+ end
95
+
96
+ allow(coll).to receive(:find_one) do |query|
97
+ result = nil
98
+ documents.each do |doc|
99
+ if matches(doc, query)
100
+ result = doc
101
+ break
102
+ end
103
+ end
104
+ result
105
+ end
106
+
107
+ allow(coll).to receive(:remove) do |query|
108
+ documents.dup.each do |doc|
109
+ if matches(doc, query)
110
+ documents.delete(doc)
111
+ end
112
+ end
113
+ end
114
+
115
+ allow(coll).to receive(:find) do |query|
116
+ results = []
117
+ documents.each do |doc|
118
+ if matches(doc, query)
119
+ results.push(doc)
120
+ end
121
+ end
122
+ results
123
+ end
124
+ end
125
+ end
126
+
127
+ # does only strict equivalence,
128
+ # {:n => 4} should work
129
+ # {:n => {"$gt" => 3}} will not work.
130
+ def matches(doc, query={})
131
+ match = true
132
+ query.each do |field, value|
133
+ if !doc[field] || doc[field] != value
134
+ match = false
135
+ break
136
+ end
137
+ end
138
+ match
139
+ end
140
+ end
@@ -0,0 +1,37 @@
1
+ RSpec::Matchers.define :be_int32 do |num|
2
+ match do |actual|
3
+ actual == [num].pack('l<')
4
+ end
5
+ end
6
+
7
+ RSpec::Matchers.define :be_int64 do |num|
8
+ match do |actual|
9
+ actual == [num].pack('q<')
10
+ end
11
+ end
12
+
13
+ RSpec::Matchers.define :be_int64_sequence do |array|
14
+ match do |actual|
15
+ actual == array.reduce(String.new) do |buffer, num|
16
+ buffer << [num].pack('q<')
17
+ end
18
+ end
19
+ end
20
+
21
+ RSpec::Matchers.define :be_cstring do |string|
22
+ match do |actual|
23
+ actual == "#{string}\0"
24
+ end
25
+ end
26
+
27
+ RSpec::Matchers.define :be_bson do |hash|
28
+ match do |actual|
29
+ actual == hash.to_bson
30
+ end
31
+ end
32
+
33
+ RSpec::Matchers.define :be_bson_sequence do |array|
34
+ match do |actual|
35
+ actual == array.map(&:to_bson).join
36
+ end
37
+ end
@@ -0,0 +1,41 @@
1
+ description: "Discover arbiters"
2
+
3
+ uri: "mongodb://a/?replicaSet=rs"
4
+
5
+ phases: [
6
+
7
+ {
8
+ responses: [
9
+
10
+ ["a:27017", {
11
+
12
+ ok: 1,
13
+ ismaster: true,
14
+ hosts: ["a:27017"],
15
+ arbiters: ["b:27017"],
16
+ setName: "rs"
17
+ }]
18
+ ],
19
+
20
+ outcome: {
21
+
22
+ servers: {
23
+
24
+ "a:27017": {
25
+
26
+ type: "RSPrimary",
27
+ setName: "rs"
28
+ },
29
+
30
+ "b:27017": {
31
+
32
+ type: "Unknown",
33
+ setName:
34
+ }
35
+ },
36
+
37
+ topologyType: "ReplicaSetWithPrimary",
38
+ setName: "rs"
39
+ }
40
+ }
41
+ ]