mongo 2.7.0 → 2.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +39 -14
- data/Rakefile +1 -0
- data/lib/mongo/auth.rb +4 -1
- data/lib/mongo/client.rb +4 -3
- data/lib/mongo/cluster.rb +1 -1
- data/lib/mongo/collection/view/readable.rb +5 -2
- data/lib/mongo/database.rb +1 -0
- data/lib/mongo/error/invalid_server_preference.rb +1 -0
- data/lib/mongo/error/operation_failure.rb +10 -0
- data/lib/mongo/error/parser.rb +10 -0
- data/lib/mongo/event.rb +1 -2
- data/lib/mongo/operation/result.rb +4 -1
- data/lib/mongo/operation/shared/executable_transaction_label.rb +3 -1
- data/lib/mongo/operation/shared/sessions_supported.rb +1 -1
- data/lib/mongo/protocol/msg.rb +1 -1
- data/lib/mongo/protocol/query.rb +2 -2
- data/lib/mongo/retryable.rb +20 -6
- data/lib/mongo/server.rb +6 -0
- data/lib/mongo/server/connection.rb +4 -4
- data/lib/mongo/server/monitor/connection.rb +9 -5
- data/lib/mongo/server_selector/selectable.rb +86 -32
- data/lib/mongo/session.rb +98 -15
- data/lib/mongo/version.rb +1 -1
- data/spec/README.md +85 -0
- data/spec/integration/bulk_insert_spec.rb +1 -1
- data/spec/integration/change_stream_examples_spec.rb +3 -1
- data/spec/integration/change_stream_spec.rb +10 -14
- data/spec/integration/client_construction_spec.rb +1 -0
- data/spec/integration/command_monitoring_spec.rb +37 -1
- data/spec/integration/command_spec.rb +141 -0
- data/spec/integration/connection_spec.rb +4 -2
- data/spec/integration/cursor_reaping_spec.rb +1 -1
- data/spec/integration/docs_examples_spec.rb +1 -1
- data/spec/integration/retryable_writes_spec.rb +33 -42
- data/spec/integration/server_description_spec.rb +3 -3
- data/spec/integration/server_selector_spec.rb +79 -0
- data/spec/lite_spec_helper.rb +4 -2
- data/spec/mongo/address_spec.rb +8 -0
- data/spec/mongo/auth/cr_spec.rb +5 -2
- data/spec/mongo/auth/invalid_mechanism_spec.rb +11 -0
- data/spec/mongo/auth/scram/conversation_spec.rb +3 -2
- data/spec/mongo/auth/scram/negotiation_spec.rb +1 -2
- data/spec/mongo/auth/scram_spec.rb +11 -6
- data/spec/mongo/auth/user/view_spec.rb +13 -6
- data/spec/mongo/bulk_write_spec.rb +81 -104
- data/spec/mongo/client_construction_spec.rb +18 -7
- data/spec/mongo/client_spec.rb +11 -7
- data/spec/mongo/cluster_spec.rb +30 -1
- data/spec/mongo/collection/view/aggregation_spec.rb +18 -10
- data/spec/mongo/collection/view/change_stream_spec.rb +28 -8
- data/spec/mongo/collection/view/map_reduce_spec.rb +24 -10
- data/spec/mongo/collection/view/readable_spec.rb +37 -19
- data/spec/mongo/collection/view/writable_spec.rb +64 -32
- data/spec/mongo/collection/view_spec.rb +4 -2
- data/spec/mongo/collection_spec.rb +163 -73
- data/spec/mongo/cursor_spec.rb +5 -2
- data/spec/mongo/database_spec.rb +41 -19
- data/spec/mongo/error/no_server_available_spec.rb +1 -1
- data/spec/mongo/error/parser_spec.rb +29 -0
- data/spec/mongo/grid/stream/write_spec.rb +2 -1
- data/spec/mongo/index/view_spec.rb +42 -24
- data/spec/mongo/operation/delete/op_msg_spec.rb +11 -7
- data/spec/mongo/operation/insert/op_msg_spec.rb +10 -6
- data/spec/mongo/operation/update/op_msg_spec.rb +10 -6
- data/spec/mongo/protocol/compressed_spec.rb +1 -1
- data/spec/mongo/protocol/msg_spec.rb +1 -1
- data/spec/mongo/server/app_metadata_spec.rb +2 -1
- data/spec/mongo/server/connection_auth_spec.rb +1 -1
- data/spec/mongo/server/monitor/connection_spec.rb +42 -0
- data/spec/mongo/server_selector_spec.rb +17 -0
- data/spec/mongo/server_spec.rb +110 -0
- data/spec/mongo/session/session_pool_spec.rb +1 -1
- data/spec/mongo/session_spec.rb +1 -1
- data/spec/mongo/session_transaction_spec.rb +162 -1
- data/spec/mongo/socket/ssl_spec.rb +14 -7
- data/spec/mongo/uri/srv_protocol_spec.rb +41 -34
- data/spec/spec_helper.rb +3 -191
- data/spec/spec_tests/change_streams_spec.rb +3 -6
- data/spec/spec_tests/data/transactions/abort.yml +3 -1
- data/spec/spec_tests/data/transactions/commit.yml +4 -3
- data/spec/spec_tests/data/transactions/error-labels.yml +17 -13
- data/spec/spec_tests/data/transactions/read-concern.yml +611 -0
- data/spec/spec_tests/data/transactions/retryable-commit.yml +126 -21
- data/spec/spec_tests/data/transactions_api/callback-aborts.yml +42 -39
- data/spec/spec_tests/data/transactions_api/callback-commits.yml +52 -50
- data/spec/spec_tests/data/transactions_api/callback-retry.yml +33 -31
- data/spec/spec_tests/data/transactions_api/commit-retry.yml +42 -39
- data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror-4.2.yml +13 -12
- data/spec/spec_tests/data/transactions_api/commit-transienttransactionerror.yml +15 -26
- data/spec/spec_tests/data/transactions_api/commit-writeconcernerror.yml +25 -33
- data/spec/spec_tests/data/transactions_api/commit.yml +44 -42
- data/spec/spec_tests/data/transactions_api/transaction-options.yml +25 -23
- data/spec/spec_tests/max_staleness_spec.rb +2 -0
- data/spec/spec_tests/retryable_writes_spec.rb +2 -6
- data/spec/spec_tests/sdam_spec.rb +2 -0
- data/spec/spec_tests/server_selection_spec.rb +3 -0
- data/spec/spec_tests/transactions_api_spec.rb +7 -1
- data/spec/spec_tests/transactions_spec.rb +6 -0
- data/spec/spec_tests/uri_options_spec.rb +4 -26
- data/spec/support/certificates/ca.pem +21 -16
- data/spec/support/certificates/client.pem +90 -90
- data/spec/support/certificates/client_cert.pem +21 -20
- data/spec/support/certificates/client_key.pem +27 -28
- data/spec/support/certificates/client_key_encrypted.pem +26 -26
- data/spec/support/certificates/crl.pem +10 -8
- data/spec/support/certificates/crl_client_revoked.pem +11 -10
- data/spec/support/certificates/server.pem +48 -33
- data/spec/support/change_streams.rb +12 -32
- data/spec/support/client_registry.rb +12 -1
- data/spec/support/cluster_config.rb +48 -2
- data/spec/support/common_shortcuts.rb +73 -7
- data/spec/support/connection_string.rb +0 -3
- data/spec/support/constraints.rb +87 -22
- data/spec/support/crud.rb +2 -1
- data/spec/support/shared/server_selector.rb +0 -28
- data/spec/support/shared/session.rb +25 -14
- data/spec/support/transactions.rb +4 -8
- data/spec/support/transactions/operation.rb +26 -4
- data/spec/support/transactions/verifier.rb +5 -2
- metadata +496 -488
- metadata.gz.sig +5 -2
- data/spec/support/certificates/password_protected.pem +0 -51
data/spec/mongo/cursor_spec.rb
CHANGED
@@ -356,7 +356,8 @@ describe Mongo::Cursor do
|
|
356
356
|
end
|
357
357
|
end
|
358
358
|
|
359
|
-
context 'when an implicit session is used'
|
359
|
+
context 'when an implicit session is used' do
|
360
|
+
min_server_fcv '3.6'
|
360
361
|
|
361
362
|
let(:collection) do
|
362
363
|
subscribed_client[TEST_COLL]
|
@@ -400,7 +401,9 @@ describe Mongo::Cursor do
|
|
400
401
|
end
|
401
402
|
end
|
402
403
|
|
403
|
-
context 'when a getMore is needed to retrieve all results'
|
404
|
+
context 'when a getMore is needed to retrieve all results' do
|
405
|
+
min_server_fcv '3.6'
|
406
|
+
require_topology :single, :replica_set
|
404
407
|
|
405
408
|
let(:documents) do
|
406
409
|
(1..4).map{ |i| { field: "test#{i}" }}
|
data/spec/mongo/database_spec.rb
CHANGED
@@ -119,7 +119,7 @@ describe Mongo::Database do
|
|
119
119
|
|
120
120
|
context 'when specifying a batch size' do
|
121
121
|
|
122
|
-
it 'returns the stripped names of the collections'
|
122
|
+
it 'returns the stripped names of the collections' do
|
123
123
|
expect(database.collection_names(batch_size: 1).to_a).to include('users')
|
124
124
|
end
|
125
125
|
end
|
@@ -135,7 +135,7 @@ describe Mongo::Database do
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
|
-
it 'returns all collections'
|
138
|
+
it 'returns all collections' do
|
139
139
|
expect(database.collection_names(batch_size: 1).select { |c| c =~ /dalmatians/}.size).to eq(2)
|
140
140
|
end
|
141
141
|
|
@@ -159,12 +159,20 @@ describe Mongo::Database do
|
|
159
159
|
database[:users].create
|
160
160
|
end
|
161
161
|
|
162
|
-
|
163
|
-
|
162
|
+
context 'server 3.0+' do
|
163
|
+
min_server_fcv '3.0'
|
164
|
+
|
165
|
+
it 'returns a list of the collections info' do
|
166
|
+
expect(result).to include('users')
|
167
|
+
end
|
164
168
|
end
|
165
169
|
|
166
|
-
|
167
|
-
|
170
|
+
context 'server 2.6' do
|
171
|
+
max_server_fcv '2.6'
|
172
|
+
|
173
|
+
it 'returns a list of the collections info' do
|
174
|
+
expect(result).to include("#{SpecConfig.instance.test_db}.users")
|
175
|
+
end
|
168
176
|
end
|
169
177
|
end
|
170
178
|
|
@@ -205,7 +213,8 @@ describe Mongo::Database do
|
|
205
213
|
end
|
206
214
|
end
|
207
215
|
|
208
|
-
context 'when the user is not authorized'
|
216
|
+
context 'when the user is not authorized' do
|
217
|
+
require_auth
|
209
218
|
|
210
219
|
let(:database) do
|
211
220
|
described_class.new(unauthorized_client, SpecConfig.instance.test_db)
|
@@ -233,7 +242,8 @@ describe Mongo::Database do
|
|
233
242
|
expect(database.command({:ismaster => 1}.freeze).written_count).to eq(0)
|
234
243
|
end
|
235
244
|
|
236
|
-
context 'when provided a session'
|
245
|
+
context 'when provided a session' do
|
246
|
+
min_server_fcv '3.6'
|
237
247
|
|
238
248
|
let(:operation) do
|
239
249
|
client.database.command({ :ismaster => 1 }, session: session)
|
@@ -268,7 +278,7 @@ describe Mongo::Database do
|
|
268
278
|
end
|
269
279
|
|
270
280
|
context 'when a read concern is provided' do
|
271
|
-
|
281
|
+
min_server_fcv '3.2'
|
272
282
|
|
273
283
|
context 'when the read concern is valid' do
|
274
284
|
|
@@ -280,7 +290,9 @@ describe Mongo::Database do
|
|
280
290
|
end
|
281
291
|
|
282
292
|
context 'when the read concern is not valid' do
|
283
|
-
|
293
|
+
require_topology :single, :replica_set
|
294
|
+
|
295
|
+
it 'raises an exception' do
|
284
296
|
expect {
|
285
297
|
database.command(:ismaster => 1, readConcern: { level: 'yay' })
|
286
298
|
}.to raise_error(Mongo::Error::OperationFailure)
|
@@ -288,7 +300,8 @@ describe Mongo::Database do
|
|
288
300
|
end
|
289
301
|
end
|
290
302
|
|
291
|
-
context 'when no read preference is provided'
|
303
|
+
context 'when no read preference is provided' do
|
304
|
+
require_topology :single, :replica_set
|
292
305
|
|
293
306
|
let!(:primary_server) do
|
294
307
|
database.cluster.next_primary
|
@@ -303,7 +316,8 @@ describe Mongo::Database do
|
|
303
316
|
end
|
304
317
|
end
|
305
318
|
|
306
|
-
context 'when the client has a read preference set'
|
319
|
+
context 'when the client has a read preference set' do
|
320
|
+
require_topology :single, :replica_set
|
307
321
|
|
308
322
|
let!(:primary_server) do
|
309
323
|
database.cluster.next_primary
|
@@ -330,7 +344,8 @@ describe Mongo::Database do
|
|
330
344
|
end
|
331
345
|
end
|
332
346
|
|
333
|
-
context 'when there is a read preference argument provided'
|
347
|
+
context 'when there is a read preference argument provided' do
|
348
|
+
require_topology :single, :replica_set
|
334
349
|
|
335
350
|
let(:read_preference) do
|
336
351
|
{ :mode => :secondary, :tag_sets => [{ 'non' => 'existent' }] }
|
@@ -355,7 +370,8 @@ describe Mongo::Database do
|
|
355
370
|
end
|
356
371
|
end
|
357
372
|
|
358
|
-
context 'when the client has a server_selection_timeout set'
|
373
|
+
context 'when the client has a server_selection_timeout set' do
|
374
|
+
require_topology :single, :replica_set
|
359
375
|
|
360
376
|
let(:client) do
|
361
377
|
authorized_client.with(server_selection_timeout: 0)
|
@@ -374,7 +390,8 @@ describe Mongo::Database do
|
|
374
390
|
|
375
391
|
context 'when a write concern is not defined on the client/database object' do
|
376
392
|
|
377
|
-
context 'when a write concern is provided in the selector'
|
393
|
+
context 'when a write concern is provided in the selector' do
|
394
|
+
require_topology :single
|
378
395
|
|
379
396
|
let(:cmd) do
|
380
397
|
{
|
@@ -418,7 +435,8 @@ describe Mongo::Database do
|
|
418
435
|
end
|
419
436
|
end
|
420
437
|
|
421
|
-
context 'when a write concern is provided in the command selector'
|
438
|
+
context 'when a write concern is provided in the command selector' do
|
439
|
+
require_topology :single
|
422
440
|
|
423
441
|
let(:cmd) do
|
424
442
|
{
|
@@ -477,7 +495,9 @@ describe Mongo::Database do
|
|
477
495
|
client.database
|
478
496
|
end
|
479
497
|
|
480
|
-
context 'when the server supports write concern on the dropDatabase command'
|
498
|
+
context 'when the server supports write concern on the dropDatabase command' do
|
499
|
+
min_server_fcv '3.4'
|
500
|
+
require_topology :single
|
481
501
|
|
482
502
|
it 'applies the write concern' do
|
483
503
|
expect{
|
@@ -486,7 +506,8 @@ describe Mongo::Database do
|
|
486
506
|
end
|
487
507
|
end
|
488
508
|
|
489
|
-
context 'when the server does not support write concern on the dropDatabase command'
|
509
|
+
context 'when the server does not support write concern on the dropDatabase command' do
|
510
|
+
max_server_version '3.2'
|
490
511
|
|
491
512
|
it 'does not apply the write concern' do
|
492
513
|
expect(database_with_write_options.drop).to be_successful
|
@@ -537,7 +558,8 @@ describe Mongo::Database do
|
|
537
558
|
end
|
538
559
|
end
|
539
560
|
|
540
|
-
describe '#fs'
|
561
|
+
describe '#fs' do
|
562
|
+
require_topology :single, :replica_set
|
541
563
|
|
542
564
|
let(:database) do
|
543
565
|
described_class.new(authorized_client, SpecConfig.instance.test_db)
|
@@ -16,7 +16,7 @@ describe Mongo::Error::NoServerAvailable do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'is correct' do
|
19
|
-
expect(error.message).to eq('No primary server is available in cluster: #<Cluster topology=Unknown[127.0.0.1:27017] servers=[]> with timeout=30, LT=0.015')
|
19
|
+
expect(error.message).to eq('No primary server is available in cluster: #<Cluster topology=Unknown[127.0.0.1:27017] servers=[#<Server address=127.0.0.1:27017 UNKNOWN>]> with timeout=30, LT=0.015')
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -256,4 +256,33 @@ describe Mongo::Error::Parser do
|
|
256
256
|
end
|
257
257
|
end
|
258
258
|
end
|
259
|
+
|
260
|
+
describe '#wtimeout' do
|
261
|
+
let(:parser) do
|
262
|
+
described_class.new(document)
|
263
|
+
end
|
264
|
+
|
265
|
+
context 'when document contains wtimeout' do
|
266
|
+
let(:document) do
|
267
|
+
{ 'ok' => 1, 'writeConcernError' => {
|
268
|
+
'errmsg' => 'replication timed out', 'code' => 64,
|
269
|
+
'errInfo' => {'wtimeout' => true}} }
|
270
|
+
end
|
271
|
+
|
272
|
+
it 'returns true' do
|
273
|
+
expect(parser.wtimeout).to be true
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
context 'when document does not contain wtimeout' do
|
278
|
+
let(:document) do
|
279
|
+
{ 'ok' => 1, 'writeConcernError' => {
|
280
|
+
'errmsg' => 'replication did not time out', 'code' => 55 }}
|
281
|
+
end
|
282
|
+
|
283
|
+
it 'returns nil' do
|
284
|
+
expect(parser.wtimeout).to be nil
|
285
|
+
end
|
286
|
+
end
|
287
|
+
end
|
259
288
|
end
|
@@ -96,7 +96,8 @@ describe Mongo::Grid::FSBucket::Stream::Write do
|
|
96
96
|
end
|
97
97
|
end
|
98
98
|
|
99
|
-
context 'when the fs has a write concern'
|
99
|
+
context 'when the fs has a write concern' do
|
100
|
+
require_topology :single
|
100
101
|
|
101
102
|
let(:fs_options) do
|
102
103
|
{ write: INVALID_WRITE_CONCERN }
|
@@ -87,7 +87,8 @@ describe Mongo::Index::View do
|
|
87
87
|
view_with_write_concern.drop_one('another_-1')
|
88
88
|
end
|
89
89
|
|
90
|
-
context 'when the server accepts writeConcern for the dropIndexes operation'
|
90
|
+
context 'when the server accepts writeConcern for the dropIndexes operation' do
|
91
|
+
min_server_fcv '3.4'
|
91
92
|
|
92
93
|
it 'applies the write concern' do
|
93
94
|
expect {
|
@@ -96,7 +97,8 @@ describe Mongo::Index::View do
|
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
99
|
-
context 'when the server does not accept writeConcern for the dropIndexes operation'
|
100
|
+
context 'when the server does not accept writeConcern for the dropIndexes operation' do
|
101
|
+
max_server_version '3.2'
|
100
102
|
|
101
103
|
it 'does not apply the write concern' do
|
102
104
|
expect(result).to be_successful
|
@@ -104,7 +106,8 @@ describe Mongo::Index::View do
|
|
104
106
|
end
|
105
107
|
end
|
106
108
|
|
107
|
-
context 'when there are multiple indexes with the same key pattern'
|
109
|
+
context 'when there are multiple indexes with the same key pattern' do
|
110
|
+
min_server_fcv '3.4'
|
108
111
|
|
109
112
|
before do
|
110
113
|
view.create_one({ random: 1 }, unique: true)
|
@@ -187,7 +190,8 @@ describe Mongo::Index::View do
|
|
187
190
|
view_with_write_concern.drop_all
|
188
191
|
end
|
189
192
|
|
190
|
-
context 'when the server accepts writeConcern for the dropIndexes operation'
|
193
|
+
context 'when the server accepts writeConcern for the dropIndexes operation' do
|
194
|
+
min_server_fcv '3.4'
|
191
195
|
|
192
196
|
it 'applies the write concern' do
|
193
197
|
expect {
|
@@ -196,7 +200,8 @@ describe Mongo::Index::View do
|
|
196
200
|
end
|
197
201
|
end
|
198
202
|
|
199
|
-
context 'when the server does not accept writeConcern for the dropIndexes operation'
|
203
|
+
context 'when the server does not accept writeConcern for the dropIndexes operation' do
|
204
|
+
max_server_version '3.2'
|
200
205
|
|
201
206
|
it 'does not apply the write concern' do
|
202
207
|
expect(result).to be_successful
|
@@ -253,7 +258,8 @@ describe Mongo::Index::View do
|
|
253
258
|
end
|
254
259
|
end
|
255
260
|
|
256
|
-
context 'when collation is specified'
|
261
|
+
context 'when collation is specified' do
|
262
|
+
min_server_fcv '3.4'
|
257
263
|
|
258
264
|
let(:result) do
|
259
265
|
view.create_many(
|
@@ -267,7 +273,8 @@ describe Mongo::Index::View do
|
|
267
273
|
view.get('random_1')
|
268
274
|
end
|
269
275
|
|
270
|
-
context 'when the server supports collations'
|
276
|
+
context 'when the server supports collations' do
|
277
|
+
min_server_fcv '3.4'
|
271
278
|
|
272
279
|
it 'returns ok' do
|
273
280
|
expect(result).to be_successful
|
@@ -281,7 +288,8 @@ describe Mongo::Index::View do
|
|
281
288
|
end
|
282
289
|
end
|
283
290
|
|
284
|
-
context 'when the server does not support collations'
|
291
|
+
context 'when the server does not support collations' do
|
292
|
+
max_server_version '3.2'
|
285
293
|
|
286
294
|
it 'raises an exception' do
|
287
295
|
expect {
|
@@ -325,7 +333,8 @@ describe Mongo::Index::View do
|
|
325
333
|
)
|
326
334
|
end
|
327
335
|
|
328
|
-
context 'when the server accepts writeConcern for the createIndexes operation'
|
336
|
+
context 'when the server accepts writeConcern for the createIndexes operation' do
|
337
|
+
min_server_fcv '3.4'
|
329
338
|
|
330
339
|
it 'applies the write concern' do
|
331
340
|
expect {
|
@@ -334,7 +343,8 @@ describe Mongo::Index::View do
|
|
334
343
|
end
|
335
344
|
end
|
336
345
|
|
337
|
-
context 'when the server does not accept writeConcern for the createIndexes operation'
|
346
|
+
context 'when the server does not accept writeConcern for the createIndexes operation' do
|
347
|
+
max_server_version '3.2'
|
338
348
|
|
339
349
|
it 'does not apply the write concern' do
|
340
350
|
expect(result).to be_successful
|
@@ -398,7 +408,8 @@ describe Mongo::Index::View do
|
|
398
408
|
view.get('random_1')
|
399
409
|
end
|
400
410
|
|
401
|
-
context 'when the server supports collations'
|
411
|
+
context 'when the server supports collations' do
|
412
|
+
min_server_fcv '3.4'
|
402
413
|
|
403
414
|
it 'returns ok' do
|
404
415
|
expect(result).to be_successful
|
@@ -412,7 +423,8 @@ describe Mongo::Index::View do
|
|
412
423
|
end
|
413
424
|
end
|
414
425
|
|
415
|
-
context 'when the server does not support collations'
|
426
|
+
context 'when the server does not support collations' do
|
427
|
+
max_server_version '3.2'
|
416
428
|
|
417
429
|
it 'raises an exception' do
|
418
430
|
expect {
|
@@ -456,7 +468,8 @@ describe Mongo::Index::View do
|
|
456
468
|
])
|
457
469
|
end
|
458
470
|
|
459
|
-
context 'when the server accepts writeConcern for the createIndexes operation'
|
471
|
+
context 'when the server accepts writeConcern for the createIndexes operation' do
|
472
|
+
min_server_fcv '3.4'
|
460
473
|
|
461
474
|
it 'applies the write concern' do
|
462
475
|
expect {
|
@@ -465,7 +478,8 @@ describe Mongo::Index::View do
|
|
465
478
|
end
|
466
479
|
end
|
467
480
|
|
468
|
-
context 'when the server does not accept writeConcern for the createIndexes operation'
|
481
|
+
context 'when the server does not accept writeConcern for the createIndexes operation' do
|
482
|
+
max_server_version '3.2'
|
469
483
|
|
470
484
|
it 'does not apply the write concern' do
|
471
485
|
expect(result).to be_successful
|
@@ -545,7 +559,8 @@ describe Mongo::Index::View do
|
|
545
559
|
view_with_write_concern.create_one(spec, unique: true)
|
546
560
|
end
|
547
561
|
|
548
|
-
context 'when the server accepts writeConcern for the createIndexes operation'
|
562
|
+
context 'when the server accepts writeConcern for the createIndexes operation' do
|
563
|
+
min_server_fcv '3.4'
|
549
564
|
|
550
565
|
it 'applies the write concern' do
|
551
566
|
expect {
|
@@ -554,7 +569,8 @@ describe Mongo::Index::View do
|
|
554
569
|
end
|
555
570
|
end
|
556
571
|
|
557
|
-
context 'when the server does not accept writeConcern for the createIndexes operation'
|
572
|
+
context 'when the server does not accept writeConcern for the createIndexes operation' do
|
573
|
+
max_server_version '3.2'
|
558
574
|
|
559
575
|
it 'does not apply the write concern' do
|
560
576
|
expect(result).to be_successful
|
@@ -615,7 +631,7 @@ describe Mongo::Index::View do
|
|
615
631
|
end
|
616
632
|
|
617
633
|
context 'when providing an invalid partial index filter' do
|
618
|
-
|
634
|
+
min_server_fcv '3.2'
|
619
635
|
|
620
636
|
it 'raises an exception' do
|
621
637
|
expect {
|
@@ -625,7 +641,7 @@ describe Mongo::Index::View do
|
|
625
641
|
end
|
626
642
|
|
627
643
|
context 'when providing a valid partial index filter' do
|
628
|
-
|
644
|
+
min_server_fcv '3.2'
|
629
645
|
|
630
646
|
let(:expression) do
|
631
647
|
{'a' => {'$lte' => 1.5}}
|
@@ -732,18 +748,19 @@ describe Mongo::Index::View do
|
|
732
748
|
end
|
733
749
|
|
734
750
|
context 'when the collection does not exist' do
|
751
|
+
min_server_fcv '3.0'
|
735
752
|
|
736
|
-
let(:
|
753
|
+
let(:nonexistent_collection) do
|
737
754
|
authorized_client[:not_a_collection]
|
738
755
|
end
|
739
756
|
|
740
|
-
let(:
|
741
|
-
described_class.new(
|
757
|
+
let(:nonexistent_view) do
|
758
|
+
described_class.new(nonexistent_collection)
|
742
759
|
end
|
743
760
|
|
744
|
-
it 'raises a
|
761
|
+
it 'raises a nonexistent collection error' do
|
745
762
|
expect {
|
746
|
-
|
763
|
+
nonexistent_view.each.to_a
|
747
764
|
}.to raise_error(Mongo::Error::OperationFailure)
|
748
765
|
end
|
749
766
|
end
|
@@ -809,7 +826,8 @@ describe Mongo::Index::View do
|
|
809
826
|
end
|
810
827
|
end
|
811
828
|
|
812
|
-
context 'when the server supports collations'
|
829
|
+
context 'when the server supports collations' do
|
830
|
+
min_server_fcv '3.4'
|
813
831
|
|
814
832
|
let(:extended_options) do
|
815
833
|
options.merge(:collation => { locale: 'en_US' } )
|
@@ -113,8 +113,9 @@ describe Mongo::Operation::Delete::OpMsg do
|
|
113
113
|
authorized_client.start_session
|
114
114
|
end
|
115
115
|
|
116
|
-
context 'when the topology is replica set or sharded'
|
117
|
-
|
116
|
+
context 'when the topology is replica set or sharded' do
|
117
|
+
min_server_fcv '3.6'
|
118
|
+
require_topology :replica_set, :sharded
|
118
119
|
|
119
120
|
let(:expected_global_args) do
|
120
121
|
global_args.merge(Mongo::Operation::CLUSTER_TIME => authorized_client.cluster.cluster_time)
|
@@ -127,8 +128,9 @@ describe Mongo::Operation::Delete::OpMsg do
|
|
127
128
|
end
|
128
129
|
end
|
129
130
|
|
130
|
-
context 'when the topology is standalone'
|
131
|
-
|
131
|
+
context 'when the topology is standalone' do
|
132
|
+
min_server_fcv '3.6'
|
133
|
+
require_topology :single
|
132
134
|
|
133
135
|
let(:expected_global_args) do
|
134
136
|
global_args
|
@@ -178,7 +180,7 @@ describe Mongo::Operation::Delete::OpMsg do
|
|
178
180
|
end
|
179
181
|
|
180
182
|
context 'when the topology is replica set or sharded' do
|
181
|
-
|
183
|
+
min_server_fcv '3.6'
|
182
184
|
require_topology :replica_set, :sharded
|
183
185
|
|
184
186
|
let(:expected_global_args) do
|
@@ -195,7 +197,9 @@ describe Mongo::Operation::Delete::OpMsg do
|
|
195
197
|
end
|
196
198
|
end
|
197
199
|
|
198
|
-
context 'when the topology is standalone'
|
200
|
+
context 'when the topology is standalone' do
|
201
|
+
min_server_fcv '3.6'
|
202
|
+
require_topology :single
|
199
203
|
|
200
204
|
let(:expected_global_args) do
|
201
205
|
global_args.dup.tap do |args|
|
@@ -212,7 +216,7 @@ describe Mongo::Operation::Delete::OpMsg do
|
|
212
216
|
end
|
213
217
|
|
214
218
|
context 'when the session is explicit' do
|
215
|
-
|
219
|
+
min_server_fcv '3.6'
|
216
220
|
require_topology :replica_set, :sharded
|
217
221
|
|
218
222
|
let(:session) do
|