mongo 2.13.0.beta1 → 2.14.0

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 (339) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +1 -5
  4. data/Rakefile +50 -9
  5. data/lib/mongo.rb +13 -2
  6. data/lib/mongo/address.rb +1 -1
  7. data/lib/mongo/address/ipv4.rb +1 -1
  8. data/lib/mongo/address/ipv6.rb +1 -1
  9. data/lib/mongo/auth/aws/request.rb +31 -5
  10. data/lib/mongo/bulk_write.rb +18 -0
  11. data/lib/mongo/caching_cursor.rb +74 -0
  12. data/lib/mongo/client.rb +238 -31
  13. data/lib/mongo/cluster.rb +56 -20
  14. data/lib/mongo/cluster/sdam_flow.rb +13 -10
  15. data/lib/mongo/cluster/topology/replica_set_no_primary.rb +3 -2
  16. data/lib/mongo/cluster/topology/sharded.rb +1 -1
  17. data/lib/mongo/cluster/topology/single.rb +2 -2
  18. data/lib/mongo/collection.rb +66 -24
  19. data/lib/mongo/collection/view.rb +24 -20
  20. data/lib/mongo/collection/view/aggregation.rb +25 -4
  21. data/lib/mongo/collection/view/builder/find_command.rb +38 -18
  22. data/lib/mongo/collection/view/explainable.rb +27 -8
  23. data/lib/mongo/collection/view/iterable.rb +72 -12
  24. data/lib/mongo/collection/view/readable.rb +19 -3
  25. data/lib/mongo/collection/view/writable.rb +55 -5
  26. data/lib/mongo/crypt/encryption_io.rb +6 -6
  27. data/lib/mongo/cursor.rb +16 -3
  28. data/lib/mongo/database.rb +37 -4
  29. data/lib/mongo/database/view.rb +18 -3
  30. data/lib/mongo/distinguishing_semaphore.rb +55 -0
  31. data/lib/mongo/error.rb +5 -0
  32. data/lib/mongo/error/invalid_read_concern.rb +28 -0
  33. data/lib/mongo/error/invalid_server_auth_host.rb +22 -0
  34. data/lib/mongo/error/invalid_session.rb +2 -1
  35. data/lib/mongo/error/operation_failure.rb +11 -5
  36. data/lib/mongo/error/server_certificate_revoked.rb +22 -0
  37. data/lib/mongo/error/sessions_not_supported.rb +35 -0
  38. data/lib/mongo/error/unsupported_option.rb +14 -12
  39. data/lib/mongo/event/base.rb +6 -0
  40. data/lib/mongo/grid/file.rb +5 -0
  41. data/lib/mongo/grid/file/chunk.rb +2 -0
  42. data/lib/mongo/grid/fs_bucket.rb +15 -13
  43. data/lib/mongo/grid/stream/write.rb +9 -3
  44. data/lib/mongo/index/view.rb +3 -0
  45. data/lib/mongo/lint.rb +2 -1
  46. data/lib/mongo/logger.rb +3 -3
  47. data/lib/mongo/monitoring.rb +38 -0
  48. data/lib/mongo/monitoring/command_log_subscriber.rb +10 -2
  49. data/lib/mongo/monitoring/event/command_failed.rb +11 -0
  50. data/lib/mongo/monitoring/event/command_started.rb +37 -2
  51. data/lib/mongo/monitoring/event/command_succeeded.rb +11 -0
  52. data/lib/mongo/monitoring/event/server_closed.rb +1 -1
  53. data/lib/mongo/monitoring/event/server_description_changed.rb +27 -4
  54. data/lib/mongo/monitoring/event/server_heartbeat_failed.rb +9 -2
  55. data/lib/mongo/monitoring/event/server_heartbeat_started.rb +9 -2
  56. data/lib/mongo/monitoring/event/server_heartbeat_succeeded.rb +9 -2
  57. data/lib/mongo/monitoring/event/server_opening.rb +1 -1
  58. data/lib/mongo/monitoring/event/topology_changed.rb +1 -1
  59. data/lib/mongo/monitoring/event/topology_closed.rb +1 -1
  60. data/lib/mongo/monitoring/event/topology_opening.rb +1 -1
  61. data/lib/mongo/monitoring/publishable.rb +6 -3
  62. data/lib/mongo/monitoring/server_description_changed_log_subscriber.rb +9 -1
  63. data/lib/mongo/monitoring/topology_changed_log_subscriber.rb +1 -1
  64. data/lib/mongo/operation.rb +2 -0
  65. data/lib/mongo/operation/aggregate/result.rb +9 -8
  66. data/lib/mongo/operation/collections_info/command.rb +5 -0
  67. data/lib/mongo/operation/collections_info/result.rb +18 -1
  68. data/lib/mongo/operation/delete/bulk_result.rb +2 -0
  69. data/lib/mongo/operation/delete/result.rb +3 -0
  70. data/lib/mongo/operation/explain/command.rb +4 -0
  71. data/lib/mongo/operation/explain/legacy.rb +4 -0
  72. data/lib/mongo/operation/explain/op_msg.rb +6 -0
  73. data/lib/mongo/operation/explain/result.rb +3 -0
  74. data/lib/mongo/operation/find/legacy/result.rb +2 -0
  75. data/lib/mongo/operation/find/result.rb +13 -0
  76. data/lib/mongo/operation/get_more/result.rb +3 -0
  77. data/lib/mongo/operation/indexes/result.rb +5 -0
  78. data/lib/mongo/operation/insert/bulk_result.rb +5 -0
  79. data/lib/mongo/operation/insert/result.rb +5 -0
  80. data/lib/mongo/operation/list_collections/result.rb +5 -0
  81. data/lib/mongo/operation/map_reduce/result.rb +10 -0
  82. data/lib/mongo/operation/parallel_scan/result.rb +4 -0
  83. data/lib/mongo/operation/result.rb +35 -6
  84. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
  85. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
  86. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +2 -0
  87. data/lib/mongo/operation/shared/executable.rb +1 -0
  88. data/lib/mongo/operation/shared/idable.rb +2 -1
  89. data/lib/mongo/operation/shared/limited.rb +1 -0
  90. data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
  91. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
  92. data/lib/mongo/operation/shared/sessions_supported.rb +1 -0
  93. data/lib/mongo/operation/shared/specifiable.rb +1 -0
  94. data/lib/mongo/operation/shared/write.rb +1 -0
  95. data/lib/mongo/operation/shared/write_concern_supported.rb +1 -0
  96. data/lib/mongo/operation/update/legacy/result.rb +7 -0
  97. data/lib/mongo/operation/update/result.rb +8 -0
  98. data/lib/mongo/operation/users_info/result.rb +3 -0
  99. data/lib/mongo/protocol/message.rb +47 -10
  100. data/lib/mongo/protocol/msg.rb +34 -1
  101. data/lib/mongo/protocol/query.rb +36 -0
  102. data/lib/mongo/protocol/serializers.rb +5 -2
  103. data/lib/mongo/query_cache.rb +242 -0
  104. data/lib/mongo/retryable.rb +8 -1
  105. data/lib/mongo/server.rb +15 -4
  106. data/lib/mongo/server/app_metadata.rb +27 -3
  107. data/lib/mongo/server/connection.rb +4 -4
  108. data/lib/mongo/server/connection_base.rb +38 -12
  109. data/lib/mongo/server/connection_common.rb +2 -2
  110. data/lib/mongo/server/connection_pool.rb +3 -0
  111. data/lib/mongo/server/description.rb +13 -1
  112. data/lib/mongo/server/monitor.rb +76 -44
  113. data/lib/mongo/server/monitor/connection.rb +57 -9
  114. data/lib/mongo/server/pending_connection.rb +14 -4
  115. data/lib/mongo/server/push_monitor.rb +173 -0
  116. data/{spec/runners/transactions/context.rb → lib/mongo/server/push_monitor/connection.rb} +9 -14
  117. data/lib/mongo/server_selector.rb +0 -1
  118. data/lib/mongo/server_selector/base.rb +583 -1
  119. data/lib/mongo/server_selector/nearest.rb +1 -6
  120. data/lib/mongo/server_selector/primary.rb +1 -6
  121. data/lib/mongo/server_selector/primary_preferred.rb +7 -10
  122. data/lib/mongo/server_selector/secondary.rb +1 -6
  123. data/lib/mongo/server_selector/secondary_preferred.rb +1 -7
  124. data/lib/mongo/session.rb +7 -1
  125. data/lib/mongo/socket.rb +26 -12
  126. data/lib/mongo/socket/ocsp_cache.rb +97 -0
  127. data/lib/mongo/socket/ocsp_verifier.rb +368 -0
  128. data/lib/mongo/socket/ssl.rb +46 -25
  129. data/lib/mongo/socket/tcp.rb +1 -1
  130. data/lib/mongo/srv/monitor.rb +7 -13
  131. data/lib/mongo/srv/resolver.rb +14 -10
  132. data/lib/mongo/timeout.rb +2 -0
  133. data/lib/mongo/topology_version.rb +9 -0
  134. data/lib/mongo/uri.rb +21 -390
  135. data/lib/mongo/uri/options_mapper.rb +582 -0
  136. data/lib/mongo/uri/srv_protocol.rb +3 -2
  137. data/lib/mongo/utils.rb +73 -0
  138. data/lib/mongo/version.rb +1 -1
  139. data/spec/NOTES.aws-auth.md +12 -7
  140. data/spec/README.aws-auth.md +2 -2
  141. data/spec/README.md +63 -1
  142. data/spec/integration/awaited_ismaster_spec.rb +28 -0
  143. data/spec/integration/bson_symbol_spec.rb +4 -2
  144. data/spec/integration/bulk_write_spec.rb +67 -0
  145. data/spec/integration/change_stream_examples_spec.rb +6 -2
  146. data/spec/integration/change_stream_spec.rb +1 -1
  147. data/spec/integration/check_clean_slate_spec.rb +16 -0
  148. data/spec/integration/client_authentication_options_spec.rb +92 -28
  149. data/spec/integration/client_construction_spec.rb +1 -0
  150. data/spec/integration/client_side_encryption/auto_encryption_bulk_writes_spec.rb +9 -5
  151. data/spec/integration/connect_single_rs_name_spec.rb +5 -2
  152. data/spec/integration/connection_pool_populator_spec.rb +4 -2
  153. data/spec/integration/connection_spec.rb +7 -4
  154. data/spec/integration/crud_spec.rb +4 -4
  155. data/spec/integration/cursor_reaping_spec.rb +54 -18
  156. data/spec/integration/docs_examples_spec.rb +6 -0
  157. data/spec/integration/fork_reconnect_spec.rb +56 -1
  158. data/spec/integration/grid_fs_bucket_spec.rb +48 -0
  159. data/spec/integration/heartbeat_events_spec.rb +4 -23
  160. data/spec/integration/ocsp_connectivity_spec.rb +26 -0
  161. data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
  162. data/spec/integration/ocsp_verifier_spec.rb +334 -0
  163. data/spec/integration/query_cache_spec.rb +1045 -0
  164. data/spec/integration/query_cache_transactions_spec.rb +190 -0
  165. data/spec/integration/read_concern_spec.rb +1 -1
  166. data/spec/integration/retryable_errors_spec.rb +1 -1
  167. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
  168. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +4 -2
  169. data/spec/integration/retryable_writes/shared/performs_modern_retries.rb +3 -3
  170. data/spec/integration/retryable_writes/shared/performs_no_retries.rb +2 -2
  171. data/spec/integration/sdam_error_handling_spec.rb +122 -15
  172. data/spec/integration/sdam_events_spec.rb +80 -6
  173. data/spec/integration/sdam_prose_spec.rb +64 -0
  174. data/spec/integration/server_monitor_spec.rb +25 -1
  175. data/spec/integration/server_selection_spec.rb +36 -0
  176. data/spec/integration/size_limit_spec.rb +23 -5
  177. data/spec/integration/srv_monitoring_spec.rb +38 -3
  178. data/spec/integration/srv_spec.rb +56 -0
  179. data/spec/integration/ssl_uri_options_spec.rb +2 -2
  180. data/spec/integration/transactions_examples_spec.rb +17 -7
  181. data/spec/integration/zlib_compression_spec.rb +25 -0
  182. data/spec/lite_spec_helper.rb +20 -9
  183. data/spec/mongo/address_spec.rb +1 -1
  184. data/spec/mongo/auth/aws/request_region_spec.rb +42 -0
  185. data/spec/mongo/auth/aws/request_spec.rb +76 -0
  186. data/spec/mongo/auth/scram_spec.rb +1 -1
  187. data/spec/mongo/auth/user_spec.rb +1 -1
  188. data/spec/mongo/bulk_write_spec.rb +2 -2
  189. data/spec/mongo/caching_cursor_spec.rb +70 -0
  190. data/spec/mongo/client_construction_spec.rb +386 -3
  191. data/spec/mongo/client_encryption_spec.rb +16 -10
  192. data/spec/mongo/client_spec.rb +85 -3
  193. data/spec/mongo/cluster/topology/replica_set_spec.rb +53 -10
  194. data/spec/mongo/cluster/topology/sharded_spec.rb +1 -1
  195. data/spec/mongo/cluster/topology/single_spec.rb +19 -8
  196. data/spec/mongo/cluster/topology/unknown_spec.rb +1 -1
  197. data/spec/mongo/cluster/topology_spec.rb +1 -1
  198. data/spec/mongo/cluster_spec.rb +37 -35
  199. data/spec/mongo/collection/view/change_stream_resume_spec.rb +7 -7
  200. data/spec/mongo/collection/view/explainable_spec.rb +87 -4
  201. data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
  202. data/spec/mongo/collection/view/readable_spec.rb +36 -0
  203. data/spec/mongo/collection_spec.rb +572 -0
  204. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  205. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  206. data/spec/mongo/crypt/binary_spec.rb +1 -6
  207. data/spec/mongo/crypt/binding/binary_spec.rb +1 -6
  208. data/spec/mongo/crypt/binding/context_spec.rb +2 -7
  209. data/spec/mongo/crypt/binding/helpers_spec.rb +1 -6
  210. data/spec/mongo/crypt/binding/mongocrypt_spec.rb +2 -7
  211. data/spec/mongo/crypt/binding/status_spec.rb +1 -6
  212. data/spec/mongo/crypt/binding/version_spec.rb +1 -6
  213. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  214. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  215. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
  216. data/spec/mongo/crypt/status_spec.rb +1 -6
  217. data/spec/mongo/database_spec.rb +353 -8
  218. data/spec/mongo/distinguishing_semaphore_spec.rb +63 -0
  219. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  220. data/spec/mongo/error/operation_failure_spec.rb +40 -0
  221. data/spec/mongo/index/view_spec.rb +148 -2
  222. data/spec/mongo/logger_spec.rb +13 -11
  223. data/spec/mongo/monitoring/event/server_closed_spec.rb +1 -1
  224. data/spec/mongo/monitoring/event/server_description_changed_spec.rb +1 -4
  225. data/spec/mongo/monitoring/event/server_opening_spec.rb +1 -1
  226. data/spec/mongo/monitoring/event/topology_changed_spec.rb +1 -1
  227. data/spec/mongo/monitoring/event/topology_closed_spec.rb +1 -1
  228. data/spec/mongo/monitoring/event/topology_opening_spec.rb +1 -1
  229. data/spec/mongo/operation/delete/op_msg_spec.rb +3 -3
  230. data/spec/mongo/operation/insert/command_spec.rb +2 -2
  231. data/spec/mongo/operation/insert/op_msg_spec.rb +3 -3
  232. data/spec/mongo/operation/read_preference_op_msg_spec.rb +1 -1
  233. data/spec/mongo/operation/update/command_spec.rb +2 -2
  234. data/spec/mongo/operation/update/op_msg_spec.rb +3 -3
  235. data/spec/mongo/protocol/msg_spec.rb +10 -0
  236. data/spec/mongo/query_cache_spec.rb +280 -0
  237. data/spec/mongo/semaphore_spec.rb +51 -0
  238. data/spec/mongo/server/app_metadata_shared.rb +82 -2
  239. data/spec/mongo/server/connection_auth_spec.rb +2 -2
  240. data/spec/mongo/server/connection_pool_spec.rb +7 -3
  241. data/spec/mongo/server/connection_spec.rb +15 -8
  242. data/spec/mongo/server/description_spec.rb +18 -0
  243. data/spec/mongo/server_selector/nearest_spec.rb +23 -23
  244. data/spec/mongo/server_selector/primary_preferred_spec.rb +26 -26
  245. data/spec/mongo/server_selector/primary_spec.rb +9 -9
  246. data/spec/mongo/server_selector/secondary_preferred_spec.rb +22 -22
  247. data/spec/mongo/server_selector/secondary_spec.rb +18 -18
  248. data/spec/mongo/server_selector_spec.rb +6 -6
  249. data/spec/mongo/session_spec.rb +35 -0
  250. data/spec/mongo/socket/ssl_spec.rb +4 -4
  251. data/spec/mongo/socket_spec.rb +1 -1
  252. data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
  253. data/spec/mongo/uri_option_parsing_spec.rb +11 -11
  254. data/spec/mongo/uri_spec.rb +68 -41
  255. data/spec/mongo/utils_spec.rb +39 -0
  256. data/spec/runners/auth.rb +3 -0
  257. data/spec/runners/change_streams/test.rb +3 -3
  258. data/spec/runners/cmap.rb +1 -1
  259. data/spec/runners/command_monitoring.rb +3 -34
  260. data/spec/runners/connection_string.rb +35 -124
  261. data/spec/runners/crud/context.rb +9 -5
  262. data/spec/runners/crud/operation.rb +59 -27
  263. data/spec/runners/crud/spec.rb +0 -8
  264. data/spec/runners/crud/test.rb +1 -1
  265. data/spec/runners/crud/test_base.rb +0 -19
  266. data/spec/runners/sdam.rb +2 -2
  267. data/spec/runners/server_selection.rb +242 -28
  268. data/spec/runners/transactions.rb +12 -12
  269. data/spec/runners/transactions/operation.rb +151 -25
  270. data/spec/runners/transactions/test.rb +62 -18
  271. data/spec/shared/LICENSE +20 -0
  272. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  273. data/spec/shared/lib/mrss/constraints.rb +303 -0
  274. data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
  275. data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
  276. data/spec/spec_helper.rb +3 -1
  277. data/spec/spec_tests/cmap_spec.rb +7 -3
  278. data/spec/spec_tests/command_monitoring_spec.rb +22 -12
  279. data/spec/spec_tests/crud_spec.rb +1 -1
  280. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +4 -9
  281. data/spec/spec_tests/data/change_streams/change-streams-resume-whitelist.yml +66 -0
  282. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
  283. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
  284. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
  285. data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
  286. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/MaxStalenessTooSmall.yml +15 -0
  287. data/spec/spec_tests/data/max_staleness/ReplicaSetNoPrimary/NoKnownServers.yml +4 -3
  288. data/spec/spec_tests/data/max_staleness/Unknown/SmallMaxStaleness.yml +1 -0
  289. data/spec/spec_tests/data/sdam_integration/cancel-server-check.yml +96 -0
  290. data/spec/spec_tests/data/sdam_integration/connectTimeoutMS.yml +88 -0
  291. data/spec/spec_tests/data/sdam_integration/find-network-error.yml +83 -0
  292. data/spec/spec_tests/data/sdam_integration/find-shutdown-error.yml +116 -0
  293. data/spec/spec_tests/data/sdam_integration/insert-network-error.yml +86 -0
  294. data/spec/spec_tests/data/sdam_integration/insert-shutdown-error.yml +115 -0
  295. data/spec/spec_tests/data/sdam_integration/isMaster-command-error.yml +168 -0
  296. data/spec/spec_tests/data/sdam_integration/isMaster-network-error.yml +162 -0
  297. data/spec/spec_tests/data/sdam_integration/isMaster-timeout.yml +229 -0
  298. data/spec/spec_tests/data/sdam_integration/rediscover-quickly-after-step-down.yml +87 -0
  299. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
  300. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
  301. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
  302. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  303. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
  304. data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
  305. data/spec/spec_tests/data/uri_options/compression-options.yml +6 -3
  306. data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
  307. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
  308. data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
  309. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
  310. data/spec/spec_tests/max_staleness_spec.rb +4 -142
  311. data/spec/spec_tests/retryable_reads_spec.rb +2 -2
  312. data/spec/spec_tests/sdam_integration_spec.rb +13 -0
  313. data/spec/spec_tests/sdam_monitoring_spec.rb +1 -2
  314. data/spec/spec_tests/server_selection_spec.rb +4 -116
  315. data/spec/spec_tests/uri_options_spec.rb +31 -33
  316. data/spec/stress/cleanup_spec.rb +17 -2
  317. data/spec/stress/connection_pool_stress_spec.rb +10 -8
  318. data/spec/stress/fork_reconnect_stress_spec.rb +1 -1
  319. data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
  320. data/spec/support/certificates/atlas-ocsp.crt +41 -0
  321. data/spec/support/client_registry.rb +1 -0
  322. data/spec/support/client_registry_macros.rb +11 -2
  323. data/spec/support/cluster_config.rb +4 -0
  324. data/spec/support/common_shortcuts.rb +45 -0
  325. data/spec/support/constraints.rb +6 -253
  326. data/spec/support/event_subscriber.rb +123 -33
  327. data/spec/support/keyword_struct.rb +26 -0
  328. data/spec/support/matchers.rb +16 -0
  329. data/spec/support/ocsp +1 -0
  330. data/spec/support/session_registry.rb +52 -0
  331. data/spec/support/shared/server_selector.rb +13 -1
  332. data/spec/support/spec_config.rb +60 -13
  333. data/spec/support/spec_setup.rb +1 -1
  334. data/spec/support/utils.rb +84 -1
  335. metadata +1027 -937
  336. metadata.gz.sig +0 -0
  337. data/lib/mongo/server_selector/selectable.rb +0 -560
  338. data/spec/runners/sdam_monitoring.rb +0 -89
  339. data/spec/support/lite_constraints.rb +0 -141
@@ -2,7 +2,7 @@ require 'lite_spec_helper'
2
2
 
3
3
  require 'runners/connection_string'
4
4
 
5
- describe 'Uri Options' do
5
+ describe 'URI options' do
6
6
  include Mongo::ConnectionString
7
7
 
8
8
  # Since the tests issue global assertions on Mongo::Logger,
@@ -22,39 +22,23 @@ describe 'Uri Options' do
22
22
  require_mongo_kerberos
23
23
  end
24
24
 
25
- context 'when the uri should warn', if: test.warn? do
25
+ if test.valid?
26
26
 
27
- before do
28
- expect(Mongo::Logger.logger).to receive(:warn)
29
- end
30
-
31
- it 'warns' do
32
- expect(test.client).to be_a(Mongo::Client)
33
- end
34
- end
35
-
36
- context 'when the uri is invalid', unless: test.valid? do
37
-
38
- it 'raises an error' do
39
- expect{
40
- test.uri
41
- }.to raise_exception(Mongo::Error::InvalidURI)
42
- end
43
- end
44
-
45
- context 'when the uri should not warn', if: !test.warn? && test.valid? do
46
-
47
- before do
48
- expect(Mongo::Logger.logger).not_to receive(:warn)
27
+ # The warning assertion needs to be first because the test caches
28
+ # the client instance, and subsequent examples don't instantiate it
29
+ # again.
30
+ if test.warn?
31
+ it 'warns' do
32
+ expect(Mongo::Logger.logger).to receive(:warn)#.and_call_original
33
+ expect(test.client).to be_a(Mongo::Client)
34
+ end
35
+ else
36
+ it 'does not warn' do
37
+ expect(Mongo::Logger.logger).not_to receive(:warn)
38
+ expect(test.client).to be_a(Mongo::Client)
39
+ end
49
40
  end
50
41
 
51
- it 'does not raise an exception or warning' do
52
- expect(test.client).to be_a(Mongo::Client)
53
- end
54
- end
55
-
56
- context 'when the uri is valid', if: test.valid? do
57
-
58
42
  if test.hosts
59
43
  it 'creates a client with the correct hosts' do
60
44
  expect(test.client).to have_hosts(test, test.hosts)
@@ -65,8 +49,22 @@ describe 'Uri Options' do
65
49
  expect(test.client).to match_auth(test)
66
50
  end
67
51
 
68
- it 'creates a client with the correct options' do
69
- expect(test.client).to match_options(test)
52
+ if test.options
53
+ it 'creates a client with the correct options' do
54
+ mapped = Mongo::URI::OptionsMapper.new.ruby_to_smc(test.client.options)
55
+ expected = Mongo::ConnectionString.adjust_expected_mongo_client_options(
56
+ test.options,
57
+ )
58
+ mapped.should == expected
59
+ end
60
+ end
61
+
62
+ else
63
+
64
+ it 'raises an error' do
65
+ expect{
66
+ test.uri
67
+ }.to raise_exception(Mongo::Error::InvalidURI)
70
68
  end
71
69
  end
72
70
  end
@@ -20,17 +20,32 @@ describe 'Cleanup stress test' do
20
20
 
21
21
  it 'cleans up' do
22
22
  client
23
+ client.cluster.servers_list.map(&:scan!)
24
+
25
+ sleep 1
26
+ GC.start
23
27
 
24
28
  start_resources = resources
25
29
 
26
- 100.times do
30
+ 500.times do
27
31
  client.close
28
32
  client.reconnect
29
33
  end
30
34
 
35
+ sleep 1
36
+ GC.start
37
+
31
38
  end_resources = resources
32
39
 
33
- end_resources.should == start_resources
40
+ # There seem to be a temporary file descriptor leak in CI,
41
+ # where we start with 75 fds and end with 77 fds.
42
+ # Allow a few to be leaked, run more iterations to ensure the leak
43
+ # is not a real one.
44
+ # Sometimes we end with fewer fds than we started with also...
45
+ end_resources[:open_file_count].should >= start_resources[:open_file_count] - 3
46
+ end_resources[:open_file_count].should <= start_resources[:open_file_count] + 3
47
+
48
+ end_resources[:running_thread_count].should == start_resources[:running_thread_count]
34
49
  end
35
50
  end
36
51
 
@@ -21,9 +21,9 @@ describe 'Connection pool stress test' do
21
21
  [].tap do |threads|
22
22
  thread_count.times do |i|
23
23
  threads << Thread.new do
24
- 10.times do |j|
24
+ 100.times do |j|
25
25
  collection.find(a: i+j).to_a
26
- sleep 0.5
26
+ sleep 0.1
27
27
  collection.find(a: i+j).to_a
28
28
  end
29
29
  end
@@ -132,7 +132,7 @@ describe 'Connection pool stress test' do
132
132
  end
133
133
 
134
134
  context '25 threads, max pool size 5' do
135
- let(:thread_count) { 20 }
135
+ let(:thread_count) { 25 }
136
136
 
137
137
  it_behaves_like 'does not raise error'
138
138
  end
@@ -183,17 +183,19 @@ describe 'Connection pool stress test' do
183
183
  # The populator calls create_and_add_connection, which calls connection.connect!
184
184
  # and raises if an error occurs (eg, an auth error), so in this test we
185
185
  # randomly raise errors on this method.
186
- expect(server.pool).to receive(:create_and_add_connection).at_least(:once).and_wrap_original { |m, *args|
187
- if rand < 0.05
186
+ expect(server.pool).to receive(:create_and_add_connection).at_least(:once).and_wrap_original do |m, *args|
187
+ if rand < 0.1
188
188
  raise Mongo::Error::SocketError
189
189
  else
190
190
  m.call(*args)
191
191
  end
192
- }
192
+ end
193
193
 
194
- expect {
194
+ server.pool.clear(stop_populator: false)
195
+
196
+ expect do
195
197
  threads.collect { |t| t.join }
196
- }.not_to raise_error
198
+ end.not_to raise_error
197
199
  end
198
200
  end
199
201
  end
@@ -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
@@ -0,0 +1,28 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIElDCCA3ygAwIBAgIQAf2j627KdciIQ4tyS8+8kTANBgkqhkiG9w0BAQsFADBh
3
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
4
+ d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
5
+ QTAeFw0xMzAzMDgxMjAwMDBaFw0yMzAzMDgxMjAwMDBaME0xCzAJBgNVBAYTAlVT
6
+ MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxJzAlBgNVBAMTHkRpZ2lDZXJ0IFNIQTIg
7
+ U2VjdXJlIFNlcnZlciBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
8
+ ANyuWJBNwcQwFZA1W248ghX1LFy949v/cUP6ZCWA1O4Yok3wZtAKc24RmDYXZK83
9
+ nf36QYSvx6+M/hpzTc8zl5CilodTgyu5pnVILR1WN3vaMTIa16yrBvSqXUu3R0bd
10
+ KpPDkC55gIDvEwRqFDu1m5K+wgdlTvza/P96rtxcflUxDOg5B6TXvi/TC2rSsd9f
11
+ /ld0Uzs1gN2ujkSYs58O09rg1/RrKatEp0tYhG2SS4HD2nOLEpdIkARFdRrdNzGX
12
+ kujNVA075ME/OV4uuPNcfhCOhkEAjUVmR7ChZc6gqikJTvOX6+guqw9ypzAO+sf0
13
+ /RR3w6RbKFfCs/mC/bdFWJsCAwEAAaOCAVowggFWMBIGA1UdEwEB/wQIMAYBAf8C
14
+ AQAwDgYDVR0PAQH/BAQDAgGGMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYY
15
+ aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMHsGA1UdHwR0MHIwN6A1oDOGMWh0dHA6
16
+ Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RDQS5jcmwwN6A1
17
+ oDOGMWh0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RD
18
+ QS5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
19
+ d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwHQYDVR0OBBYEFA+AYRyCMWHVLyjnjUY4tCzh
20
+ xtniMB8GA1UdIwQYMBaAFAPeUDVW0Uy7ZvCj4hsbw5eyPdFVMA0GCSqGSIb3DQEB
21
+ CwUAA4IBAQAjPt9L0jFCpbZ+QlwaRMxp0Wi0XUvgBCFsS+JtzLHgl4+mUwnNqipl
22
+ 5TlPHoOlblyYoiQm5vuh7ZPHLgLGTUq/sELfeNqzqPlt/yGFUzZgTHbO7Djc1lGA
23
+ 8MXW5dRNJ2Srm8c+cftIl7gzbckTB+6WohsYFfZcTEDts8Ls/3HB40f/1LkAtDdC
24
+ 2iDJ6m6K7hQGrn2iWZiIqBtvLfTyyRRfJs8sjX7tN8Cp1Tm5gr8ZDOo0rwAhaPit
25
+ c+LJMto4JQtV05od8GiG7S5BNO98pVAdvzr508EIDObtHopYJeS4d60tbvVS3bR0
26
+ j6tJLp07kzQoH3jOlOrHvdPJbRzeXDLz
27
+ -----END CERTIFICATE-----
28
+
@@ -0,0 +1,41 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIHOjCCBiKgAwIBAgIQBHwKuME6qrWYg7D7VTlKYjANBgkqhkiG9w0BAQsFADBN
3
+ MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMScwJQYDVQQDEx5E
4
+ aWdpQ2VydCBTSEEyIFNlY3VyZSBTZXJ2ZXIgQ0EwHhcNMTgwMjA3MDAwMDAwWhcN
5
+ MjEwNTA3MDAwMDAwWjB7MQswCQYDVQQGEwJVUzERMA8GA1UECBMITmV3IFlvcmsx
6
+ ETAPBgNVBAcTCE5ldyBZb3JrMRYwFAYDVQQKEw1Nb25nb0RCLCBJbmMuMRIwEAYD
7
+ VQQLEwlDbG91ZCBTUkUxGjAYBgNVBAMMESoubW9uZ29kYi1kZXYubmV0MIIBIjAN
8
+ BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0oEdsION7ajeosGKBaZ4szN58kFz
9
+ 4EHBrgGs7N5X+4weolk4LouU0nUO2SDwjdJL5Kpbb1rUb3satTVAuNj2CDp3LynW
10
+ Zggtf3OCbBHMKmFUMxYiriEGU/BCHo+qKlWj0eM1qRWC/9qjbg5+pvnhYEOYZgMw
11
+ rIjD8V/j/8fO2mfBTpK+5xXeLXaIZKLgFlHWhLueTBONhSjGCHCKuI9xL6lBys3s
12
+ QqsSMZY1weecD4jP8nVxuHpOnwdWOo2BH8d4nh8PowQYSjbrKm2n1cDGnak7oqZ4
13
+ hpR4zjG04zOrLzw9p5uzUj4ofPhsaUC9K4sLAh01PZRnIl9tIvQkp0Xc8QIDAQAB
14
+ o4ID5jCCA+IwHwYDVR0jBBgwFoAUD4BhHIIxYdUvKOeNRji0LOHG2eIwHQYDVR0O
15
+ BBYEFCN2C7OPPJfzGKESo8DdeuMzXWFLMC0GA1UdEQQmMCSCESoubW9uZ29kYi1k
16
+ ZXYubmV0gg9tb25nb2RiLWRldi5uZXQwDgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQW
17
+ MBQGCCsGAQUFBwMBBggrBgEFBQcDAjBrBgNVHR8EZDBiMC+gLaArhilodHRwOi8v
18
+ Y3JsMy5kaWdpY2VydC5jb20vc3NjYS1zaGEyLWc2LmNybDAvoC2gK4YpaHR0cDov
19
+ L2NybDQuZGlnaWNlcnQuY29tL3NzY2Etc2hhMi1nNi5jcmwwTAYDVR0gBEUwQzA3
20
+ BglghkgBhv1sAQEwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQu
21
+ Y29tL0NQUzAIBgZngQwBAgIwfAYIKwYBBQUHAQEEcDBuMCQGCCsGAQUFBzABhhho
22
+ dHRwOi8vb2NzcC5kaWdpY2VydC5jb20wRgYIKwYBBQUHMAKGOmh0dHA6Ly9jYWNl
23
+ cnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFNIQTJTZWN1cmVTZXJ2ZXJDQS5jcnQw
24
+ DAYDVR0TAQH/BAIwADCCAfkGCisGAQQB1nkCBAIEggHpBIIB5QHjAHcApLkJkLQY
25
+ WBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BAAAAFhcQh6hAAABAMASDBGAiEAsBwl
26
+ EUAJoqWKGHlG1Iw+Z9hr3RPPySoPT4PBjWRnWpcCIQC7V9EFENl7Pk6NOwRo1joZ
27
+ OB4UNyZh1YVlQOXyZK0tUgB2AId1v+dZfPiMQ5lfvfNu/1aNR1Y2/0q1YMG06v9e
28
+ oIMPAAABYXEIep0AAAQDAEcwRQIhALvaijTUDDPJgr79QDHN7102E3hpilLEmV02
29
+ D5jbI3efAiB18NNDifebYBRBALyVFZf5TPwMJ4Hb//roHdTf+dqbVwB3ALvZ37wf
30
+ inG1k5Qjl6qSe0c4V5UKq1LoGpCWZDaOHtGFAAABYXEIehQAAAQDAEgwRgIhAJao
31
+ S5aKuudv9ZA4dUD/gEzdHZsF3M9xsa+KZHZzinT1AiEA1zAQMKp2pa8/Or5soC7M
32
+ HrsykWEXY3lpFCsyQM+RPHUAdwBvU3asMfAxGdiZAKRRFf93FRwR2QLBACkGjbII
33
+ mjfZEwAAAWFxCHyrAAAEAwBIMEYCIQDhtxcQCz916LqV/RKhTNOi39LW4dMPAl7Q
34
+ eWPTaUk3dAIhAOgQiFAYkgJvun9hZk/wWZ8PaZJOGnKnkLdTM3j7ZdTNMA0GCSqG
35
+ SIb3DQEBCwUAA4IBAQB6rK1wA1IsQCZVSXooVt79EgF3JMlgyCRZKTFD1KZtkKG7
36
+ n9YI0Aatw3hvKpo8OV4KC1Iw1Ie6JwbVTczyHApROLSeSHTtxbfiNXmYqNVECSQt
37
+ I+dHAYc38EKCb/XgxqfFra0vJRcCzd1yHLKJ6uERI6cJ7/vkLqJiRScHNh49Py8Y
38
+ Osijdqd0BZnwAdFKpPtmvPNPH9JWu8RlcfWUukJKF1YgzeCjz50DL47Ykqh7C8aA
39
+ T9B5yzkDNBg65zZSeDnX6FFo0ZC8BMxqN+kCyk3favP3NP8FBmkEZPqY0wMh3Xsd
40
+ OdSNdcGPBlN4MiTOIkWW6JrZl6y/hQ83ktYG8wwY
41
+ -----END CERTIFICATE-----
@@ -105,6 +105,7 @@ class ClientRegistry
105
105
  }.update(SpecConfig.instance.credentials_or_external_user(
106
106
  user: SpecConfig.instance.test_user.name,
107
107
  password: SpecConfig.instance.test_user.password,
108
+ auth_source: 'admin',
108
109
  ))
109
110
 
110
111
  Mongo::Client.new(
@@ -4,8 +4,17 @@ module ClientRegistryMacros
4
4
  end
5
5
 
6
6
  def new_local_client_nmio(address, options=nil)
7
- new_local_client(address, Mongo::Options::Redacted.new(
8
- monitoring_io: false).merge(options || {}))
7
+ # Avoid type converting options.
8
+ base_options = {monitoring_io: false}
9
+ if BSON::Document === options || options&.keys&.any? { |key| String === key }
10
+ base_options = Mongo::Options::Redacted.new(base_options)
11
+ end
12
+ options = if options
13
+ base_options.merge(options)
14
+ else
15
+ base_options
16
+ end
17
+ new_local_client(address, options)
9
18
  end
10
19
 
11
20
  def close_local_clients
@@ -38,6 +38,10 @@ class ClusterConfig
38
38
  # less than 3.4. This method returns FCV on 3.4+ servers when in single
39
39
  # or RS topologies, and otherwise returns the major.minor server version.
40
40
  def fcv_ish
41
+ if server_version.nil?
42
+ raise "Deployment server version not known - check that connection to deployment succeeded"
43
+ end
44
+
41
45
  if server_version >= '3.4' && topology != :sharded
42
46
  fcv
43
47
  else
@@ -96,6 +96,51 @@ module CommonShortcuts
96
96
  end
97
97
  end
98
98
  end
99
+
100
+ def clear_ocsp_cache
101
+ before do
102
+ Mongo.clear_ocsp_cache
103
+ end
104
+ end
105
+
106
+ def with_ocsp_mock(ca_file_path, responder_cert_path, responder_key_path,
107
+ fault: nil, port: 8100
108
+ )
109
+ clear_ocsp_cache
110
+
111
+ around do |example|
112
+ args = [
113
+ SpecConfig.instance.ocsp_files_dir.join('ocsp_mock.py').to_s,
114
+ '--ca_file', ca_file_path.to_s,
115
+ '--ocsp_responder_cert', responder_cert_path.to_s,
116
+ '--ocsp_responder_key', responder_key_path.to_s,
117
+ '-p', port.to_s,
118
+ ]
119
+ if SpecConfig.instance.client_debug?
120
+ # Use when debugging - tests run faster without -v.
121
+ args << '-v'
122
+ end
123
+ if fault
124
+ args += ['--fault', fault]
125
+ end
126
+ process = ChildProcess.new(*args)
127
+
128
+ process.io.inherit!
129
+ process.start
130
+
131
+ begin
132
+ sleep 0.4
133
+ example.run
134
+ ensure
135
+ if process.exited?
136
+ raise "Spawned process exited before we stopped it"
137
+ end
138
+
139
+ process.stop
140
+ process.wait
141
+ end
142
+ end
143
+ end
99
144
  end
100
145
 
101
146
  module InstanceMethods
@@ -1,262 +1,15 @@
1
1
  module Constraints
2
- def min_server_version(version)
3
- unless version =~ /^\d+\.\d+$/
4
- raise ArgumentError, "Version can only be major.minor: #{version}"
5
- end
6
-
7
- before(:all) do
8
- if version > ClusterConfig.instance.server_version
9
- skip "Server version #{version} or higher required, we have #{ClusterConfig.instance.server_version}"
10
- end
11
- end
12
- end
13
-
14
- def max_server_version(version)
15
- unless version =~ /^\d+\.\d+$/
16
- raise ArgumentError, "Version can only be major.minor: #{version}"
17
- end
18
-
19
- before(:all) do
20
- if version < ClusterConfig.instance.short_server_version
21
- skip "Server version #{version} or lower required, we have #{ClusterConfig.instance.server_version}"
22
- end
23
- end
24
- end
25
-
26
- def min_server_fcv(version)
27
- unless version =~ /^\d+\.\d+$/
28
- raise ArgumentError, "FCV can only be major.minor: #{version}"
29
- end
30
-
31
- before(:all) do
32
- unless ClusterConfig.instance.fcv_ish >= version
33
- skip "FCV #{version} or higher required, we have #{ClusterConfig.instance.fcv_ish} (server #{ClusterConfig.instance.server_version})"
34
- end
35
- end
36
- end
37
-
38
- def max_server_fcv(version)
39
- unless version =~ /^\d+\.\d+$/
40
- raise ArgumentError, "Version can only be major.minor: #{version}"
41
- end
42
-
43
- before(:all) do
44
- if version < ClusterConfig.instance.fcv_ish
45
- skip "FCV #{version} or lower required, we have #{ClusterConfig.instance.fcv_ish} (server #{ClusterConfig.instance.server_version})"
46
- end
47
- end
48
- end
49
-
50
- def require_topology(*topologies)
51
- invalid_topologies = topologies - [:single, :replica_set, :sharded]
52
- unless invalid_topologies.empty?
53
- raise ArgumentError, "Invalid topologies requested: #{invalid_topologies.join(', ')}"
54
- end
55
- before(:all) do
56
- unless topologies.include?(topology = ClusterConfig.instance.topology)
57
- skip "Topology #{topologies.join(' or ')} required, we have #{topology}"
58
- end
59
- end
60
- end
61
-
62
- def max_example_run_time(timeout)
63
- around do |example|
64
- TimeoutInterrupt.timeout(timeout, TimeoutInterrupt::Error.new("Test execution terminated after #{timeout} seconds")) do
65
- example.run
66
- end
67
- end
68
- end
69
-
70
- def require_transaction_support
71
- min_server_fcv '4.0'
72
- require_topology :replica_set
73
- end
74
-
75
- # Fail command fail point was added to mongod in 4.0 and to mongos in 4.2.
76
- def require_fail_command
77
- min_server_fcv '4.0'
78
-
79
- before(:all) do
80
- if ClusterConfig.instance.topology == :sharded
81
- unless ClusterConfig.instance.short_server_version >= '4.2'
82
- skip 'Test requires failCommand fail point which was added to mongos in 4.2'
83
- end
84
- end
85
- end
86
- end
87
-
88
- def require_tls
89
- before(:all) do
90
- unless SpecConfig.instance.ssl?
91
- skip "SSL not enabled"
92
- end
93
- end
94
- end
95
-
96
- def require_no_tls
97
- before(:all) do
98
- if SpecConfig.instance.ssl?
99
- skip "SSL enabled"
100
- end
101
- end
102
- end
103
2
 
3
+ # Some tests hardcode the TLS certificates shipped with the driver's
4
+ # test suite, and will fail when using TLS connections that use other
5
+ # certificates.
104
6
  def require_local_tls
105
7
  require_tls
106
- end
107
-
108
- def require_no_retry_writes
109
- before(:all) do
110
- if SpecConfig.instance.retry_writes?
111
- skip "Retry writes is enabled"
112
- end
113
- end
114
- end
115
8
 
116
- def require_compression
117
9
  before(:all) do
118
- if SpecConfig.instance.compressors.nil?
119
- skip "Compression is not enabled"
120
- end
121
- end
122
- end
123
-
124
- def require_no_compression
125
- before(:all) do
126
- if SpecConfig.instance.compressors
127
- skip "Compression is enabled"
128
- end
129
- end
130
- end
131
-
132
- def ruby_version_gte(version)
133
- before(:all) do
134
- if RUBY_VERSION < version
135
- skip "Ruby version #{version} or higher required"
136
- end
137
- end
138
- end
139
-
140
- def ruby_version_lt(version)
141
- before(:all) do
142
- if RUBY_VERSION >= version
143
- skip "Ruby version less than #{version} required"
144
- end
145
- end
146
- end
147
-
148
- def require_auth(*values)
149
- before(:all) do
150
- if values.any?
151
- unless values.include?(ENV['AUTH'])
152
- msg = values.map { |v| "AUTH=#{v}" }.join(' or ')
153
- skip "This test requires #{msg}"
154
- end
155
- else
156
- unless ENV['AUTH'] == 'auth' || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
157
- skip "Auth required"
158
- end
159
- end
160
- end
161
- end
162
-
163
- def require_no_auth
164
- before(:all) do
165
- if (ENV['AUTH'] && ENV['AUTH'] != 'noauth') || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
166
- skip "Auth not allowed"
167
- end
168
- end
169
- end
170
-
171
- def require_x509_auth
172
- before(:all) do
173
- unless SpecConfig.instance.x509_auth?
174
- skip "X.509 auth required"
175
- end
176
- end
177
- end
178
-
179
- def require_no_external_user
180
- before(:all) do
181
- if SpecConfig.instance.external_user?
182
- skip "External user configurations are not compatible with this test"
183
- end
184
- end
185
- end
186
-
187
- # Can the driver specify a write concern that won't be overridden?
188
- # (mongos 4.0+ overrides the write concern)
189
- def require_set_write_concern
190
- before(:all) do
191
- if ClusterConfig.instance.topology == :sharded && ClusterConfig.instance.short_server_version >= '4.0'
192
- skip "mongos 4.0+ overrides write concern"
193
- end
194
- end
195
- end
196
-
197
- def require_multi_shard
198
- before(:all) do
199
- if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length == 1
200
- skip 'Test requires a minimum of two shards if run in sharded topology'
201
- end
202
- end
203
- end
204
-
205
- def require_no_multi_shard
206
- before(:all) do
207
- if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length > 1
208
- skip 'Test requires a single shard if run in sharded topology'
209
- end
210
- end
211
- end
212
-
213
- def require_wired_tiger
214
- before(:all) do
215
- if ClusterConfig.instance.storage_engine != :wired_tiger
216
- skip 'Test requires WiredTiger storage engine'
217
- end
218
- end
219
- end
220
-
221
- def require_wired_tiger_on_36
222
- before(:all) do
223
- if ClusterConfig.instance.short_server_version >= '3.6'
224
- if ClusterConfig.instance.storage_engine != :wired_tiger
225
- skip 'Test requires WiredTiger storage engine on 3.6+ servers'
226
- end
227
- end
228
- end
229
- end
230
-
231
- def require_mmapv1
232
- before(:all) do
233
- if ClusterConfig.instance.storage_engine != :mmapv1
234
- skip 'Test requires MMAPv1 storage engine'
235
- end
236
- end
237
- end
238
-
239
- def require_enterprise
240
- before(:all) do
241
- unless ClusterConfig.instance.enterprise?
242
- skip 'Test requires enterprise build of MongoDB'
243
- end
244
- end
245
- end
246
-
247
- # Integration tests for SRV polling require internet connectivity to
248
- # look up SRV records and a sharded cluster configured on default port on
249
- # localhost (localhost:27017, localhost:27018).
250
- def require_default_port_deployment
251
- # Because the DNS records at test1.test.build.10gen.cc point to
252
- # localhost:27017 & localhost:27018, the test suite must have been
253
- # configured to use these addresses
254
- before(:all) do
255
- have_default_port = SpecConfig.instance.addresses.any? do |address|
256
- %w(127.0.0.1 127.0.0.1:27017 localhost localhost:27017).include?(address)
257
- end
258
- unless have_default_port
259
- skip 'This test requires the test suite to be configured for localhost:27017'
10
+ # TODO This isn't actually the foolproof check
11
+ if ENV['OCSP_ALGORITHM']
12
+ skip 'Driver TLS certificate required, OCSP certificates are not acceptable'
260
13
  end
261
14
  end
262
15
  end