mongo 2.13.2 → 2.14.0.rc1

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 (174) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/mongo.rb +9 -0
  5. data/lib/mongo/address.rb +1 -1
  6. data/lib/mongo/address/ipv4.rb +1 -1
  7. data/lib/mongo/address/ipv6.rb +1 -1
  8. data/lib/mongo/bulk_write.rb +17 -0
  9. data/lib/mongo/caching_cursor.rb +74 -0
  10. data/lib/mongo/client.rb +47 -8
  11. data/lib/mongo/cluster.rb +3 -3
  12. data/lib/mongo/cluster/topology/single.rb +1 -1
  13. data/lib/mongo/collection.rb +26 -0
  14. data/lib/mongo/collection/view.rb +24 -20
  15. data/lib/mongo/collection/view/aggregation.rb +25 -4
  16. data/lib/mongo/collection/view/builder/find_command.rb +38 -18
  17. data/lib/mongo/collection/view/explainable.rb +27 -8
  18. data/lib/mongo/collection/view/iterable.rb +72 -12
  19. data/lib/mongo/collection/view/readable.rb +12 -2
  20. data/lib/mongo/collection/view/writable.rb +15 -1
  21. data/lib/mongo/crypt/encryption_io.rb +6 -6
  22. data/lib/mongo/cursor.rb +1 -0
  23. data/lib/mongo/database.rb +6 -0
  24. data/lib/mongo/database/view.rb +1 -1
  25. data/lib/mongo/error.rb +2 -0
  26. data/lib/mongo/error/invalid_read_concern.rb +28 -0
  27. data/lib/mongo/error/server_certificate_revoked.rb +22 -0
  28. data/lib/mongo/error/unsupported_option.rb +14 -12
  29. data/lib/mongo/lint.rb +2 -1
  30. data/lib/mongo/logger.rb +3 -3
  31. data/lib/mongo/operation.rb +2 -0
  32. data/lib/mongo/operation/aggregate/result.rb +9 -8
  33. data/lib/mongo/operation/collections_info/command.rb +0 -5
  34. data/lib/mongo/operation/collections_info/result.rb +3 -16
  35. data/lib/mongo/operation/delete/bulk_result.rb +2 -0
  36. data/lib/mongo/operation/delete/result.rb +3 -0
  37. data/lib/mongo/operation/explain/command.rb +4 -0
  38. data/lib/mongo/operation/explain/legacy.rb +4 -0
  39. data/lib/mongo/operation/explain/op_msg.rb +6 -0
  40. data/lib/mongo/operation/explain/result.rb +3 -0
  41. data/lib/mongo/operation/find/legacy/result.rb +2 -0
  42. data/lib/mongo/operation/find/result.rb +3 -0
  43. data/lib/mongo/operation/get_more/result.rb +3 -0
  44. data/lib/mongo/operation/indexes/result.rb +5 -0
  45. data/lib/mongo/operation/insert/bulk_result.rb +5 -0
  46. data/lib/mongo/operation/insert/result.rb +5 -0
  47. data/lib/mongo/operation/list_collections/result.rb +5 -0
  48. data/lib/mongo/operation/map_reduce/result.rb +10 -0
  49. data/lib/mongo/operation/parallel_scan/result.rb +4 -0
  50. data/lib/mongo/operation/result.rb +35 -6
  51. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
  52. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
  53. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +2 -0
  54. data/lib/mongo/operation/shared/executable.rb +1 -0
  55. data/lib/mongo/operation/shared/idable.rb +2 -1
  56. data/lib/mongo/operation/shared/limited.rb +1 -0
  57. data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
  58. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
  59. data/lib/mongo/operation/shared/sessions_supported.rb +1 -0
  60. data/lib/mongo/operation/shared/specifiable.rb +1 -0
  61. data/lib/mongo/operation/shared/write.rb +1 -0
  62. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
  63. data/lib/mongo/operation/update/legacy/result.rb +7 -0
  64. data/lib/mongo/operation/update/result.rb +8 -0
  65. data/lib/mongo/operation/users_info/result.rb +3 -0
  66. data/lib/mongo/query_cache.rb +242 -0
  67. data/lib/mongo/retryable.rb +8 -1
  68. data/lib/mongo/server.rb +5 -1
  69. data/lib/mongo/server/connection_common.rb +2 -2
  70. data/lib/mongo/server/connection_pool.rb +3 -0
  71. data/lib/mongo/server/monitor.rb +1 -1
  72. data/lib/mongo/server/monitor/connection.rb +3 -3
  73. data/lib/mongo/server/pending_connection.rb +2 -2
  74. data/lib/mongo/server/push_monitor.rb +1 -1
  75. data/lib/mongo/server_selector/base.rb +5 -1
  76. data/lib/mongo/session.rb +3 -0
  77. data/lib/mongo/socket.rb +6 -4
  78. data/lib/mongo/socket/ocsp_cache.rb +97 -0
  79. data/lib/mongo/socket/ocsp_verifier.rb +368 -0
  80. data/lib/mongo/socket/ssl.rb +45 -24
  81. data/lib/mongo/srv/monitor.rb +7 -13
  82. data/lib/mongo/srv/resolver.rb +14 -10
  83. data/lib/mongo/timeout.rb +2 -0
  84. data/lib/mongo/uri.rb +21 -390
  85. data/lib/mongo/uri/options_mapper.rb +582 -0
  86. data/lib/mongo/uri/srv_protocol.rb +3 -2
  87. data/lib/mongo/utils.rb +12 -1
  88. data/lib/mongo/version.rb +1 -1
  89. data/spec/NOTES.aws-auth.md +12 -7
  90. data/spec/README.md +56 -1
  91. data/spec/integration/bson_symbol_spec.rb +2 -4
  92. data/spec/integration/bulk_write_spec.rb +48 -0
  93. data/spec/integration/client_authentication_options_spec.rb +55 -28
  94. data/spec/integration/connection_pool_populator_spec.rb +3 -1
  95. data/spec/integration/cursor_reaping_spec.rb +53 -17
  96. data/spec/integration/ocsp_connectivity_spec.rb +26 -0
  97. data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
  98. data/spec/integration/ocsp_verifier_spec.rb +334 -0
  99. data/spec/integration/query_cache_spec.rb +1045 -0
  100. data/spec/integration/query_cache_transactions_spec.rb +179 -0
  101. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
  102. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +2 -0
  103. data/spec/integration/sdam_error_handling_spec.rb +68 -17
  104. data/spec/integration/sdam_events_spec.rb +5 -8
  105. data/spec/integration/server_selection_spec.rb +36 -0
  106. data/spec/integration/srv_monitoring_spec.rb +38 -3
  107. data/spec/integration/srv_spec.rb +56 -0
  108. data/spec/lite_spec_helper.rb +4 -2
  109. data/spec/mongo/address_spec.rb +1 -1
  110. data/spec/mongo/caching_cursor_spec.rb +70 -0
  111. data/spec/mongo/client_construction_spec.rb +54 -1
  112. data/spec/mongo/client_encryption_spec.rb +10 -16
  113. data/spec/mongo/client_spec.rb +40 -0
  114. data/spec/mongo/cluster/topology/single_spec.rb +14 -5
  115. data/spec/mongo/cluster_spec.rb +3 -0
  116. data/spec/mongo/collection/view/explainable_spec.rb +87 -4
  117. data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
  118. data/spec/mongo/collection_spec.rb +60 -0
  119. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  120. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  121. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  122. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  123. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
  124. data/spec/mongo/database_spec.rb +44 -64
  125. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  126. data/spec/mongo/logger_spec.rb +13 -11
  127. data/spec/mongo/query_cache_spec.rb +279 -0
  128. data/spec/mongo/server/app_metadata_shared.rb +1 -1
  129. data/spec/mongo/server/connection_pool_spec.rb +7 -3
  130. data/spec/mongo/server/connection_spec.rb +14 -7
  131. data/spec/mongo/socket/ssl_spec.rb +1 -1
  132. data/spec/mongo/socket_spec.rb +1 -1
  133. data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
  134. data/spec/mongo/uri_option_parsing_spec.rb +11 -11
  135. data/spec/mongo/uri_spec.rb +68 -41
  136. data/spec/mongo/utils_spec.rb +39 -0
  137. data/spec/runners/auth.rb +3 -0
  138. data/spec/runners/connection_string.rb +35 -124
  139. data/spec/spec_tests/cmap_spec.rb +7 -3
  140. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -1
  141. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
  142. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
  143. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
  144. data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
  145. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
  146. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
  147. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
  148. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  149. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
  150. data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
  151. data/spec/spec_tests/data/uri_options/compression-options.yml +6 -3
  152. data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
  153. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
  154. data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
  155. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
  156. data/spec/spec_tests/uri_options_spec.rb +31 -33
  157. data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
  158. data/spec/support/certificates/atlas-ocsp.crt +41 -0
  159. data/spec/support/client_registry_macros.rb +11 -2
  160. data/spec/support/common_shortcuts.rb +45 -0
  161. data/spec/support/constraints.rb +23 -0
  162. data/spec/support/lite_constraints.rb +24 -0
  163. data/spec/support/matchers.rb +16 -0
  164. data/spec/support/ocsp +1 -0
  165. data/spec/support/session_registry.rb +52 -0
  166. data/spec/support/spec_config.rb +22 -0
  167. data/spec/support/utils.rb +19 -1
  168. metadata +1017 -992
  169. metadata.gz.sig +0 -0
  170. data/spec/shared/LICENSE +0 -20
  171. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  172. data/spec/shared/lib/mrss/constraints.rb +0 -303
  173. data/spec/shared/lib/mrss/lite_constraints.rb +0 -175
  174. data/spec/shared/lib/mrss/spec_organizer.rb +0 -149
@@ -0,0 +1,39 @@
1
+ require 'lite_spec_helper'
2
+
3
+ describe Mongo::Utils do
4
+ describe '#shallow_symbolize_keys' do
5
+ it 'symbolizes' do
6
+ described_class.shallow_symbolize_keys(
7
+ 'foo' => 'bar',
8
+ 'aKey' => 'aValue',
9
+ 'a_key' => 'a_value',
10
+ key: :value,
11
+ ).should == {
12
+ foo: 'bar',
13
+ aKey: 'aValue',
14
+ a_key: 'a_value',
15
+ key: :value,
16
+ }
17
+ end
18
+ end
19
+
20
+ describe '#shallow_camelize_keys' do
21
+ it 'camelizes' do
22
+ described_class.shallow_camelize_keys(
23
+ 'foo' => 'bar',
24
+ 'aKey' => 'aValue',
25
+ 'aa_key' => 'a_value',
26
+ key: :value,
27
+ sKey: :sValue,
28
+ us_key: :us_value,
29
+ ).should == {
30
+ 'foo' => 'bar',
31
+ 'aKey' => 'aValue',
32
+ 'aaKey' => 'a_value',
33
+ 'key' => :value,
34
+ 'sKey' => :sValue,
35
+ 'usKey' => :us_value,
36
+ }
37
+ end
38
+ end
39
+ end
@@ -83,6 +83,9 @@ module Mongo
83
83
 
84
84
  if credential['username']
85
85
  expected_credential['user'] = credential['username']
86
+ end
87
+
88
+ if credential['password']
86
89
  expected_credential['password'] = credential['password']
87
90
  end
88
91
 
@@ -84,20 +84,6 @@ RSpec::Matchers.define :match_auth do |test|
84
84
  end
85
85
  end
86
86
 
87
- RSpec::Matchers.define :match_options do |test|
88
-
89
- match do |client|
90
- options = test.options
91
- return true unless options
92
- options.match?(client.options)
93
- end
94
-
95
- failure_message do |client|
96
- "With URI: #{test.uri_string}\n" +
97
- "Expected that test options: #{test.options.options} would match client options: #{client.options}"
98
- end
99
- end
100
-
101
87
  module Mongo
102
88
  module ConnectionString
103
89
 
@@ -159,7 +145,7 @@ module Mongo
159
145
  end
160
146
 
161
147
  def options
162
- @options ||= Options.new(@spec['options']) if @spec['options']
148
+ @spec['options']
163
149
  end
164
150
 
165
151
  def client
@@ -239,115 +225,31 @@ module Mongo
239
225
  end
240
226
  end
241
227
 
242
- class Options
243
-
244
- MAPPINGS = {
245
- # Connection and Replica Set Options
246
- 'replicaset' => :replica_set,
247
- 'directconnection' => :direct_connection,
248
-
249
- # Timeout Options
250
- 'connecttimeoutms' => :connect_timeout,
251
- 'sockettimeoutms' => :socket_timeout,
252
- 'serverselectiontimeoutms' => :server_selection_timeout,
253
- 'localthresholdms' => :local_threshold,
254
- 'heartbeatfrequencyms' => :heartbeat_frequency,
255
- 'maxidletimems' => :max_idle_time,
256
-
257
- # Write Options
258
- 'journal' => [:write_concern, 'j'],
259
- 'w' => [:write_concern, 'w'],
260
- 'wtimeoutms' => [:write_concern, 'wtimeout'],
261
-
262
- # Read Options
263
- 'readpreference' => ['read', 'mode'],
264
- 'readpreferencetags' => ['read', 'tag_sets'],
265
- 'maxstalenessseconds' => ['read', 'max_staleness'],
266
-
267
- # Pool Options
268
- 'minpoolsize' => :min_pool_size,
269
- 'maxpoolsize' => :max_pool_size,
270
-
271
- # Security Options
272
- 'tls' => :ssl,
273
- 'tlsallowinvalidcertificates' => :ssl_verify_certificate,
274
- 'tlsallowinvalidhostnames' => :ssl_verify_hostname,
275
- 'tlscafile' => :ssl_ca_cert,
276
- 'tlscertificatekeyfile' => :ssl_cert,
277
- 'tlscertificatekeyfilepassword' => :ssl_key_pass_phrase,
278
- 'tlsinsecure' => :ssl_verify,
279
-
280
- # Auth Options
281
- 'authsource' => :auth_source,
282
- 'authmechanism' => :auth_mech,
283
- 'authmechanismproperties' => :auth_mech_properties,
284
-
285
- # Client Options
286
- 'appname' => :app_name,
287
- 'readconcernlevel' => [:read_concern, 'level'],
288
- 'retrywrites' => :retry_writes,
289
- 'zlibcompressionlevel' => :zlib_compression_level,
290
- }
291
-
292
- attr_reader :options
293
-
294
- def initialize(options)
295
- @options = options
296
- end
297
-
298
- def match?(opts)
299
- @options.all? do |k, v|
300
- k = k.downcase
301
-
302
- expected =
303
- case k
304
- when 'authmechanism'
305
- Mongo::URI::AUTH_MECH_MAP[v].downcase.to_s
306
- when 'authmechanismproperties'
307
- v.reduce({}) do |new_v, prop|
308
- prop_key = prop.first.downcase
309
- prop_val = prop.last == 'true' ? true : prop.last
310
- new_v[prop_key] = prop_val
311
-
312
- new_v
313
- end
314
- when 'compressors'
315
- v.dup.tap do |compressors|
316
- # The Ruby driver doesn't support snappy
317
- compressors.delete('snappy')
318
- end
319
- when 'readpreference'
320
- Mongo::URI::READ_MODE_MAP[v.downcase].to_s
321
- when 'tlsallowinvalidcertificates', 'tlsallowinvalidhostnames', 'tlsinsecure'
322
- !v
323
- else
324
- if k.end_with?('ms') && k != 'wtimeoutms'
325
- v / 1000.0
326
- elsif v.is_a?(String)
327
- v.downcase
328
- else
329
- v
330
- end
331
- end
332
-
333
- actual =
334
- case MAPPINGS[k]
335
- when nil
336
- opts[k]
337
- when Array
338
- opts[MAPPINGS[k].first][MAPPINGS[k].last]
339
- else
340
- opts[MAPPINGS[k]]
341
- end
342
-
343
- if actual.is_a?(Symbol)
344
- actual = actual.to_s
228
+ module_function def adjust_expected_mongo_client_options(options)
229
+ expected = options.dup.tap do |expected|
230
+ expected.each do |k, v|
231
+ # Ruby driver downcases auth mechanism properties when
232
+ # constructing the client.
233
+ #
234
+ # Some tests give options in all lower case.
235
+ if k.downcase == 'authmechanismproperties'
236
+ expected[k] = ::Utils.downcase_keys(v)
345
237
  end
346
- if actual.is_a?(String)
347
- actual = actual.downcase
238
+ # Ruby driver does not support snappy.
239
+ if k == 'compressors'
240
+ expected[k] = v.reject { |sub_v| sub_v == 'snappy' }
348
241
  end
349
-
350
- expected == actual
242
+ end
243
+ # We omit retryReads/retryWrites=true because some tests do not
244
+ # provide those.
245
+ %w(retryReads retryWrites).each do |k, v|
246
+ if expected[k] == true
247
+ expected.delete(k)
248
+ end
249
+ end
250
+ # Fix appName case.
251
+ if expected.key?('appname') && !expected.key?('appName')
252
+ expected['appName'] = expected.delete('appname')
351
253
  end
352
254
  end
353
255
  end
@@ -406,8 +308,17 @@ def define_connection_string_spec_tests(test_paths, spec_cls = Mongo::Connection
406
308
  expect(test.client).to match_auth(test)
407
309
  end
408
310
 
409
- it 'creates a client with the correct options' do
410
- expect(test.client).to match_options(test)
311
+ if test.options
312
+ it 'creates a client with the correct options' do
313
+ mapped = Mongo::URI::OptionsMapper.new.ruby_to_smc(test.client.options)
314
+ # Connection string spec tests do not use canonical URI option names
315
+ actual = Utils.downcase_keys(mapped)
316
+ actual.delete('authsource')
317
+ expected = Mongo::ConnectionString.adjust_expected_mongo_client_options(
318
+ test.options,
319
+ )
320
+ actual.should == expected
321
+ end
411
322
  end
412
323
 
413
324
  if test.read_concern_expectation
@@ -22,9 +22,13 @@ describe 'Cmap' do
22
22
  end
23
23
 
24
24
  let(:options) do
25
- SpecConfig.instance.ssl_options.merge(SpecConfig.instance.compressor_options)
26
- .merge(SpecConfig.instance.retry_writes_options).merge(SpecConfig.instance.auth_options)
27
- .merge(monitoring_io: false)
25
+ Mongo::Utils.shallow_symbolize_keys(Mongo::Client.canonicalize_ruby_options(
26
+ SpecConfig.instance.all_test_options,
27
+ )).update(monitoring_io: false).tap do |options|
28
+ # We have a wait queue timeout set in the test suite options, but having
29
+ # this option set interferes with assertions in the cmap spec tests.
30
+ options.delete(:wait_queue_timeout)
31
+ end
28
32
  end
29
33
 
30
34
  CMAP_TESTS.each do |file|
@@ -12,7 +12,6 @@ tests:
12
12
  changeStreamPipeline: []
13
13
  changeStreamOptions: {}
14
14
  operations: []
15
- # https://jira.mongodb.org/browse/SPEC-1462
16
15
  expectations: ~
17
16
  result:
18
17
  error:
@@ -58,7 +58,6 @@ tests:
58
58
  arguments:
59
59
  document:
60
60
  x: 1
61
- # https://jira.mongodb.org/browse/SPEC-1462
62
61
  expectations: ~
63
62
  result:
64
63
  success:
@@ -6,10 +6,14 @@ operations:
6
6
  events:
7
7
  - type: ConnectionCheckOutStarted
8
8
  address: 42
9
+ - type: ConnectionCreated
10
+ connectionId: 1
11
+ address: 42
12
+ - type: ConnectionReady
13
+ connectionId: 1
14
+ address: 42
9
15
  - type: ConnectionCheckedOut
10
16
  connectionId: 1
11
17
  address: 42
12
18
  ignore:
13
19
  - ConnectionPoolCreated
14
- - ConnectionCreated
15
- - ConnectionReady
@@ -7,6 +7,9 @@ operations:
7
7
  - name: waitForEvent
8
8
  event: ConnectionCreated
9
9
  count: 3
10
+ - name: waitForEvent
11
+ event: ConnectionReady
12
+ count: 3
10
13
  - name: checkOut
11
14
  events:
12
15
  - type: ConnectionPoolCreated
@@ -49,3 +49,27 @@ tests:
49
49
  auth: ~
50
50
  options:
51
51
  wtimeoutms: 10
52
+ -
53
+ description: "Empty integer option values are ignored"
54
+ uri: "mongodb://localhost/?maxIdleTimeMS="
55
+ valid: true
56
+ warning: true
57
+ hosts:
58
+ -
59
+ type: "hostname"
60
+ host: "localhost"
61
+ port: ~
62
+ auth: ~
63
+ options: ~
64
+ -
65
+ description: "Empty boolean option value are ignored"
66
+ uri: "mongodb://localhost/?journal="
67
+ valid: true
68
+ warning: true
69
+ hosts:
70
+ -
71
+ type: "hostname"
72
+ host: "localhost"
73
+ port: ~
74
+ auth: ~
75
+ options: ~
@@ -1,7 +1,5 @@
1
- # This is a Ruby driver-specific test because other drivers
2
- # do not allow discovering a standalone topology.
3
1
  description: "Monitoring a discovered standalone connection"
4
- uri: "mongodb://a:27017"
2
+ uri: "mongodb://a:27017/?directConnection=false"
5
3
  phases:
6
4
  -
7
5
  responses:
@@ -1,5 +1,5 @@
1
- description: "Monitoring a forced standalone connection"
2
- uri: "mongodb://a:27017/?connect=direct"
1
+ description: "Monitoring a direct connection"
2
+ uri: "mongodb://a:27017/?directConnection=true"
3
3
  phases:
4
4
  -
5
5
  responses:
@@ -1,5 +1,5 @@
1
- description: "Monitoring a forced standalone connection with repeated ismaster response"
2
- uri: "mongodb://a:27017/?connect=direct"
1
+ description: "Monitoring a direct connection with repeated ismaster response"
2
+ uri: "mongodb://a:27017/?directConnection=true"
3
3
  phases:
4
4
  # phase 1
5
5
  - responses: []
@@ -1,5 +1,5 @@
1
- description: "Monitoring a forced standalone connection - suppress update events for equal server descriptions"
2
- uri: "mongodb://a:27017/?connect=direct"
1
+ description: "Monitoring a direct connection - suppress update events for equal server descriptions"
2
+ uri: "mongodb://a:27017/?directConnection=true"
3
3
  phases:
4
4
  -
5
5
  responses:
@@ -1,5 +1,5 @@
1
- description: "Standalone connection to a replica set node with a me mismatch"
2
- uri: "mongodb://a/?connect=direct"
1
+ description: "Direct connection to a replica set node with a me mismatch"
2
+ uri: "mongodb://a/?directConnection=true"
3
3
  phases:
4
4
  -
5
5
  responses: []
@@ -12,6 +12,31 @@ tests:
12
12
  SERVICE_NAME: "other"
13
13
  CANONICALIZE_HOST_NAME: true
14
14
  authSource: "$external"
15
+ -
16
+ description: "Mixed case in auth mechanism properties is preserved"
17
+ uri: "mongodb://foo:bar@example.com/?authMechanism=GSSAPI&authMechanismProperties=PropertyName:PropertyValue&authSource=$external"
18
+ valid: true
19
+ warning: false
20
+ hosts: ~
21
+ auth: ~
22
+ options:
23
+ authMechanism: "GSSAPI"
24
+ authMechanismProperties:
25
+ PropertyName: PropertyValue
26
+ service_name: mongodb
27
+ authSource: "$external"
28
+ -
29
+ description: "Auth mechanism properties are all invalid"
30
+ uri: "mongodb://foo:bar@example.com/?authMechanism=GSSAPI&authMechanismProperties=PropertyName&authSource=$external"
31
+ valid: true
32
+ warning: true
33
+ hosts: ~
34
+ auth: ~
35
+ options:
36
+ authMechanism: "GSSAPI"
37
+ authMechanismProperties:
38
+ service_name: mongodb
39
+ authSource: "$external"
15
40
  -
16
41
  description: "Valid auth options are parsed correctly (SCRAM-SHA-1)"
17
42
  uri: "mongodb://foo:bar@example.com/?authMechanism=SCRAM-SHA-1&authSource=authSourceDB"
@@ -28,7 +28,8 @@ tests:
28
28
  warning: true
29
29
  hosts: ~
30
30
  auth: ~
31
- options: {}
31
+ # https://jira.mongodb.org/browse/DRIVERS-1368
32
+ options: ~
32
33
  -
33
34
  description: "Too low zlibCompressionLevel causes a warning"
34
35
  uri: "mongodb://example.com/?compressors=zlib&zlibCompressionLevel=-2"
@@ -36,7 +37,8 @@ tests:
36
37
  warning: true
37
38
  hosts: ~
38
39
  auth: ~
39
- options: {}
40
+ # https://jira.mongodb.org/browse/DRIVERS-1368
41
+ options: ~
40
42
  -
41
43
  description: "Too high zlibCompressionLevel causes a warning"
42
44
  uri: "mongodb://example.com/?compressors=zlib&zlibCompressionLevel=10"
@@ -44,5 +46,6 @@ tests:
44
46
  warning: true
45
47
  hosts: ~
46
48
  auth: ~
47
- options: {}
49
+ # https://jira.mongodb.org/browse/DRIVERS-1368
50
+ options: ~
48
51
 
@@ -15,6 +15,18 @@ tests:
15
15
  -
16
16
  dc: "ny"
17
17
  maxStalenessSeconds: 120
18
+ -
19
+ description: "Case is preserved in read preference tag names and values"
20
+ uri: "mongodb://example.com/?readPreference=secondary&readPreferenceTags=DataCenter:NewYork"
21
+ valid: true
22
+ warning: false
23
+ hosts: ~
24
+ auth: ~
25
+ options:
26
+ readPreference: "secondary"
27
+ readPreferenceTags:
28
+ -
29
+ DataCenter: NewYork
18
30
  -
19
31
  description: "Invalid readPreferenceTags causes a warning"
20
32
  uri: "mongodb://example.com/?readPreferenceTags=invalid"
@@ -23,6 +35,18 @@ tests:
23
35
  hosts: ~
24
36
  auth: ~
25
37
  options: {}
38
+ # https://jira.mongodb.org/browse/DRIVERS-1369
39
+ -
40
+ description: "Valid and invalid readPreferenceTags mix"
41
+ uri: "mongodb://example.com/?readPreferenceTags=a:b,invalid"
42
+ valid: true
43
+ warning: true
44
+ hosts: ~
45
+ auth: ~
46
+ options:
47
+ readPreferenceTags:
48
+ -
49
+ a: b
26
50
  -
27
51
  description: "Non-numeric maxStalenessSeconds causes a warning"
28
52
  uri: "mongodb://example.com/?maxStalenessSeconds=invalid"