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,335 +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 ConnectionUnitTest < Test::Unit::TestCase
18
- context "Mongo::MongoClient initialization " do
19
- context "given a single node" do
20
- setup do
21
- @connection = Mongo::Connection.new('localhost', 27017, :safe => true, :connect => false)
22
- TCPSocket.stubs(:new).returns(new_mock_socket)
23
-
24
- admin_db = new_mock_db
25
- admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1})
26
- @connection.expects(:[]).with('admin').returns(admin_db)
27
- @connection.connect
28
- end
29
-
30
- should "set safe mode true" do
31
- assert_equal true, @connection.safe
32
- end
33
-
34
- should "set localhost and port to master" do
35
- assert_equal 'localhost', @connection.primary_pool.host
36
- assert_equal 27017, @connection.primary_pool.port
37
- end
38
-
39
- should "set connection pool to 1" do
40
- assert_equal 1, @connection.primary_pool.size
41
- end
42
-
43
- should "default slave_ok to false" do
44
- assert !@connection.slave_ok?
45
- end
46
-
47
- should "not raise error if no host or port is supplied" do
48
- assert_nothing_raised do
49
- Mongo::Connection.new(:safe => true, :connect => false)
50
- end
51
- assert_nothing_raised do
52
- Mongo::Connection.new('localhost', :safe => true, :connect => false)
53
- end
54
- end
55
-
56
- should "warn if invalid options are specified" do
57
- connection = Mongo::Connection.allocate
58
- opts = {:connect => false}
59
-
60
- Mongo::ReplSetConnection::REPL_SET_OPTS.each do |opt|
61
- connection.expects(:warn).with("#{opt} is not a valid option for #{connection.class}")
62
- opts[opt] = true
63
- end
64
-
65
- args = ['localhost', 27017, opts]
66
- connection.send(:initialize, *args)
67
- end
68
-
69
- end
70
-
71
- context "initializing with a unix socket" do
72
- setup do
73
- @connection = Mongo::Connection.new('/tmp/mongod.sock', :safe => true, :connect => false)
74
- UNIXSocket.stubs(:new).returns(new_mock_unix_socket)
75
- end
76
- should "parse a unix socket" do
77
- assert_equal "/tmp/mongod.sock", @connection.host_port.first
78
- end
79
- end
80
-
81
- context "initializing with a unix socket in uri" do
82
- setup do
83
- @connection = Mongo::Connection.from_uri("mongodb:///tmp/mongod.sock", :connect => false)
84
- UNIXSocket.stubs(:new).returns(new_mock_unix_socket)
85
- end
86
- should "parse a unix socket" do
87
- assert_equal "/tmp/mongod.sock", @connection.host_port.first
88
- end
89
- end
90
-
91
- context "initializing with a mongodb uri" do
92
- should "parse a simple uri" do
93
- @connection = Mongo::Connection.from_uri("mongodb://localhost", :connect => false)
94
- assert_equal ['localhost', 27017], @connection.host_port
95
- end
96
-
97
- should "set auth source" do
98
- @connection = Mongo::Connection.from_uri("mongodb://user:pass@localhost?authSource=foo", :connect => false)
99
- assert_equal 'foo', @connection.auths.first[:source]
100
- end
101
-
102
- should "set auth mechanism" do
103
- @connection = Mongo::Connection.from_uri("mongodb://user@localhost?authMechanism=MONGODB-X509", :connect => false)
104
- assert_equal 'MONGODB-X509', @connection.auths.first[:mechanism]
105
-
106
- assert_raise MongoArgumentError do
107
- Mongo::Connection.from_uri("mongodb://localhost?authMechanism=INVALID", :connect => false)
108
- end
109
- end
110
-
111
- should "allow a complex host names" do
112
- host_name = "foo.bar-12345.org"
113
- @connection = Mongo::Connection.from_uri("mongodb://#{host_name}", :connect => false)
114
- assert_equal [host_name, 27017], @connection.host_port
115
- end
116
-
117
- should "allow db without username and password" do
118
- host_name = "foo.bar-12345.org"
119
- @connection = Mongo::Connection.from_uri("mongodb://#{host_name}/foo", :connect => false)
120
- assert_equal [host_name, 27017], @connection.host_port
121
- end
122
-
123
- should "set safe options on connection" do
124
- host_name = "localhost"
125
- opts = "safe=true&w=2&wtimeoutMS=1000&fsync=true&journal=true"
126
- @connection = Mongo::Connection.from_uri("mongodb://#{host_name}/foo?#{opts}", :connect => false)
127
- assert_equal({:w => 2, :wtimeout => 1000, :fsync => true, :j => true}, @connection.write_concern)
128
- end
129
-
130
- should "set timeout options on connection" do
131
- host_name = "localhost"
132
- opts = "connectTimeoutMS=1000&socketTimeoutMS=5000"
133
- @connection = Mongo::Connection.from_uri("mongodb://#{host_name}/foo?#{opts}", :connect => false)
134
- assert_equal 1, @connection.connect_timeout
135
- assert_equal 5, @connection.op_timeout
136
- end
137
-
138
- should "parse a uri with a hyphen & underscore in the username or password" do
139
- @connection = Mongo::Connection.from_uri("mongodb://hyphen-user_name:p-s_s@localhost:27017/db", :connect => false)
140
- assert_equal ['localhost', 27017], @connection.host_port
141
-
142
- auth_hash = {
143
- :db_name => 'db',
144
- :extra=>{},
145
- :username => 'hyphen-user_name',
146
- :password => 'p-s_s',
147
- :source => 'db',
148
- :mechanism => nil
149
- }
150
- assert_equal auth_hash, @connection.auths.first
151
- end
152
-
153
- should "attempt to connect" do
154
- TCPSocket.stubs(:new).returns(new_mock_socket)
155
- @connection = Mongo::Connection.from_uri("mongodb://localhost", :connect => false)
156
-
157
- admin_db = new_mock_db
158
- admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1})
159
- @connection.expects(:[]).with('admin').returns(admin_db)
160
- @connection.connect
161
- end
162
-
163
- should "raise an error on invalid uris" do
164
- assert_raise MongoArgumentError do
165
- Mongo::Connection.from_uri("mongo://localhost", :connect => false)
166
- end
167
-
168
- assert_raise MongoArgumentError do
169
- Mongo::Connection.from_uri("mongodb://localhost:abc", :connect => false)
170
- end
171
- end
172
-
173
- should "require password if using legacy auth and username present" do
174
- assert Mongo::Connection.from_uri("mongodb://kyle:jones@localhost/db", :connect => false)
175
-
176
- assert_raise MongoArgumentError do
177
- Mongo::Connection.from_uri("mongodb://kyle:@localhost", :connect => false)
178
- end
179
-
180
- assert_raise MongoArgumentError do
181
- Mongo::Connection.from_uri("mongodb://kyle@localhost", :connect => false)
182
- end
183
- end
184
- end
185
-
186
- context "initializing with ENV['MONGODB_URI']" do
187
- should "parse a simple uri" do
188
- uri = "mongodb://localhost?connect=false"
189
- with_preserved_env_uri(uri) do
190
- @connection = Mongo::Connection.new
191
- assert_equal ['localhost', 27017], @connection.host_port
192
- end
193
- end
194
-
195
- should "set auth source" do
196
- uri = "mongodb://user:pass@localhost?authSource=foo&connect=false"
197
- with_preserved_env_uri(uri) do
198
- @connection = Mongo::Connection.new
199
- assert_equal 'foo', @connection.auths.first[:source]
200
- end
201
- end
202
-
203
- should "set auth mechanism" do
204
- uri = "mongodb://user@localhost?authMechanism=MONGODB-X509&connect=false"
205
- with_preserved_env_uri(uri) do
206
- @connection = Mongo::Connection.new
207
- assert_equal 'MONGODB-X509', @connection.auths.first[:mechanism]
208
-
209
- ENV['MONGODB_URI'] = "mongodb://user@localhost?authMechanism=INVALID&connect=false"
210
- assert_raise MongoArgumentError do
211
- Mongo::Connection.new
212
- end
213
- end
214
- end
215
-
216
- should "allow a complex host names" do
217
- host_name = "foo.bar-12345.org"
218
- uri = "mongodb://#{host_name}?connect=false"
219
- with_preserved_env_uri(uri) do
220
- @connection = Mongo::Connection.new
221
- assert_equal [host_name, 27017], @connection.host_port
222
- end
223
- end
224
-
225
- should "allow db without username and password" do
226
- host_name = "foo.bar-12345.org"
227
- uri = "mongodb://#{host_name}/foo?connect=false"
228
- with_preserved_env_uri(uri) do
229
- @connection = Mongo::Connection.new
230
- assert_equal [host_name, 27017], @connection.host_port
231
- end
232
- end
233
-
234
- should "set safe options on connection" do
235
- host_name = "localhost"
236
- opts = "safe=true&w=2&wtimeoutMS=1000&fsync=true&journal=true&connect=false"
237
- uri = "mongodb://#{host_name}/foo?#{opts}"
238
- with_preserved_env_uri(uri) do
239
- @connection = Mongo::Connection.new
240
- assert_equal({:w => 2, :wtimeout => 1000, :fsync => true, :j => true}, @connection.safe)
241
- end
242
- end
243
-
244
- should "set timeout options on connection" do
245
- host_name = "localhost"
246
- opts = "connectTimeoutMS=1000&socketTimeoutMS=5000&connect=false"
247
- uri = "mongodb://#{host_name}/foo?#{opts}"
248
- with_preserved_env_uri(uri) do
249
- @connection = Mongo::Connection.new
250
- assert_equal 1, @connection.connect_timeout
251
- assert_equal 5, @connection.op_timeout
252
- end
253
- end
254
-
255
- should "parse a uri with a hyphen & underscore in the username or password" do
256
- uri = "mongodb://hyphen-user_name:p-s_s@localhost:27017/db?connect=false"
257
- with_preserved_env_uri(uri) do
258
- @connection = Mongo::Connection.new
259
- assert_equal ['localhost', 27017], @connection.host_port
260
-
261
- auth_hash = {
262
- :db_name => 'db',
263
- :extra=>{},
264
- :username => 'hyphen-user_name',
265
- :password => 'p-s_s',
266
- :source => 'db',
267
- :mechanism => nil
268
- }
269
- assert_equal auth_hash, @connection.auths.first
270
- end
271
- end
272
-
273
- should "attempt to connect" do
274
- TCPSocket.stubs(:new).returns(new_mock_socket)
275
- uri = "mongodb://localhost?connect=false"
276
- with_preserved_env_uri(uri) do
277
- @connection = Mongo::Connection.new
278
-
279
- admin_db = new_mock_db
280
- admin_db.expects(:command).returns({'ok' => 1, 'ismaster' => 1})
281
- @connection.expects(:[]).with('admin').returns(admin_db)
282
- @connection.connect
283
- end
284
- end
285
-
286
- should "raise an error on invalid uris" do
287
- uri = "mongo://localhost"
288
- with_preserved_env_uri(uri) do
289
- assert_raise MongoArgumentError do
290
- Mongo::Connection.new
291
- end
292
-
293
- ENV['MONGODB_URI'] = "mongodb://localhost:abc"
294
- assert_raise MongoArgumentError do
295
- Mongo::Connection.new
296
- end
297
- end
298
- end
299
-
300
- should "require password if using legacy auth and username present" do
301
- uri = "mongodb://kyle:jones@localhost/db?connect=false"
302
- with_preserved_env_uri(uri) do
303
- assert Mongo::Connection.new
304
-
305
- ENV['MONGODB_URI'] = "mongodb://kyle:@localhost?connect=false"
306
- assert_raise MongoArgumentError do
307
- Mongo::Connection.new
308
- end
309
-
310
- ENV['MONGODB_URI'] = "mongodb://kyle@localhost?connect=false"
311
- assert_raise MongoArgumentError do
312
- Mongo::Connection.new
313
- end
314
- end
315
- end
316
-
317
- should "require password if using PLAIN auth and username present" do
318
- uri = "mongodb://kyle:jones@localhost/db?connect=false&authMechanism=PLAIN"
319
- with_preserved_env_uri(uri) do
320
- assert Mongo::Connection.new
321
-
322
- ENV['MONGODB_URI'] = "mongodb://kyle:@localhost?connect=false&authMechanism=PLAIN"
323
- assert_raise MongoArgumentError do
324
- Mongo::Connection.new
325
- end
326
-
327
- ENV['MONGODB_URI'] = "mongodb://kyle@localhost?connect=false&authMechanism=PLAIN"
328
- assert_raise MongoArgumentError do
329
- Mongo::Connection.new
330
- end
331
- end
332
- end
333
- end
334
- end
335
- end
@@ -1,307 +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 CursorUnitTest < Test::Unit::TestCase
18
- class Mongo::Cursor
19
- public :construct_query_spec
20
- end
21
-
22
- context "Cursor options" do
23
- setup do
24
- @logger = mock()
25
- @logger.stubs(:debug)
26
- @connection = stub(:class => MongoClient, :logger => @logger,
27
- :slave_ok? => false, :read => :primary, :log_duration => false,
28
- :tag_sets => [], :acceptable_latency => 10)
29
- @db = stub(:name => "testing", :slave_ok? => false,
30
- :connection => @connection, :read => :primary,
31
- :tag_sets => [], :acceptable_latency => 10)
32
- @collection = stub(:db => @db, :name => "items", :read => :primary,
33
- :tag_sets => [], :acceptable_latency => 10)
34
- @cursor = Cursor.new(@collection)
35
- end
36
-
37
- should "set timeout" do
38
- assert @cursor.timeout
39
- assert @cursor.query_options_hash[:timeout]
40
- end
41
-
42
- should "set selector" do
43
- assert_equal({}, @cursor.selector)
44
-
45
- @cursor = Cursor.new(@collection, :selector => {:name => "Jones"})
46
- assert_equal({:name => "Jones"}, @cursor.selector)
47
- assert_equal({:name => "Jones"}, @cursor.query_options_hash[:selector])
48
- end
49
-
50
- should "set fields" do
51
- assert_nil @cursor.fields
52
-
53
- @cursor = Cursor.new(@collection, :fields => [:name, :date])
54
- assert_equal({:name => 1, :date => 1}, @cursor.fields)
55
- assert_equal({:name => 1, :date => 1}, @cursor.query_options_hash[:fields])
56
- end
57
-
58
- should "allow $meta projection operator" do
59
- assert_nil @cursor.fields
60
-
61
- @cursor = Cursor.new(@collection, :fields => [{ :score => { :$meta => 'textScore' } }])
62
- assert_equal({ :score => { :$meta => 'textScore' } }, @cursor.fields)
63
- assert_equal({ :score => { :$meta => 'textScore' } }, @cursor.query_options_hash[:fields])
64
-
65
- @cursor = Cursor.new(@collection, :fields => [:name, { :score => { :$meta => 'textScore' } }])
66
- assert_equal({ :name => 1, :score => { :$meta => 'textScore' } }, @cursor.fields)
67
- assert_equal({ :name => 1, :score => { :$meta => 'textScore' } }, @cursor.query_options_hash[:fields])
68
- end
69
-
70
- should "set mix fields 0 and 1" do
71
- assert_nil @cursor.fields
72
-
73
- @cursor = Cursor.new(@collection, :fields => {:name => 1, :date => 0})
74
- assert_equal({:name => 1, :date => 0}, @cursor.fields)
75
- assert_equal({:name => 1, :date => 0}, @cursor.query_options_hash[:fields])
76
- end
77
-
78
- should "set limit" do
79
- assert_equal 0, @cursor.limit
80
-
81
- @cursor = Cursor.new(@collection, :limit => 10)
82
- assert_equal 10, @cursor.limit
83
- assert_equal 10, @cursor.query_options_hash[:limit]
84
- end
85
-
86
-
87
- should "set skip" do
88
- assert_equal 0, @cursor.skip
89
-
90
- @cursor = Cursor.new(@collection, :skip => 5)
91
- assert_equal 5, @cursor.skip
92
- assert_equal 5, @cursor.query_options_hash[:skip]
93
- end
94
-
95
- should "set sort order" do
96
- assert_nil @cursor.order
97
-
98
- @cursor = Cursor.new(@collection, :order => "last_name")
99
- assert_equal "last_name", @cursor.order
100
- assert_equal "last_name", @cursor.query_options_hash[:order]
101
- end
102
-
103
- should "set hint" do
104
- assert_nil @cursor.hint
105
-
106
- @cursor = Cursor.new(@collection, :hint => "name")
107
- assert_equal "name", @cursor.hint
108
- assert_equal "name", @cursor.query_options_hash[:hint]
109
- end
110
-
111
- should "set comment" do
112
- assert_nil @cursor.comment
113
-
114
- @cursor = Cursor.new(@collection, :comment => "comment")
115
- assert_equal "comment", @cursor.comment
116
- assert_equal "comment", @cursor.query_options_hash[:comment]
117
- end
118
-
119
- should "cache full collection name" do
120
- assert_equal "testing.items", @cursor.full_collection_name
121
- end
122
-
123
- should "raise error when batch_size is 1" do
124
- e = assert_raise ArgumentError do
125
- @cursor.batch_size(1)
126
- end
127
- assert_equal "Invalid value for batch_size 1; must be 0 or > 1.", e.message
128
- end
129
-
130
- should "use the limit for batch size when it's smaller than the specified batch_size" do
131
- @cursor.limit(99)
132
- @cursor.batch_size(100)
133
- assert_equal 99, @cursor.batch_size
134
- end
135
-
136
- should "use the specified batch_size" do
137
- @cursor.batch_size(100)
138
- assert_equal 100, @cursor.batch_size
139
- end
140
-
141
- context 'when an alternate namespace is specified' do
142
-
143
- should 'use the alternate namespace' do
144
- cursor = Cursor.new(@collection, :ns => 'other_db.other_collection')
145
- assert_equal('other_db.other_collection', cursor.full_collection_name)
146
- end
147
- end
148
-
149
- context "connected to mongos" do
150
- setup do
151
- @connection.stubs(:mongos?).returns(true)
152
- @tag_sets = [{:dc => "ny"}]
153
- end
154
-
155
- should "set $readPreference" do
156
- # secondary
157
- cursor = Cursor.new(@collection, { :read => :secondary })
158
-
159
- spec = cursor.construct_query_spec
160
- assert spec.has_key?('$readPreference')
161
- assert_equal 'secondary', spec['$readPreference'][:mode]
162
- assert !spec['$readPreference'].has_key?(:tags)
163
-
164
- # secondary preferred with tags
165
- cursor = Cursor.new(@collection, { :read => :secondary_preferred, :tag_sets => @tag_sets })
166
-
167
- spec = cursor.construct_query_spec
168
- assert spec.has_key?('$readPreference')
169
- assert_equal 'secondaryPreferred', spec['$readPreference'][:mode]
170
- assert_equal @tag_sets, spec['$readPreference'][:tags]
171
-
172
- # primary preferred
173
- cursor = Cursor.new(@collection, { :read => :primary_preferred })
174
-
175
- spec = cursor.construct_query_spec
176
- assert spec.has_key?('$readPreference')
177
- assert_equal 'primaryPreferred', spec['$readPreference'][:mode]
178
- assert !spec['$readPreference'].has_key?(:tags)
179
-
180
- # primary preferred with tags
181
- cursor = Cursor.new(@collection, { :read => :primary_preferred, :tag_sets => @tag_sets })
182
-
183
- spec = cursor.construct_query_spec
184
- assert spec.has_key?('$readPreference')
185
- assert_equal 'primaryPreferred', spec['$readPreference'][:mode]
186
- assert_equal @tag_sets, spec['$readPreference'][:tags]
187
-
188
- # nearest
189
- cursor = Cursor.new(@collection, { :read => :nearest })
190
-
191
- spec = cursor.construct_query_spec
192
- assert spec.has_key?('$readPreference')
193
- assert_equal 'nearest', spec['$readPreference'][:mode]
194
- assert !spec['$readPreference'].has_key?(:tags)
195
-
196
- # nearest with tags
197
- cursor = Cursor.new(@collection, { :read => :nearest, :tag_sets => @tag_sets })
198
-
199
- spec = cursor.construct_query_spec
200
- assert spec.has_key?('$readPreference')
201
- assert_equal 'nearest', spec['$readPreference'][:mode]
202
- assert_equal @tag_sets, spec['$readPreference'][:tags]
203
- end
204
-
205
- should "not set $readPreference" do
206
- # for primary
207
- cursor = Cursor.new(@collection, { :read => :primary, :tag_sets => @tag_sets })
208
- assert !cursor.construct_query_spec.has_key?('$readPreference')
209
-
210
- # for secondary_preferred with no tags
211
- cursor = Cursor.new(@collection, { :read => :secondary_preferred })
212
- assert !cursor.construct_query_spec.has_key?('$readPreference')
213
-
214
- cursor = Cursor.new(@collection, { :read => :secondary_preferred, :tag_sets => [] })
215
- assert !cursor.construct_query_spec.has_key?('$readPreference')
216
-
217
- cursor = Cursor.new(@collection, { :read => :secondary_preferred, :tag_sets => nil })
218
- assert !cursor.construct_query_spec.has_key?('$readPreference')
219
- end
220
- end
221
-
222
- context "not connected to mongos" do
223
- setup do
224
- @connection.stubs(:mongos?).returns(false)
225
- end
226
-
227
- should "not set $readPreference" do
228
- cursor = Cursor.new(@collection, { :read => :primary })
229
- assert !cursor.construct_query_spec.has_key?('$readPreference')
230
-
231
- cursor = Cursor.new(@collection, { :read => :primary_preferred })
232
- assert !cursor.construct_query_spec.has_key?('$readPreference')
233
-
234
- cursor = Cursor.new(@collection, { :read => :secondary })
235
- assert !cursor.construct_query_spec.has_key?('$readPreference')
236
-
237
- cursor = Cursor.new(@collection, { :read => :secondary_preferred })
238
- assert !cursor.construct_query_spec.has_key?('$readPreference')
239
-
240
- cursor = Cursor.new(@collection, { :read => :nearest })
241
- assert !cursor.construct_query_spec.has_key?('$readPreference')
242
-
243
- cursor = Cursor.new(@collection, { :read => :secondary , :tag_sets => @tag_sets})
244
- assert !cursor.construct_query_spec.has_key?('$readPreference')
245
- end
246
- end
247
- end
248
-
249
- context "Query fields" do
250
- setup do
251
- @logger = mock()
252
- @logger.stubs(:debug)
253
- @connection = stub(:class => MongoClient, :logger => @logger, :slave_ok? => false,
254
- :log_duration => false, :tag_sets =>{}, :acceptable_latency => 10)
255
- @db = stub(:slave_ok? => true, :name => "testing", :connection => @connection,
256
- :tag_sets => {}, :acceptable_latency => 10)
257
- @collection = stub(:db => @db, :name => "items", :read => :primary,
258
- :tag_sets => {}, :acceptable_latency => 10)
259
- end
260
-
261
- should "when an array should return a hash with each key" do
262
- @cursor = Cursor.new(@collection, :fields => [:name, :age])
263
- result = @cursor.fields
264
- assert_equal result.keys.sort{|a,b| a.to_s <=> b.to_s}, [:age, :name].sort{|a,b| a.to_s <=> b.to_s}
265
- assert result.values.all? {|v| v == 1}
266
- end
267
-
268
- should "when a string, return a hash with just the key" do
269
- @cursor = Cursor.new(@collection, :fields => "name")
270
- result = @cursor.fields
271
- assert_equal result.keys.sort, ["name"]
272
- assert result.values.all? {|v| v == 1}
273
- end
274
-
275
- should "return nil when neither hash nor string nor symbol" do
276
- @cursor = Cursor.new(@collection, :fields => 1234567)
277
- assert_nil @cursor.fields
278
- end
279
- end
280
-
281
- context "counts" do
282
- setup do
283
- @logger = mock()
284
- @logger.stubs(:debug)
285
- @connection = stub(:class => Connection, :logger => @logger,
286
- :slave_ok? => false, :read => :primary, :log_duration => false,
287
- :tag_sets => {}, :acceptable_latency => 10)
288
- @db = stub(:name => "testing", :slave_ok? => false,
289
- :connection => @connection, :read => :primary,
290
- :tag_sets => {}, :acceptable_latency => 10)
291
- @collection = stub(:db => @db, :name => "items", :read => :primary,
292
- :tag_sets => {}, :acceptable_latency => 10)
293
- @cursor = Cursor.new(@collection)
294
- end
295
-
296
- should "pass the comment parameter" do
297
- query = {:field => 7}
298
- @db.expects(:command).with({ 'count' => "items",
299
- 'query' => query,
300
- 'fields' => nil},
301
- { :read => :primary,
302
- :comment => "my comment"}).
303
- returns({'ok' => 1, 'n' => 1})
304
- assert_equal(1, Cursor.new(@collection, :selector => query, :comment => 'my comment').count())
305
- end
306
- end
307
- end