mongo 2.13.3 → 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 (197) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/mongo/address/ipv4.rb +1 -1
  4. data/lib/mongo/address/ipv6.rb +1 -1
  5. data/lib/mongo/address.rb +1 -1
  6. data/lib/mongo/bulk_write.rb +17 -0
  7. data/lib/mongo/caching_cursor.rb +74 -0
  8. data/lib/mongo/client.rb +47 -8
  9. data/lib/mongo/cluster/topology/single.rb +1 -1
  10. data/lib/mongo/cluster.rb +3 -3
  11. data/lib/mongo/collection/view/aggregation.rb +25 -4
  12. data/lib/mongo/collection/view/builder/find_command.rb +38 -18
  13. data/lib/mongo/collection/view/explainable.rb +27 -8
  14. data/lib/mongo/collection/view/iterable.rb +72 -12
  15. data/lib/mongo/collection/view/readable.rb +12 -2
  16. data/lib/mongo/collection/view/writable.rb +15 -1
  17. data/lib/mongo/collection/view.rb +24 -20
  18. data/lib/mongo/collection.rb +26 -2
  19. data/lib/mongo/crypt/encryption_io.rb +6 -6
  20. data/lib/mongo/cursor.rb +1 -0
  21. data/lib/mongo/database/view.rb +1 -1
  22. data/lib/mongo/database.rb +8 -14
  23. data/lib/mongo/error/invalid_read_concern.rb +28 -0
  24. data/lib/mongo/error/server_certificate_revoked.rb +22 -0
  25. data/lib/mongo/error/unsupported_option.rb +14 -12
  26. data/lib/mongo/error.rb +2 -0
  27. data/lib/mongo/grid/fs_bucket.rb +37 -37
  28. data/lib/mongo/lint.rb +2 -1
  29. data/lib/mongo/logger.rb +3 -3
  30. data/lib/mongo/operation/aggregate/result.rb +9 -8
  31. data/lib/mongo/operation/collections_info/command.rb +0 -5
  32. data/lib/mongo/operation/collections_info/result.rb +3 -16
  33. data/lib/mongo/operation/delete/bulk_result.rb +2 -0
  34. data/lib/mongo/operation/delete/result.rb +3 -0
  35. data/lib/mongo/operation/explain/command.rb +4 -0
  36. data/lib/mongo/operation/explain/legacy.rb +4 -0
  37. data/lib/mongo/operation/explain/op_msg.rb +6 -0
  38. data/lib/mongo/operation/explain/result.rb +3 -0
  39. data/lib/mongo/operation/find/legacy/result.rb +2 -0
  40. data/lib/mongo/operation/find/result.rb +3 -0
  41. data/lib/mongo/operation/get_more/result.rb +3 -0
  42. data/lib/mongo/operation/indexes/result.rb +5 -0
  43. data/lib/mongo/operation/insert/bulk_result.rb +5 -0
  44. data/lib/mongo/operation/insert/result.rb +5 -0
  45. data/lib/mongo/operation/list_collections/result.rb +5 -0
  46. data/lib/mongo/operation/map_reduce/result.rb +10 -0
  47. data/lib/mongo/operation/parallel_scan/command.rb +2 -1
  48. data/lib/mongo/operation/parallel_scan/result.rb +4 -0
  49. data/lib/mongo/operation/result.rb +35 -6
  50. data/lib/mongo/operation/shared/bypass_document_validation.rb +1 -0
  51. data/lib/mongo/operation/shared/causal_consistency_supported.rb +1 -0
  52. data/lib/mongo/operation/shared/collections_info_or_list_collections.rb +2 -0
  53. data/lib/mongo/operation/shared/executable.rb +1 -0
  54. data/lib/mongo/operation/shared/idable.rb +2 -1
  55. data/lib/mongo/operation/shared/limited.rb +1 -0
  56. data/lib/mongo/operation/shared/object_id_generator.rb +1 -0
  57. data/lib/mongo/operation/shared/read_preference_supported.rb +36 -38
  58. data/lib/mongo/operation/shared/result/aggregatable.rb +1 -0
  59. data/lib/mongo/operation/shared/sessions_supported.rb +3 -3
  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/operation.rb +2 -0
  67. data/lib/mongo/protocol/msg.rb +2 -2
  68. data/lib/mongo/protocol/query.rb +11 -11
  69. data/lib/mongo/query_cache.rb +242 -0
  70. data/lib/mongo/retryable.rb +8 -1
  71. data/lib/mongo/server/connection_common.rb +2 -2
  72. data/lib/mongo/server/connection_pool.rb +3 -0
  73. data/lib/mongo/server/monitor/connection.rb +3 -3
  74. data/lib/mongo/server/monitor.rb +1 -1
  75. data/lib/mongo/server/pending_connection.rb +2 -2
  76. data/lib/mongo/server/push_monitor.rb +1 -1
  77. data/lib/mongo/server.rb +5 -1
  78. data/lib/mongo/server_selector/base.rb +5 -1
  79. data/lib/mongo/server_selector/secondary_preferred.rb +7 -2
  80. data/lib/mongo/session.rb +3 -0
  81. data/lib/mongo/socket/ocsp_cache.rb +97 -0
  82. data/lib/mongo/socket/ocsp_verifier.rb +368 -0
  83. data/lib/mongo/socket/ssl.rb +45 -24
  84. data/lib/mongo/socket.rb +6 -4
  85. data/lib/mongo/srv/monitor.rb +7 -13
  86. data/lib/mongo/srv/resolver.rb +14 -10
  87. data/lib/mongo/timeout.rb +2 -0
  88. data/lib/mongo/uri/options_mapper.rb +582 -0
  89. data/lib/mongo/uri/srv_protocol.rb +3 -2
  90. data/lib/mongo/uri.rb +21 -390
  91. data/lib/mongo/utils.rb +12 -1
  92. data/lib/mongo/version.rb +1 -1
  93. data/lib/mongo.rb +9 -0
  94. data/spec/NOTES.aws-auth.md +12 -7
  95. data/spec/README.md +56 -1
  96. data/spec/integration/bson_symbol_spec.rb +2 -4
  97. data/spec/integration/bulk_write_spec.rb +48 -0
  98. data/spec/integration/client_authentication_options_spec.rb +55 -28
  99. data/spec/integration/connection_pool_populator_spec.rb +3 -1
  100. data/spec/integration/cursor_reaping_spec.rb +53 -17
  101. data/spec/integration/ocsp_connectivity_spec.rb +26 -0
  102. data/spec/integration/ocsp_verifier_cache_spec.rb +188 -0
  103. data/spec/integration/ocsp_verifier_spec.rb +334 -0
  104. data/spec/integration/query_cache_spec.rb +1045 -0
  105. data/spec/integration/query_cache_transactions_spec.rb +179 -0
  106. data/spec/integration/retryable_writes/retryable_writes_40_and_newer_spec.rb +1 -0
  107. data/spec/integration/retryable_writes/shared/performs_legacy_retries.rb +2 -0
  108. data/spec/integration/sdam_error_handling_spec.rb +69 -18
  109. data/spec/integration/sdam_events_spec.rb +7 -8
  110. data/spec/integration/server_selection_spec.rb +36 -0
  111. data/spec/integration/srv_monitoring_spec.rb +38 -3
  112. data/spec/integration/srv_spec.rb +56 -0
  113. data/spec/lite_spec_helper.rb +4 -2
  114. data/spec/mongo/address_spec.rb +1 -1
  115. data/spec/mongo/caching_cursor_spec.rb +70 -0
  116. data/spec/mongo/client_construction_spec.rb +54 -1
  117. data/spec/mongo/client_encryption_spec.rb +10 -16
  118. data/spec/mongo/client_spec.rb +40 -0
  119. data/spec/mongo/cluster/topology/single_spec.rb +14 -5
  120. data/spec/mongo/cluster_spec.rb +3 -0
  121. data/spec/mongo/collection/view/explainable_spec.rb +87 -4
  122. data/spec/mongo/collection/view/map_reduce_spec.rb +2 -0
  123. data/spec/mongo/collection_spec.rb +60 -0
  124. data/spec/mongo/crypt/auto_decryption_context_spec.rb +1 -1
  125. data/spec/mongo/crypt/auto_encryption_context_spec.rb +1 -1
  126. data/spec/mongo/crypt/data_key_context_spec.rb +1 -1
  127. data/spec/mongo/crypt/explicit_decryption_context_spec.rb +1 -1
  128. data/spec/mongo/crypt/explicit_encryption_context_spec.rb +1 -1
  129. data/spec/mongo/database_spec.rb +44 -64
  130. data/spec/mongo/error/no_server_available_spec.rb +1 -1
  131. data/spec/mongo/index/view_spec.rb +2 -4
  132. data/spec/mongo/logger_spec.rb +13 -11
  133. data/spec/mongo/operation/read_preference_legacy_spec.rb +19 -9
  134. data/spec/mongo/operation/read_preference_op_msg_spec.rb +3 -3
  135. data/spec/mongo/query_cache_spec.rb +279 -0
  136. data/spec/mongo/server/app_metadata_shared.rb +7 -33
  137. data/spec/mongo/server/connection_pool_spec.rb +7 -3
  138. data/spec/mongo/server/connection_spec.rb +14 -7
  139. data/spec/mongo/server_selector/secondary_preferred_spec.rb +6 -6
  140. data/spec/mongo/socket/ssl_spec.rb +1 -1
  141. data/spec/mongo/socket_spec.rb +1 -1
  142. data/spec/mongo/uri/srv_protocol_spec.rb +64 -33
  143. data/spec/mongo/uri_option_parsing_spec.rb +11 -11
  144. data/spec/mongo/uri_spec.rb +68 -41
  145. data/spec/mongo/utils_spec.rb +39 -0
  146. data/spec/runners/auth.rb +3 -0
  147. data/spec/runners/connection_string.rb +35 -124
  148. data/spec/runners/transactions/operation.rb +2 -13
  149. data/spec/spec_tests/cmap_spec.rb +7 -3
  150. data/spec/spec_tests/data/change_streams/change-streams-errors.yml +0 -1
  151. data/spec/spec_tests/data/change_streams/change-streams.yml +0 -1
  152. data/spec/spec_tests/data/cmap/pool-checkout-connection.yml +6 -2
  153. data/spec/spec_tests/data/cmap/pool-create-min-size.yml +3 -0
  154. data/spec/spec_tests/data/connection_string/valid-warnings.yml +24 -0
  155. data/spec/spec_tests/data/sdam_monitoring/discovered_standalone.yml +1 -3
  156. data/spec/spec_tests/data/sdam_monitoring/standalone.yml +2 -2
  157. data/spec/spec_tests/data/sdam_monitoring/standalone_repeated.yml +2 -2
  158. data/spec/spec_tests/data/sdam_monitoring/standalone_suppress_equal_description_changes.yml +2 -2
  159. data/spec/spec_tests/data/sdam_monitoring/standalone_to_rs_with_me_mismatch.yml +2 -2
  160. data/spec/spec_tests/data/uri_options/auth-options.yml +25 -0
  161. data/spec/spec_tests/data/uri_options/compression-options.yml +6 -3
  162. data/spec/spec_tests/data/uri_options/read-preference-options.yml +24 -0
  163. data/spec/spec_tests/data/uri_options/ruby-connection-options.yml +1 -0
  164. data/spec/spec_tests/data/uri_options/tls-options.yml +160 -4
  165. data/spec/spec_tests/dns_seedlist_discovery_spec.rb +9 -1
  166. data/spec/spec_tests/uri_options_spec.rb +31 -33
  167. data/spec/support/certificates/atlas-ocsp-ca.crt +28 -0
  168. data/spec/support/certificates/atlas-ocsp.crt +41 -0
  169. data/spec/support/client_registry.rb +4 -8
  170. data/spec/support/client_registry_macros.rb +4 -4
  171. data/spec/support/common_shortcuts.rb +45 -0
  172. data/spec/support/constraints.rb +23 -0
  173. data/spec/support/lite_constraints.rb +24 -0
  174. data/spec/support/matchers.rb +16 -0
  175. data/spec/support/ocsp +1 -0
  176. data/spec/support/session_registry.rb +52 -0
  177. data/spec/support/spec_config.rb +22 -12
  178. data/spec/support/spec_setup.rb +38 -48
  179. data/spec/support/utils.rb +19 -1
  180. data.tar.gz.sig +1 -3
  181. metadata +938 -933
  182. metadata.gz.sig +0 -0
  183. data/spec/integration/secondary_reads_spec.rb +0 -102
  184. data/spec/shared/LICENSE +0 -20
  185. data/spec/shared/bin/get-mongodb-download-url +0 -17
  186. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  187. data/spec/shared/lib/mrss/cluster_config.rb +0 -221
  188. data/spec/shared/lib/mrss/constraints.rb +0 -346
  189. data/spec/shared/lib/mrss/docker_runner.rb +0 -265
  190. data/spec/shared/lib/mrss/lite_constraints.rb +0 -191
  191. data/spec/shared/lib/mrss/server_version_registry.rb +0 -115
  192. data/spec/shared/lib/mrss/spec_organizer.rb +0 -152
  193. data/spec/shared/lib/mrss/utils.rb +0 -15
  194. data/spec/shared/share/Dockerfile.erb +0 -231
  195. data/spec/shared/shlib/distro.sh +0 -73
  196. data/spec/shared/shlib/server.sh +0 -290
  197. data/spec/shared/shlib/set_env.sh +0 -128
@@ -1,191 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- module Mrss
5
- module LiteConstraints
6
-
7
- # Constrain tests that use TimeoutInterrupt to MRI (and Unix).
8
- def require_mri
9
- before(:all) do
10
- unless SpecConfig.instance.mri?
11
- skip "MRI required, we have #{SpecConfig.instance.platform}"
12
- end
13
- end
14
- end
15
-
16
- def require_jruby
17
- before(:all) do
18
- unless BSON::Environment.jruby?
19
- skip "JRuby required, we have #{SpecConfig.instance.platform}"
20
- end
21
- end
22
- end
23
-
24
- # This is for marking tests that fail on JRuby that should
25
- # in principle work (as opposed to being fundamentally incompatible
26
- # with JRuby).
27
- # Often times these failures happen only in Evergreen.
28
- def fails_on_jruby(version=nil)
29
- before(:all) do
30
- if BSON::Environment.jruby?
31
- if version
32
- min_parts = version.split('.').map(&:to_i)
33
- actual_parts = JRUBY_VERSION.split('.').map(&:to_i)[0...min_parts.length]
34
- actual = actual_parts.join('.')
35
- if actual <= version
36
- skip "Fails on jruby through #{version}"
37
- end
38
- else
39
- skip "Fails on jruby"
40
- end
41
- end
42
- end
43
- end
44
-
45
- # Indicates that the respective test uses the internet in some capacity,
46
- # for example the test resolves SRV DNS records.
47
- def require_external_connectivity
48
- before(:all) do
49
- if ENV['EXTERNAL_DISABLED']
50
- skip "Test requires external connectivity"
51
- end
52
- end
53
- end
54
-
55
- def require_mongo_kerberos
56
- before(:all) do
57
- # TODO Use a more generic environment variable name if/when
58
- # Mongoid tests get Kerberos configurations.
59
- unless %w(1 yes true).include?(ENV['MONGO_RUBY_DRIVER_KERBEROS']&.downcase)
60
- skip 'Set MONGO_RUBY_DRIVER_KERBEROS=1 in environment to run Kerberos unit tests'
61
- end
62
- require 'mongo_kerberos'
63
- end
64
- end
65
-
66
- def require_linting
67
- before(:all) do
68
- unless Mongo::Lint.enabled?
69
- skip "Linting is not enabled"
70
- end
71
- end
72
- end
73
-
74
- # Some tests will fail if linting is enabled:
75
- # 1. Tests that pass invalid options to client, etc. which the linter
76
- # rejects.
77
- # 2. Tests that set expectations on topologies, server descriptions, etc.
78
- # (since setting expectations requires mutating said objects, and when
79
- # linting is on those objects are frozen).
80
- def require_no_linting
81
- before(:all) do
82
- if Mongo::Lint.enabled?
83
- skip "Linting is enabled"
84
- end
85
- end
86
- end
87
-
88
- def require_libmongocrypt
89
- before(:all) do
90
- unless ENV['LIBMONGOCRYPT_PATH']
91
- skip 'Test requires path to libmongocrypt to be specified in LIBMONGOCRYPT_PATH env variable'
92
- end
93
- end
94
- end
95
-
96
- def require_no_libmongocrypt
97
- before(:all) do
98
- if ENV['LIBMONGOCRYPT_PATH']
99
- skip 'Test requires libmongocrypt to not be configured'
100
- end
101
- end
102
- end
103
-
104
- def require_aws_auth
105
- before(:all) do
106
- unless (ENV['AUTH'] || '') =~ /^aws/
107
- skip 'This test requires AUTH=aws* and an appropriately configured runtime environment'
108
- end
109
- end
110
- end
111
-
112
- def require_ec2_host
113
- before(:all) do
114
- if $have_aws.nil?
115
- $have_aws = begin
116
- require 'open-uri'
117
- begin
118
- Timeout.timeout(3.81) do
119
- URI.parse('http://169.254.169.254/latest/meta-data/profile').open.read
120
- end
121
- true
122
- # When trying to use the EC2 metadata endpoint on ECS:
123
- # Errno::EINVAL: Failed to open TCP connection to 169.254.169.254:80 (Invalid argument - connect(2) for "169.254.169.254" port 80)
124
- rescue Timeout::Error, Errno::ETIMEDOUT, Errno::EINVAL, OpenURI::HTTPError => $aws_error
125
- false
126
- end
127
- end
128
- end
129
- unless $have_aws
130
- skip "EC2 instance metadata is not available - assuming not running on an EC2 instance: #{$aws_error.class}: #{$aws_error}"
131
- end
132
- end
133
- end
134
-
135
- def require_stress
136
- before(:all) do
137
- if !SpecConfig.instance.stress?
138
- skip 'Set STRESS=1 in environment to run stress tests'
139
- end
140
- end
141
- end
142
-
143
- def require_fork
144
- before(:all) do
145
- if !SpecConfig.instance.fork?
146
- skip 'Set FORK=1 in environment to run fork tests'
147
- end
148
- end
149
- end
150
-
151
- def require_ocsp
152
- before(:all) do
153
- if !SpecConfig.instance.ocsp?
154
- skip 'Set OCSP=1 in environment to run OCSP tests'
155
- end
156
- end
157
- end
158
-
159
- def require_ocsp_verifier
160
- before(:all) do
161
- if !SpecConfig.instance.ocsp_verifier?
162
- skip 'Set OCSP_VERIFIER=1 in environment to run OCSP verifier tests'
163
- end
164
- end
165
- end
166
-
167
- def require_ocsp_connectivity
168
- before(:all) do
169
- if !SpecConfig.instance.ocsp_connectivity?
170
- skip 'Set OCSP_CONNECTIVITY=pass or OCSP_CONNECTIVITY=fail in environment to run OCSP connectivity tests'
171
- end
172
- end
173
- end
174
-
175
- def require_active_support
176
- before(:all) do
177
- if !SpecConfig.instance.active_support?
178
- skip 'This test requires ActiveSupport; set WITH_ACTIVE_SUPPORT=1 in environment'
179
- end
180
- end
181
- end
182
-
183
- def no_active_support
184
- before(:all) do
185
- if SpecConfig.instance.active_support?
186
- skip 'This test requires no ActiveSupport; unset WITH_ACTIVE_SUPPORT in environment'
187
- end
188
- end
189
- end
190
- end
191
- end
@@ -1,115 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- autoload :JSON, 'json'
5
- require 'open-uri'
6
-
7
- module Mrss
8
- class ServerVersionRegistry
9
- class Error < StandardError
10
- end
11
-
12
- class UnknownVersion < Error
13
- end
14
-
15
- class MissingDownloadUrl < Error
16
- end
17
-
18
- class BrokenDownloadUrl < Error
19
- end
20
-
21
- def initialize(desired_version, arch)
22
- @desired_version, @arch = desired_version, arch
23
- end
24
-
25
- attr_reader :desired_version, :arch
26
-
27
- def download_url
28
- @download_url ||= begin
29
- version, version_ok = detect_version(current_catalog)
30
- if version.nil?
31
- version, full_version_ok = detect_version(full_catalog)
32
- version_ok ||= full_version_ok
33
- end
34
- if version.nil?
35
- if version_ok
36
- raise MissingDownloadUrl, "No downloads for version #{desired_version}"
37
- else
38
- raise UnknownVersion, "No version #{desired_version}"
39
- end
40
- end
41
- dl = version['downloads'].detect do |dl|
42
- dl['archive']['url'].index("enterprise-#{arch}") &&
43
- dl['arch'] == 'x86_64'
44
- end
45
- unless dl
46
- raise MissingDownloadUrl, "No download for #{arch} for #{version['version']}"
47
- end
48
- url = dl['archive']['url']
49
- end
50
- rescue MissingDownloadUrl
51
- if %w(4.7 4.7.0).include?(desired_version)
52
- # 4.7.0 has no advertised downloads but it is downloadable and
53
- # we do need it. Dirty hack below.
54
- registry = self.class.new('4.4.3', arch)
55
- registry.download_url.sub('4.4.3', '4.7.0').tap do |url|
56
- # Sanity check - ensure the URL we hacked up is a valid one
57
- io = uri_open(url)
58
- begin
59
- io.read(1)
60
- ensure
61
- io.close
62
- end
63
- end
64
- else
65
- raise
66
- end
67
- end
68
-
69
- private
70
-
71
- def uri_open(*args)
72
- if RUBY_VERSION < '2.5'
73
- open(*args)
74
- else
75
- URI.open(*args)
76
- end
77
- end
78
-
79
- def detect_version(catalog)
80
- candidate_versions = catalog['versions'].select do |version|
81
- version['version'].start_with?(desired_version) &&
82
- !version['version'].include?('-')
83
- end
84
- version_ok = !candidate_versions.empty?
85
- # Sometimes the download situation is borked and there is a release
86
- # with no downloads... skip those.
87
- version = candidate_versions.detect do |version|
88
- !version['downloads'].empty?
89
- end
90
- # Allow RC releases if there isn't a GA release.
91
- if version.nil?
92
- candidate_versions = catalog['versions'].select do |version|
93
- version['version'].start_with?(desired_version)
94
- end
95
- version_ok ||= !candidate_versions.empty?
96
- version = candidate_versions.detect do |version|
97
- !version['downloads'].empty?
98
- end
99
- end
100
- [version, version_ok]
101
- end
102
-
103
- def current_catalog
104
- @current_catalog ||= begin
105
- JSON.load(uri_open('http://downloads.mongodb.org/current.json').read)
106
- end
107
- end
108
-
109
- def full_catalog
110
- @full_catalog ||= begin
111
- JSON.load(uri_open('http://downloads.mongodb.org/full.json').read)
112
- end
113
- end
114
- end
115
- end
@@ -1,152 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- autoload :JSON, 'json'
5
- autoload :FileUtils, 'fileutils'
6
- autoload :Find, 'find'
7
-
8
- module Mrss
9
-
10
- autoload :ChildProcessHelper, 'mrss/child_process_helper'
11
-
12
- # Organizes and runs all of the tests in the test suite in batches.
13
- #
14
- # Organizing the tests in batches serves two purposes:
15
- #
16
- # 1. This allows running unit tests before integration tests, therefore
17
- # in theory revealing failures quicker on average.
18
- # 2. This allows running some tests that have high intermittent failure rate
19
- # in their own test process.
20
- #
21
- # This class aggregates RSpec results after the test runs.
22
- class SpecOrganizer
23
-
24
- class BucketsNotPrioritized < StandardError
25
- end
26
-
27
- def initialize(root: nil, classifiers:, priority_order:,
28
- spec_root: nil, rspec_json_path: nil, rspec_all_json_path: nil
29
- )
30
- @spec_root = spec_root || File.join(root, 'spec')
31
- @classifiers = classifiers
32
- @priority_order = priority_order
33
- @rspec_json_path = rspec_json_path || File.join(root, 'tmp/rspec.json')
34
- @rspec_all_json_path = rspec_all_json_path || File.join(root, 'tmp/rspec-all.json')
35
- end
36
-
37
- attr_reader :spec_root, :classifiers, :priority_order
38
- attr_reader :rspec_json_path, :rspec_all_json_path
39
-
40
- def buckets
41
- @buckets ||= {}.tap do |buckets|
42
- Find.find(spec_root) do |path|
43
- next unless File.file?(path)
44
- next unless path =~ /_spec\.rb\z/
45
- rel_path = path[(spec_root.length + 1)..path.length]
46
-
47
- found = false
48
- classifiers.each do |(regexp, category)|
49
- if regexp =~ rel_path
50
- buckets[category] ||= []
51
- buckets[category] << File.join('spec', rel_path)
52
- found = true
53
- break
54
- end
55
- end
56
-
57
- unless found
58
- buckets[nil] ||= []
59
- buckets[nil] << File.join('spec', rel_path)
60
- end
61
- end
62
- end.freeze
63
- end
64
-
65
- def ordered_buckets
66
- @ordered_buckets ||= {}.tap do |ordered_buckets|
67
- buckets = self.buckets.dup
68
- priority_order.each do |category|
69
- files = buckets.delete(category)
70
- ordered_buckets[category] = files
71
- end
72
-
73
- if files = buckets.delete(nil)
74
- ordered_buckets[nil] = files
75
- end
76
-
77
- unless buckets.empty?
78
- raise BucketsNotPrioritized, "Some buckets were not prioritized: #{buckets.keys.map(&:to_s).join(', ')}"
79
- end
80
- end.freeze
81
- end
82
-
83
- def run
84
- FileUtils.rm_f(rspec_all_json_path)
85
-
86
- failed = []
87
- buckets = self.buckets.dup
88
-
89
- priority_order.each do |category|
90
- if files = buckets.delete(category)
91
- unless run_files(category, files)
92
- failed << category
93
- end
94
- end
95
- end
96
- if files = buckets.delete(nil)
97
- unless run_files('remaining', files)
98
- failed << 'remaining'
99
- end
100
- end
101
-
102
- unless buckets.empty?
103
- raise "Some buckets were not executed: #{buckets.keys.map(&:to_s).join(', ')}"
104
- end
105
-
106
- if failed.any?
107
- raise "The following buckets failed: #{failed.map(&:to_s).join(', ')}"
108
- end
109
- end
110
-
111
- def run_files(category, paths)
112
- puts "Running #{category.to_s.gsub('_', ' ')} tests"
113
- FileUtils.rm_f(rspec_json_path)
114
- cmd = %w(rspec) + paths
115
-
116
- begin
117
- ChildProcessHelper.check_call(cmd)
118
- ensure
119
- if File.exist?(rspec_json_path)
120
- if File.exist?(rspec_all_json_path)
121
- merge_rspec_results
122
- else
123
- FileUtils.cp(rspec_json_path, rspec_all_json_path)
124
- end
125
- end
126
- end
127
-
128
- true
129
- rescue ChildProcessHelper::SpawnError
130
- false
131
- end
132
-
133
- def merge_rspec_results
134
- all = JSON.parse(File.read(rspec_all_json_path))
135
- new = JSON.parse(File.read(rspec_json_path))
136
- all['examples'] += new.delete('examples')
137
- new.delete('summary').each do |k, v|
138
- all['summary'][k] += v
139
- end
140
- new.delete('version')
141
- new.delete('summary_line')
142
- unless new.empty?
143
- raise "Unhandled rspec results keys: #{new.keys.join(', ')}"
144
- end
145
- # We do not merge summary lines, delete them from aggregated results
146
- all.delete('summary_line')
147
- File.open(rspec_all_json_path, 'w') do |f|
148
- f << JSON.dump(all)
149
- end
150
- end
151
- end
152
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- module Mrss
5
- module Utils
6
-
7
- module_function def print_backtrace(dest=STDERR)
8
- begin
9
- hello world
10
- rescue => e
11
- dest.puts e.backtrace.join("\n")
12
- end
13
- end
14
- end
15
- end
@@ -1,231 +0,0 @@
1
- # Python toolchain as of this writing is available on rhel62, debian92 and
2
- # ubuntu1604.
3
- #
4
- # To run rhel62 in docker, host system must be configured to emulate syscalls:
5
- # https://github.com/CentOS/sig-cloud-instance-images/issues/103
6
-
7
- <%
8
-
9
- python_toolchain_url = "https://s3.amazonaws.com//mciuploads/mongo-python-driver-toolchain/#{distro}/ba92de2700c04ee2d4f82c3ffdfc33105140cb04/mongo_python_driver_toolchain_#{distro.gsub('-', '_')}_ba92de2700c04ee2d4f82c3ffdfc33105140cb04_19_11_14_15_33_33.tar.gz"
10
- server_version = '4.3.3'
11
- server_url = "http://downloads.10gen.com/linux/mongodb-linux-x86_64-enterprise-#{distro}-#{server_version}.tgz"
12
- server_archive_basename = File.basename(server_url)
13
- server_extracted_dir = server_archive_basename.sub(/\.(tar\.gz|tgz)$/, '')
14
-
15
- toolchain_upper='291ba4a4e8297f142796e70eee71b99f333e35e1'
16
-
17
- ruby_toolchain_url = "http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/ruby-toolchain-#{distro}-#{toolchain_upper}.tar.xz"
18
- #ruby_toolchain_url = "https://s3.amazonaws.com//mciuploads/mongo-ruby-toolchain/#{distro}/#{toolchain_upper}/mongo_ruby_driver_toolchain_#{distro.gsub('-', '_')}_patch_#{toolchain_upper}_#{toolchain_lower}.tar.gz"
19
-
20
- %>
21
-
22
- FROM <%= base_image %>
23
-
24
- <% if debian? %>
25
-
26
- ENV DEBIAN_FRONTEND=noninteractive
27
-
28
- <% else %>
29
-
30
- RUN echo assumeyes=1 |tee -a /etc/yum.conf
31
-
32
- <% end %>
33
-
34
- <% if ruby_head? %>
35
-
36
- # To use current versions of mlaunch, Python 3.6+ is required.
37
- # Most distros ship with older Pythons, therefore we need to install
38
- # a newer Python from somewhere. This section installs the Python
39
- # toolhcain which comes with recent Pythons.
40
- # Alternatively, Ruby toolchain compiles its own copy of Python 3 but
41
- # this is currently incomplete in that on older distros with old OpenSSL,
42
- # the built Python has no ssl module and hence practically is unusable.
43
- # Currently Ruby driver uses mtools-legacy which supports Python 2,
44
- # avoiding this entire issue for the time being.
45
-
46
- #RUN curl --retry 3 -fL <%= python_toolchain_url %> -o python-toolchain.tar.gz
47
- #RUN tar -xC /opt -zf python-toolchain.tar.gz
48
-
49
- <% end %>
50
-
51
- <% if debian? %>
52
-
53
- # zsh is not required for any scripts but it is a better interactive shell
54
- # than bash.
55
- # Ruby runtime dependencies: libyaml-0-2
56
- # Compiling ruby libraries: gcc make
57
- # Compiling pyhton packages: python2.7-dev
58
- # JRuby: openjdk-8-jre-headless
59
- # Server dependencies: libsnmp30 libcurl3/libcurl4
60
- # Determining OS we are running on: lsb-release
61
- # Kerberos testing: krb5-user
62
- # Local Kerberos server: krb5-kdc krb5-admin-server
63
- # Installing mlaunch from git: git
64
- # ruby-head archive: bzip2
65
- # nio4r on JRuby: libgmp-dev
66
- # Snappy compression: libsnappy-dev
67
- # nokogiri: zlib1g-dev
68
- # Mongoid testing: tzdata
69
- # Mongoid application testing: nodejs (8.x or newer)
70
- #
71
- # We currently use Python 2-compatible version of mtools, which
72
- # is installable via pip (which uses Python 2). All of the MongoDB
73
- # distros have pip installed (but none as of this writing have pip3)
74
- # therefore install python-pip in all configurations here.
75
-
76
- <% packages = %w(
77
- lsb-release bzip2 curl zsh
78
- git make gcc libyaml-0-2 libgmp-dev zlib1g-dev libsnappy-dev
79
- libsnmp30
80
- krb5-user krb5-kdc krb5-admin-server libsasl2-dev libsasl2-modules-gssapi-mit
81
- python-pip python2.7-dev python3-pip
82
- tzdata
83
- ) %>
84
-
85
- # ubuntu1404 only has openjdk-7-jre-headless
86
- <% if distro !~ /ubuntu1404/ %>
87
- <% packages << 'openjdk-8-jre-headless' %>
88
- <% end %>
89
-
90
- # ubuntu1404, ubuntu1604: libcurl3
91
- # ubuntu1804: libcurl4
92
- <% if distro =~ /ubuntu1804/ %>
93
- <% packages << 'libcurl4' %>
94
- <% else %>
95
- <% packages << 'libcurl3' %>
96
- <% end %>
97
-
98
- <% if distro =~ /ubuntu1804/ %>
99
- <% packages << 'nodejs' %>
100
- <% end %>
101
-
102
- RUN apt-get update && apt-get install -y <%= packages.join(' ') %>
103
- <% else %>
104
-
105
- # Enterprise server: net-snmp
106
- # lsb_release: redhat-lsb-core
107
- # our runner scripts: which
108
- # Ruby dependency: libyaml
109
- # compiling python packages: gcc python-devel
110
- # Kerberos tests: krb5-workstation + cyrus-sasl-devel to build the
111
- # mongo_kerberos gem + cyrus-sasl-gssapi for authentication to work
112
- # Local Kerberos server: krb5-server
113
- # JRuby: java-1.8.0-openjdk
114
- #
115
- # Note: lacking cyrus-sasl-gssapi produces a cryptic message
116
- # "SASL(-4): no mechanism available: No worthy mechs found"
117
- # https://github.com/farorm/python-ad/issues/10
118
-
119
- RUN yum install -y redhat-lsb-core which git gcc libyaml krb5-server \
120
- krb5-workstation cyrus-sasl-devel cyrus-sasl-gssapi java-1.8.0-openjdk \
121
- net-snmp
122
-
123
- <% if distro =~ /rhel6/ %>
124
-
125
- # RHEL 6 ships with Python 2.6.
126
-
127
- RUN yum install -y centos-release-scl && \
128
- yum install -y python27-python python27-python-devel
129
- ENV PATH=/opt/rh/python27/root/usr/bin:$PATH \
130
- LD_LIBRARY_PATH=/opt/rh/python27/root/usr/lib64
131
-
132
- <% else %>
133
-
134
- RUN yum install -y python-devel
135
-
136
- <% end %>
137
-
138
- <% end %>
139
-
140
- <% if preload? %>
141
-
142
- # Current virtualenv fails with
143
- # https://github.com/pypa/virtualenv/issues/1630
144
- RUN python2 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
145
-
146
- RUN pip --version && \
147
- pip install mtools-legacy[mlaunch]
148
-
149
- <% if @env.fetch('MONGODB_VERSION') >= '4.4' %>
150
- RUN python3 -mpip install asn1crypto oscrypto flask
151
- <% end %>
152
-
153
- <% unless ruby_head? %>
154
-
155
- RUN curl --retry 3 -fL <%= ruby_toolchain_url %> |tar -xC /opt -Jf -
156
- ENV PATH=/opt/rubies/<%= ruby %>/bin:$PATH \
157
- USE_OPT_TOOLCHAIN=1
158
- #ENV PATH=/opt/rubies/python/3/bin:$PATH
159
-
160
- <% end %>
161
-
162
- <% if distro =~ /rhel|ubuntu1604/ %>
163
-
164
- # Ubuntu 12.04 ships pip 1.0 which is ancient and does not work.
165
- #
166
- # Ubuntu 16.04 apparently also ships a pip that does not work:
167
- # https://stackoverflow.com/questions/37495375/python-pip-install-throws-typeerror-unsupported-operand-types-for-retry
168
- # Potentially this only affects environments with less than ideal
169
- # connectivity (or, perhaps, when python package registry is experiencing
170
- # availability issues) when pip must retry to install packages.
171
- #
172
- # rhel apparently does not package pip at all in core repoitories,
173
- # therefore install it the manual way.
174
- #
175
- # https://pip.pypa.io/en/stable/installing/
176
- RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/2.7/get-pip.py | python
177
-
178
- <% end %>
179
-
180
- RUN curl --retry 3 -fL <%= server_download_url %> |tar xzf - && \
181
- mv mongo*/ /opt/mongodb
182
- ENV USE_OPT_MONGODB=1 USE_SYSTEM_PYTHON_PACKAGES=1
183
-
184
- <% end %>
185
-
186
- WORKDIR /app
187
-
188
- <% if preload? && !ruby_head? %>
189
-
190
- COPY Gemfile .
191
- COPY gemfiles gemfiles
192
- COPY *.gemspec .
193
- COPY lib/<%= project_lib_subdir %>/version.rb lib/<%= project_lib_subdir %>/version.rb
194
- RUN bundle install
195
- COPY .evergreen/patch-debuggers .evergreen/patch-debuggers
196
- RUN .evergreen/patch-debuggers /opt/rubies
197
-
198
- <% end %>
199
-
200
- <% if fle? %>
201
- RUN curl --retry 3 -fLo libmongocrypt-all.tar.gz "https://s3.amazonaws.com/mciuploads/libmongocrypt/all/master/latest/libmongocrypt-all.tar.gz"
202
- RUN tar xf libmongocrypt-all.tar.gz
203
-
204
- <%= "ENV LIBMONGOCRYPT_PATH #{libmongocrypt_path}" %>
205
- <% end %>
206
-
207
- ENV MONGO_ORCHESTRATION_HOME=/tmpfs \
208
- PROJECT_DIRECTORY=/app \
209
- <%= @env.map { |k, v| %Q`#{k}="#{v.gsub('$', "\\$").gsub('"', "\\\"")}"` }.join(" \\\n ") %>
210
-
211
- <% if interactive? %>
212
- ENV INTERACTIVE=1
213
- <% end %>
214
-
215
- COPY . .
216
-
217
- <% if expose? %>
218
-
219
- <% ports = [] %>
220
-
221
- <% 0.upto(num_exposed_ports-1) do |i| %>
222
- <% ports << 27017 + i %>
223
- <% end %>
224
-
225
- <% if @env['OCSP_ALGORITHM'] %>
226
- <% ports << 8100 %>
227
- <% end %>
228
-
229
- EXPOSE <%= ports.map(&:to_s).join(' ') %>
230
-
231
- <% end %>