mongo 2.14.0.rc1 → 2.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +1 -1
  4. data/Rakefile +39 -4
  5. data/lib/mongo/address.rb +1 -1
  6. data/lib/mongo/collection.rb +5 -0
  7. data/lib/mongo/collection/view/readable.rb +4 -0
  8. data/lib/mongo/cursor.rb +15 -3
  9. data/lib/mongo/database/view.rb +1 -1
  10. data/lib/mongo/operation/collections_info/command.rb +5 -0
  11. data/lib/mongo/operation/collections_info/result.rb +16 -1
  12. data/lib/mongo/operation/find/result.rb +10 -0
  13. data/lib/mongo/server/description.rb +8 -1
  14. data/lib/mongo/session.rb +2 -1
  15. data/lib/mongo/version.rb +1 -1
  16. data/spec/README.md +7 -0
  17. data/spec/integration/bson_symbol_spec.rb +4 -2
  18. data/spec/integration/change_stream_spec.rb +1 -1
  19. data/spec/integration/connection_pool_populator_spec.rb +1 -1
  20. data/spec/integration/cursor_reaping_spec.rb +1 -1
  21. data/spec/integration/fork_reconnect_spec.rb +56 -1
  22. data/spec/integration/query_cache_transactions_spec.rb +29 -18
  23. data/spec/integration/sdam_error_handling_spec.rb +17 -0
  24. data/spec/integration/sdam_events_spec.rb +8 -5
  25. data/spec/integration/transactions_examples_spec.rb +17 -7
  26. data/spec/lite_spec_helper.rb +5 -3
  27. data/spec/mongo/auth/user_spec.rb +1 -1
  28. data/spec/mongo/bulk_write_spec.rb +2 -2
  29. data/spec/mongo/client_construction_spec.rb +3 -3
  30. data/spec/mongo/client_encryption_spec.rb +16 -10
  31. data/spec/mongo/client_spec.rb +7 -0
  32. data/spec/mongo/cluster/topology/replica_set_spec.rb +1 -1
  33. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  34. data/spec/mongo/cluster/topology/single_spec.rb +1 -1
  35. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  36. data/spec/mongo/cluster/topology_spec.rb +1 -1
  37. data/spec/mongo/collection/view/change_stream_resume_spec.rb +1 -1
  38. data/spec/mongo/collection/view/readable_spec.rb +36 -0
  39. data/spec/mongo/collection_spec.rb +12 -0
  40. data/spec/mongo/crypt/binary_spec.rb +1 -6
  41. data/spec/mongo/crypt/binding/binary_spec.rb +1 -6
  42. data/spec/mongo/crypt/binding/context_spec.rb +2 -7
  43. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -6
  44. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +2 -7
  45. data/spec/mongo/crypt/binding/status_spec.rb +1 -6
  46. data/spec/mongo/crypt/binding/version_spec.rb +1 -6
  47. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  48. data/spec/mongo/crypt/status_spec.rb +1 -6
  49. data/spec/mongo/database_spec.rb +64 -0
  50. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  51. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  52. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  53. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  54. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  55. data/spec/mongo/operation/delete/op_msg_spec.rb +3 -3
  56. data/spec/mongo/operation/insert/command_spec.rb +2 -2
  57. data/spec/mongo/operation/insert/op_msg_spec.rb +3 -3
  58. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  59. data/spec/mongo/operation/update/command_spec.rb +2 -2
  60. data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
  61. data/spec/mongo/query_cache_spec.rb +1 -0
  62. data/spec/mongo/server/app_metadata_shared.rb +2 -2
  63. data/spec/mongo/server/connection_spec.rb +1 -1
  64. data/spec/mongo/server/description_spec.rb +18 -0
  65. data/spec/mongo/server_selector_spec.rb +2 -2
  66. data/spec/mongo/socket/ssl_spec.rb +3 -3
  67. data/spec/runners/change_streams/test.rb +1 -1
  68. data/spec/runners/crud/test_base.rb +0 -19
  69. data/spec/runners/server_selection.rb +1 -1
  70. data/spec/runners/transactions/test.rb +2 -2
  71. data/spec/shared/LICENSE +20 -0
  72. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  73. data/spec/shared/lib/mrss/constraints.rb +303 -0
  74. data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
  75. data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
  76. data/spec/spec_helper.rb +3 -1
  77. data/spec/stress/fork_reconnect_stress_spec.rb +1 -1
  78. data/spec/support/constraints.rb +0 -270
  79. data/spec/support/utils.rb +19 -0
  80. metadata +956 -952
  81. metadata.gz.sig +0 -0
  82. data/spec/support/child_process_helper.rb +0 -78
  83. data/spec/support/lite_constraints.rb +0 -165
  84. data/spec/support/spec_organizer.rb +0 -129
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 493d0cb29d48d80c7fe4c87691500c078b6667bd214dcc021e0074938229be83
4
- data.tar.gz: 44507b68e42abadad6987f50c3b3ae1b8ae70f046812607755ffbe292013ccc4
3
+ metadata.gz: 7bfb22d052a842e256744a88c7e3cbd3b958643cc3e0f4425bf97be8f913f167
4
+ data.tar.gz: b63f3605ad8223e99a5f6a62aabff94a8c8600095b84265b6b4deb38e7223013
5
5
  SHA512:
6
- metadata.gz: ea39c71265e24349b018a8e5f5699b556d1ed43107135da46790ad8496c4bcd8a3917ca6fd0c7b405c5e6cff968d6e18cedf35ac33fe660f19f2869f663cdf64
7
- data.tar.gz: 30ca549b30bec1889f622f7002658c918b6686e417bd9a636777bbc7f321d06094278b5a7ff4b04a9395f61bf90e28f99f26ff9ec404b0e3687dbc1b4a77ec1f
6
+ metadata.gz: 85566c0080b9bcfa67438a365114dd062425df557040e05c0db0448aedd37a0f52dae5b8612b08af196a9e35c1e5b41553a89607d780d187d4e2e28602471c76
7
+ data.tar.gz: 5172ab2d71a8d7e048fcb2d87e7219024a2028c3909f2cce48081d1b3014071df13b02426019508bda6542e4870992ca869cd3393caf3aaf6483ad4c74f1abf3
Binary file
data.tar.gz.sig CHANGED
@@ -1 +1 @@
1
- lb~�{������z�x�%����~��n��3G���k�j*R)ڗ0
1
+ ��0���H#{�F���� ��ƛ!z�����}��6l��kM��h.[��hAi�<y/&BM~|2��֘�ss����o@�]k�d�w�xǴp+��ȿ�
data/Rakefile CHANGED
@@ -13,7 +13,31 @@ end
13
13
  default_groups = [:default, :testing]
14
14
  Bundler.require(*default_groups)
15
15
 
16
+ ROOT = File.expand_path(File.join(File.dirname(__FILE__)))
17
+
18
+ $: << File.join(ROOT, 'spec/shared/lib')
19
+
16
20
  require 'rspec/core/rake_task'
21
+ require 'mrss/spec_organizer'
22
+
23
+ CLASSIFIERS = [
24
+ [%r,^mongo,, :unit],
25
+ [%r,^kerberos,, :unit],
26
+ [%r,^integration/sdam_error_handling,, :sdam_integration],
27
+ [%r,^integration/cursor_reaping,, :cursor_reaping],
28
+ [%r,^integration/query_cache,, :query_cache],
29
+ [%r,^integration/transactions_examples,, :tx_examples],
30
+ [%r,^(atlas|integration),, :integration],
31
+ [%r,^spec_tests/sdam_integration,, :spec_sdam_integration],
32
+ [%r,^spec_tests,, :spec],
33
+ ]
34
+
35
+ RUN_PRIORITY = %i(
36
+ tx_examples
37
+ unit
38
+ integration sdam_integration cursor_reaping query_cache
39
+ spec spec_sdam_integration
40
+ )
17
41
 
18
42
  tasks = Rake.application.instance_variable_get('@tasks')
19
43
  tasks['release:do'] = tasks.delete('release')
@@ -71,12 +95,23 @@ namespace :spec do
71
95
  SpecConfig.instance.print_summary
72
96
  end
73
97
 
74
- task :ci => ['spec:prepare'] do
75
- $: << File.join(File.dirname(__FILE__), 'spec')
98
+ def spec_organizer
99
+ Mrss::SpecOrganizer.new(
100
+ root: ROOT,
101
+ classifiers: CLASSIFIERS,
102
+ priority_order: RUN_PRIORITY,
103
+ )
104
+ end
76
105
 
77
- require 'support/spec_organizer'
106
+ task :ci => ['spec:prepare'] do
107
+ spec_organizer.run
108
+ end
78
109
 
79
- SpecOrganizer.new.run
110
+ desc 'Show test buckets'
111
+ task :buckets do
112
+ spec_organizer.ordered_buckets.each do |category, paths|
113
+ puts "#{category || 'remaining'}: #{paths&.join(' ') || '<none>'}"
114
+ end
80
115
  end
81
116
  end
82
117
 
@@ -286,7 +286,7 @@ module Mongo
286
286
  rescue IOError, SystemCallError => e
287
287
  raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
288
288
  rescue OpenSSL::SSL::SSLError => e
289
- raise Error::SocketError, "#{e.class}: #{e} (for #{self}) (#{SSL_ERROR})"
289
+ raise Error::SocketError, "#{e.class}: #{e} (for #{self})"
290
290
  end
291
291
  end
292
292
  end
@@ -564,6 +564,11 @@ module Mongo
564
564
  else
565
565
  write_concern_with_session(session)
566
566
  end
567
+
568
+ if document.nil?
569
+ raise ArgumentError, "Document to be inserted cannot be nil"
570
+ end
571
+
567
572
  write_with_retry(session, write_concern) do |server, txn_num|
568
573
  Operation::Insert.new(
569
574
  :documents => [ document ],
@@ -226,6 +226,10 @@ module Mongo
226
226
  #
227
227
  # @since 2.6.0
228
228
  def estimated_document_count(opts = {})
229
+ unless view.filter.empty?
230
+ raise ArgumentError, "Cannot call estimated_document_count when querying with a filter"
231
+ end
232
+
229
233
  cmd = { count: collection.name }
230
234
  cmd[:maxTimeMS] = opts[:max_time_ms] if opts[:max_time_ms]
231
235
  if read_concern
@@ -69,12 +69,12 @@ module Mongo
69
69
  @view = view
70
70
  @server = server
71
71
  @initial_result = result
72
+ @namespace = result.namespace
72
73
  @remaining = limit if limited?
73
74
  @cursor_id = result.cursor_id
74
75
  if @cursor_id.nil?
75
76
  raise ArgumentError, 'Cursor id must be present in the result'
76
77
  end
77
- @coll_name = nil
78
78
  @options = options
79
79
  @session = @options[:session]
80
80
  unless closed?
@@ -288,7 +288,20 @@ module Mongo
288
288
  #
289
289
  # @since 2.2.0
290
290
  def collection_name
291
- @coll_name || collection.name
291
+ # In most cases, this will be equivalent to the name of the collection
292
+ # object in the driver. However, in some cases (e.g. when connected
293
+ # to an Atlas Data Lake), the namespace returned by the find command
294
+ # may be different, which is why we want to use the collection name based
295
+ # on the namespace in the command result.
296
+ if @namespace
297
+ # Often, the namespace will be in the format "database.collection".
298
+ # However, sometimes the collection name will contain periods, which
299
+ # is why this method joins all the namespace components after the first.
300
+ ns_components = @namespace.split('.')
301
+ ns_components[1...ns_components.length].join('.')
302
+ else
303
+ collection.name
304
+ end
292
305
  end
293
306
 
294
307
  # Get the cursor id.
@@ -382,7 +395,6 @@ module Mongo
382
395
 
383
396
  def process(result)
384
397
  @remaining -= result.returned_count if limited?
385
- @coll_name ||= result.namespace.sub("#{database.name}.", '') if result.namespace
386
398
  # #process is called for the first batch of results. In this case
387
399
  # the @cursor_id may be zero (all results fit in the first batch).
388
400
  # Thus we need to check both @cursor_id and the cursor_id of the result
@@ -100,7 +100,7 @@ module Mongo
100
100
  #
101
101
  # @return [ Array<Hash> ] Info for each collection in the database.
102
102
  #
103
- # @since 2.0.5
103
+ # @since 2.0.5
104
104
  def list_collections(options = {})
105
105
  session = client.send(:get_session)
106
106
  collections_info(session, ServerSelector.primary, options)
@@ -27,6 +27,11 @@ module Mongo
27
27
 
28
28
  private
29
29
 
30
+ def get_result(connection, client, options = {})
31
+ # This is a Mongo::Operation::CollectionsInfo::Result
32
+ Result.new(*dispatch_message(connection, client), db_name)
33
+ end
34
+
30
35
  def selector(connection)
31
36
  {}
32
37
  end
@@ -23,6 +23,21 @@ module Mongo
23
23
  # @api semiprivate
24
24
  class Result < Operation::Result
25
25
 
26
+ # Initialize a new result.
27
+ #
28
+ # @param [ Array<Protocol::Message> | nil ] replies The wire protocol replies, if any.
29
+ # @param [ Server::Description ] connection_description
30
+ # Server description of the server that performed the operation that
31
+ # this result is for.
32
+ # @param [ String ] database_name The name of the database that the
33
+ # query was sent to.
34
+ #
35
+ # @api private
36
+ def initialize(replies, connection_description, database_name)
37
+ super(replies, connection_description)
38
+ @database_name = database_name
39
+ end
40
+
26
41
  # Get the namespace for the cursor.
27
42
  #
28
43
  # @example Get the namespace.
@@ -33,7 +48,7 @@ module Mongo
33
48
  # @since 2.1.0
34
49
  # @api private
35
50
  def namespace
36
- Database::NAMESPACES
51
+ "#{@database_name}.#{Database::NAMESPACES}"
37
52
  end
38
53
  end
39
54
  end
@@ -48,6 +48,16 @@ module Mongo
48
48
  cursor_document[FIRST_BATCH]
49
49
  end
50
50
 
51
+ # The namespace in which this find command was performed.
52
+ #
53
+ # @return [ String ] The namespace, usually in the format
54
+ # "database.collection".
55
+ #
56
+ # @api private
57
+ def namespace
58
+ cursor_document['ns']
59
+ end
60
+
51
61
  private
52
62
 
53
63
  def cursor_document
@@ -182,13 +182,20 @@ module Mongo
182
182
  # @since 2.5.0
183
183
  LOGICAL_SESSION_TIMEOUT_MINUTES = 'logicalSessionTimeoutMinutes'.freeze
184
184
 
185
+ # Constant for reading connectionId info from config.
186
+ #
187
+ # @api private
188
+ CONNECTION_ID = 'connectionId'.freeze
189
+
185
190
  # Fields to exclude when comparing two descriptions.
186
191
  #
187
192
  # @since 2.0.6
188
193
  EXCLUDE_FOR_COMPARISON = [ LOCAL_TIME,
189
194
  LAST_WRITE,
190
195
  OPERATION_TIME,
191
- Operation::CLUSTER_TIME ].freeze
196
+ Operation::CLUSTER_TIME,
197
+ CONNECTION_ID,
198
+ ].freeze
192
199
 
193
200
  # Instantiate the new server description from the result of the ismaster
194
201
  # command.
@@ -379,6 +379,7 @@ module Mongo
379
379
  rv = yield self
380
380
  rescue Exception => e
381
381
  if within_states?(STARTING_TRANSACTION_STATE, TRANSACTION_IN_PROGRESS_STATE)
382
+ log_warn("Aborting transaction due to #{e.class}: #{e}")
382
383
  abort_transaction
383
384
  transaction_in_progress = false
384
385
  end
@@ -443,7 +444,7 @@ module Mongo
443
444
  true
444
445
  ensure
445
446
  if transaction_in_progress
446
- log_warn('with_transaction callback altered with_transaction loop, aborting transaction')
447
+ log_warn('with_transaction callback broke out of with_transaction loop, aborting transaction')
447
448
  begin
448
449
  abort_transaction
449
450
  rescue Error::OperationFailure, Error::InvalidTransactionOperation
@@ -17,5 +17,5 @@ module Mongo
17
17
  # The current version of the driver.
18
18
  #
19
19
  # @since 2.0.0
20
- VERSION = '2.14.0.rc1'.freeze
20
+ VERSION = '2.14.0'.freeze
21
21
  end
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## Quick Start
4
4
 
5
+ The test suite requires shared tooling that is stored in a separate repository
6
+ and is referenced as a submodule. After checking out the desired driver
7
+ branch, check out the matching submodules:
8
+
9
+ git submodule init
10
+ git submodule update
11
+
5
12
  To run the test suite against a local MongoDB deployment listening on port
6
13
  27017, run:
7
14
 
@@ -25,8 +25,10 @@ describe 'Symbol encoding to BSON' do
25
25
  end
26
26
 
27
27
  it 'round-trips symbol values using the same byte buffer' do
28
- if BSON::Environment.jruby?
29
- pending 'https://jira.mongodb.org/browse/RUBY-2128'
28
+ if BSON::Environment.jruby? && (BSON::VERSION.split('.').map(&:to_i) <=> [4, 11, 0]) < 0
29
+ skip 'This test is only relevant to bson versions that increment ByteBuffer '\
30
+ 'read and write positions separately in JRuby, as implemented in ' \
31
+ 'bson version 4.11.0. For more information, see https://jira.mongodb.org/browse/RUBY-2128'
30
32
  end
31
33
 
32
34
  Hash.from_bson(hash.to_bson).should == hash
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'Change stream integration', retry: 4 do
4
- only_mri
4
+ require_mri
5
5
  max_example_run_time 7
6
6
  min_server_fcv '3.6'
7
7
  require_topology :replica_set
@@ -271,7 +271,7 @@ describe 'Connection pool populator integration' do
271
271
  end
272
272
 
273
273
  describe 'when forking is enabled' do
274
- only_mri
274
+ require_mri
275
275
 
276
276
  context 'when min size is provided' do
277
277
  min_server_version '2.8'
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe 'Cursor reaping' do
4
4
  # JRuby does reap cursors but GC.start does not force GC to run like it does
5
5
  # in MRI, I don't currently know how to force GC to run in JRuby
6
- only_mri
6
+ require_mri
7
7
 
8
8
  around(:all) do |example|
9
9
  saved_level = Mongo::Logger.logger.level
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  describe 'fork reconnect' do
4
4
  require_fork
5
- only_mri
5
+ require_mri
6
6
 
7
7
  # On multi-shard sharded clusters a succeeding write request does not
8
8
  # guarantee that the next operation will succeed (since it could be sent to
@@ -139,5 +139,60 @@ describe 'fork reconnect' do
139
139
  # performed by the child is recovered from.
140
140
  client['foo'].find(test: 1)
141
141
  end
142
+
143
+ # Test from Driver Sessions Spec
144
+ # * Create ClientSession
145
+ # * Record its lsid
146
+ # * Delete it (so the lsid is pushed into the pool)
147
+ # * Fork
148
+ # * In the parent, create a ClientSession and assert its lsid is the same.
149
+ # * In the child, create a ClientSession and assert its lsid is different.
150
+ describe 'session pool' do
151
+ it 'is cleared after fork' do
152
+ session = client.get_session
153
+ parent_lsid = session.session_id
154
+ session.end_session
155
+ if pid = fork
156
+ pid, status = Process.wait2(pid)
157
+ status.exitstatus.should == 0
158
+ else
159
+ Utils.wrap_forked_child do
160
+ client.reconnect
161
+ child_session = client.get_session
162
+ child_lsid = child_session.session_id
163
+ expect(child_lsid).not_to eq(parent_lsid)
164
+ end
165
+ end
166
+
167
+ expect(client.get_session.session_id).to eq(parent_lsid)
168
+ end
169
+
170
+ # Test from Driver Sessions Spec
171
+ # * Create ClientSession
172
+ # * Record its lsid
173
+ # * Fork
174
+ # * In the parent, return the ClientSession to the pool, create a new ClientSession, and assert its lsid is the same.
175
+ # * In the child, return the ClientSession to the pool, create a new ClientSession, and assert its lsid is different.
176
+ it 'does not return parent process sessions to child process pool' do
177
+ session = client.get_session
178
+ parent_lsid = session.session_id
179
+
180
+ if pid = fork
181
+ pid, status = Process.wait2(pid)
182
+ status.exitstatus.should == 0
183
+ else
184
+ Utils.wrap_forked_child do
185
+ client.reconnect
186
+ session.end_session
187
+ child_session = client.get_session
188
+ child_lsid = child_session.session_id
189
+ expect(child_lsid).not_to eq(parent_lsid)
190
+ end
191
+ end
192
+
193
+ session.end_session
194
+ expect(client.get_session.session_id).to eq(parent_lsid)
195
+ end
196
+ end
142
197
  end
143
198
  end
@@ -1,16 +1,21 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'QueryCache with transactions' do
4
+ # Work around https://jira.mongodb.org/browse/HELP-10518
5
+ before(:all) do
6
+ client = ClientRegistry.instance.global_client('authorized')
7
+ Utils.create_collection(client, 'test')
8
+
9
+ Utils.mongos_each_direct_client do |client|
10
+ client['test'].distinct('foo').to_a
11
+ end
12
+ end
13
+
4
14
  around do |spec|
5
15
  Mongo::QueryCache.clear
6
16
  Mongo::QueryCache.cache { spec.run }
7
17
  end
8
18
 
9
- before do
10
- authorized_collection.delete_many
11
- subscriber.clear_events!
12
- end
13
-
14
19
  # These tests do not currently use the session registry because transactions
15
20
  # leak sessions independently of the query cache. This will be resolved by
16
21
  # RUBY-2391.
@@ -23,28 +28,34 @@ describe 'QueryCache with transactions' do
23
28
  end
24
29
  end
25
30
 
26
- let(:authorized_collection) { client['collection_spec'] }
31
+ before do
32
+ collection.delete_many
33
+
34
+ # Work around https://jira.mongodb.org/browse/HELP-10518
35
+ client.start_session do |session|
36
+ session.with_transaction do
37
+ collection.find({}, session: session).to_a
38
+ end
39
+ end
40
+ subscriber.clear_events!
41
+ end
27
42
 
28
43
  describe 'in transactions' do
29
44
  require_transaction_support
30
45
  require_wired_tiger
31
46
 
32
- let(:collection) { authorized_client['test'] }
47
+ let(:collection) { client['test'] }
33
48
 
34
49
  let(:events) do
35
50
  subscriber.command_started_events('find')
36
51
  end
37
52
 
38
- before do
39
- Utils.create_collection(authorized_client, 'test')
40
- end
41
-
42
53
  context 'with convenient API' do
43
54
  context 'when same query is performed inside and outside of transaction' do
44
55
  it 'performs one query' do
45
56
  collection.find.to_a
46
57
 
47
- session = authorized_client.start_session
58
+ session = client.start_session
48
59
  session.with_transaction do
49
60
  collection.find({}, session: session).to_a
50
61
  end
@@ -57,7 +68,7 @@ describe 'QueryCache with transactions' do
57
68
  it 'performs two queries' do
58
69
  collection.find.to_a
59
70
 
60
- session = authorized_client.start_session
71
+ session = client.start_session
61
72
  session.with_transaction(
62
73
  read_concern: { level: :snapshot }
63
74
  ) do
@@ -72,7 +83,7 @@ describe 'QueryCache with transactions' do
72
83
  it 'performs two queries' do
73
84
  collection.find.to_a
74
85
 
75
- session = authorized_client.start_session
86
+ session = client.start_session
76
87
  session.with_transaction(
77
88
  read: { mode: :primary }
78
89
  ) do
@@ -85,7 +96,7 @@ describe 'QueryCache with transactions' do
85
96
 
86
97
  context 'when transaction is committed' do
87
98
  it 'clears the cache' do
88
- session = authorized_client.start_session
99
+ session = client.start_session
89
100
  session.with_transaction do
90
101
  collection.insert_one({ test: 1 }, session: session)
91
102
  collection.insert_one({ test: 2 }, session: session)
@@ -107,7 +118,7 @@ describe 'QueryCache with transactions' do
107
118
 
108
119
  context 'when transaction is aborted' do
109
120
  it 'clears the cache' do
110
- session = authorized_client.start_session
121
+ session = client.start_session
111
122
  session.with_transaction do
112
123
  collection.insert_one({ test: 1 }, session: session)
113
124
  collection.insert_one({ test: 2 }, session: session)
@@ -131,7 +142,7 @@ describe 'QueryCache with transactions' do
131
142
  context 'with low-level API' do
132
143
  context 'when transaction is committed' do
133
144
  it 'clears the cache' do
134
- session = authorized_client.start_session
145
+ session = client.start_session
135
146
  session.start_transaction
136
147
 
137
148
  collection.insert_one({ test: 1 }, session: session)
@@ -154,7 +165,7 @@ describe 'QueryCache with transactions' do
154
165
 
155
166
  context 'when transaction is aborted' do
156
167
  it 'clears the cache' do
157
- session = authorized_client.start_session
168
+ session = client.start_session
158
169
  session.start_transaction
159
170
 
160
171
  collection.insert_one({ test: 1 }, session: session)