mongo 2.0.6 → 2.1.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 (317) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +5 -2
  3. data/lib/mongo/address/ipv4.rb +6 -1
  4. data/lib/mongo/address/unix.rb +2 -2
  5. data/lib/mongo/address.rb +18 -10
  6. data/lib/mongo/auth/cr/conversation.rb +1 -1
  7. data/lib/mongo/auth/ldap/conversation.rb +7 -3
  8. data/lib/mongo/auth/scram/conversation.rb +9 -3
  9. data/lib/mongo/auth/user/view.rb +23 -2
  10. data/lib/mongo/auth/x509/conversation.rb +1 -1
  11. data/lib/mongo/bulk_write/combineable.rb +51 -0
  12. data/lib/mongo/bulk_write/ordered_combiner.rb +55 -0
  13. data/lib/mongo/bulk_write/result.rb +191 -0
  14. data/lib/mongo/bulk_write/result_combiner.rb +117 -0
  15. data/lib/mongo/bulk_write/transformable.rb +132 -0
  16. data/lib/mongo/bulk_write/unordered_combiner.rb +52 -0
  17. data/lib/mongo/bulk_write/validatable.rb +62 -0
  18. data/lib/mongo/bulk_write.rb +159 -23
  19. data/lib/mongo/client.rb +52 -16
  20. data/lib/mongo/cluster/topology/replica_set.rb +27 -9
  21. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  22. data/lib/mongo/cluster/topology/unknown.rb +5 -2
  23. data/lib/mongo/cluster.rb +42 -7
  24. data/lib/mongo/collection/view/aggregation.rb +48 -9
  25. data/lib/mongo/collection/view/immutable.rb +6 -6
  26. data/lib/mongo/collection/view/iterable.rb +18 -4
  27. data/lib/mongo/collection/view/map_reduce.rb +58 -17
  28. data/lib/mongo/collection/view/readable.rb +173 -42
  29. data/lib/mongo/collection/view/writable.rb +37 -23
  30. data/lib/mongo/collection/view.rb +2 -2
  31. data/lib/mongo/collection.rb +370 -33
  32. data/lib/mongo/cursor.rb +15 -3
  33. data/lib/mongo/database/view.rb +5 -4
  34. data/lib/mongo/database.rb +14 -4
  35. data/lib/mongo/dbref.rb +113 -0
  36. data/lib/mongo/error/closed_stream.rb +34 -0
  37. data/lib/mongo/error/extra_file_chunk.rb +34 -0
  38. data/lib/mongo/error/{invalid_uri_option.rb → file_not_found.rb} +11 -12
  39. data/lib/mongo/error/invalid_file.rb +2 -2
  40. data/lib/mongo/error/invalid_file_revision.rb +37 -0
  41. data/lib/mongo/error/invalid_uri.rb +5 -4
  42. data/lib/mongo/error/missing_file_chunk.rb +38 -0
  43. data/lib/mongo/error/operation_failure.rb +1 -1
  44. data/lib/mongo/error/parser.rb +1 -1
  45. data/lib/mongo/error/unchangeable_collection_option.rb +38 -0
  46. data/lib/mongo/error/unexpected_chunk_length.rb +39 -0
  47. data/lib/mongo/error.rb +13 -2
  48. data/lib/mongo/event/description_changed.rb +1 -1
  49. data/lib/mongo/grid/file/chunk.rb +6 -6
  50. data/lib/mongo/grid/file/{metadata.rb → info.rb} +41 -39
  51. data/lib/mongo/grid/file.rb +13 -10
  52. data/lib/mongo/grid/fs_bucket.rb +448 -0
  53. data/lib/mongo/grid/stream/read.rb +208 -0
  54. data/lib/mongo/grid/stream/write.rb +187 -0
  55. data/lib/mongo/grid/stream.rb +64 -0
  56. data/lib/mongo/grid.rb +2 -1
  57. data/lib/mongo/index/view.rb +3 -3
  58. data/lib/mongo/index.rb +5 -0
  59. data/lib/mongo/loggable.rb +34 -57
  60. data/lib/mongo/logger.rb +16 -78
  61. data/lib/mongo/monitoring/command_log_subscriber.rb +112 -0
  62. data/lib/mongo/monitoring/event/command_failed.rb +96 -0
  63. data/lib/mongo/monitoring/event/command_started.rb +89 -0
  64. data/lib/mongo/monitoring/event/command_succeeded.rb +118 -0
  65. data/lib/mongo/monitoring/event/secure.rb +58 -0
  66. data/lib/mongo/monitoring/event.rb +18 -0
  67. data/lib/mongo/monitoring/publishable.rb +106 -0
  68. data/lib/mongo/monitoring.rb +195 -0
  69. data/lib/mongo/operation/{aggregate.rb → commands/aggregate.rb} +3 -41
  70. data/lib/mongo/operation/commands/collections_info/result.rb +39 -0
  71. data/lib/mongo/operation/commands/collections_info.rb +68 -0
  72. data/lib/mongo/operation/{command.rb → commands/command.rb} +2 -18
  73. data/lib/mongo/operation/commands/indexes.rb +70 -0
  74. data/lib/mongo/operation/commands/list_collections/result.rb +112 -0
  75. data/lib/mongo/operation/commands/list_collections.rb +54 -0
  76. data/lib/mongo/operation/commands/list_indexes/result.rb +116 -0
  77. data/lib/mongo/operation/commands/list_indexes.rb +56 -0
  78. data/lib/mongo/operation/{map_reduce → commands/map_reduce}/result.rb +1 -1
  79. data/lib/mongo/operation/{map_reduce.rb → commands/map_reduce.rb} +3 -41
  80. data/lib/mongo/operation/commands/parallel_scan/result.rb +72 -0
  81. data/lib/mongo/operation/commands/parallel_scan.rb +56 -0
  82. data/lib/mongo/operation/commands/user_query.rb +69 -0
  83. data/lib/mongo/{bulk_write/ordered_bulk_write.rb → operation/commands/users_info/result.rb} +18 -30
  84. data/lib/mongo/operation/commands/users_info.rb +53 -0
  85. data/lib/mongo/operation/commands.rb +24 -0
  86. data/lib/mongo/operation/executable.rb +4 -68
  87. data/lib/mongo/operation/kill_cursors.rb +3 -3
  88. data/lib/mongo/operation/read/get_more.rb +2 -22
  89. data/lib/mongo/{bulk_write/unordered_bulk_write.rb → operation/read/query/result.rb} +20 -26
  90. data/lib/mongo/operation/read/query.rb +4 -21
  91. data/lib/mongo/operation/read.rb +0 -4
  92. data/lib/mongo/operation/{read_preferrable.rb → read_preference.rb} +3 -2
  93. data/lib/mongo/operation/result.rb +13 -1
  94. data/lib/mongo/operation/specifiable.rb +42 -0
  95. data/lib/mongo/operation/write/bulk/bulkable.rb +82 -0
  96. data/lib/mongo/operation/write/bulk/delete/result.rb +74 -0
  97. data/lib/mongo/operation/write/bulk/delete.rb +71 -0
  98. data/lib/mongo/operation/write/bulk/insert/result.rb +129 -0
  99. data/lib/mongo/operation/write/bulk/insert.rb +96 -0
  100. data/lib/mongo/operation/write/bulk/legacy_mergable.rb +87 -0
  101. data/lib/mongo/operation/write/bulk/mergable.rb +71 -0
  102. data/lib/mongo/operation/write/bulk/update/result.rb +174 -0
  103. data/lib/mongo/operation/write/bulk/update.rb +81 -0
  104. data/lib/mongo/operation/write/bulk.rb +6 -3
  105. data/lib/mongo/operation/write/command/create_index.rb +0 -1
  106. data/lib/mongo/operation/write/command/create_user.rb +0 -1
  107. data/lib/mongo/operation/write/command/delete.rb +0 -1
  108. data/lib/mongo/operation/write/command/drop_index.rb +0 -1
  109. data/lib/mongo/operation/write/command/insert.rb +0 -1
  110. data/lib/mongo/operation/write/command/remove_user.rb +0 -1
  111. data/lib/mongo/operation/write/command/update.rb +0 -1
  112. data/lib/mongo/operation/write/command/update_user.rb +0 -1
  113. data/lib/mongo/operation/write/command/writable.rb +13 -18
  114. data/lib/mongo/operation/write/create_index.rb +4 -27
  115. data/lib/mongo/operation/write/create_user.rb +4 -30
  116. data/lib/mongo/operation/write/delete.rb +6 -29
  117. data/lib/mongo/operation/write/drop_index.rb +3 -3
  118. data/lib/mongo/operation/write/gle.rb +48 -0
  119. data/lib/mongo/operation/write/idable.rb +5 -0
  120. data/lib/mongo/operation/write/insert.rb +2 -24
  121. data/lib/mongo/operation/write/remove_user.rb +4 -27
  122. data/lib/mongo/operation/write/update.rb +13 -36
  123. data/lib/mongo/operation/write/update_user.rb +4 -30
  124. data/lib/mongo/operation/write/write_command_enabled.rb +53 -0
  125. data/lib/mongo/operation/write.rb +2 -0
  126. data/lib/mongo/operation.rb +32 -4
  127. data/lib/mongo/options/mapper.rb +4 -2
  128. data/lib/mongo/options/redacted.rb +156 -0
  129. data/lib/mongo/options.rb +1 -0
  130. data/lib/mongo/protocol/delete.rb +75 -15
  131. data/lib/mongo/protocol/get_more.rb +65 -13
  132. data/lib/mongo/protocol/insert.rb +85 -13
  133. data/lib/mongo/protocol/kill_cursors.rb +59 -14
  134. data/lib/mongo/protocol/message.rb +12 -12
  135. data/lib/mongo/protocol/query.rb +163 -37
  136. data/lib/mongo/protocol/reply.rb +103 -0
  137. data/lib/mongo/protocol/serializers.rb +1 -1
  138. data/lib/mongo/protocol/update.rb +82 -14
  139. data/lib/mongo/retryable.rb +83 -0
  140. data/lib/mongo/server/connectable.rb +21 -25
  141. data/lib/mongo/server/connection.rb +75 -4
  142. data/lib/mongo/server/connection_pool/queue.rb +15 -0
  143. data/lib/mongo/server/connection_pool.rb +12 -0
  144. data/lib/mongo/server/description/features.rb +2 -1
  145. data/lib/mongo/server/description.rb +52 -1
  146. data/lib/mongo/server/monitor/connection.rb +26 -2
  147. data/lib/mongo/server/monitor.rb +19 -3
  148. data/lib/mongo/server.rb +39 -5
  149. data/lib/mongo/server_selector/selectable.rb +40 -31
  150. data/lib/mongo/server_selector.rb +19 -10
  151. data/lib/mongo/socket/ssl.rb +28 -16
  152. data/lib/mongo/socket/tcp.rb +3 -3
  153. data/lib/mongo/socket/unix.rb +5 -8
  154. data/lib/mongo/socket.rb +11 -4
  155. data/lib/mongo/uri.rb +248 -137
  156. data/lib/mongo/version.rb +1 -1
  157. data/lib/mongo.rb +5 -3
  158. data/spec/mongo/address/unix_spec.rb +1 -1
  159. data/spec/mongo/address_spec.rb +25 -0
  160. data/spec/mongo/auth/cr_spec.rb +9 -1
  161. data/spec/mongo/auth/ldap/conversation_spec.rb +43 -0
  162. data/spec/mongo/auth/ldap_spec.rb +9 -1
  163. data/spec/mongo/auth/scram_spec.rb +9 -1
  164. data/spec/mongo/auth/user/view_spec.rb +26 -1
  165. data/spec/mongo/auth/x509_spec.rb +9 -1
  166. data/spec/mongo/bulk_write/ordered_combiner_spec.rb +271 -0
  167. data/spec/mongo/bulk_write/unordered_combiner_spec.rb +239 -0
  168. data/spec/mongo/bulk_write_spec.rb +428 -0
  169. data/spec/mongo/client_spec.rb +167 -17
  170. data/spec/mongo/cluster/topology/replica_set_spec.rb +18 -9
  171. data/spec/mongo/cluster/topology/sharded_spec.rb +11 -3
  172. data/spec/mongo/cluster/topology/single_spec.rb +12 -4
  173. data/spec/mongo/cluster_spec.rb +55 -10
  174. data/spec/mongo/collection/view/aggregation_spec.rb +188 -1
  175. data/spec/mongo/collection/view/explainable_spec.rb +1 -1
  176. data/spec/mongo/collection/view/immutable_spec.rb +103 -0
  177. data/spec/mongo/collection/view/map_reduce_spec.rb +99 -4
  178. data/spec/mongo/collection/view/readable_spec.rb +238 -6
  179. data/spec/mongo/collection/view/writable_spec.rb +4 -4
  180. data/spec/mongo/collection/view_spec.rb +459 -71
  181. data/spec/mongo/collection_spec.rb +1291 -9
  182. data/spec/mongo/command_monitoring_spec.rb +51 -0
  183. data/spec/mongo/connection_string_spec.rb +115 -0
  184. data/spec/mongo/crud_spec.rb +2 -2
  185. data/spec/mongo/cursor_spec.rb +3 -3
  186. data/spec/mongo/database_spec.rb +47 -11
  187. data/spec/mongo/dbref_spec.rb +149 -0
  188. data/spec/mongo/grid/file/chunk_spec.rb +5 -5
  189. data/spec/mongo/grid/file/{metadata_spec.rb → info_spec.rb} +29 -17
  190. data/spec/mongo/grid/file_spec.rb +8 -8
  191. data/spec/mongo/grid/fs_bucket_spec.rb +1020 -0
  192. data/spec/mongo/grid/stream/read_spec.rb +275 -0
  193. data/spec/mongo/grid/stream/write_spec.rb +440 -0
  194. data/spec/mongo/grid/stream_spec.rb +48 -0
  195. data/spec/mongo/gridfs_spec.rb +50 -0
  196. data/spec/mongo/logger_spec.rb +0 -40
  197. data/spec/mongo/monitoring/command_log_subscriber_spec.rb +76 -0
  198. data/spec/mongo/monitoring/event/command_started_spec.rb +26 -0
  199. data/spec/mongo/monitoring/event/command_succeeded_spec.rb +26 -0
  200. data/spec/mongo/monitoring/event/secure_spec.rb +57 -0
  201. data/spec/mongo/monitoring_spec.rb +168 -0
  202. data/spec/mongo/operation/commands/aggregate_spec.rb +69 -0
  203. data/spec/mongo/operation/{read → commands}/collections_info_spec.rb +1 -1
  204. data/spec/mongo/operation/{command_spec.rb → commands/command_spec.rb} +0 -18
  205. data/spec/mongo/operation/{read → commands}/indexes_spec.rb +1 -1
  206. data/spec/mongo/operation/{map_reduce_spec.rb → commands/map_reduce_spec.rb} +1 -19
  207. data/spec/mongo/operation/kill_cursors_spec.rb +1 -17
  208. data/spec/mongo/operation/read/get_more_spec.rb +0 -16
  209. data/spec/mongo/operation/read/query_spec.rb +19 -16
  210. data/spec/mongo/operation/{read_preferrable_spec.rb → read_preference_spec.rb} +11 -11
  211. data/spec/mongo/operation/write/bulk/{bulk_delete_spec.rb → delete_spec.rb} +18 -29
  212. data/spec/mongo/operation/write/bulk/{bulk_insert_spec.rb → insert_spec.rb} +3 -14
  213. data/spec/mongo/operation/write/bulk/{bulk_update_spec.rb → update_spec.rb} +8 -19
  214. data/spec/mongo/operation/write/command/delete_spec.rb +0 -16
  215. data/spec/mongo/operation/write/command/insert_spec.rb +0 -16
  216. data/spec/mongo/operation/write/command/update_spec.rb +0 -16
  217. data/spec/mongo/operation/write/delete_spec.rb +4 -4
  218. data/spec/mongo/operation/write/insert_spec.rb +2 -13
  219. data/spec/mongo/operation/write/update_spec.rb +7 -7
  220. data/spec/mongo/options/redacted_spec.rb +350 -0
  221. data/spec/mongo/protocol/kill_cursors_spec.rb +5 -3
  222. data/spec/mongo/protocol/query_spec.rb +15 -30
  223. data/spec/mongo/retryable_spec.rb +147 -0
  224. data/spec/mongo/server/connection_pool/queue_spec.rb +16 -0
  225. data/spec/mongo/server/connection_pool_spec.rb +50 -6
  226. data/spec/mongo/server/connection_spec.rb +49 -4
  227. data/spec/mongo/server/description_spec.rb +49 -3
  228. data/spec/mongo/server/monitor_spec.rb +51 -0
  229. data/spec/mongo/server_discovery_and_monitoring_spec.rb +32 -59
  230. data/spec/mongo/server_selection_rtt_spec.rb +37 -57
  231. data/spec/mongo/server_selection_spec.rb +19 -9
  232. data/spec/mongo/server_selector/nearest_spec.rb +35 -27
  233. data/spec/mongo/server_selector/primary_preferred_spec.rb +32 -30
  234. data/spec/mongo/server_selector/primary_spec.rb +21 -14
  235. data/spec/mongo/server_selector/secondary_preferred_spec.rb +28 -26
  236. data/spec/mongo/server_selector/secondary_spec.rb +24 -22
  237. data/spec/mongo/server_selector_spec.rb +87 -24
  238. data/spec/mongo/server_spec.rb +94 -8
  239. data/spec/mongo/socket/ssl_spec.rb +123 -13
  240. data/spec/mongo/socket/unix_spec.rb +52 -0
  241. data/spec/mongo/uri_spec.rb +295 -67
  242. data/spec/spec_helper.rb +40 -24
  243. data/spec/support/authorization.rb +23 -9
  244. data/spec/support/certificates/client.pem +4 -4
  245. data/spec/support/command_monitoring/bulkWrite.yml +73 -0
  246. data/spec/support/command_monitoring/command.yml +42 -0
  247. data/spec/support/command_monitoring/deleteMany.yml +55 -0
  248. data/spec/support/command_monitoring/deleteOne.yml +55 -0
  249. data/spec/support/command_monitoring/find.yml +219 -0
  250. data/spec/support/command_monitoring/insertMany.yml +81 -0
  251. data/spec/support/command_monitoring/insertOne.yml +51 -0
  252. data/spec/support/command_monitoring/updateMany.yml +67 -0
  253. data/spec/support/command_monitoring/updateOne.yml +95 -0
  254. data/spec/support/command_monitoring.rb +365 -0
  255. data/spec/support/connection_string.rb +228 -0
  256. data/spec/support/connection_string_tests/invalid-uris.yml +193 -0
  257. data/spec/support/connection_string_tests/valid-auth.yml +256 -0
  258. data/spec/support/connection_string_tests/valid-host_identifiers.yml +121 -0
  259. data/spec/support/connection_string_tests/valid-options.yml +30 -0
  260. data/spec/support/connection_string_tests/valid-unix_socket-absolute.yml +197 -0
  261. data/spec/support/connection_string_tests/valid-unix_socket-relative.yml +213 -0
  262. data/spec/support/connection_string_tests/valid-warnings.yml +55 -0
  263. data/spec/support/crud/read.rb +22 -19
  264. data/spec/support/crud/write.rb +58 -27
  265. data/spec/support/crud.rb +10 -2
  266. data/spec/support/gridfs.rb +637 -0
  267. data/spec/support/gridfs_tests/delete.yml +157 -0
  268. data/spec/support/gridfs_tests/download.yml +210 -0
  269. data/spec/support/gridfs_tests/download_by_name.yml +113 -0
  270. data/spec/support/gridfs_tests/upload.yml +158 -0
  271. data/spec/support/matchers.rb +1 -1
  272. data/spec/support/sdam/rs/equal_electionids.yml +44 -0
  273. data/spec/support/sdam/rs/new_primary_new_electionid.yml +95 -0
  274. data/spec/support/sdam/rs/null_election_id.yml +144 -0
  275. data/spec/support/sdam/rs/primary_disconnect_electionid.yml +124 -0
  276. data/spec/support/sdam/rs/primary_mismatched_me.yml +37 -0
  277. data/spec/support/sdam/rs/primary_to_no_primary_mismatched_me.yml +75 -0
  278. data/spec/support/sdam/rs/secondary_mismatched_me.yml +37 -0
  279. data/spec/support/sdam/sharded/mongos_disconnect.yml +104 -0
  280. data/spec/support/sdam/single/direct_connection_rsarbiter.yml +1 -1
  281. data/spec/support/sdam/single/direct_connection_rsprimary.yml +1 -1
  282. data/spec/support/sdam/single/direct_connection_rssecondary.yml +1 -1
  283. data/spec/support/sdam/single/direct_connection_slave.yml +1 -1
  284. data/spec/support/sdam/single/direct_connection_standalone.yml +1 -1
  285. data/spec/support/sdam/single/not_ok_response.yml +0 -1
  286. data/spec/support/server_discovery_and_monitoring.rb +22 -3
  287. data/spec/support/server_selection.rb +3 -1
  288. data/spec/support/shared/bulk_write.rb +218 -22
  289. data/spec/support/shared/server_selector.rb +80 -14
  290. data.tar.gz.sig +0 -0
  291. metadata +188 -59
  292. metadata.gz.sig +0 -0
  293. data/lib/mongo/bulk_write/bulk_writable.rb +0 -196
  294. data/lib/mongo/bulk_write/deletable.rb +0 -56
  295. data/lib/mongo/bulk_write/insertable.rb +0 -48
  296. data/lib/mongo/bulk_write/replacable.rb +0 -57
  297. data/lib/mongo/bulk_write/updatable.rb +0 -68
  298. data/lib/mongo/grid/fs.rb +0 -149
  299. data/lib/mongo/operation/list_collections/result.rb +0 -114
  300. data/lib/mongo/operation/list_indexes/result.rb +0 -118
  301. data/lib/mongo/operation/read/collections_info.rb +0 -68
  302. data/lib/mongo/operation/read/indexes.rb +0 -69
  303. data/lib/mongo/operation/read/list_collections.rb +0 -76
  304. data/lib/mongo/operation/read/list_indexes.rb +0 -78
  305. data/lib/mongo/operation/write/bulk/bulk_delete/result.rb +0 -75
  306. data/lib/mongo/operation/write/bulk/bulk_delete.rb +0 -145
  307. data/lib/mongo/operation/write/bulk/bulk_insert/result.rb +0 -130
  308. data/lib/mongo/operation/write/bulk/bulk_insert.rb +0 -132
  309. data/lib/mongo/operation/write/bulk/bulk_mergable.rb +0 -67
  310. data/lib/mongo/operation/write/bulk/bulk_update/result.rb +0 -162
  311. data/lib/mongo/operation/write/bulk/bulk_update.rb +0 -154
  312. data/lib/mongo/operation/write/bulk/legacy_bulk_mergable.rb +0 -83
  313. data/spec/mongo/bulk/bulk_write_spec.rb +0 -262
  314. data/spec/mongo/grid/fs_spec.rb +0 -160
  315. data/spec/mongo/loggable_spec.rb +0 -63
  316. data/spec/mongo/operation/aggregate_spec.rb +0 -127
  317. /data/lib/mongo/operation/{aggregate → commands/aggregate}/result.rb +0 -0
@@ -2,14 +2,16 @@ require 'spec_helper'
2
2
 
3
3
  describe Mongo::ServerSelector::SecondaryPreferred do
4
4
 
5
+ let(:name) { :secondary_preferred }
6
+
5
7
  include_context 'server selector'
6
8
 
7
- it_behaves_like 'a read preference mode' do
8
- let(:name) { :secondary_preferred }
9
+ it_behaves_like 'a server selector mode' do
9
10
  let(:slave_ok) { true }
10
11
  end
12
+ it_behaves_like 'a server selector with sensitive data in its options'
11
13
 
12
- it_behaves_like 'a read preference mode accepting tag sets'
14
+ it_behaves_like 'a server selector accepting tag sets'
13
15
 
14
16
  describe '#to_mongos' do
15
17
 
@@ -20,7 +22,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
20
22
  end
21
23
 
22
24
  it 'returns a read preference formatted for mongos' do
23
- expect(read_pref.to_mongos).to eq(
25
+ expect(selector.to_mongos).to eq(
24
26
  { :mode => 'secondaryPreferred', :tags => tag_sets }
25
27
  )
26
28
  end
@@ -29,7 +31,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
29
31
  context 'tag sets not provided' do
30
32
 
31
33
  it 'returns nil' do
32
- expect(read_pref.to_mongos).to be_nil
34
+ expect(selector.to_mongos).to be_nil
33
35
  end
34
36
  end
35
37
  end
@@ -40,7 +42,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
40
42
  let(:candidates) { [] }
41
43
 
42
44
  it 'returns an empty array' do
43
- expect(read_pref.send(:select, candidates)).to be_empty
45
+ expect(selector.send(:select, candidates)).to be_empty
44
46
  end
45
47
  end
46
48
 
@@ -48,7 +50,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
48
50
  let(:candidates) { [primary] }
49
51
 
50
52
  it 'returns array with primary' do
51
- expect(read_pref.send(:select, candidates)).to eq([primary])
53
+ expect(selector.send(:select, candidates)).to eq([primary])
52
54
  end
53
55
  end
54
56
 
@@ -56,7 +58,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
56
58
  let(:candidates) { [secondary] }
57
59
 
58
60
  it 'returns array with secondary' do
59
- expect(read_pref.send(:select, candidates)).to eq([secondary])
61
+ expect(selector.send(:select, candidates)).to eq([secondary])
60
62
  end
61
63
  end
62
64
 
@@ -65,7 +67,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
65
67
  let(:expected) { [secondary, primary] }
66
68
 
67
69
  it 'returns array with secondary first, then primary' do
68
- expect(read_pref.send(:select, candidates)).to eq(expected)
70
+ expect(selector.send(:select, candidates)).to eq(expected)
69
71
  end
70
72
  end
71
73
 
@@ -74,7 +76,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
74
76
  let(:expected) { [secondary, primary] }
75
77
 
76
78
  it 'returns array with secondary and primary' do
77
- expect(read_pref.send(:select, candidates)).to eq(expected)
79
+ expect(selector.send(:select, candidates)).to eq(expected)
78
80
  end
79
81
  end
80
82
 
@@ -98,7 +100,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
98
100
  let(:candidates) { [primary] }
99
101
 
100
102
  it 'returns array with primary' do
101
- expect(read_pref.send(:select, candidates)).to eq([primary])
103
+ expect(selector.send(:select, candidates)).to eq([primary])
102
104
  end
103
105
  end
104
106
 
@@ -106,7 +108,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
106
108
  let(:candidates) { [matching_primary] }
107
109
 
108
110
  it 'returns array with matching primary' do
109
- expect(read_pref.send(:select, candidates)).to eq([matching_primary])
111
+ expect(selector.send(:select, candidates)).to eq([matching_primary])
110
112
  end
111
113
  end
112
114
 
@@ -114,7 +116,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
114
116
  let(:candidates) { [matching_secondary] }
115
117
 
116
118
  it 'returns array with matching secondary' do
117
- expect(read_pref.send(:select, candidates)).to eq([matching_secondary])
119
+ expect(selector.send(:select, candidates)).to eq([matching_secondary])
118
120
  end
119
121
  end
120
122
 
@@ -122,7 +124,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
122
124
  let(:candidates) { [secondary] }
123
125
 
124
126
  it 'returns an empty array' do
125
- expect(read_pref.send(:select, candidates)).to be_empty
127
+ expect(selector.send(:select, candidates)).to be_empty
126
128
  end
127
129
  end
128
130
  end
@@ -133,7 +135,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
133
135
  let(:candidates) { [primary, secondary, secondary] }
134
136
 
135
137
  it 'returns an array with the primary' do
136
- expect(read_pref.send(:select, candidates)).to eq([primary])
138
+ expect(selector.send(:select, candidates)).to eq([primary])
137
139
  end
138
140
  end
139
141
 
@@ -141,7 +143,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
141
143
  let(:candidates) { [primary, matching_secondary] }
142
144
 
143
145
  it 'returns an array of the matching secondary, then primary' do
144
- expect(read_pref.send(:select, candidates)).to eq(
146
+ expect(selector.send(:select, candidates)).to eq(
145
147
  [matching_secondary, primary]
146
148
  )
147
149
  end
@@ -152,7 +154,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
152
154
  let(:expected) { [matching_secondary, matching_secondary, primary] }
153
155
 
154
156
  it 'returns an array of the matching secondaries, then primary' do
155
- expect(read_pref.send(:select, candidates)).to eq(expected)
157
+ expect(selector.send(:select, candidates)).to eq(expected)
156
158
  end
157
159
  end
158
160
 
@@ -161,7 +163,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
161
163
  let(:expected) {[matching_secondary, matching_primary] }
162
164
 
163
165
  it 'returns an array of the matching secondary, then the primary' do
164
- expect(read_pref.send(:select, candidates)).to eq(expected)
166
+ expect(selector.send(:select, candidates)).to eq(expected)
165
167
  end
166
168
  end
167
169
  end
@@ -177,7 +179,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
177
179
  let(:candidates) { [far_primary] }
178
180
 
179
181
  it 'returns array with primary' do
180
- expect(read_pref.send(:select, candidates)).to eq([far_primary])
182
+ expect(selector.send(:select, candidates)).to eq([far_primary])
181
183
  end
182
184
  end
183
185
 
@@ -185,7 +187,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
185
187
  let(:candidates) { [far_secondary] }
186
188
 
187
189
  it 'returns an array with the secondary' do
188
- expect(read_pref.send(:select, candidates)).to eq([far_secondary])
190
+ expect(selector.send(:select, candidates)).to eq([far_secondary])
189
191
  end
190
192
  end
191
193
  end
@@ -196,7 +198,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
196
198
  let(:candidates) { [primary, secondary] }
197
199
 
198
200
  it 'returns an array with secondary, then primary' do
199
- expect(read_pref.send(:select, candidates)).to eq([secondary, primary])
201
+ expect(selector.send(:select, candidates)).to eq([secondary, primary])
200
202
  end
201
203
  end
202
204
 
@@ -204,7 +206,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
204
206
  let(:candidates) { [primary, far_secondary] }
205
207
 
206
208
  it 'returns an array with the secondary, then primary' do
207
- expect(read_pref.send(:select, candidates)).to eq([far_secondary, primary])
209
+ expect(selector.send(:select, candidates)).to eq([far_secondary, primary])
208
210
  end
209
211
  end
210
212
 
@@ -213,7 +215,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
213
215
  let(:expected) { [secondary, far_primary] }
214
216
 
215
217
  it 'returns an array with secondary, then primary' do
216
- expect(read_pref.send(:select, candidates)).to eq(expected)
218
+ expect(selector.send(:select, candidates)).to eq(expected)
217
219
  end
218
220
  end
219
221
 
@@ -222,7 +224,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
222
224
  let(:expected) { [far_secondary, far_primary] }
223
225
 
224
226
  it 'returns an array with secondary, then primary' do
225
- expect(read_pref.send(:select, candidates)).to eq(expected)
227
+ expect(selector.send(:select, candidates)).to eq(expected)
226
228
  end
227
229
  end
228
230
 
@@ -233,7 +235,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
233
235
  let(:expected) { [secondary, primary] }
234
236
 
235
237
  it 'returns an array with near secondary, then primary' do
236
- expect(read_pref.send(:select, candidates)).to eq(expected)
238
+ expect(selector.send(:select, candidates)).to eq(expected)
237
239
  end
238
240
  end
239
241
 
@@ -242,7 +244,7 @@ describe Mongo::ServerSelector::SecondaryPreferred do
242
244
  let(:expected) { [secondary, secondary, far_primary] }
243
245
 
244
246
  it 'returns an array with secondaries, then primary' do
245
- expect(read_pref.send(:select, candidates)).to eq(expected)
247
+ expect(selector.send(:select, candidates)).to eq(expected)
246
248
  end
247
249
  end
248
250
  end
@@ -2,19 +2,21 @@ require 'spec_helper'
2
2
 
3
3
  describe Mongo::ServerSelector::Secondary do
4
4
 
5
+ let(:name) { :secondary }
6
+
5
7
  include_context 'server selector'
6
8
 
7
- it_behaves_like 'a read preference mode' do
8
- let(:name) { :secondary }
9
+ it_behaves_like 'a server selector mode' do
9
10
  let(:slave_ok) { true }
10
11
  end
12
+ it_behaves_like 'a server selector with sensitive data in its options'
11
13
 
12
- it_behaves_like 'a read preference mode accepting tag sets'
14
+ it_behaves_like 'a server selector accepting tag sets'
13
15
 
14
16
  describe '#to_mongos' do
15
17
 
16
18
  it 'returns read preference formatted for mongos' do
17
- expect(read_pref.to_mongos).to eq(
19
+ expect(selector.to_mongos).to eq(
18
20
  { :mode => 'secondary' }
19
21
  )
20
22
  end
@@ -23,7 +25,7 @@ describe Mongo::ServerSelector::Secondary do
23
25
  let(:tag_sets) { [tag_set] }
24
26
 
25
27
  it 'returns read preference formatted for mongos with tag sets' do
26
- expect(read_pref.to_mongos).to eq(
28
+ expect(selector.to_mongos).to eq(
27
29
  { :mode => 'secondary', :tags => tag_sets}
28
30
  )
29
31
  end
@@ -36,7 +38,7 @@ describe Mongo::ServerSelector::Secondary do
36
38
  let(:candidates) { [] }
37
39
 
38
40
  it 'returns an empty array' do
39
- expect(read_pref.send(:select, candidates)).to be_empty
41
+ expect(selector.send(:select, candidates)).to be_empty
40
42
  end
41
43
  end
42
44
 
@@ -44,7 +46,7 @@ describe Mongo::ServerSelector::Secondary do
44
46
  let(:candidates) { [primary] }
45
47
 
46
48
  it 'returns an empty array' do
47
- expect(read_pref.send(:select, candidates)).to be_empty
49
+ expect(selector.send(:select, candidates)).to be_empty
48
50
  end
49
51
  end
50
52
 
@@ -52,7 +54,7 @@ describe Mongo::ServerSelector::Secondary do
52
54
  let(:candidates) { [secondary] }
53
55
 
54
56
  it 'returns array with secondary' do
55
- expect(read_pref.send(:select, candidates)).to eq([secondary])
57
+ expect(selector.send(:select, candidates)).to eq([secondary])
56
58
  end
57
59
  end
58
60
 
@@ -60,7 +62,7 @@ describe Mongo::ServerSelector::Secondary do
60
62
  let(:candidates) { [primary, secondary] }
61
63
 
62
64
  it 'returns array with secondary' do
63
- expect(read_pref.send(:select, candidates)).to eq([secondary])
65
+ expect(selector.send(:select, candidates)).to eq([secondary])
64
66
  end
65
67
  end
66
68
 
@@ -68,7 +70,7 @@ describe Mongo::ServerSelector::Secondary do
68
70
  let(:candidates) { [secondary, secondary, primary] }
69
71
 
70
72
  it 'returns array with all secondaries' do
71
- expect(read_pref.send(:select, candidates)).to eq([secondary, secondary])
73
+ expect(selector.send(:select, candidates)).to eq([secondary, secondary])
72
74
  end
73
75
  end
74
76
 
@@ -82,7 +84,7 @@ describe Mongo::ServerSelector::Secondary do
82
84
  let(:candidates) { [primary] }
83
85
 
84
86
  it 'returns an empty array' do
85
- expect(read_pref.send(:select, candidates)).to be_empty
87
+ expect(selector.send(:select, candidates)).to be_empty
86
88
  end
87
89
  end
88
90
 
@@ -90,7 +92,7 @@ describe Mongo::ServerSelector::Secondary do
90
92
  let(:candidates) { [secondary] }
91
93
 
92
94
  it 'returns an empty array' do
93
- expect(read_pref.send(:select, candidates)).to be_empty
95
+ expect(selector.send(:select, candidates)).to be_empty
94
96
  end
95
97
  end
96
98
 
@@ -98,7 +100,7 @@ describe Mongo::ServerSelector::Secondary do
98
100
  let(:candidates) { [matching_secondary] }
99
101
 
100
102
  it 'returns an array with matching secondary' do
101
- expect(read_pref.send(:select, candidates)).to eq([matching_secondary])
103
+ expect(selector.send(:select, candidates)).to eq([matching_secondary])
102
104
  end
103
105
  end
104
106
  end
@@ -109,7 +111,7 @@ describe Mongo::ServerSelector::Secondary do
109
111
  let(:candidates) { [primary, secondary, secondary] }
110
112
 
111
113
  it 'returns an emtpy array' do
112
- expect(read_pref.send(:select, candidates)).to be_empty
114
+ expect(selector.send(:select, candidates)).to be_empty
113
115
  end
114
116
  end
115
117
 
@@ -117,7 +119,7 @@ describe Mongo::ServerSelector::Secondary do
117
119
  let(:candidates) { [secondary, matching_secondary]}
118
120
 
119
121
  it 'returns array with matching secondary' do
120
- expect(read_pref.send(:select, candidates)).to eq([matching_secondary])
122
+ expect(selector.send(:select, candidates)).to eq([matching_secondary])
121
123
  end
122
124
  end
123
125
 
@@ -125,7 +127,7 @@ describe Mongo::ServerSelector::Secondary do
125
127
  let(:candidates) { [matching_secondary, matching_secondary] }
126
128
 
127
129
  it 'returns an array with both matching secondaries' do
128
- expect(read_pref.send(:select, candidates)).to eq([matching_secondary, matching_secondary])
130
+ expect(selector.send(:select, candidates)).to eq([matching_secondary, matching_secondary])
129
131
  end
130
132
  end
131
133
  end
@@ -141,7 +143,7 @@ describe Mongo::ServerSelector::Secondary do
141
143
  let(:candidates) { [far_primary] }
142
144
 
143
145
  it 'returns an empty array' do
144
- expect(read_pref.send(:select, candidates)).to be_empty
146
+ expect(selector.send(:select, candidates)).to be_empty
145
147
  end
146
148
  end
147
149
 
@@ -149,7 +151,7 @@ describe Mongo::ServerSelector::Secondary do
149
151
  let(:candidates) { [far_secondary] }
150
152
 
151
153
  it 'returns an array with the secondary' do
152
- expect(read_pref.send(:select, candidates)).to eq([far_secondary])
154
+ expect(selector.send(:select, candidates)).to eq([far_secondary])
153
155
  end
154
156
  end
155
157
  end
@@ -160,7 +162,7 @@ describe Mongo::ServerSelector::Secondary do
160
162
  let(:candidates) { [primary, far_secondary] }
161
163
 
162
164
  it 'returns an array with the secondary' do
163
- expect(read_pref.send(:select, candidates)).to eq([far_secondary])
165
+ expect(selector.send(:select, candidates)).to eq([far_secondary])
164
166
  end
165
167
  end
166
168
 
@@ -168,7 +170,7 @@ describe Mongo::ServerSelector::Secondary do
168
170
  let(:candidates) { [far_primary, far_secondary] }
169
171
 
170
172
  it 'returns an array with the secondary' do
171
- expect(read_pref.send(:select, candidates)).to eq([far_secondary])
173
+ expect(selector.send(:select, candidates)).to eq([far_secondary])
172
174
  end
173
175
  end
174
176
 
@@ -178,7 +180,7 @@ describe Mongo::ServerSelector::Secondary do
178
180
  let(:candidates) { [primary, secondary, far_secondary] }
179
181
 
180
182
  it 'returns an array with near secondary' do
181
- expect(read_pref.send(:select, candidates)).to eq([secondary])
183
+ expect(selector.send(:select, candidates)).to eq([secondary])
182
184
  end
183
185
  end
184
186
 
@@ -186,7 +188,7 @@ describe Mongo::ServerSelector::Secondary do
186
188
  let(:candidates) { [far_primary, secondary, secondary] }
187
189
 
188
190
  it 'returns an array with two secondaries' do
189
- expect(read_pref.send(:select, candidates)).to eq([secondary, secondary])
191
+ expect(selector.send(:select, candidates)).to eq([secondary, secondary])
190
192
  end
191
193
  end
192
194
  end
@@ -6,66 +6,125 @@ describe Mongo::ServerSelector do
6
6
 
7
7
  describe '.get' do
8
8
 
9
- let(:read_pref) do
10
- described_class.get({ :mode => name })
9
+ let(:selector) do
10
+ described_class.get(:mode => name, :tag_sets => tag_sets)
11
11
  end
12
12
 
13
- let(:name) { :secondary }
14
- let(:tag_sets) { [{ 'test' => 'tag' }] }
15
-
16
13
  context 'when the mode is primary' do
17
- let(:name) { :primary }
14
+
15
+ let(:name) do
16
+ :primary
17
+ end
18
18
 
19
19
  it 'returns a read preference of class Primary' do
20
- expect(read_pref).to be_a(Mongo::ServerSelector::Primary)
20
+ expect(selector).to be_a(Mongo::ServerSelector::Primary)
21
21
  end
22
22
  end
23
23
 
24
24
  context 'when the mode is primary_preferred' do
25
- let(:name) { :primary_preferred }
25
+ let(:name) do
26
+ :primary_preferred
27
+ end
26
28
 
27
29
  it 'returns a read preference of class PrimaryPreferred' do
28
- expect(read_pref).to be_a(Mongo::ServerSelector::PrimaryPreferred)
30
+ expect(selector).to be_a(Mongo::ServerSelector::PrimaryPreferred)
29
31
  end
30
32
  end
31
33
 
32
34
  context 'when the mode is secondary' do
33
- let(:name) { :secondary }
35
+ let(:name) do
36
+ :secondary
37
+ end
34
38
 
35
39
  it 'returns a read preference of class Secondary' do
36
- expect(read_pref).to be_a(Mongo::ServerSelector::Secondary)
40
+ expect(selector).to be_a(Mongo::ServerSelector::Secondary)
37
41
  end
38
42
  end
39
43
 
40
44
  context 'when the mode is secondary_preferred' do
41
- let(:name) { :secondary_preferred }
45
+ let(:name) do
46
+ :secondary_preferred
47
+ end
42
48
 
43
49
  it 'returns a read preference of class SecondaryPreferred' do
44
- expect(read_pref).to be_a(Mongo::ServerSelector::SecondaryPreferred)
50
+ expect(selector).to be_a(Mongo::ServerSelector::SecondaryPreferred)
45
51
  end
46
52
  end
47
53
 
48
54
  context 'when the mode is nearest' do
49
- let(:name) { :nearest }
55
+ let(:name) do
56
+ :nearest
57
+ end
50
58
 
51
59
  it 'returns a read preference of class Nearest' do
52
- expect(read_pref).to be_a(Mongo::ServerSelector::Nearest)
60
+ expect(selector).to be_a(Mongo::ServerSelector::Nearest)
53
61
  end
54
62
  end
55
63
 
56
64
  context 'when a mode is not provided' do
57
- let(:read_pref) { described_class.get }
65
+ let(:selector) { described_class.get }
58
66
 
59
67
  it 'returns a read preference of class Primary' do
60
- expect(read_pref).to be_a(Mongo::ServerSelector::Primary)
68
+ expect(selector).to be_a(Mongo::ServerSelector::Primary)
61
69
  end
62
70
  end
63
71
 
64
- context 'when tag sets provided' do
65
- let(:read_pref) { described_class.get(:mode => name, :tag_sets => tag_sets) }
72
+ context 'when tag sets are provided' do
73
+
74
+ let(:selector) do
75
+ described_class.get(:mode => :secondary, :tag_sets => tag_sets)
76
+ end
77
+
78
+ let(:tag_sets) do
79
+ [{ 'test' => 'tag' }]
80
+ end
66
81
 
67
82
  it 'sets tag sets on the read preference object' do
68
- expect(read_pref.tag_sets).to eq(tag_sets)
83
+ expect(selector.tag_sets).to eq(tag_sets)
84
+ end
85
+ end
86
+
87
+ context 'when server_selection_timeout is specified' do
88
+
89
+ let(:selector) do
90
+ described_class.get(:mode => :secondary, :server_selection_timeout => 1)
91
+ end
92
+
93
+ it 'sets server selection timeout on the read preference object' do
94
+ expect(selector.server_selection_timeout).to eq(1)
95
+ end
96
+ end
97
+
98
+ context 'when server_selection_timeout is not specified' do
99
+
100
+ let(:selector) do
101
+ described_class.get(:mode => :secondary)
102
+ end
103
+
104
+ it 'sets server selection timeout to the default' do
105
+ expect(selector.server_selection_timeout).to eq(Mongo::ServerSelector::SERVER_SELECTION_TIMEOUT)
106
+ end
107
+ end
108
+
109
+ context 'when local_threshold is specified' do
110
+
111
+ let(:selector) do
112
+ described_class.get(:mode => :secondary, :local_threshold => 0.010)
113
+ end
114
+
115
+ it 'sets local_threshold on the read preference object' do
116
+ expect(selector.local_threshold).to eq(0.010)
117
+ end
118
+ end
119
+
120
+ context 'when local_threshold is not specified' do
121
+
122
+ let(:selector) do
123
+ described_class.get(:mode => :secondary)
124
+ end
125
+
126
+ it 'sets local threshold to the default' do
127
+ expect(selector.local_threshold).to eq(Mongo::ServerSelector::LOCAL_THRESHOLD)
69
128
  end
70
129
  end
71
130
  end
@@ -74,7 +133,9 @@ describe Mongo::ServerSelector do
74
133
 
75
134
  context 'when #select returns a list of nils' do
76
135
 
77
- let(:servers) { [ server(:primary) ] }
136
+ let(:servers) do
137
+ [ server(:primary) ]
138
+ end
78
139
 
79
140
  let(:cluster) do
80
141
  double('cluster').tap do |c|
@@ -86,7 +147,7 @@ describe Mongo::ServerSelector do
86
147
  end
87
148
 
88
149
  let(:read_pref) do
89
- described_class.get({ mode: :primary }, server_selection_timeout: 1).tap do |pref|
150
+ described_class.get(mode: :primary, server_selection_timeout: 0.1).tap do |pref|
90
151
  allow(pref).to receive(:select).and_return([ nil, nil ])
91
152
  end
92
153
  end
@@ -103,7 +164,9 @@ describe Mongo::ServerSelector do
103
164
 
104
165
  context 'when cluster#servers is empty' do
105
166
 
106
- let(:servers) { [] }
167
+ let(:servers) do
168
+ []
169
+ end
107
170
 
108
171
  let(:cluster) do
109
172
  double('cluster').tap do |c|
@@ -115,7 +178,7 @@ describe Mongo::ServerSelector do
115
178
  end
116
179
 
117
180
  let(:read_pref) do
118
- described_class.get({ mode: :primary }, server_selection_timeout: 1)
181
+ described_class.get(mode: :primary, server_selection_timeout: 0.1)
119
182
  end
120
183
 
121
184
  it 'raises a NoServerAvailable error' do