mongo 2.13.1 → 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 (161) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +1 -4
  4. data/lib/mongo.rb +9 -0
  5. data/lib/mongo/address/ipv4.rb +1 -1
  6. data/lib/mongo/address/ipv6.rb +1 -1
  7. data/lib/mongo/bulk_write.rb +17 -0
  8. data/lib/mongo/caching_cursor.rb +74 -0
  9. data/lib/mongo/client.rb +47 -8
  10. data/lib/mongo/cluster.rb +3 -3
  11. data/lib/mongo/cluster/topology/single.rb +1 -1
  12. data/lib/mongo/collection.rb +26 -0
  13. data/lib/mongo/collection/view.rb +24 -20
  14. data/lib/mongo/collection/view/aggregation.rb +25 -4
  15. data/lib/mongo/collection/view/builder/find_command.rb +38 -18
  16. data/lib/mongo/collection/view/explainable.rb +27 -8
  17. data/lib/mongo/collection/view/iterable.rb +72 -12
  18. data/lib/mongo/collection/view/readable.rb +12 -2
  19. data/lib/mongo/collection/view/writable.rb +15 -1
  20. data/lib/mongo/crypt/encryption_io.rb +6 -6
  21. data/lib/mongo/cursor.rb +1 -0
  22. data/lib/mongo/database.rb +6 -0
  23. data/lib/mongo/error.rb +2 -0
  24. data/lib/mongo/error/invalid_read_concern.rb +28 -0
  25. data/lib/mongo/error/server_certificate_revoked.rb +22 -0
  26. data/lib/mongo/error/unsupported_option.rb +14 -12
  27. data/lib/mongo/lint.rb +2 -1
  28. data/lib/mongo/logger.rb +3 -3
  29. data/lib/mongo/operation.rb +2 -0
  30. data/lib/mongo/operation/aggregate/result.rb +9 -8
  31. data/lib/mongo/operation/collections_info/result.rb +2 -0
  32. data/lib/mongo/operation/delete/bulk_result.rb +2 -0
  33. data/lib/mongo/operation/delete/result.rb +3 -0
  34. data/lib/mongo/operation/explain/command.rb +4 -0
  35. data/lib/mongo/operation/explain/legacy.rb +4 -0
  36. data/lib/mongo/operation/explain/op_msg.rb +6 -0
  37. data/lib/mongo/operation/explain/result.rb +3 -0
  38. data/lib/mongo/operation/find/legacy/result.rb +2 -0
  39. data/lib/mongo/operation/find/result.rb +3 -0
  40. data/lib/mongo/operation/get_more/result.rb +3 -0
  41. data/lib/mongo/operation/indexes/result.rb +5 -0
  42. data/lib/mongo/operation/insert/bulk_result.rb +5 -0
  43. data/lib/mongo/operation/insert/result.rb +5 -0
  44. data/lib/mongo/operation/list_collections/result.rb +5 -0
  45. data/lib/mongo/operation/map_reduce/result.rb +10 -0
  46. data/lib/mongo/operation/parallel_scan/result.rb +4 -0
  47. data/lib/mongo/operation/result.rb +35 -6
  48. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
  49. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
  50. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +2 -0
  51. data/lib/mongo/operation/shared/executable.rb +1 -0
  52. data/lib/mongo/operation/shared/idable.rb +2 -1
  53. data/lib/mongo/operation/shared/limited.rb +1 -0
  54. data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
  55. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
  56. data/lib/mongo/operation/shared/sessions_supported.rb +1 -0
  57. data/lib/mongo/operation/shared/specifiable.rb +1 -0
  58. data/lib/mongo/operation/shared/write.rb +1 -0
  59. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
  60. data/lib/mongo/operation/update/legacy/result.rb +7 -0
  61. data/lib/mongo/operation/update/result.rb +8 -0
  62. data/lib/mongo/operation/users_info/result.rb +3 -0
  63. data/lib/mongo/query_cache.rb +242 -0
  64. data/lib/mongo/retryable.rb +8 -1
  65. data/lib/mongo/server.rb +5 -1
  66. data/lib/mongo/server/connection_common.rb +2 -2
  67. data/lib/mongo/server/connection_pool.rb +3 -0
  68. data/lib/mongo/server/monitor.rb +1 -1
  69. data/lib/mongo/server/monitor/connection.rb +3 -3
  70. data/lib/mongo/server/pending_connection.rb +2 -2
  71. data/lib/mongo/server/push_monitor.rb +1 -1
  72. data/lib/mongo/server_selector/base.rb +5 -1
  73. data/lib/mongo/session.rb +3 -0
  74. data/lib/mongo/socket.rb +6 -4
  75. data/lib/mongo/socket/ocsp_cache.rb +97 -0
  76. data/lib/mongo/socket/ocsp_verifier.rb +368 -0
  77. data/lib/mongo/socket/ssl.rb +45 -24
  78. data/lib/mongo/srv/monitor.rb +7 -13
  79. data/lib/mongo/srv/resolver.rb +14 -10
  80. data/lib/mongo/timeout.rb +2 -0
  81. data/lib/mongo/uri.rb +21 -390
  82. data/lib/mongo/uri/options_mapper.rb +582 -0
  83. data/lib/mongo/uri/srv_protocol.rb +3 -2
  84. data/lib/mongo/utils.rb +12 -1
  85. data/lib/mongo/version.rb +1 -1
  86. data/spec/NOTES.aws-auth.md +12 -7
  87. data/spec/README.md +56 -1
  88. data/spec/integration/bulk_write_spec.rb +48 -0
  89. data/spec/integration/client_authentication_options_spec.rb +55 -28
  90. data/spec/integration/connection_pool_populator_spec.rb +3 -1
  91. data/spec/integration/cursor_reaping_spec.rb +53 -17
  92. data/spec/integration/ocsp_connectivity_spec.rb +26 -0
  93. data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
  94. data/spec/integration/ocsp_verifier_spec.rb +334 -0
  95. data/spec/integration/query_cache_spec.rb +1045 -0
  96. data/spec/integration/query_cache_transactions_spec.rb +179 -0
  97. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
  98. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +2 -0
  99. data/spec/integration/sdam_error_handling_spec.rb +68 -0
  100. data/spec/integration/server_selection_spec.rb +36 -0
  101. data/spec/integration/srv_monitoring_spec.rb +38 -3
  102. data/spec/integration/srv_spec.rb +56 -0
  103. data/spec/lite_spec_helper.rb +3 -1
  104. data/spec/mongo/address_spec.rb +1 -1
  105. data/spec/mongo/caching_cursor_spec.rb +70 -0
  106. data/spec/mongo/client_construction_spec.rb +54 -1
  107. data/spec/mongo/client_spec.rb +40 -0
  108. data/spec/mongo/cluster/topology/single_spec.rb +14 -5
  109. data/spec/mongo/cluster_spec.rb +3 -0
  110. data/spec/mongo/collection/view/explainable_spec.rb +87 -4
  111. data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
  112. data/spec/mongo/collection_spec.rb +60 -0
  113. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  114. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  115. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  116. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
  117. data/spec/mongo/database_spec.rb +44 -0
  118. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  119. data/spec/mongo/logger_spec.rb +13 -11
  120. data/spec/mongo/query_cache_spec.rb +279 -0
  121. data/spec/mongo/server/connection_pool_spec.rb +7 -3
  122. data/spec/mongo/server/connection_spec.rb +14 -7
  123. data/spec/mongo/socket/ssl_spec.rb +1 -1
  124. data/spec/mongo/socket_spec.rb +1 -1
  125. data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
  126. data/spec/mongo/uri_option_parsing_spec.rb +11 -11
  127. data/spec/mongo/uri_spec.rb +68 -41
  128. data/spec/mongo/utils_spec.rb +39 -0
  129. data/spec/runners/auth.rb +3 -0
  130. data/spec/runners/connection_string.rb +35 -124
  131. data/spec/spec_tests/cmap_spec.rb +7 -3
  132. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -1
  133. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
  134. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
  135. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
  136. data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
  137. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
  138. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
  139. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
  140. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  141. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
  142. data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
  143. data/spec/spec_tests/data/uri_options/compression-options.yml +6 -3
  144. data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
  145. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
  146. data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
  147. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
  148. data/spec/spec_tests/uri_options_spec.rb +31 -33
  149. data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
  150. data/spec/support/certificates/atlas-ocsp.crt +41 -0
  151. data/spec/support/client_registry_macros.rb +11 -2
  152. data/spec/support/common_shortcuts.rb +45 -0
  153. data/spec/support/constraints.rb +23 -0
  154. data/spec/support/lite_constraints.rb +24 -0
  155. data/spec/support/matchers.rb +16 -0
  156. data/spec/support/ocsp +1 -0
  157. data/spec/support/session_registry.rb +52 -0
  158. data/spec/support/spec_config.rb +22 -0
  159. data/spec/support/utils.rb +19 -1
  160. metadata +38 -3
  161. metadata.gz.sig +0 -0
@@ -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"
@@ -36,6 +36,7 @@ tests:
36
36
  options:
37
37
  directConnection: false
38
38
  connect: replica_set
39
+ replicaSet: foo
39
40
 
40
41
  -
41
42
  description: directConnection=true and connect=sharded
@@ -149,7 +149,8 @@ tests:
149
149
  warning: false
150
150
  hosts: ~
151
151
  auth: ~
152
- options: {}
152
+ # https://jira.mongodb.org/browse/DRIVERS-1368
153
+ options: ~
153
154
  -
154
155
  description: "tls=false and ssl=false doesn't warn"
155
156
  uri: "mongodb://example.com/?tls=false&ssl=false"
@@ -157,7 +158,8 @@ tests:
157
158
  warning: false
158
159
  hosts: ~
159
160
  auth: ~
160
- options: {}
161
+ # https://jira.mongodb.org/browse/DRIVERS-1368
162
+ options: ~
161
163
  -
162
164
  description: "ssl=true and tls=true doesn't warn"
163
165
  uri: "mongodb://example.com/?ssl=true&tls=true"
@@ -165,7 +167,8 @@ tests:
165
167
  warning: false
166
168
  hosts: ~
167
169
  auth: ~
168
- options: {}
170
+ # https://jira.mongodb.org/browse/DRIVERS-1368
171
+ options: ~
169
172
  -
170
173
  description: "ssl=false and tls=false doesn't warn"
171
174
  uri: "mongodb://example.com/?ssl=false&tls=false"
@@ -173,7 +176,8 @@ tests:
173
176
  warning: false
174
177
  hosts: ~
175
178
  auth: ~
176
- options: {}
179
+ # https://jira.mongodb.org/browse/DRIVERS-1368
180
+ options: ~
177
181
  -
178
182
  description: "tls=false and ssl=true raises error"
179
183
  uri: "mongodb://example.com/?tls=false&ssl=true"
@@ -206,3 +210,155 @@ tests:
206
210
  hosts: ~
207
211
  auth: ~
208
212
  options: {}
213
+ -
214
+ description: "tlsDisableOCSPEndpointCheck can be set to true"
215
+ uri: "mongodb://example.com/?tls=true&tlsDisableOCSPEndpointCheck=true"
216
+ valid: true
217
+ warning: false
218
+ hosts: ~
219
+ auth: ~
220
+ options:
221
+ tls: true
222
+ tlsDisableOCSPEndpointCheck: true
223
+ -
224
+ description: "tlsDisableOCSPEndpointCheck can be set to false"
225
+ uri: "mongodb://example.com/?tls=true&tlsDisableOCSPEndpointCheck=false"
226
+ valid: true
227
+ warning: false
228
+ hosts: ~
229
+ auth: ~
230
+ options:
231
+ tls: true
232
+ tlsDisableOCSPEndpointCheck: false
233
+ # 4 permutations of [tlsInsecure=true/false, tlsDisableOCSPEndpointCheck=true/false]
234
+ -
235
+ description: "tlsInsecure and tlsDisableOCSPEndpointCheck both present (and true) raises an error"
236
+ uri: "mongodb://example.com/?tlsInsecure=true&tlsDisableOCSPEndpointCheck=true"
237
+ valid: false
238
+ warning: false
239
+ hosts: ~
240
+ auth: ~
241
+ options: {}
242
+ -
243
+ description: "tlsInsecure=true and tlsDisableOCSPEndpointCheck=false raises an error"
244
+ uri: "mongodb://example.com/?tlsInsecure=true&tlsDisableOCSPEndpointCheck=false"
245
+ valid: false
246
+ warning: false
247
+ hosts: ~
248
+ auth: ~
249
+ options: {}
250
+ -
251
+ description: "tlsInsecure=false and tlsDisableOCSPEndpointCheck=true raises an error"
252
+ uri: "mongodb://example.com/?tlsInsecure=false&tlsDisableOCSPEndpointCheck=true"
253
+ valid: false
254
+ warning: false
255
+ hosts: ~
256
+ auth: ~
257
+ options: {}
258
+ -
259
+ description: "tlsInsecure and tlsDisableOCSPEndpointCheck both present (and false) raises an error"
260
+ uri: "mongodb://example.com/?tlsInsecure=false&tlsDisableOCSPEndpointCheck=false"
261
+ valid: false
262
+ warning: false
263
+ hosts: ~
264
+ auth: ~
265
+ options: {}
266
+ # 4 permutations of [tlsDisableOCSPEndpointCheck=true/false, tlsInsecure=true/false]
267
+ -
268
+ description: "tlsDisableOCSPEndpointCheck and tlsInsecure both present (and true) raises an error"
269
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=true&tlsInsecure=true"
270
+ valid: false
271
+ warning: false
272
+ hosts: ~
273
+ auth: ~
274
+ options: {}
275
+ -
276
+ description: "tlsDisableOCSPEndpointCheck=true and tlsInsecure=false raises an error"
277
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=true&tlsInsecure=false"
278
+ valid: false
279
+ warning: false
280
+ hosts: ~
281
+ auth: ~
282
+ options: {}
283
+ -
284
+ description: "tlsDisableOCSPEndpointCheck=false and tlsInsecure=true raises an error"
285
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=false&tlsInsecure=true"
286
+ valid: false
287
+ warning: false
288
+ hosts: ~
289
+ auth: ~
290
+ options: {}
291
+ -
292
+ description: "tlsDisableOCSPEndpointCheck and tlsInsecure both present (and false) raises an error"
293
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=false&tlsInsecure=false"
294
+ valid: false
295
+ warning: false
296
+ hosts: ~
297
+ auth: ~
298
+ options: {}
299
+ # 4 permutations of [tlsAllowInvalidCertificates=true/false, tlsDisableOCSPEndpointCheck=true/false]
300
+ -
301
+ description: "tlsAllowInvalidCertificates and tlsDisableOCSPEndpointCheck both present (and true) raises an error"
302
+ uri: "mongodb://example.com/?tlsAllowInvalidCertificates=true&tlsDisableOCSPEndpointCheck=true"
303
+ valid: false
304
+ warning: false
305
+ hosts: ~
306
+ auth: ~
307
+ options: {}
308
+ -
309
+ description: "tlsAllowInvalidCertificates=true and tlsDisableOCSPEndpointCheck=false raises an error"
310
+ uri: "mongodb://example.com/?tlsAllowInvalidCertificates=true&tlsDisableOCSPEndpointCheck=false"
311
+ valid: false
312
+ warning: false
313
+ hosts: ~
314
+ auth: ~
315
+ options: {}
316
+ -
317
+ description: "tlsAllowInvalidCertificates=false and tlsDisableOCSPEndpointCheck=true raises an error"
318
+ uri: "mongodb://example.com/?tlsAllowInvalidCertificates=false&tlsDisableOCSPEndpointCheck=true"
319
+ valid: false
320
+ warning: false
321
+ hosts: ~
322
+ auth: ~
323
+ options: {}
324
+ -
325
+ description: "tlsAllowInvalidCertificates and tlsDisableOCSPEndpointCheck both present (and false) raises an error"
326
+ uri: "mongodb://example.com/?tlsAllowInvalidCertificates=false&tlsDisableOCSPEndpointCheck=false"
327
+ valid: false
328
+ warning: false
329
+ hosts: ~
330
+ auth: ~
331
+ options: {}
332
+ # 4 permutations of [tlsDisableOCSPEndpointCheck=true/false, tlsAllowInvalidCertificates=true/false]
333
+ -
334
+ description: "tlsDisableOCSPEndpointCheck and tlsAllowInvalidCertificates both present (and true) raises an error"
335
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=true&tlsAllowInvalidCertificates=true"
336
+ valid: false
337
+ warning: false
338
+ hosts: ~
339
+ auth: ~
340
+ options: {}
341
+ -
342
+ description: "tlsDisableOCSPEndpointCheck=true and tlsAllowInvalidCertificates=false raises an error"
343
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=true&tlsAllowInvalidCertificates=false"
344
+ valid: false
345
+ warning: false
346
+ hosts: ~
347
+ auth: ~
348
+ options: {}
349
+ -
350
+ description: "tlsDisableOCSPEndpointCheck=false and tlsAllowInvalidCertificates=true raises an error"
351
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=false&tlsAllowInvalidCertificates=true"
352
+ valid: false
353
+ warning: false
354
+ hosts: ~
355
+ auth: ~
356
+ options: {}
357
+ -
358
+ description: "tlsDisableOCSPEndpointCheck and tlsAllowInvalidCertificates both present (and false) raises an error"
359
+ uri: "mongodb://example.com/?tlsDisableOCSPEndpointCheck=false&tlsAllowInvalidCertificates=false"
360
+ valid: false
361
+ warning: false
362
+ hosts: ~
363
+ auth: ~
364
+ options: {}