mongo 2.0.4 → 2.0.5
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/mongo/address.rb +1 -1
- data/lib/mongo/address/ipv4.rb +8 -4
- data/lib/mongo/address/ipv6.rb +8 -4
- data/lib/mongo/address/unix.rb +2 -2
- data/lib/mongo/auth/user/view.rb +5 -1
- data/lib/mongo/bulk_write/bulk_writable.rb +5 -0
- data/lib/mongo/bulk_write/deletable.rb +0 -4
- data/lib/mongo/bulk_write/insertable.rb +0 -4
- data/lib/mongo/client.rb +30 -2
- data/lib/mongo/collection/view/aggregation.rb +17 -4
- data/lib/mongo/collection/view/map_reduce.rb +19 -2
- data/lib/mongo/database.rb +12 -0
- data/lib/mongo/database/view.rb +12 -0
- data/lib/mongo/grid/fs.rb +5 -5
- data/lib/mongo/loggable.rb +5 -3
- data/lib/mongo/logger.rb +21 -5
- data/lib/mongo/operation/aggregate.rb +18 -11
- data/lib/mongo/operation/aggregate/result.rb +16 -1
- data/lib/mongo/operation/map_reduce.rb +7 -9
- data/lib/mongo/operation/read/query.rb +1 -1
- data/lib/mongo/operation/read_preferrable.rb +11 -5
- data/lib/mongo/operation/result.rb +5 -1
- data/lib/mongo/operation/write.rb +1 -0
- data/lib/mongo/operation/write/command.rb +1 -0
- data/lib/mongo/operation/write/command/update_user.rb +43 -0
- data/lib/mongo/operation/write/update_user.rb +75 -0
- data/lib/mongo/protocol/reply.rb +12 -0
- data/lib/mongo/server/connection_pool/queue.rb +3 -3
- data/lib/mongo/socket.rb +22 -11
- data/lib/mongo/socket/ssl.rb +6 -3
- data/lib/mongo/version.rb +1 -1
- data/spec/mongo/auth/user/view_spec.rb +42 -0
- data/spec/mongo/client_spec.rb +19 -0
- data/spec/mongo/cluster_spec.rb +2 -1
- data/spec/mongo/collection/view/aggregation_spec.rb +34 -1
- data/spec/mongo/collection/view/map_reduce_spec.rb +92 -0
- data/spec/mongo/collection/view_spec.rb +14 -11
- data/spec/mongo/collection_spec.rb +13 -0
- data/spec/mongo/database_spec.rb +29 -0
- data/spec/mongo/grid/fs_spec.rb +32 -1
- data/spec/mongo/loggable_spec.rb +2 -1
- data/spec/mongo/operation/read/query_spec.rb +19 -0
- data/spec/mongo/operation/read_preferrable_spec.rb +192 -0
- data/spec/mongo/operation/write/update_user_spec.rb +46 -0
- data/spec/mongo/server/connection_pool/queue_spec.rb +4 -0
- data/spec/mongo/socket/ssl_spec.rb +21 -1
- data/spec/spec_helper.rb +4 -0
- data/spec/support/authorization.rb +6 -4
- data/spec/support/shared/operation.rb +12 -0
- metadata +9 -3
- metadata.gz.sig +0 -0
data/spec/mongo/client_spec.rb
CHANGED
@@ -569,4 +569,23 @@ describe Mongo::Client do
|
|
569
569
|
end
|
570
570
|
end
|
571
571
|
end
|
572
|
+
|
573
|
+
describe '#database_names' do
|
574
|
+
|
575
|
+
it 'returns a list of database names' do
|
576
|
+
expect(root_authorized_client.database_names).to include(
|
577
|
+
'admin'
|
578
|
+
)
|
579
|
+
end
|
580
|
+
end
|
581
|
+
|
582
|
+
describe '#list_databases' do
|
583
|
+
|
584
|
+
it 'returns a list of database info documents' do
|
585
|
+
expect(
|
586
|
+
root_authorized_client.list_databases.collect do |i|
|
587
|
+
i['name']
|
588
|
+
end).to include('admin')
|
589
|
+
end
|
590
|
+
end
|
572
591
|
end
|
data/spec/mongo/cluster_spec.rb
CHANGED
@@ -76,7 +76,8 @@ describe Mongo::Cluster do
|
|
76
76
|
context 'when the option is provided' do
|
77
77
|
|
78
78
|
let(:cluster) do
|
79
|
-
described_class.new([ '127.0.0.1:27017' ], TEST_OPTIONS.merge(:
|
79
|
+
described_class.new([ '127.0.0.1:27017' ], TEST_OPTIONS.merge(:connect => :replica_set,
|
80
|
+
:replica_set => 'testing'))
|
80
81
|
end
|
81
82
|
|
82
83
|
it 'returns the name' do
|
@@ -39,7 +39,7 @@ describe Mongo::Collection::View::Aggregation do
|
|
39
39
|
|
40
40
|
describe '#each' do
|
41
41
|
|
42
|
-
|
42
|
+
let(:documents) do
|
43
43
|
[
|
44
44
|
{ city: "Berlin", pop: 18913, neighborhood: "Kreuzberg" },
|
45
45
|
{ city: "Berlin", pop: 84143, neighborhood: "Mitte" },
|
@@ -145,4 +145,37 @@ describe Mongo::Collection::View::Aggregation do
|
|
145
145
|
expect(aggregation.options).not_to be(options)
|
146
146
|
end
|
147
147
|
end
|
148
|
+
|
149
|
+
describe '#explain' do
|
150
|
+
|
151
|
+
it 'executes an explain' do
|
152
|
+
expect(aggregation.explain).to_not be_empty
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
describe '#aggregate_spec' do
|
157
|
+
|
158
|
+
context 'when the collection has a read preference' do
|
159
|
+
|
160
|
+
let(:read_preference) do
|
161
|
+
Mongo::ServerSelector.get(mode: :secondary)
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'includes the read preference in the spec' do
|
165
|
+
allow(authorized_collection).to receive(:read_preference).and_return(read_preference)
|
166
|
+
expect(aggregation.send(:aggregate_spec)[:read]).to eq(read_preference)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
context 'when allow_disk_use is set' do
|
171
|
+
|
172
|
+
let(:aggregation) do
|
173
|
+
described_class.new(view, pipeline, options).allow_disk_use(true)
|
174
|
+
end
|
175
|
+
|
176
|
+
it 'includes the option in the spec' do
|
177
|
+
expect(aggregation.send(:aggregate_spec)[:selector][:allowDiskUse]).to eq(true)
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
148
181
|
end
|
@@ -150,6 +150,10 @@ describe Mongo::Collection::View::MapReduce do
|
|
150
150
|
expect(document[:_id]).to eq('Berlin')
|
151
151
|
end
|
152
152
|
end
|
153
|
+
|
154
|
+
it 'includes the selector in the operation spec' do
|
155
|
+
expect(map_reduce.send(:map_reduce_spec)[:selector][:query]).to eq(selector)
|
156
|
+
end
|
153
157
|
end
|
154
158
|
|
155
159
|
context 'when the selector is advanced' do
|
@@ -163,6 +167,10 @@ describe Mongo::Collection::View::MapReduce do
|
|
163
167
|
expect(document[:_id]).to eq('Berlin')
|
164
168
|
end
|
165
169
|
end
|
170
|
+
|
171
|
+
it 'includes the selector in the operation spec' do
|
172
|
+
expect(map_reduce.send(:map_reduce_spec)[:selector][:query]).to eq(selector[:$query])
|
173
|
+
end
|
166
174
|
end
|
167
175
|
end
|
168
176
|
|
@@ -197,6 +205,10 @@ describe Mongo::Collection::View::MapReduce do
|
|
197
205
|
it 'sets the finalize function' do
|
198
206
|
expect(new_map_reduce.finalize).to eq(finalize)
|
199
207
|
end
|
208
|
+
|
209
|
+
it 'includes the finalize function in the operation spec' do
|
210
|
+
expect(new_map_reduce.send(:map_reduce_spec)[:selector][:finalize]).to eq(finalize)
|
211
|
+
end
|
200
212
|
end
|
201
213
|
|
202
214
|
describe '#js_mode' do
|
@@ -208,6 +220,10 @@ describe Mongo::Collection::View::MapReduce do
|
|
208
220
|
it 'sets the js mode value' do
|
209
221
|
expect(new_map_reduce.js_mode).to be true
|
210
222
|
end
|
223
|
+
|
224
|
+
it 'includes the js mode value in the operation spec' do
|
225
|
+
expect(new_map_reduce.send(:map_reduce_spec)[:selector][:jsMode]).to be(true)
|
226
|
+
end
|
211
227
|
end
|
212
228
|
|
213
229
|
describe '#out' do
|
@@ -223,6 +239,17 @@ describe Mongo::Collection::View::MapReduce do
|
|
223
239
|
it 'sets the out value' do
|
224
240
|
expect(new_map_reduce.out).to eq(location)
|
225
241
|
end
|
242
|
+
|
243
|
+
it 'includes the out value in the operation spec' do
|
244
|
+
expect(new_map_reduce.send(:map_reduce_spec)[:selector][:out]).to be(location)
|
245
|
+
end
|
246
|
+
|
247
|
+
context 'when out is not defined' do
|
248
|
+
|
249
|
+
it 'defaults to inline' do
|
250
|
+
expect(map_reduce.send(:map_reduce_spec)[:selector][:out]).to eq(inline: 1)
|
251
|
+
end
|
252
|
+
end
|
226
253
|
end
|
227
254
|
|
228
255
|
describe '#scope' do
|
@@ -238,5 +265,70 @@ describe Mongo::Collection::View::MapReduce do
|
|
238
265
|
it 'sets the scope object' do
|
239
266
|
expect(new_map_reduce.scope).to eq(object)
|
240
267
|
end
|
268
|
+
|
269
|
+
it 'includes the scope object in the operation spec' do
|
270
|
+
expect(new_map_reduce.send(:map_reduce_spec)[:selector][:scope]).to be(object)
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
describe '#verbose' do
|
275
|
+
|
276
|
+
let(:verbose) do
|
277
|
+
false
|
278
|
+
end
|
279
|
+
|
280
|
+
let(:new_map_reduce) do
|
281
|
+
map_reduce.verbose(verbose)
|
282
|
+
end
|
283
|
+
|
284
|
+
it 'sets the verbose value' do
|
285
|
+
expect(new_map_reduce.verbose).to be(false)
|
286
|
+
end
|
287
|
+
|
288
|
+
it 'includes the verbose option in the operation spec' do
|
289
|
+
expect(new_map_reduce.send(:map_reduce_spec)[:selector][:verbose]).to eq(verbose)
|
290
|
+
end
|
291
|
+
end
|
292
|
+
|
293
|
+
context 'when limit is set on the view' do
|
294
|
+
|
295
|
+
let(:limit) do
|
296
|
+
3
|
297
|
+
end
|
298
|
+
|
299
|
+
let(:view_options) do
|
300
|
+
{ limit: limit }
|
301
|
+
end
|
302
|
+
|
303
|
+
it 'includes the limit in the operation spec' do
|
304
|
+
expect(map_reduce.send(:map_reduce_spec)[:selector][:limit]).to be(limit)
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
context 'when sort is set on the view' do
|
309
|
+
|
310
|
+
let(:sort) do
|
311
|
+
{ name: -1 }
|
312
|
+
end
|
313
|
+
|
314
|
+
let(:view_options) do
|
315
|
+
{ sort: sort }
|
316
|
+
end
|
317
|
+
|
318
|
+
it 'includes the sort object in the operation spec' do
|
319
|
+
expect(map_reduce.send(:map_reduce_spec)[:selector][:sort]).to be(sort)
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
context 'when the collection has a read preference' do
|
324
|
+
|
325
|
+
let(:read_preference) do
|
326
|
+
Mongo::ServerSelector.get(mode: :secondary)
|
327
|
+
end
|
328
|
+
|
329
|
+
it 'includes the read preference in the spec' do
|
330
|
+
allow(authorized_collection).to receive(:read_preference).and_return(read_preference)
|
331
|
+
expect(map_reduce.send(:map_reduce_spec)[:read]).to eq(read_preference)
|
332
|
+
end
|
241
333
|
end
|
242
334
|
end
|
@@ -334,19 +334,22 @@ describe Mongo::Collection::View do
|
|
334
334
|
|
335
335
|
context 'when providing a hint' do
|
336
336
|
|
337
|
-
|
338
|
-
{ :hint => { 'x' => Mongo::Index::ASCENDING }}
|
339
|
-
end
|
337
|
+
context 'when the hint is bad' do
|
340
338
|
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
end.and_call_original
|
345
|
-
end
|
339
|
+
let(:options) do
|
340
|
+
{ :hint => { 'x' => Mongo::Index::ASCENDING }}
|
341
|
+
end
|
346
342
|
|
347
|
-
|
348
|
-
|
349
|
-
|
343
|
+
before do
|
344
|
+
expect(Mongo::Operation::Read::Query).to receive(:new) do |spec|
|
345
|
+
expect(spec[:selector][:$query]).to eq(selector)
|
346
|
+
end.and_call_original
|
347
|
+
end
|
348
|
+
|
349
|
+
it'creates a special query selector' do
|
350
|
+
expect {
|
351
|
+
view.to_a
|
352
|
+
}.to raise_error(Mongo::Error::OperationFailure)
|
350
353
|
end
|
351
354
|
end
|
352
355
|
end
|
@@ -262,6 +262,19 @@ describe Mongo::Collection do
|
|
262
262
|
end
|
263
263
|
end
|
264
264
|
|
265
|
+
context 'when providing a bad selector' do
|
266
|
+
|
267
|
+
let(:view) do
|
268
|
+
authorized_collection.find('$or' => [])
|
269
|
+
end
|
270
|
+
|
271
|
+
it 'raises an exception when iterating' do
|
272
|
+
expect {
|
273
|
+
view.to_a
|
274
|
+
}.to raise_exception(Mongo::Error::OperationFailure)
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
265
278
|
context 'when iterating the authorized_collection view' do
|
266
279
|
|
267
280
|
before do
|
data/spec/mongo/database_spec.rb
CHANGED
@@ -95,6 +95,35 @@ describe Mongo::Database do
|
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
|
+
describe '#list_collections' do
|
99
|
+
|
100
|
+
let(:database) do
|
101
|
+
described_class.new(authorized_client, TEST_DB)
|
102
|
+
end
|
103
|
+
|
104
|
+
let(:result) do
|
105
|
+
database.list_collections.map do |info|
|
106
|
+
info['name']
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
before do
|
111
|
+
database[:users].create
|
112
|
+
end
|
113
|
+
|
114
|
+
after do
|
115
|
+
database[:users].drop
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'returns a list of the collections info', if: list_command_enabled? do
|
119
|
+
expect(result).to include('users')
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'returns a list of the collections info', unless: list_command_enabled? do
|
123
|
+
expect(result).to include("#{TEST_DB}.users")
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
98
127
|
describe '#collections' do
|
99
128
|
|
100
129
|
context 'when the database exists' do
|
data/spec/mongo/grid/fs_spec.rb
CHANGED
@@ -65,7 +65,7 @@ describe Mongo::Grid::FS do
|
|
65
65
|
|
66
66
|
context 'when inserting the file once' do
|
67
67
|
|
68
|
-
|
68
|
+
let!(:result) do
|
69
69
|
fs.insert_one(file)
|
70
70
|
end
|
71
71
|
|
@@ -85,6 +85,10 @@ describe Mongo::Grid::FS do
|
|
85
85
|
it 'includes the chunks and data with the file' do
|
86
86
|
expect(from_db.data).to eq('Hello!')
|
87
87
|
end
|
88
|
+
|
89
|
+
it 'returns the file id' do
|
90
|
+
expect(result).to eq(file.id)
|
91
|
+
end
|
88
92
|
end
|
89
93
|
|
90
94
|
context 'when inserting the file more than once' do
|
@@ -101,6 +105,33 @@ describe Mongo::Grid::FS do
|
|
101
105
|
}.to raise_error(Mongo::Error::OperationFailure)
|
102
106
|
end
|
103
107
|
end
|
108
|
+
|
109
|
+
context 'when the file exceeds the max bson size' do
|
110
|
+
|
111
|
+
let(:fs) do
|
112
|
+
described_class.new(authorized_client.database)
|
113
|
+
end
|
114
|
+
|
115
|
+
let(:file) do
|
116
|
+
str = 'y' * 16777216
|
117
|
+
Mongo::Grid::File.new(str, :filename => 'large-file.txt')
|
118
|
+
end
|
119
|
+
|
120
|
+
before do
|
121
|
+
fs.insert_one(file)
|
122
|
+
end
|
123
|
+
|
124
|
+
after do
|
125
|
+
fs.files_collection.find.delete_many
|
126
|
+
fs.chunks_collection.find.delete_many
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'successfully inserts the file' do
|
130
|
+
expect(
|
131
|
+
fs.find_one(:filename => 'large-file.txt').chunks
|
132
|
+
).to eq(file.chunks)
|
133
|
+
end
|
134
|
+
end
|
104
135
|
end
|
105
136
|
|
106
137
|
describe '#delete_one' do
|
data/spec/mongo/loggable_spec.rb
CHANGED
@@ -23,8 +23,9 @@ describe Mongo::Loggable do
|
|
23
23
|
end
|
24
24
|
|
25
25
|
before do
|
26
|
+
Mongo::Logger.level = Logger::DEBUG
|
26
27
|
expect(operation).to receive(:log_message).and_return('test')
|
27
|
-
expect(Mongo::Logger).to receive(:
|
28
|
+
expect(Mongo::Logger).to receive(:log).with(:debug, 'MONGO', 'test', anything())
|
28
29
|
end
|
29
30
|
|
30
31
|
context 'when a block is provided' do
|
@@ -58,6 +58,25 @@ describe Mongo::Operation::Read::Query do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
describe '#message' do
|
62
|
+
|
63
|
+
let(:query_options) do
|
64
|
+
{ :flags => [ :no_cursor_timeout ]}
|
65
|
+
end
|
66
|
+
|
67
|
+
let(:query) do
|
68
|
+
described_class.new(spec)
|
69
|
+
end
|
70
|
+
|
71
|
+
let(:message) do
|
72
|
+
query.send(:message, secondary_context_slave)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'does not lose flags' do
|
76
|
+
expect(message.flags).to eq([ :no_cursor_timeout, :slave_ok ])
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
61
80
|
describe '#execute' do
|
62
81
|
|
63
82
|
context 'message' do
|
@@ -0,0 +1,192 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongo::Operation::ReadPreferrable do
|
4
|
+
|
5
|
+
let(:selector) do
|
6
|
+
{ name: 'test' }
|
7
|
+
end
|
8
|
+
|
9
|
+
let(:options) do
|
10
|
+
{}
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:mongos) do
|
14
|
+
false
|
15
|
+
end
|
16
|
+
|
17
|
+
let(:slave_ok) do
|
18
|
+
false
|
19
|
+
end
|
20
|
+
|
21
|
+
let(:read_preferrable) do
|
22
|
+
Class.new do
|
23
|
+
include Mongo::Operation::ReadPreferrable
|
24
|
+
end.new.tap do |rp|
|
25
|
+
allow(rp).to receive(:read).and_return(read_pref)
|
26
|
+
allow(rp).to receive(:selector).and_return(selector)
|
27
|
+
allow(rp).to receive(:options).and_return(options)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:context) do
|
32
|
+
double('context').tap do |c|
|
33
|
+
allow(c).to receive(:slave_ok?).and_return(slave_ok)
|
34
|
+
allow(c).to receive(:mongos?).and_return(mongos)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
shared_context 'a selector updater' do
|
39
|
+
|
40
|
+
let(:read_pref) do
|
41
|
+
Mongo::ServerSelector.get(:mode => mode)
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:expected) do
|
45
|
+
{ :$query => selector, :$readPreference => read_pref.to_mongos }
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'returns a special selector' do
|
49
|
+
expect(read_preferrable.send(:update_selector, context)).to eq(expected)
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'when the selector already has $query in it' do
|
53
|
+
|
54
|
+
let(:selector) do
|
55
|
+
{ :$query => { :name => 'test' },
|
56
|
+
:$orderby => { :name => -1 } }
|
57
|
+
end
|
58
|
+
|
59
|
+
let(:expected) do
|
60
|
+
selector.merge(:$readPreference => read_pref.to_mongos)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'returns a special selector' do
|
64
|
+
expect(read_preferrable.send(:update_selector, context)).to eq(expected)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
shared_context 'not a selector updater' do
|
70
|
+
|
71
|
+
let(:read_pref) do
|
72
|
+
Mongo::ServerSelector.get(:mode => mode)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'returns a special selector' do
|
76
|
+
expect(read_preferrable.send(:update_selector, context)).to eq(selector)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'when the server is a mongos' do
|
81
|
+
|
82
|
+
let(:mongos) do
|
83
|
+
true
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when the read preference mode is primary' do
|
87
|
+
|
88
|
+
let(:mode) do
|
89
|
+
:primary
|
90
|
+
end
|
91
|
+
|
92
|
+
it_behaves_like 'not a selector updater'
|
93
|
+
end
|
94
|
+
|
95
|
+
context 'when the read preference mode is primary_preferred' do
|
96
|
+
|
97
|
+
let(:mode) do
|
98
|
+
:primary_preferred
|
99
|
+
end
|
100
|
+
|
101
|
+
it_behaves_like 'a selector updater'
|
102
|
+
end
|
103
|
+
|
104
|
+
context 'when the read preference mode is secondary' do
|
105
|
+
|
106
|
+
let(:mode) do
|
107
|
+
:secondary
|
108
|
+
end
|
109
|
+
|
110
|
+
it_behaves_like 'a selector updater'
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'when the read preference mode is secondary_preferred' do
|
114
|
+
|
115
|
+
let(:mode) do
|
116
|
+
:secondary_preferred
|
117
|
+
end
|
118
|
+
|
119
|
+
it_behaves_like 'not a selector updater'
|
120
|
+
end
|
121
|
+
|
122
|
+
context 'when the read preference mode is nearest' do
|
123
|
+
|
124
|
+
let(:mode) do
|
125
|
+
:nearest
|
126
|
+
end
|
127
|
+
|
128
|
+
it_behaves_like 'a selector updater'
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context 'when the server is not a mongos' do
|
133
|
+
|
134
|
+
let(:mode) do
|
135
|
+
:secondary_preferred
|
136
|
+
end
|
137
|
+
|
138
|
+
it_behaves_like 'not a selector updater'
|
139
|
+
end
|
140
|
+
|
141
|
+
context 'when the server context requires the slaveOk bit to be set' do
|
142
|
+
|
143
|
+
let(:read_pref) do
|
144
|
+
Mongo::ServerSelector.get(:mode => :secondary)
|
145
|
+
end
|
146
|
+
|
147
|
+
let(:expected) do
|
148
|
+
{ :flags => [ :slave_ok ] }
|
149
|
+
end
|
150
|
+
|
151
|
+
let(:slave_ok) do
|
152
|
+
true
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'sets the slave_ok flag' do
|
156
|
+
expect(read_preferrable.send(:update_options, context)).to eq(expected)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
context 'when the server is not a mongos' do
|
161
|
+
|
162
|
+
context 'when the read preference requires the slaveOk bit to be set' do
|
163
|
+
|
164
|
+
let(:read_pref) do
|
165
|
+
Mongo::ServerSelector.get(:mode => :secondary)
|
166
|
+
end
|
167
|
+
|
168
|
+
let(:expected) do
|
169
|
+
{ :flags => [ :slave_ok ] }
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'sets the slave_ok flag' do
|
173
|
+
expect(read_preferrable.send(:update_options, context)).to eq(expected)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context 'when the read preference does not require the slaveOk bit to be set' do
|
178
|
+
|
179
|
+
let(:read_pref) do
|
180
|
+
Mongo::ServerSelector.get(:mode => :primary)
|
181
|
+
end
|
182
|
+
|
183
|
+
let(:expected) do
|
184
|
+
{ }
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'sets the slave_ok flag' do
|
188
|
+
expect(read_preferrable.send(:update_options, context)).to eq(expected)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|