mongo 1.12.5 → 2.0.0.beta

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 (437) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CONTRIBUTING.md +64 -0
  5. data/LICENSE +1 -1
  6. data/README.md +23 -125
  7. data/Rakefile +26 -21
  8. data/bin/mongo_console +6 -38
  9. data/lib/mongo.rb +23 -82
  10. data/lib/mongo/address.rb +111 -0
  11. data/lib/mongo/address/ipv4.rb +85 -0
  12. data/lib/mongo/address/ipv6.rb +85 -0
  13. data/lib/mongo/address/unix.rb +76 -0
  14. data/lib/mongo/auth.rb +108 -0
  15. data/lib/mongo/auth/cr.rb +44 -0
  16. data/lib/mongo/auth/cr/conversation.rb +119 -0
  17. data/lib/mongo/auth/executable.rb +52 -0
  18. data/lib/mongo/auth/ldap.rb +48 -0
  19. data/lib/mongo/auth/ldap/conversation.rb +92 -0
  20. data/lib/mongo/auth/roles.rb +104 -0
  21. data/lib/mongo/auth/scram.rb +53 -0
  22. data/lib/mongo/auth/scram/conversation.rb +450 -0
  23. data/lib/mongo/auth/user.rb +159 -0
  24. data/lib/mongo/auth/user/view.rb +102 -0
  25. data/lib/mongo/auth/x509.rb +48 -0
  26. data/lib/mongo/auth/x509/conversation.rb +92 -0
  27. data/lib/mongo/{gridfs.rb → bulk.rb} +2 -5
  28. data/lib/mongo/bulk/bulk_write.rb +307 -0
  29. data/lib/mongo/client.rb +233 -0
  30. data/lib/mongo/cluster.rb +203 -0
  31. data/lib/mongo/cluster/topology.rb +60 -0
  32. data/lib/mongo/cluster/topology/replica_set.rb +160 -0
  33. data/lib/mongo/cluster/topology/sharded.rb +132 -0
  34. data/lib/mongo/cluster/topology/standalone.rb +132 -0
  35. data/lib/mongo/cluster/topology/unknown.rb +155 -0
  36. data/lib/mongo/collection.rb +130 -1101
  37. data/lib/mongo/collection/view.rb +169 -0
  38. data/lib/mongo/collection/view/aggregation.rb +108 -0
  39. data/lib/mongo/collection/view/explainable.rb +49 -0
  40. data/lib/mongo/collection/view/immutable.rb +43 -0
  41. data/lib/mongo/collection/view/iterable.rb +48 -0
  42. data/lib/mongo/collection/view/map_reduce.rb +191 -0
  43. data/lib/mongo/collection/view/readable.rb +363 -0
  44. data/lib/mongo/collection/view/writable.rb +169 -0
  45. data/lib/mongo/cursor.rb +79 -680
  46. data/lib/mongo/database.rb +224 -0
  47. data/lib/mongo/database/view.rb +101 -0
  48. data/lib/mongo/error.rb +81 -0
  49. data/lib/mongo/error/bulk_write_failure.rb +41 -0
  50. data/lib/mongo/{utils/thread_local_variable_manager.rb → error/empty_batch.rb} +22 -8
  51. data/{test/functional/db_connection_test.rb → lib/mongo/error/invalid_bulk_operation.rb} +19 -8
  52. data/lib/mongo/error/invalid_collection_name.rb +39 -0
  53. data/lib/mongo/error/invalid_database_name.rb +39 -0
  54. data/{test/replica_set/ssl_test.rb → lib/mongo/error/invalid_document.rb} +21 -14
  55. data/lib/mongo/error/invalid_file.rb +38 -0
  56. data/lib/mongo/error/invalid_nonce.rb +46 -0
  57. data/lib/mongo/error/invalid_replacement_document.rb +39 -0
  58. data/lib/mongo/error/invalid_signature.rb +47 -0
  59. data/{test/functional/ssl_test.rb → lib/mongo/error/invalid_update_document.rb} +22 -12
  60. data/lib/mongo/error/max_bson_size.rb +40 -0
  61. data/lib/mongo/error/max_message_size.rb +42 -0
  62. data/lib/mongo/{utils.rb → error/need_primary_server.rb} +10 -6
  63. data/lib/mongo/{connection.rb → error/operation_failure.rb} +10 -6
  64. data/lib/mongo/error/parser.rb +77 -0
  65. data/lib/mongo/{connection/socket.rb → error/socket_error.rb} +10 -5
  66. data/lib/mongo/error/socket_timeout_error.rb +23 -0
  67. data/lib/mongo/error/unsupported_features.rb +43 -0
  68. data/lib/mongo/event.rb +40 -0
  69. data/lib/mongo/event/listeners.rb +63 -0
  70. data/lib/mongo/event/primary_elected.rb +53 -0
  71. data/lib/mongo/event/publisher.rb +42 -0
  72. data/lib/mongo/event/server_added.rb +53 -0
  73. data/lib/mongo/event/server_removed.rb +53 -0
  74. data/lib/mongo/event/subscriber.rb +41 -0
  75. data/lib/mongo/grid.rb +16 -0
  76. data/lib/mongo/grid/file.rb +94 -0
  77. data/lib/mongo/grid/file/chunk.rb +184 -0
  78. data/lib/mongo/grid/file/metadata.rb +223 -0
  79. data/lib/mongo/grid/fs.rb +149 -0
  80. data/lib/mongo/index.rb +64 -0
  81. data/lib/mongo/index/view.rb +205 -0
  82. data/lib/mongo/loggable.rb +126 -0
  83. data/lib/mongo/logger.rb +132 -0
  84. data/lib/mongo/operation.rb +26 -0
  85. data/lib/mongo/operation/aggregate.rb +100 -0
  86. data/lib/mongo/operation/aggregate/result.rb +84 -0
  87. data/lib/mongo/operation/batchable.rb +103 -0
  88. data/lib/mongo/operation/bulk_delete/result.rb +197 -0
  89. data/lib/mongo/operation/bulk_insert/result.rb +195 -0
  90. data/lib/mongo/operation/bulk_update/result.rb +295 -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 +116 -0
  96. data/lib/mongo/operation/list_indexes/result.rb +118 -0
  97. data/lib/mongo/operation/map_reduce.rb +96 -0
  98. data/lib/mongo/operation/map_reduce/result.rb +122 -0
  99. data/lib/mongo/{functional.rb → operation/read.rb} +7 -7
  100. data/lib/mongo/operation/read/collections_info.rb +67 -0
  101. data/lib/mongo/operation/read/get_more.rb +71 -0
  102. data/lib/mongo/operation/read/indexes.rb +68 -0
  103. data/lib/mongo/operation/read/list_collections.rb +75 -0
  104. data/lib/mongo/operation/read/list_indexes.rb +77 -0
  105. data/lib/mongo/operation/read/query.rb +71 -0
  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 +380 -0
  109. data/lib/mongo/operation/write.rb +25 -0
  110. data/lib/mongo/operation/write/bulk_delete.rb +158 -0
  111. data/lib/mongo/operation/write/bulk_insert.rb +160 -0
  112. data/lib/mongo/operation/write/bulk_update.rb +167 -0
  113. data/lib/mongo/{connection/socket/socket_util.rb → operation/write/command.rb} +9 -24
  114. data/lib/mongo/operation/write/command/create_user.rb +43 -0
  115. data/lib/mongo/operation/write/command/delete.rb +56 -0
  116. data/lib/mongo/operation/write/command/drop_index.rb +51 -0
  117. data/lib/mongo/operation/write/command/ensure_index.rb +55 -0
  118. data/lib/mongo/operation/write/command/insert.rb +55 -0
  119. data/lib/mongo/operation/write/command/remove_user.rb +42 -0
  120. data/lib/mongo/operation/write/command/update.rb +60 -0
  121. data/lib/mongo/operation/write/command/writable.rb +61 -0
  122. data/lib/mongo/operation/write/create_index.rb +84 -0
  123. data/lib/mongo/operation/write/create_user.rb +75 -0
  124. data/lib/mongo/operation/write/delete.rb +91 -0
  125. data/lib/mongo/operation/write/drop_index.rb +62 -0
  126. data/lib/mongo/operation/write/insert.rb +88 -0
  127. data/lib/mongo/operation/write/remove_user.rb +70 -0
  128. data/lib/mongo/operation/write/update.rb +98 -0
  129. data/lib/mongo/protocol.rb +15 -0
  130. data/lib/mongo/protocol/bit_vector.rb +61 -0
  131. data/lib/mongo/protocol/delete.rb +94 -0
  132. data/lib/mongo/protocol/get_more.rb +99 -0
  133. data/lib/mongo/protocol/insert.rb +99 -0
  134. data/lib/mongo/protocol/kill_cursors.rb +74 -0
  135. data/lib/mongo/protocol/message.rb +252 -0
  136. data/lib/mongo/protocol/query.rb +147 -0
  137. data/lib/mongo/protocol/reply.rb +72 -0
  138. data/lib/mongo/protocol/serializers.rb +180 -0
  139. data/lib/mongo/protocol/update.rb +111 -0
  140. data/lib/mongo/server.rb +163 -0
  141. data/lib/mongo/server/connectable.rb +99 -0
  142. data/lib/mongo/server/connection.rb +133 -0
  143. data/lib/mongo/server/connection_pool.rb +141 -0
  144. data/lib/mongo/server/connection_pool/queue.rb +182 -0
  145. data/lib/mongo/server/context.rb +66 -0
  146. data/lib/mongo/server/description.rb +450 -0
  147. data/lib/mongo/server/description/features.rb +85 -0
  148. data/lib/mongo/server/description/inspector.rb +79 -0
  149. data/lib/mongo/server/description/inspector/primary_elected.rb +58 -0
  150. data/lib/mongo/server/description/inspector/server_added.rb +59 -0
  151. data/lib/mongo/server/description/inspector/server_removed.rb +59 -0
  152. data/lib/mongo/server/monitor.rb +160 -0
  153. data/lib/mongo/server/monitor/connection.rb +88 -0
  154. data/lib/mongo/server_selector.rb +81 -0
  155. data/lib/mongo/server_selector/nearest.rb +94 -0
  156. data/lib/mongo/server_selector/primary.rb +88 -0
  157. data/lib/mongo/server_selector/primary_preferred.rb +94 -0
  158. data/lib/mongo/server_selector/secondary.rb +91 -0
  159. data/lib/mongo/server_selector/secondary_preferred.rb +96 -0
  160. data/lib/mongo/server_selector/selectable.rb +209 -0
  161. data/lib/mongo/socket.rb +179 -0
  162. data/lib/mongo/socket/ssl.rb +108 -0
  163. data/lib/mongo/socket/tcp.rb +69 -0
  164. data/lib/mongo/socket/unix.rb +66 -0
  165. data/lib/mongo/uri.rb +504 -0
  166. data/lib/mongo/version.rb +21 -0
  167. data/lib/mongo/write_concern.rb +99 -0
  168. data/lib/mongo/write_concern/acknowledged.rb +38 -0
  169. data/lib/mongo/write_concern/normalizable.rb +73 -0
  170. data/lib/mongo/write_concern/unacknowledged.rb +43 -0
  171. data/mongo.gemspec +17 -14
  172. data/spec/mongo/address/ipv4_spec.rb +74 -0
  173. data/spec/mongo/address/ipv6_spec.rb +74 -0
  174. data/spec/mongo/address/unix_spec.rb +30 -0
  175. data/spec/mongo/address_spec.rb +206 -0
  176. data/spec/mongo/auth/cr_spec.rb +59 -0
  177. data/spec/mongo/auth/ldap_spec.rb +40 -0
  178. data/spec/mongo/auth/scram/conversation_spec.rb +197 -0
  179. data/spec/mongo/auth/scram_spec.rb +55 -0
  180. data/spec/mongo/auth/user/view_spec.rb +76 -0
  181. data/spec/mongo/auth/user_spec.rb +190 -0
  182. data/spec/mongo/auth/x509_spec.rb +40 -0
  183. data/spec/mongo/auth_spec.rb +65 -0
  184. data/spec/mongo/bulk/bulk_write_spec.rb +175 -0
  185. data/spec/mongo/client_spec.rb +564 -0
  186. data/spec/mongo/cluster/topology/replica_set_spec.rb +101 -0
  187. data/spec/mongo/cluster/topology/sharded_spec.rb +74 -0
  188. data/spec/mongo/cluster/topology/standalone_spec.rb +79 -0
  189. data/spec/mongo/cluster/topology_spec.rb +65 -0
  190. data/spec/mongo/cluster_spec.rb +129 -0
  191. data/spec/mongo/collection/view/aggregation_spec.rb +135 -0
  192. data/spec/mongo/collection/view/explainable_spec.rb +32 -0
  193. data/spec/mongo/collection/view/map_reduce_spec.rb +242 -0
  194. data/spec/mongo/collection/view/readable_spec.rb +603 -0
  195. data/spec/mongo/collection/view/writable_spec.rb +504 -0
  196. data/spec/mongo/collection/view_spec.rb +521 -0
  197. data/spec/mongo/collection_spec.rb +362 -0
  198. data/spec/mongo/cursor_spec.rb +295 -0
  199. data/spec/mongo/database_spec.rb +306 -0
  200. data/spec/mongo/error/parser_spec.rb +119 -0
  201. data/spec/mongo/event/publisher_spec.rb +50 -0
  202. data/spec/mongo/event/subscriber_spec.rb +34 -0
  203. data/spec/mongo/grid/file/chunk_spec.rb +226 -0
  204. data/spec/mongo/grid/file/metadata_spec.rb +69 -0
  205. data/spec/mongo/grid/file_spec.rb +138 -0
  206. data/spec/mongo/grid/fs_spec.rb +129 -0
  207. data/spec/mongo/index/view_spec.rb +226 -0
  208. data/spec/mongo/loggable_spec.rb +62 -0
  209. data/spec/mongo/logger_spec.rb +97 -0
  210. data/spec/mongo/operation/aggregate/result_spec.rb +80 -0
  211. data/spec/mongo/operation/aggregate_spec.rb +135 -0
  212. data/spec/mongo/operation/command_spec.rb +106 -0
  213. data/spec/mongo/operation/kill_cursors_spec.rb +66 -0
  214. data/spec/mongo/operation/limited_spec.rb +50 -0
  215. data/spec/mongo/operation/map_reduce_spec.rb +143 -0
  216. data/spec/mongo/operation/read/collections_info_spec.rb +40 -0
  217. data/spec/mongo/operation/read/get_more_spec.rb +81 -0
  218. data/spec/mongo/operation/read/indexes_spec.rb +31 -0
  219. data/spec/mongo/operation/read/query_spec.rb +84 -0
  220. data/spec/mongo/operation/result_spec.rb +275 -0
  221. data/spec/mongo/operation/specifiable_spec.rb +53 -0
  222. data/spec/mongo/operation/write/bulk_delete_spec.rb +473 -0
  223. data/spec/mongo/operation/write/bulk_insert_spec.rb +466 -0
  224. data/spec/mongo/operation/write/bulk_update_spec.rb +524 -0
  225. data/spec/mongo/operation/write/command/delete_spec.rb +116 -0
  226. data/spec/mongo/operation/write/command/insert_spec.rb +117 -0
  227. data/spec/mongo/operation/write/command/update_spec.rb +123 -0
  228. data/spec/mongo/operation/write/create_user_spec.rb +44 -0
  229. data/spec/mongo/operation/write/delete_spec.rb +178 -0
  230. data/spec/mongo/operation/write/drop_index_spec.rb +51 -0
  231. data/spec/mongo/operation/write/ensure_index_spec.rb +81 -0
  232. data/spec/mongo/operation/write/insert_spec.rb +231 -0
  233. data/spec/mongo/operation/write/remove_user_spec.rb +46 -0
  234. data/spec/mongo/operation/write/response_spec.rb +85 -0
  235. data/spec/mongo/operation/write/update_spec.rb +177 -0
  236. data/spec/mongo/protocol/delete_spec.rb +167 -0
  237. data/spec/mongo/protocol/get_more_spec.rb +146 -0
  238. data/spec/mongo/protocol/insert_spec.rb +161 -0
  239. data/spec/mongo/protocol/kill_cursors_spec.rb +101 -0
  240. data/spec/mongo/protocol/query_spec.rb +285 -0
  241. data/spec/mongo/protocol/reply_spec.rb +157 -0
  242. data/spec/mongo/protocol/update_spec.rb +186 -0
  243. data/spec/mongo/server/connection_pool/queue_spec.rb +170 -0
  244. data/spec/mongo/server/connection_pool_spec.rb +120 -0
  245. data/spec/mongo/server/connection_spec.rb +289 -0
  246. data/spec/mongo/server/description/features_spec.rb +138 -0
  247. data/spec/mongo/server/description/inspector/primary_elected_spec.rb +94 -0
  248. data/spec/mongo/server/description/inspector/server_added_spec.rb +92 -0
  249. data/spec/mongo/server/description/inspector/server_removed_spec.rb +95 -0
  250. data/spec/mongo/server/description_spec.rb +510 -0
  251. data/spec/mongo/server/monitor_spec.rb +130 -0
  252. data/spec/mongo/server_discovery_and_monitoring_spec.rb +103 -0
  253. data/spec/mongo/server_selection_rtt_spec.rb +104 -0
  254. data/spec/mongo/server_selection_spec.rb +89 -0
  255. data/spec/mongo/server_selector/nearest_spec.rb +250 -0
  256. data/spec/mongo/server_selector/primary_preferred_spec.rb +290 -0
  257. data/spec/mongo/server_selector/primary_spec.rb +114 -0
  258. data/spec/mongo/server_selector/secondary_preferred_spec.rb +252 -0
  259. data/spec/mongo/server_selector/secondary_spec.rb +196 -0
  260. data/spec/mongo/server_selector_spec.rb +101 -0
  261. data/spec/mongo/server_spec.rb +131 -0
  262. data/spec/mongo/uri_spec.rb +517 -0
  263. data/spec/mongo/write_concern/acknowledged_spec.rb +44 -0
  264. data/spec/mongo/write_concern/unacknowledged_spec.rb +15 -0
  265. data/spec/mongo_orchestration_spec.rb +70 -0
  266. data/spec/spec_helper.rb +148 -0
  267. data/spec/support/authorization.rb +245 -0
  268. data/spec/support/helpers.rb +140 -0
  269. data/spec/support/matchers.rb +37 -0
  270. data/spec/support/mongo_orchestration.rb +61 -0
  271. data/spec/support/mongo_orchestration/requestable.rb +109 -0
  272. data/spec/support/mongo_orchestration/standalone.rb +57 -0
  273. data/spec/support/sdam/rs/discover_arbiters.yml +41 -0
  274. data/spec/support/sdam/rs/discover_passives.yml +41 -0
  275. data/spec/support/sdam/rs/discover_primary.yml +40 -0
  276. data/spec/support/sdam/rs/discover_secondary.yml +41 -0
  277. data/spec/support/sdam/rs/discovery.yml +195 -0
  278. data/spec/support/sdam/rs/ghost_discovered.yml +39 -0
  279. data/spec/support/sdam/rs/hosts_differ_from_seeds.yml +34 -0
  280. data/spec/support/sdam/rs/member_reconfig.yml +68 -0
  281. data/spec/support/sdam/rs/member_standalone.yml +60 -0
  282. data/spec/support/sdam/rs/new_primary.yml +74 -0
  283. data/spec/support/sdam/rs/new_primary_wrong_set_name.yml +71 -0
  284. data/spec/support/sdam/rs/non_rs_member.yml +31 -0
  285. data/spec/support/sdam/rs/normalize_case.yml +49 -0
  286. data/spec/support/sdam/rs/primary_becomes_standalone.yml +52 -0
  287. data/spec/support/sdam/rs/primary_changes_set_name.yml +57 -0
  288. data/spec/support/sdam/rs/primary_disconnect.yml +56 -0
  289. data/spec/support/sdam/rs/primary_wrong_set_name.yml +27 -0
  290. data/spec/support/sdam/rs/response_from_removed.yml +63 -0
  291. data/spec/support/sdam/rs/rsother_discovered.yml +41 -0
  292. data/spec/support/sdam/rs/sec_not_auth.yml +49 -0
  293. data/spec/support/sdam/rs/secondary_wrong_set_name.yml +28 -0
  294. data/spec/support/sdam/rs/secondary_wrong_set_name_with_primary.yml +69 -0
  295. data/spec/support/sdam/rs/unexpected_mongos.yml +26 -0
  296. data/spec/support/sdam/rs/wrong_set_name.yml +35 -0
  297. data/spec/support/sdam/sharded/multiple_mongoses.yml +46 -0
  298. data/spec/support/sdam/sharded/non_mongos_removed.yml +41 -0
  299. data/spec/support/sdam/sharded/normalize_uri_case.yml +32 -0
  300. data/spec/support/sdam/single/direct_connection_external_ip.yml +34 -0
  301. data/spec/support/sdam/single/direct_connection_mongos.yml +33 -0
  302. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +35 -0
  303. data/spec/support/sdam/single/direct_connection_rsprimary.yml +34 -0
  304. data/spec/support/sdam/single/direct_connection_rssecondary.yml +35 -0
  305. data/spec/support/sdam/single/direct_connection_slave.yml +32 -0
  306. data/spec/support/sdam/single/direct_connection_standalone.yml +32 -0
  307. data/spec/support/sdam/single/not_ok_response.yml +39 -0
  308. data/spec/support/sdam/single/standalone_removed.yml +32 -0
  309. data/spec/support/sdam/single/unavailable_seed.yml +28 -0
  310. data/spec/support/server_discovery_and_monitoring.rb +167 -0
  311. data/spec/support/server_selection.rb +140 -0
  312. data/spec/support/server_selection/rtt/first_value.yml +4 -0
  313. data/spec/support/server_selection/rtt/first_value_zero.yml +4 -0
  314. data/spec/support/server_selection/rtt/value_test_1.yml +4 -0
  315. data/spec/support/server_selection/rtt/value_test_2.yml +4 -0
  316. data/spec/support/server_selection/rtt/value_test_3.yml +4 -0
  317. data/spec/support/server_selection/rtt/value_test_4.yml +4 -0
  318. data/spec/support/server_selection/rtt/value_test_5.yml +4 -0
  319. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest.yml +32 -0
  320. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Nearest_non_matching.yml +27 -0
  321. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Primary.yml +23 -0
  322. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred.yml +32 -0
  323. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/PrimaryPreferred_non_matching.yml +27 -0
  324. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary.yml +32 -0
  325. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred.yml +32 -0
  326. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/SecondaryPreferred_non_matching.yml +27 -0
  327. data/spec/support/server_selection/selection/ReplicaSetNoPrimary/read/Secondary_non_matching.yml +27 -0
  328. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest.yml +41 -0
  329. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Nearest_non_matching.yml +34 -0
  330. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/Primary.yml +33 -0
  331. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred.yml +39 -0
  332. data/spec/support/server_selection/selection/ReplicaSetWithPrimary/read/PrimaryPreferred_non_matching.yml +36 -0
  333. data/spec/support/server_selection/selection/Sharded/read/SecondaryPreferred.yml +32 -0
  334. data/spec/support/server_selection/selection/Single/read/SecondaryPreferred.yml +23 -0
  335. data/spec/support/server_selection/selection/Unknown/read/SecondaryPreferred.yml +13 -0
  336. data/spec/support/server_selection_rtt.rb +41 -0
  337. data/spec/support/shared/bulk_write.rb +498 -0
  338. data/spec/support/shared/cursor.rb +38 -0
  339. data/spec/support/shared/operation.rb +77 -0
  340. data/spec/support/shared/protocol.rb +31 -0
  341. data/spec/support/shared/server_selector.rb +111 -0
  342. data/spec/support/shared/socket.rb +82 -0
  343. data/spec/support/travis.rb +14 -0
  344. metadata +523 -189
  345. metadata.gz.sig +0 -0
  346. data/VERSION +0 -1
  347. data/lib/mongo/bulk_write_collection_view.rb +0 -387
  348. data/lib/mongo/collection_writer.rb +0 -364
  349. data/lib/mongo/connection/node.rb +0 -249
  350. data/lib/mongo/connection/pool.rb +0 -340
  351. data/lib/mongo/connection/pool_manager.rb +0 -320
  352. data/lib/mongo/connection/sharding_pool_manager.rb +0 -67
  353. data/lib/mongo/connection/socket/ssl_socket.rb +0 -95
  354. data/lib/mongo/connection/socket/tcp_socket.rb +0 -87
  355. data/lib/mongo/connection/socket/unix_socket.rb +0 -39
  356. data/lib/mongo/db.rb +0 -808
  357. data/lib/mongo/exception.rb +0 -145
  358. data/lib/mongo/functional/authentication.rb +0 -455
  359. data/lib/mongo/functional/logging.rb +0 -85
  360. data/lib/mongo/functional/read_preference.rb +0 -183
  361. data/lib/mongo/functional/scram.rb +0 -556
  362. data/lib/mongo/functional/uri_parser.rb +0 -409
  363. data/lib/mongo/functional/write_concern.rb +0 -66
  364. data/lib/mongo/gridfs/grid.rb +0 -112
  365. data/lib/mongo/gridfs/grid_ext.rb +0 -53
  366. data/lib/mongo/gridfs/grid_file_system.rb +0 -163
  367. data/lib/mongo/gridfs/grid_io.rb +0 -484
  368. data/lib/mongo/legacy.rb +0 -140
  369. data/lib/mongo/mongo_client.rb +0 -697
  370. data/lib/mongo/mongo_replica_set_client.rb +0 -535
  371. data/lib/mongo/mongo_sharded_client.rb +0 -159
  372. data/lib/mongo/networking.rb +0 -372
  373. data/lib/mongo/utils/conversions.rb +0 -110
  374. data/lib/mongo/utils/core_ext.rb +0 -70
  375. data/lib/mongo/utils/server_version.rb +0 -69
  376. data/lib/mongo/utils/support.rb +0 -80
  377. data/test/functional/authentication_test.rb +0 -39
  378. data/test/functional/bulk_api_stress_test.rb +0 -133
  379. data/test/functional/bulk_write_collection_view_test.rb +0 -1198
  380. data/test/functional/client_test.rb +0 -627
  381. data/test/functional/collection_test.rb +0 -2175
  382. data/test/functional/collection_writer_test.rb +0 -83
  383. data/test/functional/conversions_test.rb +0 -163
  384. data/test/functional/cursor_fail_test.rb +0 -57
  385. data/test/functional/cursor_message_test.rb +0 -56
  386. data/test/functional/cursor_test.rb +0 -683
  387. data/test/functional/db_api_test.rb +0 -835
  388. data/test/functional/db_test.rb +0 -348
  389. data/test/functional/grid_file_system_test.rb +0 -285
  390. data/test/functional/grid_io_test.rb +0 -252
  391. data/test/functional/grid_test.rb +0 -273
  392. data/test/functional/pool_test.rb +0 -136
  393. data/test/functional/safe_test.rb +0 -98
  394. data/test/functional/support_test.rb +0 -62
  395. data/test/functional/timeout_test.rb +0 -60
  396. data/test/functional/uri_test.rb +0 -446
  397. data/test/functional/write_concern_test.rb +0 -118
  398. data/test/helpers/general.rb +0 -50
  399. data/test/helpers/test_unit.rb +0 -476
  400. data/test/replica_set/authentication_test.rb +0 -37
  401. data/test/replica_set/basic_test.rb +0 -189
  402. data/test/replica_set/client_test.rb +0 -393
  403. data/test/replica_set/connection_test.rb +0 -138
  404. data/test/replica_set/count_test.rb +0 -66
  405. data/test/replica_set/cursor_test.rb +0 -220
  406. data/test/replica_set/insert_test.rb +0 -157
  407. data/test/replica_set/max_values_test.rb +0 -151
  408. data/test/replica_set/pinning_test.rb +0 -105
  409. data/test/replica_set/query_test.rb +0 -73
  410. data/test/replica_set/read_preference_test.rb +0 -219
  411. data/test/replica_set/refresh_test.rb +0 -211
  412. data/test/replica_set/replication_ack_test.rb +0 -95
  413. data/test/sharded_cluster/basic_test.rb +0 -203
  414. data/test/shared/authentication/basic_auth_shared.rb +0 -260
  415. data/test/shared/authentication/bulk_api_auth_shared.rb +0 -249
  416. data/test/shared/authentication/gssapi_shared.rb +0 -176
  417. data/test/shared/authentication/sasl_plain_shared.rb +0 -96
  418. data/test/shared/authentication/scram_shared.rb +0 -92
  419. data/test/shared/ssl_shared.rb +0 -235
  420. data/test/test_helper.rb +0 -61
  421. data/test/threading/basic_test.rb +0 -120
  422. data/test/tools/mongo_config.rb +0 -708
  423. data/test/tools/mongo_config_test.rb +0 -160
  424. data/test/unit/client_test.rb +0 -381
  425. data/test/unit/collection_test.rb +0 -166
  426. data/test/unit/connection_test.rb +0 -335
  427. data/test/unit/cursor_test.rb +0 -307
  428. data/test/unit/db_test.rb +0 -136
  429. data/test/unit/grid_test.rb +0 -76
  430. data/test/unit/mongo_sharded_client_test.rb +0 -48
  431. data/test/unit/node_test.rb +0 -93
  432. data/test/unit/pool_manager_test.rb +0 -111
  433. data/test/unit/read_pref_test.rb +0 -406
  434. data/test/unit/read_test.rb +0 -159
  435. data/test/unit/safe_test.rb +0 -158
  436. data/test/unit/sharding_pool_manager_test.rb +0 -84
  437. data/test/unit/write_concern_test.rb +0 -175
@@ -0,0 +1,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::WriteConcern::Acknowledged do
4
+
5
+ describe '#get_last_error' do
6
+
7
+ let(:get_last_error) do
8
+ concern.get_last_error
9
+ end
10
+
11
+ context 'when the options are symbols' do
12
+
13
+ let(:concern) do
14
+ described_class.new(:w => :majority)
15
+ end
16
+
17
+ it 'converts the values to strings' do
18
+ expect(get_last_error).to eq(:getlasterror => 1, :w => 'majority')
19
+ end
20
+ end
21
+
22
+ context 'when the options are strings' do
23
+
24
+ let(:concern) do
25
+ described_class.new(:w => 'majority')
26
+ end
27
+
28
+ it 'keeps the values as strings' do
29
+ expect(get_last_error).to eq(:getlasterror => 1, :w => 'majority')
30
+ end
31
+ end
32
+
33
+ context 'when the options are numbers' do
34
+
35
+ let(:concern) do
36
+ described_class.new(:w => 3)
37
+ end
38
+
39
+ it 'keeps the values as numbers' do
40
+ expect(get_last_error).to eq(:getlasterror => 1, :w => 3)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongo::WriteConcern::Unacknowledged do
4
+
5
+ let(:concern) do
6
+ described_class.new(:w => 0)
7
+ end
8
+
9
+ describe '#get_last_error' do
10
+
11
+ it 'returns nil' do
12
+ expect(concern.get_last_error).to be_nil
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ #describe MongoOrchestration, if: mongo_orchestration_available? do
4
+ #
5
+ # context 'when creating a standalone' do
6
+ #
7
+ # context 'when the mongo orchestration service is available' do
8
+ #
9
+ # before do
10
+ # initialize_mo_standalone!
11
+ # end
12
+ #
13
+ # after do
14
+ # stop_mo_standalone!
15
+ # end
16
+ #
17
+ # it 'sets up a standalone object with an id' do
18
+ # expect(@standalone.id).to_not be_nil
19
+ # end
20
+ #
21
+ # it 'sets up a standalone object with a client' do
22
+ # expect(@standalone.client).to_not be_nil
23
+ # end
24
+ #
25
+ # it 'sets the correct cluster topology' do
26
+ # expect(@standalone.client.cluster.topology).to eq(Mongo::Cluster::Topology::Standalone)
27
+ # end
28
+ #
29
+ # it 'sets the path' do
30
+ # expect(@standalone.path).to eq(MongoOrchestration::DEFAULT_BASE_URI)
31
+ # end
32
+ # end
33
+ #
34
+ # context 'when the mongo orchestration service is not available' do
35
+ #
36
+ # it 'raises an error' do
37
+ # expect do
38
+ # initialize_mo_standalone!('http://localhost:1')
39
+ # end.to raise_exception(MongoOrchestration::ServiceNotAvailable)
40
+ # end
41
+ # end
42
+ # end
43
+ #
44
+ # context 'when stopping a standalone' do
45
+ #
46
+ # before do
47
+ # initialize_mo_standalone!
48
+ # stop_mo_standalone!
49
+ # end
50
+ #
51
+ # it 'stops the standalone' do
52
+ # expect(@standalone.alive?).to eq(false)
53
+ # end
54
+ # end
55
+ #
56
+ # context 'when making a direct request' do
57
+ #
58
+ # before do
59
+ # initialize_mo_standalone!
60
+ # end
61
+ #
62
+ # after do
63
+ # stop_mo_standalone!
64
+ # end
65
+ #
66
+ # it 'returns the response' do
67
+ # expect(@standalone.request('GET', 'servers').class).to be(HTTParty::Response)
68
+ # end
69
+ # end
70
+ #end
@@ -0,0 +1,148 @@
1
+ if RUBY_VERSION > '1.9' && RUBY_VERSION < '2.2'
2
+ require 'simplecov'
3
+ require 'coveralls'
4
+
5
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
6
+ SimpleCov::Formatter::HTMLFormatter,
7
+ Coveralls::SimpleCov::Formatter
8
+ ]
9
+
10
+ SimpleCov.start do
11
+ # report groups
12
+ add_group 'Wire Protocol', 'lib/mongo/protocol'
13
+ # filters
14
+ add_filter 'tasks'
15
+ add_filter 'spec'
16
+ add_filter 'bin'
17
+ end
18
+ end
19
+
20
+ require 'mongo'
21
+
22
+ require 'support/travis'
23
+ require 'support/matchers'
24
+ require 'support/authorization'
25
+ require 'support/mongo_orchestration'
26
+ require 'support/server_discovery_and_monitoring'
27
+ require 'support/server_selection_rtt'
28
+ require 'support/server_selection'
29
+
30
+ Mongo::Logger.logger = Logger.new($stdout)
31
+ Mongo::Logger.logger.level = Logger::INFO
32
+
33
+ RSpec.configure do |config|
34
+ config.color = true
35
+ config.fail_fast = true unless ENV['CI'] || ENV['JENKINS_HOME']
36
+ config.formatter = 'documentation'
37
+ config.include(Authorization)
38
+
39
+ config.before(:suite) do
40
+
41
+ begin
42
+ # Create the root user administrator as the first user to be added to the
43
+ # database. This user will need to be authenticated in order to add any
44
+ # more users to any other databases.
45
+ ADMIN_UNAUTHORIZED_CLIENT.database.users.create(ROOT_USER)
46
+ rescue Exception => e
47
+ end
48
+ begin
49
+ # Adds the test user to the test database with permissions on all
50
+ # databases that will be used in the test suite.
51
+ ADMIN_AUTHORIZED_CLIENT.database.users.create(TEST_USER)
52
+ rescue Exception => e
53
+ unless write_command_enabled?
54
+ # If we are on versions less than 2.6, we need to create a user for
55
+ # each database, since the users are not stored in the admin database
56
+ # but in the system.users collection on the datbases themselves. Also,
57
+ # roles in versions lower than 2.6 can only be strings, not hashes.
58
+ begin ROOT_AUTHORIZED_CLIENT.database.users.create(TEST_READ_WRITE_USER); rescue; end
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ TEST_SET = 'ruby-driver-rs'
65
+ COVERAGE_MIN = 90
66
+ CURRENT_PATH = File.expand_path(File.dirname(__FILE__))
67
+ SERVER_DISCOVERY_TESTS = Dir.glob("#{CURRENT_PATH}/support/sdam/**/*.yml")
68
+ SERVER_SELECTION_RTT_TESTS = Dir.glob("#{CURRENT_PATH}/support/server_selection/rtt/*.yml")
69
+ SERVER_SELECTION_TESTS = Dir.glob("#{CURRENT_PATH}/support/server_selection/selection/**/*.yml")
70
+
71
+ # Determine whether the test clients are connecting to a standlone.
72
+ #
73
+ # @since 2.0.0
74
+ def standalone?
75
+ $mongo_client ||= initialize_scanned_client!
76
+ $standalone ||= $mongo_client.cluster.standalone?
77
+ end
78
+
79
+ # Determine whether the test clients are connecting to a replica set.
80
+ #
81
+ # @since 2.0.0
82
+ def replica_set?
83
+ $mongo_client ||= initialize_scanned_client!
84
+ $replica_set ||= $mongo_client.cluster.replica_set?
85
+ end
86
+
87
+ # Determine whether the test clients are connecting to a sharded cluster.
88
+ #
89
+ # @since 2.0.0
90
+ def sharded?
91
+ $mongo_client ||= initialize_scanned_client!
92
+ $sharded ||= $mongo_client.cluster.sharded?
93
+ end
94
+
95
+ # For instances where behaviour is different on different versions, we need to
96
+ # determine in the specs if we are 2.6 or higher.
97
+ #
98
+ # @since 2.0.0
99
+ def write_command_enabled?
100
+ $mongo_client ||= initialize_scanned_client!
101
+ $write_command_enabled ||= $mongo_client.cluster.servers.first.features.write_command_enabled?
102
+ end
103
+
104
+ # For instances where behaviour is different on different versions, we need to
105
+ # determine in the specs if we are 2.7 or higher.
106
+ #
107
+ # @since 2.0.0
108
+ def list_command_enabled?
109
+ $mongo_client ||= initialize_scanned_client!
110
+ $list_command_enabled ||= $mongo_client.cluster.servers.first.features.list_indexes_enabled?
111
+ end
112
+
113
+ alias :scram_sha_1_enabled? :list_command_enabled?
114
+
115
+ # Depending on whether write commands are enabled, there are different documents that
116
+ # are guaranteed to cause a delete failure.
117
+ #
118
+ # @since 2.0.0
119
+ def failing_delete_doc
120
+ write_command_enabled? ? { q: { '$set' => { a: 1 } }, limit: 0 } :
121
+ { que: { field: 'test' } }
122
+ end
123
+
124
+ # Initializes a basic scanned client to do an ismaster check.
125
+ #
126
+ # @since 2.0.0
127
+ def initialize_scanned_client!
128
+ Mongo::Client.new(ADDRESSES, database: TEST_DB, connect: CONNECT)
129
+ end
130
+
131
+ def initialize_mo_standalone!(path = nil)
132
+ $mongo_standalone ||= MongoOrchestration.get(:standalone, path: path)
133
+ end
134
+
135
+ def stop_mo_standalone!
136
+ $mongo_standalone.stop if $mongo_standalone
137
+ end
138
+
139
+ def mongo_orchestration_available?(path = nil)
140
+ begin
141
+ MongoOrchestration.get(:standalone, path: path)
142
+ rescue MongoOrchestration::ServiceNotAvailable
143
+ return false
144
+ end
145
+ end
146
+
147
+ # require all shared examples
148
+ Dir['./spec/support/shared/*.rb'].sort.each { |file| require file }
@@ -0,0 +1,245 @@
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
+ # The default test database for all specs.
16
+ #
17
+ # @since 2.0.0
18
+ TEST_DB = 'ruby-driver'.freeze
19
+
20
+ # The default test collection.
21
+ #
22
+ # @since 2.0.0
23
+ TEST_COLL = 'test'.freeze
24
+
25
+ # The seed addresses to be used when creating a client.
26
+ #
27
+ # @since 2.0.0
28
+ ADDRESSES = ENV['MONGODB_ADDRESSES'] ? ENV['MONGODB_ADDRESSES'].split(',').freeze :
29
+ [ '127.0.0.1:27017' ].freeze
30
+
31
+ # A default address to use in tests.
32
+ #
33
+ # @since 2.0.0
34
+ DEFAULT_ADDRESS = ADDRESSES.first
35
+
36
+ # The topology type.
37
+ #
38
+ # @since 2.0.0
39
+ CONNECT = ENV['RS_ENABLED'] == 'true' ? :replica_set.freeze :
40
+ ENV['SHARDED_ENABLED'] == 'true' ? :sharded.freeze :
41
+ :direct.freeze
42
+
43
+ # The root user name.
44
+ #
45
+ # @since 2.0.0
46
+ ROOT_USER_NAME = ENV['ROOT_USER_NAME'] || 'root-user'
47
+
48
+ # The root user password.
49
+ #
50
+ # @since 2.0.0
51
+ ROOT_USER_PWD = ENV['ROOT_USER_PWD'] || 'password'
52
+
53
+ # Gets the root system administrator user.
54
+ #
55
+ # @since 2.0.0
56
+ ROOT_USER = Mongo::Auth::User.new(
57
+ database: Mongo::Database::ADMIN,
58
+ user: ROOT_USER_NAME,
59
+ password: ROOT_USER_PWD,
60
+ roles: [
61
+ Mongo::Auth::Roles::USER_ADMIN_ANY_DATABASE,
62
+ Mongo::Auth::Roles::DATABASE_ADMIN_ANY_DATABASE,
63
+ Mongo::Auth::Roles::READ_WRITE_ANY_DATABASE,
64
+ Mongo::Auth::Roles::HOST_MANAGER
65
+ ]
66
+ )
67
+
68
+ # Get the default test user for the suite on versions 2.6 and higher.
69
+ #
70
+ # @since 2.0.0
71
+ TEST_USER = Mongo::Auth::User.new(
72
+ database: Mongo::Database::ADMIN,
73
+ user: 'test-user',
74
+ password: 'password',
75
+ roles: [
76
+ { role: Mongo::Auth::Roles::READ_WRITE, db: TEST_DB },
77
+ { role: Mongo::Auth::Roles::DATABASE_ADMIN, db: TEST_DB }
78
+ ]
79
+ )
80
+
81
+ # MongoDB 2.4 and lower does not allow hashes as roles, so we need to create a
82
+ # user on those versions for each database permission in order to ensure the
83
+ # legacy roles work with users. The following users are those.
84
+
85
+ # Gets the default test user for the suite on 2.4 and lower.
86
+ #
87
+ # @since 2.0.
88
+ TEST_READ_WRITE_USER = Mongo::Auth::User.new(
89
+ database: TEST_DB,
90
+ user: 'test-user',
91
+ password: 'password',
92
+ roles: [ Mongo::Auth::Roles::READ_WRITE, Mongo::Auth::Roles::DATABASE_ADMIN ]
93
+ )
94
+
95
+ # The write concern to use in the tests.
96
+ #
97
+ # @since 2.0.0
98
+ WRITE_CONCERN = CONNECT == :direct || :sharded ? { w: 1 } : { w: 'majority' }
99
+
100
+ # Provides an authorized mongo client on the default test database for the
101
+ # default test user.
102
+ #
103
+ # @since 2.0.0
104
+ AUTHORIZED_CLIENT = Mongo::Client.new(
105
+ ADDRESSES,
106
+ database: TEST_DB,
107
+ user: TEST_USER.name,
108
+ password: TEST_USER.password,
109
+ max_pool_size: 1,
110
+ write: WRITE_CONCERN,
111
+ connect: CONNECT
112
+ )
113
+
114
+ # Provides an authorized mongo client on the default test database for the
115
+ # default root system administrator.
116
+ #
117
+ # @since 2.0.0
118
+ ROOT_AUTHORIZED_CLIENT = Mongo::Client.new(
119
+ ADDRESSES,
120
+ auth_source: Mongo::Database::ADMIN,
121
+ database: TEST_DB,
122
+ user: ROOT_USER.name,
123
+ password: ROOT_USER.password,
124
+ max_pool_size: 1,
125
+ write: WRITE_CONCERN,
126
+ connect: CONNECT
127
+ )
128
+
129
+ # Provides an unauthorized mongo client on the default test database.
130
+ #
131
+ # @since 2.0.0
132
+ UNAUTHORIZED_CLIENT = Mongo::Client.new(
133
+ ADDRESSES,
134
+ database: TEST_DB,
135
+ max_pool_size: 1,
136
+ write: WRITE_CONCERN,
137
+ connect: CONNECT
138
+ )
139
+
140
+ # Provides an unauthorized mongo client on the admin database, for use in
141
+ # setting up the first admin root user.
142
+ #
143
+ # @since 2.0.0
144
+ ADMIN_UNAUTHORIZED_CLIENT = Mongo::Client.new(
145
+ ADDRESSES,
146
+ database: Mongo::Database::ADMIN,
147
+ max_pool_size: 1,
148
+ write: WRITE_CONCERN,
149
+ connect: CONNECT
150
+ )
151
+
152
+ # Get an authorized client on the admin database logged in as the admin
153
+ # root user.
154
+ #
155
+ # @since 2.0.0
156
+ ADMIN_AUTHORIZED_CLIENT = ADMIN_UNAUTHORIZED_CLIENT.with(
157
+ user: ROOT_USER.name,
158
+ password: ROOT_USER.password
159
+ )
160
+
161
+ module Authorization
162
+
163
+ # On inclusion provides helpers for use with testing with and without
164
+ # authorization.
165
+ #
166
+ #
167
+ # @since 2.0.0
168
+ def self.included(context)
169
+
170
+ # Gets the root system administrator user.
171
+ #
172
+ # @since 2.0.0
173
+ context.let(:root_user) { ROOT_USER }
174
+
175
+ # Get the default test user for the suite.
176
+ #
177
+ # @since 2.0.0
178
+ context.let(:test_user) { TEST_USER }
179
+
180
+ # Provides an authorized mongo client on the default test database for the
181
+ # default test user.
182
+ #
183
+ # @since 2.0.0
184
+ context.let(:authorized_client) { AUTHORIZED_CLIENT }
185
+
186
+ # Provides an authorized mongo client on the default test database for the
187
+ # default root system administrator.
188
+ #
189
+ # @since 2.0.0
190
+ context.let(:root_authorized_client) { ROOT_AUTHORIZED_CLIENT }
191
+
192
+ # Provides an unauthorized mongo client on the default test database.
193
+ #
194
+ # @since 2.0.0
195
+ context.let!(:unauthorized_client) { UNAUTHORIZED_CLIENT }
196
+
197
+ # Provides an unauthorized mongo client on the admin database, for use in
198
+ # setting up the first admin root user.
199
+ #
200
+ # @since 2.0.0
201
+ context.let!(:admin_unauthorized_client) { ADMIN_UNAUTHORIZED_CLIENT }
202
+
203
+ # Get an authorized client on the admin database logged in as the admin
204
+ # root user.
205
+ #
206
+ # @since 2.0.0
207
+ context.let!(:admin_authorized_client) { ADMIN_AUTHORIZED_CLIENT }
208
+
209
+ # Gets the default test collection from the authorized client.
210
+ #
211
+ # @since 2.0.0
212
+ context.let(:authorized_collection) do
213
+ authorized_client[TEST_COLL]
214
+ end
215
+
216
+ # Gets the default test collection from the unauthorized client.
217
+ #
218
+ # @since 2.0.0
219
+ context.let(:unauthorized_collection) do
220
+ unauthorized_client[TEST_COLL]
221
+ end
222
+
223
+ # Gets a primary server for the default authorized client.
224
+ #
225
+ # @since 2.0.0
226
+ context.let(:authorized_primary) do
227
+ authorized_client.cluster.next_primary
228
+ end
229
+
230
+ # Get a primary server for the client authorized as the root system
231
+ # administrator.
232
+ #
233
+ # @since 2.0.0
234
+ context.let(:root_authorized_primary) do
235
+ root_authorized_client.cluster.next_primary
236
+ end
237
+
238
+ # Get a primary server from the unauthorized client.
239
+ #
240
+ # @since 2.0.0
241
+ context.let(:unauthorized_primary) do
242
+ authorized_client.cluster.next_primary
243
+ end
244
+ end
245
+ end