mongo 2.11.0.rc0 → 2.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/Rakefile +2 -0
  5. data/lib/mongo/auth.rb +11 -2
  6. data/lib/mongo/auth/cr/conversation.rb +1 -1
  7. data/lib/mongo/auth/ldap/conversation.rb +1 -1
  8. data/lib/mongo/auth/scram/conversation.rb +4 -1
  9. data/lib/mongo/auth/user.rb +15 -1
  10. data/lib/mongo/auth/user/view.rb +10 -4
  11. data/lib/mongo/auth/x509.rb +11 -1
  12. data/lib/mongo/auth/x509/conversation.rb +15 -6
  13. data/lib/mongo/background_thread.rb +28 -13
  14. data/lib/mongo/client.rb +23 -15
  15. data/lib/mongo/collection/view/change_stream.rb +5 -1
  16. data/lib/mongo/collection/view/readable.rb +5 -2
  17. data/lib/mongo/collection/view/writable.rb +3 -1
  18. data/lib/mongo/cursor/builder/get_more_command.rb +4 -1
  19. data/lib/mongo/cursor/builder/kill_cursors_command.rb +16 -5
  20. data/lib/mongo/cursor/builder/op_get_more.rb +2 -2
  21. data/lib/mongo/cursor/builder/op_kill_cursors.rb +17 -5
  22. data/lib/mongo/error/operation_failure.rb +3 -3
  23. data/lib/mongo/monitoring/command_log_subscriber.rb +5 -3
  24. data/lib/mongo/monitoring/event/command_started.rb +13 -3
  25. data/lib/mongo/monitoring/publishable.rb +4 -2
  26. data/lib/mongo/operation/create_user/command.rb +1 -0
  27. data/lib/mongo/operation/remove_user/command.rb +1 -0
  28. data/lib/mongo/operation/update_user/command.rb +1 -0
  29. data/lib/mongo/protocol/get_more.rb +2 -1
  30. data/lib/mongo/protocol/kill_cursors.rb +6 -13
  31. data/lib/mongo/protocol/serializers.rb +10 -4
  32. data/lib/mongo/retryable.rb +1 -1
  33. data/lib/mongo/server/connection.rb +6 -2
  34. data/lib/mongo/server/connection_base.rb +2 -1
  35. data/lib/mongo/server/monitor.rb +1 -1
  36. data/lib/mongo/server/pending_connection.rb +6 -0
  37. data/lib/mongo/socket/ssl.rb +1 -1
  38. data/lib/mongo/uri.rb +5 -41
  39. data/lib/mongo/version.rb +1 -1
  40. data/mongo.gemspec +11 -2
  41. data/spec/README.md +105 -9
  42. data/spec/USERS.md +72 -0
  43. data/spec/integration/auth_spec.rb +20 -6
  44. data/spec/integration/client_construction_spec.rb +3 -1
  45. data/spec/integration/client_options_spec.rb +437 -0
  46. data/spec/integration/command_monitoring_spec.rb +4 -1
  47. data/spec/integration/connection_pool_populator_spec.rb +4 -0
  48. data/spec/integration/connection_spec.rb +4 -2
  49. data/spec/integration/cursor_reaping_spec.rb +1 -1
  50. data/spec/integration/get_more_spec.rb +32 -0
  51. data/spec/integration/retryable_errors_spec.rb +99 -0
  52. data/spec/integration/retryable_writes_errors_spec.rb +11 -10
  53. data/spec/lite_spec_helper.rb +2 -1
  54. data/spec/mongo/auth/scram_spec.rb +1 -0
  55. data/spec/mongo/auth/user/view_spec.rb +102 -1
  56. data/spec/mongo/auth/user_spec.rb +56 -15
  57. data/spec/mongo/auth/x509_spec.rb +31 -1
  58. data/spec/mongo/bulk_write_spec.rb +2 -2
  59. data/spec/mongo/collection/view/change_stream_spec.rb +2 -2
  60. data/spec/mongo/collection/view/readable_spec.rb +8 -4
  61. data/spec/mongo/cursor/builder/get_more_command_spec.rb +4 -2
  62. data/spec/mongo/cursor/builder/op_get_more_spec.rb +4 -2
  63. data/spec/mongo/cursor_spec.rb +3 -3
  64. data/spec/mongo/retryable_spec.rb +31 -52
  65. data/spec/mongo/server/connection_auth_spec.rb +3 -0
  66. data/spec/mongo/server/connection_pool_spec.rb +4 -0
  67. data/spec/mongo/server/connection_spec.rb +12 -4
  68. data/spec/mongo/server/monitor_spec.rb +19 -1
  69. data/spec/mongo/socket/ssl_spec.rb +1 -1
  70. data/spec/mongo/uri/srv_protocol_spec.rb +0 -13
  71. data/spec/mongo/uri_option_parsing_spec.rb +0 -8
  72. data/spec/mongo/uri_spec.rb +6 -20
  73. data/spec/runners/connection_string.rb +116 -0
  74. data/spec/runners/read_write_concern_document.rb +67 -0
  75. data/spec/spec_tests/change_streams_spec.rb +17 -2
  76. data/spec/spec_tests/connection_string_spec.rb +2 -59
  77. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +3 -3
  78. data/spec/spec_tests/data/change_streams/change-streams.yml +88 -20
  79. data/spec/spec_tests/data/cmap/connection-must-have-id.yml +6 -0
  80. data/spec/spec_tests/data/cmap/connection-must-order-ids.yml +6 -0
  81. data/spec/spec_tests/data/cmap/pool-checkin-destroy-closed.yml +3 -0
  82. data/spec/spec_tests/data/cmap/pool-checkin-destroy-stale.yml +3 -0
  83. data/spec/spec_tests/data/cmap/pool-checkin-make-available.yml +3 -0
  84. data/spec/spec_tests/data/cmap/pool-checkin.yml +1 -0
  85. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +2 -0
  86. data/spec/spec_tests/data/cmap/pool-checkout-error-closed.yml +5 -0
  87. data/spec/spec_tests/data/cmap/pool-checkout-multiple.yml +3 -0
  88. data/spec/spec_tests/data/cmap/pool-checkout-no-idle.yml +4 -0
  89. data/spec/spec_tests/data/cmap/pool-checkout-no-stale.yml +4 -0
  90. data/spec/spec_tests/data/cmap/pool-close-destroy-conns.yml +2 -0
  91. data/spec/spec_tests/data/cmap/pool-create-max-size.yml +15 -0
  92. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +4 -0
  93. data/spec/spec_tests/data/cmap/wait-queue-fairness.yml +31 -1
  94. data/spec/spec_tests/data/cmap/wait-queue-timeout.yml +5 -0
  95. data/spec/spec_tests/data/read_write_concern/connection-string/read-concern.yml +32 -0
  96. data/spec/spec_tests/data/read_write_concern/connection-string/write-concern.yml +82 -0
  97. data/spec/spec_tests/data/read_write_concern/document/read-concern.yml +37 -0
  98. data/spec/spec_tests/data/read_write_concern/document/write-concern.yml +100 -0
  99. data/spec/spec_tests/data/retryable_reads/aggregate-merge.yml +39 -0
  100. data/spec/spec_tests/data/retryable_reads/aggregate-serverErrors.yml +1 -1
  101. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch-serverErrors.yml +2 -2
  102. data/spec/spec_tests/data/retryable_reads/changeStreams-client.watch.yml +1 -1
  103. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch-serverErrors.yml +2 -2
  104. data/spec/spec_tests/data/retryable_reads/changeStreams-db.coll.watch.yml +1 -1
  105. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch-serverErrors.yml +2 -2
  106. data/spec/spec_tests/data/retryable_reads/changeStreams-db.watch.yml +1 -1
  107. data/spec/spec_tests/data/retryable_reads/count-serverErrors.yml +1 -1
  108. data/spec/spec_tests/data/retryable_reads/countDocuments-serverErrors.yml +1 -1
  109. data/spec/spec_tests/data/retryable_reads/distinct-serverErrors.yml +1 -1
  110. data/spec/spec_tests/data/retryable_reads/estimatedDocumentCount-serverErrors.yml +1 -1
  111. data/spec/spec_tests/data/retryable_reads/find-serverErrors.yml +1 -1
  112. data/spec/spec_tests/data/retryable_reads/findOne-serverErrors.yml +1 -1
  113. data/spec/spec_tests/data/retryable_reads/gridfs-download-serverErrors.yml +1 -1
  114. data/spec/spec_tests/data/retryable_reads/gridfs-downloadByName-serverErrors.yml +1 -1
  115. data/spec/spec_tests/data/retryable_reads/listCollectionNames-serverErrors.yml +1 -1
  116. data/spec/spec_tests/data/retryable_reads/listCollectionObjects-serverErrors.yml +1 -1
  117. data/spec/spec_tests/data/retryable_reads/listCollections-serverErrors.yml +1 -1
  118. data/spec/spec_tests/data/retryable_reads/listDatabaseNames-serverErrors.yml +1 -1
  119. data/spec/spec_tests/data/retryable_reads/listDatabaseObjects-serverErrors.yml +1 -1
  120. data/spec/spec_tests/data/retryable_reads/listDatabases-serverErrors.yml +1 -1
  121. data/spec/spec_tests/data/retryable_reads/listIndexNames-serverErrors.yml +1 -1
  122. data/spec/spec_tests/data/retryable_reads/listIndexes-serverErrors.yml +1 -1
  123. data/spec/spec_tests/data/transactions/read-concern.yml +6 -6
  124. data/spec/spec_tests/data/transactions/transaction-options-repl.yml +117 -0
  125. data/spec/spec_tests/data/transactions/transaction-options.yml +14 -121
  126. data/spec/spec_tests/data/transactions/write-concern.yml +3 -0
  127. data/spec/spec_tests/data/transactions_api/transaction-options.yml +11 -12
  128. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +17 -7
  129. data/spec/spec_tests/read_write_concern_connection_string_spec.rb +8 -0
  130. data/spec/spec_tests/read_write_concern_document_spec.rb +74 -0
  131. data/spec/spec_tests/retryable_reads_spec.rb +32 -1
  132. data/spec/spec_tests/uri_options_spec.rb +4 -2
  133. data/spec/support/auth.rb +5 -14
  134. data/spec/support/certificates/client-x509.crt +78 -0
  135. data/spec/support/certificates/client-x509.key +27 -0
  136. data/spec/support/certificates/client-x509.pem +105 -0
  137. data/spec/support/change_streams.rb +8 -11
  138. data/spec/support/client_registry.rb +26 -12
  139. data/spec/support/cluster_tools.rb +2 -2
  140. data/spec/support/cmap.rb +11 -7
  141. data/spec/support/command_monitoring.rb +8 -8
  142. data/spec/support/connection_string.rb +56 -28
  143. data/spec/support/constraints.rb +8 -0
  144. data/spec/support/crud/spec.rb +5 -8
  145. data/spec/support/event_subscriber.rb +7 -0
  146. data/spec/support/gridfs.rb +4 -7
  147. data/spec/support/server_discovery_and_monitoring.rb +3 -8
  148. data/spec/support/server_selection.rb +4 -9
  149. data/spec/support/server_selection_rtt.rb +4 -7
  150. data/spec/support/spec_config.rb +47 -19
  151. data/spec/support/spec_setup.rb +5 -0
  152. data/spec/support/utils.rb +46 -8
  153. metadata +637 -597
  154. metadata.gz.sig +0 -0
@@ -0,0 +1,116 @@
1
+
2
+ def define_connection_string_spec_tests(test_paths, spec_cls = Mongo::ConnectionString::Spec, &block)
3
+
4
+ clean_slate_for_all
5
+
6
+ test_paths.each do |path|
7
+
8
+ spec = spec_cls.new(path)
9
+
10
+ context(spec.description) do
11
+
12
+ #include Mongo::ConnectionString
13
+
14
+ spec.tests.each_with_index do |test, index|
15
+ context "when a #{test.description} is provided" do
16
+ if test.description.downcase.include?("gssapi")
17
+ require_mongo_kerberos
18
+ end
19
+
20
+ context 'when the uri is invalid', unless: test.valid? do
21
+
22
+ it 'raises an error' do
23
+ expect{
24
+ test.uri
25
+ }.to raise_exception(Mongo::Error::InvalidURI)
26
+ end
27
+ end
28
+
29
+ context 'when the uri should warn', if: test.warn? do
30
+
31
+ before do
32
+ expect(Mongo::Logger.logger).to receive(:warn)
33
+ end
34
+
35
+ it 'warns' do
36
+ expect(test.client).to be_a(Mongo::Client)
37
+ end
38
+ end
39
+
40
+ context 'when the uri is valid', if: test.valid? do
41
+
42
+ it 'does not raise an exception' do
43
+ expect(test.uri).to be_a(Mongo::URI)
44
+ end
45
+
46
+ it 'creates a client with the correct hosts' do
47
+ expect(test.client).to have_hosts(test, test.hosts)
48
+ end
49
+
50
+ it 'creates a client with the correct authentication properties' do
51
+ expect(test.client).to match_auth(test)
52
+ end
53
+
54
+ it 'creates a client with the correct options' do
55
+ expect(test.client).to match_options(test)
56
+ end
57
+
58
+ if test.read_concern_expectation
59
+ # Tests do not specify a read concern in the input and expect
60
+ # the read concern to be {); our non-specified read concern is nil.
61
+ # (But if a test used nil for the expectation, we wouldn't assert
62
+ # read concern at all.)
63
+ if test.read_concern_expectation == {}
64
+ it 'creates a client with no read concern' do
65
+ actual = Utils.camelize_hash(test.client.options[:read_concern])
66
+ expect(actual).to be nil
67
+ end
68
+ else
69
+
70
+ it 'creates a client with the correct read concern' do
71
+ actual = Utils.camelize_hash(test.client.options[:read_concern])
72
+ expect(actual).to eq(test.read_concern_expectation)
73
+ end
74
+ end
75
+ end
76
+
77
+ if test.write_concern_expectation
78
+ let(:actual_write_concern) do
79
+ Utils.camelize_hash(test.client.options[:write_concern])
80
+ end
81
+
82
+ let(:expected_write_concern) do
83
+ test.write_concern_expectation.dup.tap do |expected|
84
+ # Spec tests have expectations on the "driver API" which is
85
+ # different from what is being sent to the server. In Ruby
86
+ # the "driver API" matches what we send to the server, thus
87
+ # these expectations are rather awkward to work with.
88
+ # Convert them all to expected server fields.
89
+ j = expected.delete('journal')
90
+ unless j.nil?
91
+ expected['j'] = j
92
+ end
93
+ wtimeout = expected.delete('wtimeoutMS')
94
+ unless wtimeout.nil?
95
+ expected['wtimeout'] = wtimeout
96
+ end
97
+ end
98
+ end
99
+
100
+ if test.write_concern_expectation == {}
101
+
102
+ it 'creates a client with no write concern' do
103
+ expect(actual_write_concern).to be nil
104
+ end
105
+ else
106
+ it 'creates a client with the correct write concern' do
107
+ expect(actual_write_concern).to eq(expected_write_concern)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,67 @@
1
+ module ReadWriteConcernDocument
2
+
3
+ class Spec
4
+
5
+ attr_reader :description
6
+
7
+ # Instantiate the new spec.
8
+ #
9
+ # @param [ String ] test_path The path to the file.
10
+ #
11
+ # @since 2.0.0
12
+ def initialize(test_path)
13
+ @spec = YAML.load(File.read(test_path))
14
+ @description = File.basename(test_path)
15
+ end
16
+
17
+ def tests
18
+ @tests ||= @spec['tests'].collect do |spec|
19
+ Test.new(spec)
20
+ end
21
+ end
22
+ end
23
+
24
+ class Test
25
+ def initialize(spec)
26
+ @spec = spec
27
+ @description = @spec['description']
28
+ @uri_string = @spec['uri']
29
+ end
30
+
31
+ attr_reader :description
32
+
33
+ def valid?
34
+ !!@spec['valid']
35
+ end
36
+
37
+ def input_document
38
+ (@spec['readConcern'] || @spec['writeConcern']).tap do |concern|
39
+ # Documented Ruby API matches the server API, and Ruby prohibits
40
+ # journal key as used in the spec tests...
41
+ if concern.key?('journal')
42
+ concern['j'] = concern.delete('journal')
43
+ end
44
+ # ... and uses wtimeout instead of wtimeoutMS
45
+ if concern.key?('wtimeoutMS')
46
+ concern['wtimeout'] = concern.delete('wtimeoutMS')
47
+ end
48
+ end
49
+ end
50
+
51
+ def server_document
52
+ @spec['readConcernDocument'] || @spec['writeConcernDocument']
53
+ end
54
+
55
+ # Returns true, false or nil
56
+ def server_default?
57
+ # Do not convert to boolean
58
+ @spec['isServerDefault']
59
+ end
60
+
61
+ # Returns true, false or nil
62
+ def acknowledged?
63
+ # Do not convert to boolean
64
+ @spec['isAcknowledged']
65
+ end
66
+ end
67
+ end
@@ -26,12 +26,27 @@ describe 'ChangeStreams' do
26
26
  test.run
27
27
  end
28
28
 
29
+ let(:verifier) { Mongo::CRUD::Verifier.new(test) }
30
+
29
31
  it 'returns the correct result' do
30
32
  expect(result[:result]).to match_result(test)
31
33
  end
32
34
 
33
- it 'has the correct command_started events', if: test.expectations do
34
- expect(result[:events]).to match_commands(test)
35
+ if test.expectations
36
+ let(:actual_events) do
37
+ result[:events]
38
+ end
39
+
40
+ it 'has the correct number of command_started events' do
41
+ verifier.verify_command_started_event_count(test.expectations, actual_events)
42
+ end
43
+
44
+ test.expectations.each_with_index do |expectation, i|
45
+ it "has the correct command_started event #{i+1}" do
46
+ verifier.verify_command_started_event(
47
+ test.expectations, actual_events, i)
48
+ end
49
+ end
35
50
  end
36
51
  end
37
52
  end
@@ -1,62 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'ConnectionString' do
4
- include Mongo::ConnectionString
5
-
6
- clean_slate_for_all
7
-
8
- CONNECTION_STRING_TESTS.each do |file|
9
-
10
- spec = Mongo::ConnectionString::Spec.new(file)
11
-
12
- context(spec.description) do
13
-
14
- spec.tests.each_with_index do |test, index|
15
- context "when a #{test.description} is provided" do
16
- if test.description.downcase.include?("gssapi")
17
- require_mongo_kerberos
18
- end
19
-
20
- context 'when the uri is invalid', unless: test.valid? do
21
-
22
- it 'raises an error' do
23
- expect{
24
- test.uri
25
- }.to raise_exception(Mongo::Error::InvalidURI)
26
- end
27
- end
28
-
29
- context 'when the uri should warn', if: test.warn? do
30
-
31
- before do
32
- expect(Mongo::Logger.logger).to receive(:warn)
33
- end
34
-
35
- it 'warns' do
36
- expect(test.client).to be_a(Mongo::Client)
37
- end
38
- end
39
-
40
- context 'when the uri is valid', if: test.valid? do
41
-
42
- it 'does not raise an exception' do
43
- expect(test.uri).to be_a(Mongo::URI)
44
- end
45
-
46
- it 'creates a client with the correct hosts' do
47
- expect(test.client).to have_hosts(test)
48
- end
49
-
50
- it 'creates a client with the correct authentication properties' do
51
- expect(test.client).to match_auth(test)
52
- end
53
-
54
- it 'creates a client with the correct options' do
55
- expect(test.client).to match_options(test)
56
- end
57
- end
58
- end
59
- end
60
- end
61
- end
3
+ describe 'Connection String' do
4
+ define_connection_string_spec_tests(CONNECTION_STRING_TESTS)
62
5
  end
@@ -12,7 +12,8 @@ tests:
12
12
  changeStreamPipeline: []
13
13
  changeStreamOptions: {}
14
14
  operations: []
15
- expectations: []
15
+ # https://jira.mongodb.org/browse/SPEC-1462
16
+ expectations: ~
16
17
  result:
17
18
  error:
18
19
  code: 40573
@@ -42,8 +43,7 @@ tests:
42
43
  cursor: {}
43
44
  pipeline:
44
45
  -
45
- $changeStream:
46
- fullDocument: default
46
+ $changeStream: {}
47
47
  -
48
48
  $unsupported: foo
49
49
  command_name: aggregate
@@ -27,8 +27,7 @@ tests:
27
27
  cursor: {}
28
28
  pipeline:
29
29
  -
30
- $changeStream:
31
- fullDocument: default
30
+ $changeStream: {}
32
31
  command_name: aggregate
33
32
  database_name: *database_name
34
33
  result:
@@ -59,7 +58,8 @@ tests:
59
58
  arguments:
60
59
  document:
61
60
  x: 1
62
- expectations: []
61
+ # https://jira.mongodb.org/browse/SPEC-1462
62
+ expectations: ~
63
63
  result:
64
64
  success:
65
65
  -
@@ -110,8 +110,7 @@ tests:
110
110
  cursor: {}
111
111
  pipeline:
112
112
  -
113
- $changeStream:
114
- fullDocument: default
113
+ $changeStream: {}
115
114
  command_name: aggregate
116
115
  database_name: *database_name
117
116
  result:
@@ -158,12 +157,11 @@ tests:
158
157
  cursor: {}
159
158
  pipeline:
160
159
  -
161
- $changeStream:
162
- fullDocument: default
160
+ $changeStream: {}
163
161
  -
164
162
  $match:
165
163
  "fullDocument.z":
166
- $numberInt: "3"
164
+ 3
167
165
  command_name: aggregate
168
166
  database_name: *database_name
169
167
  result:
@@ -175,7 +173,7 @@ tests:
175
173
  coll: *collection_name
176
174
  fullDocument:
177
175
  z:
178
- $numberInt: "3"
176
+ 3
179
177
  -
180
178
  description: Executing a watch helper on a Database results in notifications for changes to all collections in the specified database.
181
179
  minServerVersion: "3.8.0"
@@ -211,12 +209,11 @@ tests:
211
209
  command_started_event:
212
210
  command:
213
211
  aggregate:
214
- $numberInt: "1"
212
+ 1
215
213
  cursor: {}
216
214
  pipeline:
217
215
  -
218
- $changeStream:
219
- fullDocument: default
216
+ $changeStream: {}
220
217
  command_name: aggregate
221
218
  database_name: *database_name
222
219
  result:
@@ -272,12 +269,11 @@ tests:
272
269
  command_started_event:
273
270
  command:
274
271
  aggregate:
275
- $numberInt: "1"
272
+ 1
276
273
  cursor: {}
277
274
  pipeline:
278
275
  -
279
276
  $changeStream:
280
- fullDocument: default
281
277
  allChangesForCluster: true
282
278
  command_name: aggregate
283
279
  database_name: admin
@@ -357,8 +353,7 @@ tests:
357
353
  cursor: {}
358
354
  pipeline:
359
355
  -
360
- $changeStream:
361
- fullDocument: default
356
+ $changeStream: {}
362
357
  command_name: aggregate
363
358
  database_name: *database_name
364
359
  result:
@@ -416,8 +411,7 @@ tests:
416
411
  cursor: {}
417
412
  pipeline:
418
413
  -
419
- $changeStream:
420
- fullDocument: default
414
+ $changeStream: {}
421
415
  command_name: aggregate
422
416
  database_name: *database_name
423
417
  result:
@@ -453,8 +447,7 @@ tests:
453
447
  cursor: {}
454
448
  pipeline:
455
449
  -
456
- $changeStream:
457
- fullDocument: default
450
+ $changeStream: {}
458
451
  command_name: aggregate
459
452
  database_name: *database_name
460
453
  result:
@@ -466,3 +459,78 @@ tests:
466
459
  coll: *collection_name
467
460
  -
468
461
  operationType: invalidate
462
+ # Test that resume logic works correctly even after consecutive retryable failures of a getMore command,
463
+ # with no intervening events. This is ensured by setting the batch size of the change stream to 1,
464
+ -
465
+ description: Test consecutive resume
466
+ minServerVersion: "4.1.7"
467
+ target: collection
468
+ topology:
469
+ - replicaset
470
+ changeStreamPipeline: []
471
+ changeStreamOptions: { batchSize: 1}
472
+ failPoint:
473
+ configureFailPoint: failCommand
474
+ mode: {times: 2}
475
+ data:
476
+ failCommands: ["getMore"]
477
+ closeConnection: true
478
+ operations:
479
+ -
480
+ database: *database_name
481
+ collection: *collection_name
482
+ name: insertOne
483
+ arguments:
484
+ document:
485
+ x: 1
486
+ -
487
+ database: *database_name
488
+ collection: *collection_name
489
+ name: insertOne
490
+ arguments:
491
+ document:
492
+ x: 2
493
+ -
494
+ database: *database_name
495
+ collection: *collection_name
496
+ name: insertOne
497
+ arguments:
498
+ document:
499
+ x: 3
500
+ expectations:
501
+ -
502
+ command_started_event:
503
+ command:
504
+ aggregate: *collection_name
505
+ cursor: {batchSize: 1}
506
+ pipeline:
507
+ -
508
+ $changeStream: {}
509
+ command_name: aggregate
510
+ database_name: *database_name
511
+ result:
512
+ success:
513
+ -
514
+ operationType: insert
515
+ ns:
516
+ db: *database_name
517
+ coll: *collection_name
518
+ fullDocument:
519
+ x:
520
+ $numberInt: "1"
521
+ -
522
+ operationType: insert
523
+ ns:
524
+ db: *database_name
525
+ coll: *collection_name
526
+ fullDocument:
527
+ x:
528
+ $numberInt: "2"
529
+ -
530
+ operationType: insert
531
+ ns:
532
+ db: *database_name
533
+ coll: *collection_name
534
+ fullDocument:
535
+ x:
536
+ $numberInt: "3"