mongoid 7.2.6 → 7.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.md +1 -1
- data/Rakefile +16 -0
- data/lib/config/locales/en.yml +2 -15
- data/lib/mongoid/association/accessors.rb +1 -1
- data/lib/mongoid/association/constrainable.rb +1 -1
- data/lib/mongoid/association/depending.rb +4 -4
- data/lib/mongoid/association/embedded/batchable.rb +1 -1
- data/lib/mongoid/association/embedded/embedded_in.rb +1 -1
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +11 -4
- data/lib/mongoid/association/nested/many.rb +1 -1
- data/lib/mongoid/association/nested/one.rb +4 -2
- data/lib/mongoid/association/proxy.rb +7 -2
- data/lib/mongoid/association/referenced/auto_save.rb +2 -2
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +493 -495
- data/lib/mongoid/association/referenced/has_many/proxy.rb +3 -3
- data/lib/mongoid/association/referenced/has_one/nested_builder.rb +2 -2
- data/lib/mongoid/association/relatable.rb +0 -2
- data/lib/mongoid/attributes/projector.rb +120 -0
- data/lib/mongoid/attributes.rb +24 -13
- data/lib/mongoid/cacheable.rb +2 -2
- data/lib/mongoid/clients/factory.rb +22 -8
- data/lib/mongoid/clients.rb +1 -1
- data/lib/mongoid/config/environment.rb +1 -9
- data/lib/mongoid/config.rb +19 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +10 -8
- data/lib/mongoid/contextual/atomic.rb +2 -7
- data/lib/mongoid/contextual/none.rb +0 -3
- data/lib/mongoid/copyable.rb +1 -1
- data/lib/mongoid/criteria/findable.rb +1 -1
- data/lib/mongoid/criteria/queryable/expandable.rb +0 -24
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
- data/lib/mongoid/criteria/queryable/extensions.rb +0 -4
- data/lib/mongoid/criteria/queryable/mergeable.rb +46 -20
- data/lib/mongoid/criteria/queryable/selectable.rb +10 -10
- data/lib/mongoid/criteria/queryable/storable.rb +4 -4
- data/lib/mongoid/criteria.rb +5 -6
- data/lib/mongoid/document.rb +3 -18
- data/lib/mongoid/errors/delete_restriction.rb +8 -9
- data/lib/mongoid/errors/mongoid_error.rb +1 -1
- data/lib/mongoid/errors.rb +0 -2
- data/lib/mongoid/evolvable.rb +1 -1
- data/lib/mongoid/extensions/boolean.rb +1 -2
- data/lib/mongoid/extensions/false_class.rb +1 -1
- data/lib/mongoid/extensions/hash.rb +2 -2
- data/lib/mongoid/extensions/true_class.rb +1 -1
- data/lib/mongoid/fields.rb +43 -5
- data/lib/mongoid/inspectable.rb +1 -1
- data/lib/mongoid/interceptable.rb +1 -1
- data/lib/mongoid/matcher/bits.rb +41 -0
- data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_all_set.rb +20 -0
- data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
- data/lib/mongoid/matcher/bits_any_set.rb +20 -0
- data/lib/mongoid/matcher/expression.rb +4 -0
- data/lib/mongoid/matcher/field_operator.rb +6 -0
- data/lib/mongoid/matcher/mod.rb +17 -0
- data/lib/mongoid/matcher/type.rb +99 -0
- data/lib/mongoid/matcher.rb +7 -0
- data/lib/mongoid/persistable/deletable.rb +1 -2
- data/lib/mongoid/persistable/destroyable.rb +8 -2
- data/lib/mongoid/persistable/updatable.rb +27 -2
- data/lib/mongoid/persistence_context.rb +1 -3
- data/lib/mongoid/query_cache.rb +36 -40
- data/lib/mongoid/selectable.rb +5 -7
- data/lib/mongoid/shardable.rb +21 -5
- data/lib/mongoid/tasks/database.rb +1 -1
- data/lib/mongoid/touchable.rb +23 -4
- data/lib/mongoid/validatable/associated.rb +1 -1
- data/lib/mongoid/validatable/presence.rb +3 -3
- data/lib/mongoid/validatable/uniqueness.rb +1 -1
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid.rb +0 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
- data/spec/integration/app_spec.rb +0 -3
- data/spec/integration/associations/embeds_many_spec.rb +44 -0
- data/spec/integration/associations/has_one_spec.rb +48 -0
- data/spec/integration/criteria/date_field_spec.rb +1 -1
- data/spec/integration/document_spec.rb +9 -0
- data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
- data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
- data/spec/integration/matcher_operator_data/comment.yml +22 -0
- data/spec/integration/matcher_operator_data/in.yml +16 -0
- data/spec/integration/matcher_operator_data/mod.yml +55 -0
- data/spec/integration/matcher_operator_data/type.yml +70 -0
- data/spec/integration/matcher_operator_data/type_array.yml +16 -0
- data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
- data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
- data/spec/integration/matcher_operator_data/type_code.yml +26 -0
- data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
- data/spec/integration/matcher_operator_data/type_date.yml +39 -0
- data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
- data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
- data/spec/integration/matcher_operator_data/type_double.yml +15 -0
- data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
- data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
- data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
- data/spec/integration/matcher_operator_data/type_null.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object.yml +23 -0
- data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
- data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
- data/spec/integration/matcher_operator_data/type_string.yml +15 -0
- data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
- data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
- data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
- data/spec/integration/stringified_symbol_field_spec.rb +2 -2
- data/spec/lite_spec_helper.rb +2 -0
- data/spec/mongoid/association/depending_spec.rb +391 -352
- data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4 -17
- data/spec/mongoid/association/nested/one_spec.rb +18 -14
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +25 -25
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +0 -20
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -1
- data/spec/mongoid/association/referenced/has_many_models.rb +0 -17
- data/spec/mongoid/association/referenced/has_one_models.rb +8 -0
- data/spec/mongoid/atomic/paths_spec.rb +64 -12
- data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
- data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
- data/spec/mongoid/attributes/projector_spec.rb +41 -0
- data/spec/mongoid/attributes_spec.rb +98 -6
- data/spec/mongoid/clients/factory_spec.rb +51 -9
- data/spec/mongoid/clients/options_spec.rb +3 -11
- data/spec/mongoid/config/environment_spec.rb +8 -86
- data/spec/mongoid/config_spec.rb +32 -0
- data/spec/mongoid/contextual/atomic_spec.rb +25 -64
- data/spec/mongoid/contextual/geo_near_spec.rb +1 -1
- data/spec/mongoid/contextual/mongo_spec.rb +2 -2
- data/spec/mongoid/criteria/modifiable_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -73
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -1
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +105 -7
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +229 -24
- data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1 -565
- data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
- data/spec/mongoid/criteria_projection_spec.rb +411 -0
- data/spec/mongoid/criteria_spec.rb +0 -279
- data/spec/mongoid/document_query_spec.rb +0 -51
- data/spec/mongoid/document_spec.rb +14 -34
- data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
- data/spec/mongoid/errors/mongoid_error_spec.rb +8 -20
- data/spec/mongoid/extensions/false_class_spec.rb +1 -1
- data/spec/mongoid/extensions/string_spec.rb +5 -5
- data/spec/mongoid/extensions/true_class_spec.rb +1 -1
- data/spec/mongoid/fields/localized_spec.rb +4 -4
- data/spec/mongoid/fields_spec.rb +4 -4
- data/spec/mongoid/inspectable_spec.rb +12 -4
- data/spec/mongoid/persistable/deletable_spec.rb +175 -1
- data/spec/mongoid/persistable/destroyable_spec.rb +191 -3
- data/spec/mongoid/persistable/savable_spec.rb +3 -5
- data/spec/mongoid/persistable/updatable_spec.rb +0 -2
- data/spec/mongoid/persistable/upsertable_spec.rb +1 -1
- data/spec/mongoid/persistable_spec.rb +2 -2
- data/spec/mongoid/query_cache_middleware_spec.rb +8 -0
- data/spec/mongoid/query_cache_spec.rb +0 -24
- data/spec/mongoid/reloadable_spec.rb +18 -1
- data/spec/mongoid/shardable_spec.rb +44 -0
- data/spec/mongoid/touchable_spec.rb +104 -16
- data/spec/mongoid/touchable_spec_models.rb +52 -0
- data/spec/mongoid/validatable_spec.rb +1 -1
- data/spec/shared/lib/mrss/cluster_config.rb +3 -8
- data/spec/shared/lib/mrss/constraints.rb +10 -41
- data/spec/shared/lib/mrss/docker_runner.rb +1 -7
- data/spec/shared/lib/mrss/server_version_registry.rb +12 -17
- data/spec/shared/lib/mrss/spec_organizer.rb +1 -18
- data/spec/shared/share/Dockerfile.erb +33 -125
- data/spec/shared/shlib/server.sh +23 -100
- data/spec/shared/shlib/set_env.sh +1 -4
- data/spec/spec_helper.rb +7 -3
- data/spec/support/client_registry.rb +9 -0
- data/spec/support/models/address.rb +0 -4
- data/spec/support/models/bolt.rb +8 -0
- data/spec/support/models/hole.rb +13 -0
- data/spec/support/models/mop.rb +0 -1
- data/spec/support/models/nut.rb +8 -0
- data/spec/support/models/person.rb +6 -9
- data/spec/support/models/sealer.rb +8 -0
- data/spec/support/models/shirt.rb +12 -0
- data/spec/support/models/spacer.rb +8 -0
- data/spec/support/models/threadlocker.rb +8 -0
- data/spec/support/models/washer.rb +8 -0
- data.tar.gz.sig +0 -0
- metadata +609 -545
- metadata.gz.sig +0 -0
- data/lib/mongoid/errors/empty_config_file.rb +0 -26
- data/lib/mongoid/errors/invalid_config_file.rb +0 -26
- data/spec/integration/contextual/empty_spec.rb +0 -142
- data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -32
- data/spec/shared/bin/s3-copy +0 -45
- data/spec/shared/bin/s3-upload +0 -69
- data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
- data/spec/shared/share/haproxy-1.conf +0 -16
- data/spec/shared/share/haproxy-2.conf +0 -17
- data/spec/support/cluster_config.rb +0 -158
@@ -15,11 +15,6 @@ module Mrss
|
|
15
15
|
@single_server
|
16
16
|
end
|
17
17
|
|
18
|
-
def sharded_ish?
|
19
|
-
determine_cluster_config
|
20
|
-
@topology == :sharded || @topology == :load_balanced
|
21
|
-
end
|
22
|
-
|
23
18
|
def replica_set_name
|
24
19
|
determine_cluster_config
|
25
20
|
@replica_set_name
|
@@ -53,7 +48,7 @@ module Mrss
|
|
53
48
|
raise "Deployment server version not known - check that connection to deployment succeeded"
|
54
49
|
end
|
55
50
|
|
56
|
-
if server_version >= '3.4' &&
|
51
|
+
if server_version >= '3.4' && topology != :sharded
|
57
52
|
fcv
|
58
53
|
else
|
59
54
|
if short_server_version == '4.1'
|
@@ -120,7 +115,7 @@ module Mrss
|
|
120
115
|
:mmapv1
|
121
116
|
else
|
122
117
|
client = ClientRegistry.instance.global_client('root_authorized')
|
123
|
-
if
|
118
|
+
if topology == :sharded
|
124
119
|
shards = client.use(:admin).command(listShards: 1).first
|
125
120
|
if shards['shards'].empty?
|
126
121
|
raise 'Shards are empty'
|
@@ -211,7 +206,7 @@ module Mrss
|
|
211
206
|
|
212
207
|
@server_parameters = client.use(:admin).command(getParameter: '*').first
|
213
208
|
|
214
|
-
if
|
209
|
+
if @topology != :sharded && short_server_version >= '3.4'
|
215
210
|
rv = @server_parameters['featureCompatibilityVersion']
|
216
211
|
@fcv = rv['version'] || rv
|
217
212
|
end
|
@@ -52,7 +52,7 @@ module Mrss
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def require_topology(*topologies)
|
55
|
-
invalid_topologies = topologies - [:single, :replica_set, :sharded
|
55
|
+
invalid_topologies = topologies - [:single, :replica_set, :sharded]
|
56
56
|
|
57
57
|
unless invalid_topologies.empty?
|
58
58
|
raise ArgumentError, "Invalid topologies requested: #{invalid_topologies.join(', ')}"
|
@@ -82,7 +82,7 @@ module Mrss
|
|
82
82
|
unless ClusterConfig.instance.server_version >= '4.0'
|
83
83
|
skip 'Transactions tests in a replica set topology require server 4.0+'
|
84
84
|
end
|
85
|
-
when :sharded
|
85
|
+
when :sharded
|
86
86
|
unless ClusterConfig.instance.server_version >= '4.2'
|
87
87
|
skip 'Transactions tests in a sharded cluster topology require server 4.2+'
|
88
88
|
end
|
@@ -249,52 +249,31 @@ module Mrss
|
|
249
249
|
# (mongos 4.0+ overrides the write concern)
|
250
250
|
def require_set_write_concern
|
251
251
|
before(:all) do
|
252
|
-
if
|
253
|
-
ClusterConfig.instance.short_server_version >= '4.0'
|
254
|
-
then
|
252
|
+
if ClusterConfig.instance.topology == :sharded && ClusterConfig.instance.short_server_version >= '4.0'
|
255
253
|
skip "mongos 4.0+ overrides write concern"
|
256
254
|
end
|
257
255
|
end
|
258
256
|
end
|
259
257
|
|
260
|
-
def
|
258
|
+
def require_multi_shard
|
261
259
|
before(:all) do
|
262
260
|
if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length == 1
|
263
|
-
skip 'Test requires a minimum of two
|
264
|
-
end
|
265
|
-
|
266
|
-
if ClusterConfig.instance.topology == :load_balanced && SpecConfig.instance.single_mongos?
|
267
|
-
skip 'Test requires a minimum of two mongoses if run in load-balanced topology'
|
261
|
+
skip 'Test requires a minimum of two shards if run in sharded topology'
|
268
262
|
end
|
269
263
|
end
|
270
264
|
end
|
271
265
|
|
272
|
-
|
273
|
-
# When we set fail points, the fail point may be set on one mongos and
|
274
|
-
# operation may be executed on another mongos, causing failures.
|
275
|
-
# Tests that are not setting targeted fail points should utilize this
|
276
|
-
# method to restrict themselves to single mongos.
|
277
|
-
#
|
278
|
-
# In load-balanced topology, the same problem can happen when there is
|
279
|
-
# more than one mongos behind the load balancer.
|
280
|
-
def require_no_multi_mongos
|
266
|
+
def require_no_multi_shard
|
281
267
|
before(:all) do
|
282
268
|
if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length > 1
|
283
|
-
skip 'Test requires a single
|
284
|
-
end
|
285
|
-
if ClusterConfig.instance.topology == :load_balanced && !SpecConfig.instance.single_mongos?
|
286
|
-
skip 'Test requires a single mongos, as indicated by SINGLE_MONGOS=1 environment variable, if run in load-balanced topology'
|
269
|
+
skip 'Test requires a single shard if run in sharded topology'
|
287
270
|
end
|
288
271
|
end
|
289
272
|
end
|
290
273
|
|
291
|
-
alias :require_no_multi_shard :require_no_multi_mongos
|
292
|
-
|
293
274
|
def require_wired_tiger
|
294
275
|
before(:all) do
|
295
|
-
|
296
|
-
# assume that a serverless instance uses WiredTiger Storage Engine.
|
297
|
-
if !SpecConfig.instance.serverless? && ClusterConfig.instance.storage_engine != :wired_tiger
|
276
|
+
if ClusterConfig.instance.storage_engine != :wired_tiger
|
298
277
|
skip 'Test requires WiredTiger storage engine'
|
299
278
|
end
|
300
279
|
end
|
@@ -303,9 +282,7 @@ module Mrss
|
|
303
282
|
def require_wired_tiger_on_36
|
304
283
|
before(:all) do
|
305
284
|
if ClusterConfig.instance.short_server_version >= '3.6'
|
306
|
-
|
307
|
-
# assume that a serverless instance uses WiredTiger Storage Engine.
|
308
|
-
if !SpecConfig.instance.serverless? && ClusterConfig.instance.storage_engine != :wired_tiger
|
285
|
+
if ClusterConfig.instance.storage_engine != :wired_tiger
|
309
286
|
skip 'Test requires WiredTiger storage engine on 3.6+ servers'
|
310
287
|
end
|
311
288
|
end
|
@@ -314,7 +291,7 @@ module Mrss
|
|
314
291
|
|
315
292
|
def require_mmapv1
|
316
293
|
before(:all) do
|
317
|
-
if
|
294
|
+
if ClusterConfig.instance.storage_engine != :mmapv1
|
318
295
|
skip 'Test requires MMAPv1 storage engine'
|
319
296
|
end
|
320
297
|
end
|
@@ -373,13 +350,5 @@ module Mrss
|
|
373
350
|
end
|
374
351
|
end
|
375
352
|
end
|
376
|
-
|
377
|
-
def require_unix_socket
|
378
|
-
before(:all) do
|
379
|
-
if ENV['TOPOLOGY'] == 'load-balanced'
|
380
|
-
skip 'Load balancer does not listen on Unix sockets'
|
381
|
-
end
|
382
|
-
end
|
383
|
-
end
|
384
353
|
end
|
385
354
|
end
|
@@ -111,7 +111,7 @@ module Mrss
|
|
111
111
|
'.'])
|
112
112
|
end
|
113
113
|
|
114
|
-
BASE_TEST_COMMAND = %w(docker run
|
114
|
+
BASE_TEST_COMMAND = %w(docker run -i --tmpfs /tmpfs:exec).freeze
|
115
115
|
|
116
116
|
def run_tests
|
117
117
|
run_command(BASE_TEST_COMMAND + tty_arg + extra_env + [image_tag] +
|
@@ -179,11 +179,9 @@ module Mrss
|
|
179
179
|
BASE_IMAGES = {
|
180
180
|
'debian81' => 'debian:jessie',
|
181
181
|
'debian92' => 'debian:stretch',
|
182
|
-
'debian10' => 'debian:buster',
|
183
182
|
'ubuntu1404' => 'ubuntu:trusty',
|
184
183
|
'ubuntu1604' => 'ubuntu:xenial',
|
185
184
|
'ubuntu1804' => 'ubuntu:bionic',
|
186
|
-
'ubuntu2004' => 'ubuntu:focal',
|
187
185
|
'rhel62' => 'centos:6',
|
188
186
|
'rhel70' => 'centos:7',
|
189
187
|
}.freeze
|
@@ -200,10 +198,6 @@ module Mrss
|
|
200
198
|
ruby == 'ruby-head'
|
201
199
|
end
|
202
200
|
|
203
|
-
def system_ruby?
|
204
|
-
%w(1 true yes).include?(@env['SYSTEM_RUBY']&.downcase)
|
205
|
-
end
|
206
|
-
|
207
201
|
def server_version
|
208
202
|
@env['MONGODB_VERSION']
|
209
203
|
end
|
@@ -48,24 +48,19 @@ module Mrss
|
|
48
48
|
url = dl['archive']['url']
|
49
49
|
end
|
50
50
|
rescue MissingDownloadUrl
|
51
|
-
if %w(
|
52
|
-
#
|
53
|
-
#
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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
|
60
63
|
end
|
61
|
-
url = case desired_version
|
62
|
-
when '2.6'
|
63
|
-
url.sub(/\b3\.2\.\d+/, '2.6.12')
|
64
|
-
when '3.0'
|
65
|
-
url.sub(/\b3\.2\.\d+/, '3.0.15')
|
66
|
-
else
|
67
|
-
raise NotImplementedError
|
68
|
-
end.sub('ubuntu1604', 'ubuntu1404')
|
69
64
|
else
|
70
65
|
raise
|
71
66
|
end
|
@@ -25,28 +25,18 @@ module Mrss
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def initialize(root: nil, classifiers:, priority_order:,
|
28
|
-
spec_root: nil, rspec_json_path: nil, rspec_all_json_path: nil
|
29
|
-
randomize: false
|
28
|
+
spec_root: nil, rspec_json_path: nil, rspec_all_json_path: nil
|
30
29
|
)
|
31
30
|
@spec_root = spec_root || File.join(root, 'spec')
|
32
31
|
@classifiers = classifiers
|
33
32
|
@priority_order = priority_order
|
34
33
|
@rspec_json_path = rspec_json_path || File.join(root, 'tmp/rspec.json')
|
35
34
|
@rspec_all_json_path = rspec_all_json_path || File.join(root, 'tmp/rspec-all.json')
|
36
|
-
@randomize = !!randomize
|
37
35
|
end
|
38
36
|
|
39
37
|
attr_reader :spec_root, :classifiers, :priority_order
|
40
38
|
attr_reader :rspec_json_path, :rspec_all_json_path
|
41
39
|
|
42
|
-
def randomize?
|
43
|
-
@randomize
|
44
|
-
end
|
45
|
-
|
46
|
-
def seed
|
47
|
-
@seed ||= (rand * 100_000).to_i
|
48
|
-
end
|
49
|
-
|
50
40
|
def buckets
|
51
41
|
@buckets ||= {}.tap do |buckets|
|
52
42
|
Find.find(spec_root) do |path|
|
@@ -132,12 +122,8 @@ module Mrss
|
|
132
122
|
puts "Running #{category.to_s.gsub('_', ' ')} tests"
|
133
123
|
FileUtils.rm_f(rspec_json_path)
|
134
124
|
cmd = %w(rspec) + paths
|
135
|
-
if randomize?
|
136
|
-
cmd += %W(--order rand:#{seed})
|
137
|
-
end
|
138
125
|
|
139
126
|
begin
|
140
|
-
puts "Running #{cmd.join(' ')}"
|
141
127
|
ChildProcessHelper.check_call(cmd)
|
142
128
|
ensure
|
143
129
|
if File.exist?(rspec_json_path)
|
@@ -163,9 +149,6 @@ module Mrss
|
|
163
149
|
end
|
164
150
|
new.delete('version')
|
165
151
|
new.delete('summary_line')
|
166
|
-
# The spec organizer runs all buckets with the same seed, hence
|
167
|
-
# we can drop the seed from new results.
|
168
|
-
new.delete('seed')
|
169
152
|
unless new.empty?
|
170
153
|
raise "Unhandled rspec results keys: #{new.keys.join(', ')}"
|
171
154
|
end
|
@@ -55,10 +55,9 @@ FROM <%= base_image %>
|
|
55
55
|
# Ruby runtime dependencies: libyaml-0-2
|
56
56
|
# Compiling ruby libraries: gcc make
|
57
57
|
# Compiling pyhton packages: python2.7-dev
|
58
|
-
# JRuby: openjdk-8-
|
58
|
+
# JRuby: openjdk-8-jre-headless
|
59
59
|
# Server dependencies: libsnmp30 libcurl3/libcurl4
|
60
60
|
# Determining OS we are running on: lsb-release
|
61
|
-
# Load balancer testing: haproxy
|
62
61
|
# Kerberos testing: krb5-user
|
63
62
|
# Local Kerberos server: krb5-kdc krb5-admin-server
|
64
63
|
# Installing mlaunch from git: git
|
@@ -68,7 +67,6 @@ FROM <%= base_image %>
|
|
68
67
|
# nokogiri: zlib1g-dev
|
69
68
|
# Mongoid testing: tzdata shared-mime-info
|
70
69
|
# Mongoid application testing: nodejs (8.x or newer)
|
71
|
-
# Test suite: procps for ps (to kill JRubies)
|
72
70
|
#
|
73
71
|
# We currently use Python 2-compatible version of mtools, which
|
74
72
|
# is installable via pip (which uses Python 2). All of the MongoDB
|
@@ -76,44 +74,22 @@ FROM <%= base_image %>
|
|
76
74
|
# therefore install python-pip in all configurations here.
|
77
75
|
|
78
76
|
<% packages = %w(
|
79
|
-
|
77
|
+
lsb-release bzip2 curl zsh
|
80
78
|
git make gcc libyaml-0-2 libgmp-dev zlib1g-dev libsnappy-dev
|
79
|
+
libsnmp30
|
81
80
|
krb5-user krb5-kdc krb5-admin-server libsasl2-dev libsasl2-modules-gssapi-mit
|
82
|
-
|
83
|
-
python3-pip
|
81
|
+
python-pip python2.7-dev python3-pip
|
84
82
|
tzdata shared-mime-info
|
85
83
|
) %>
|
86
84
|
|
87
|
-
|
88
|
-
|
89
|
-
<% packages
|
90
|
-
<% end %>
|
91
|
-
|
92
|
-
<% if distro !~ /ubuntu2004/ %>
|
93
|
-
<% packages += %w(python2.7-dev) %>
|
94
|
-
<% end %>
|
95
|
-
|
96
|
-
<% if distro =~ /ubuntu2004/ %>
|
97
|
-
<% packages << 'libsnmp35' %>
|
98
|
-
<% else %>
|
99
|
-
<% packages << 'libsnmp30' %>
|
100
|
-
<% end %>
|
101
|
-
|
102
|
-
<% if distro !~ /ubuntu2004/ %>
|
103
|
-
<% packages << 'python-pip' %>
|
104
|
-
<% end %>
|
105
|
-
|
106
|
-
<% if distro =~ /debian10/ %>
|
107
|
-
<% packages << 'openjdk-11-jdk-headless' %>
|
108
|
-
<% elsif distro =~ /ubuntu1404/ %>
|
109
|
-
# Ubuntu 14.04 only has openjdk 7, this is too old to be useful
|
110
|
-
<% else %>
|
111
|
-
<% packages << 'openjdk-8-jdk-headless' %>
|
85
|
+
# ubuntu1404 only has openjdk-7-jre-headless
|
86
|
+
<% if distro !~ /ubuntu1404/ %>
|
87
|
+
<% packages << 'openjdk-8-jre-headless' %>
|
112
88
|
<% end %>
|
113
89
|
|
114
90
|
# ubuntu1404, ubuntu1604: libcurl3
|
115
|
-
# ubuntu1804
|
116
|
-
<% if distro =~ /ubuntu1804
|
91
|
+
# ubuntu1804: libcurl4
|
92
|
+
<% if distro =~ /ubuntu1804/ %>
|
117
93
|
<% packages << 'libcurl4' %>
|
118
94
|
<% else %>
|
119
95
|
<% packages << 'libcurl3' %>
|
@@ -123,36 +99,9 @@ FROM <%= base_image %>
|
|
123
99
|
<% packages << 'nodejs' %>
|
124
100
|
<% end %>
|
125
101
|
|
126
|
-
<% if distro =~ /ubuntu2004/ %>
|
127
|
-
<% packages += %w(ruby ruby2.7 bundler python2 python2-dev) %>
|
128
|
-
<% end %>
|
129
|
-
|
130
102
|
RUN apt-get update && apt-get install -y <%= packages.join(' ') %>
|
131
103
|
<% else %>
|
132
104
|
|
133
|
-
<% if distro =~ /rhel6/ %>
|
134
|
-
|
135
|
-
# CentOS 6 is dead - to use it retrieve the packages from vault:
|
136
|
-
# https://stackoverflow.com/questions/53562691/error-cannot-retrieve-repository-metadata-repomd-xml-for-repository-base-pl
|
137
|
-
|
138
|
-
<%
|
139
|
-
|
140
|
-
cfg = <<-CFG
|
141
|
-
[base]
|
142
|
-
name=CentOS-$releasever - Base
|
143
|
-
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
|
144
|
-
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
|
145
|
-
baseurl=http://vault.centos.org/6.10/os/x86_64/
|
146
|
-
gpgcheck=1
|
147
|
-
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
|
148
|
-
CFG
|
149
|
-
|
150
|
-
%>
|
151
|
-
|
152
|
-
RUN printf "<%= cfg.gsub("\n", "\\n") %>" >/etc/yum.repos.d/CentOS-Base.repo
|
153
|
-
|
154
|
-
<% end %>
|
155
|
-
|
156
105
|
# Enterprise server: net-snmp
|
157
106
|
# lsb_release: redhat-lsb-core
|
158
107
|
# our runner scripts: which
|
@@ -169,7 +118,7 @@ CFG
|
|
169
118
|
|
170
119
|
RUN yum install -y redhat-lsb-core which git gcc libyaml krb5-server \
|
171
120
|
krb5-workstation cyrus-sasl-devel cyrus-sasl-gssapi java-1.8.0-openjdk \
|
172
|
-
net-snmp
|
121
|
+
net-snmp
|
173
122
|
|
174
123
|
<% if distro =~ /rhel6/ %>
|
175
124
|
|
@@ -185,69 +134,23 @@ CFG
|
|
185
134
|
RUN yum install -y python-devel
|
186
135
|
|
187
136
|
<% end %>
|
188
|
-
|
137
|
+
|
189
138
|
<% end %>
|
190
139
|
|
191
140
|
<% if preload? %>
|
192
141
|
|
193
|
-
<% if distro =~ /ubuntu1404/ %>
|
194
|
-
|
195
|
-
# I couldn't find a prebuilt package of anything more recent than 2.7.6
|
196
|
-
# for 14.04.
|
197
|
-
RUN curl --retry 3 -fL https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tar.xz | \
|
198
|
-
tar xfJ - && \
|
199
|
-
cd Python-2.7.16 && \
|
200
|
-
./configure && \
|
201
|
-
nice make -j4 && \
|
202
|
-
make install && \
|
203
|
-
cd .. && rm -rf Python-2.7.16
|
204
|
-
|
205
|
-
ENV PATH=/usr/local/bin:$PATH
|
206
|
-
|
207
|
-
RUN curl --retry 3 -fL -o setuptools-44.1.1.zip https://files.pythonhosted.org/packages/b2/40/4e00501c204b457f10fe410da0c97537214b2265247bc9a5bc6edd55b9e4/setuptools-44.1.1.zip && \
|
208
|
-
unzip setuptools-44.1.1.zip && \
|
209
|
-
cd setuptools-44.1.1 && \
|
210
|
-
python setup.py install && \
|
211
|
-
cd .. && rm -rf setuptools-44.1.1
|
212
|
-
|
213
|
-
<% end%>
|
214
|
-
|
215
|
-
<% if true || distro =~ /rhel|ubuntu1604/ %>
|
216
|
-
|
217
|
-
# Ubuntu 12.04 ships pip 1.0 which is ancient and does not work.
|
218
|
-
#
|
219
|
-
# Ubuntu 16.04 apparently also ships a pip that does not work:
|
220
|
-
# https://stackoverflow.com/questions/37495375/python-pip-install-throws-typeerror-unsupported-operand-types-for-retry
|
221
|
-
# Potentially this only affects environments with less than ideal
|
222
|
-
# connectivity (or, perhaps, when python package registry is experiencing
|
223
|
-
# availability issues) when pip must retry to install packages.
|
224
|
-
#
|
225
|
-
# rhel apparently does not package pip at all in core repoitories,
|
226
|
-
# therefore install it the manual way.
|
227
|
-
#
|
228
|
-
# https://pip.pypa.io/en/stable/installing/
|
229
|
-
RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/2.7/get-pip.py | python2
|
230
|
-
|
231
|
-
<% end %>
|
232
|
-
|
233
142
|
# Current virtualenv fails with
|
234
143
|
# https://github.com/pypa/virtualenv/issues/1630
|
235
|
-
|
236
|
-
RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
|
237
|
-
<% else %>
|
238
|
-
RUN python2 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
|
239
|
-
<% end %>
|
144
|
+
RUN python2 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
|
240
145
|
|
241
146
|
RUN pip --version && \
|
242
147
|
pip install mtools-legacy[mlaunch]
|
243
148
|
|
244
149
|
<% if @env.fetch('MONGODB_VERSION') >= '4.4' %>
|
245
|
-
|
246
|
-
# as specified by dependencies, causing OCSP mock to not work.
|
247
|
-
RUN python3 -mpip install asn1crypto oscrypto flask --upgrade
|
150
|
+
RUN python3 -mpip install asn1crypto oscrypto flask
|
248
151
|
<% end %>
|
249
152
|
|
250
|
-
<% unless ruby_head?
|
153
|
+
<% unless ruby_head? %>
|
251
154
|
|
252
155
|
RUN curl --retry 3 -fL <%= ruby_toolchain_url %> |tar -xC /opt -Jf -
|
253
156
|
ENV PATH=/opt/rubies/<%= ruby %>/bin:$PATH \
|
@@ -256,20 +159,30 @@ CFG
|
|
256
159
|
|
257
160
|
<% end %>
|
258
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
|
+
|
259
180
|
RUN curl --retry 3 -fL <%= server_download_url %> |tar xzf - && \
|
260
181
|
mv mongo*/ /opt/mongodb
|
261
182
|
ENV USE_OPT_MONGODB=1 USE_SYSTEM_PYTHON_PACKAGES=1
|
262
183
|
|
263
184
|
<% end %>
|
264
185
|
|
265
|
-
<% if distro =~ /debian|ubuntu/ %>
|
266
|
-
# mkdir was moved from /usr/bin to /bin and MongoDB's distros
|
267
|
-
# apparently keep using the old location.
|
268
|
-
# This definitely affects debian10.
|
269
|
-
# https://stackoverflow.com/questions/64653051/make-usr-bin-mkdir-command-not-found-during-gem-install-nokogiri-in-ubuntu
|
270
|
-
RUN test -f /usr/bin/mkdir || ln -s /bin/mkdir /usr/bin/mkdir
|
271
|
-
<% end %>
|
272
|
-
|
273
186
|
WORKDIR /app
|
274
187
|
|
275
188
|
<% if preload? && !ruby_head? %>
|
@@ -280,12 +193,7 @@ WORKDIR /app
|
|
280
193
|
COPY lib/<%= project_lib_subdir %>/version.rb lib/<%= project_lib_subdir %>/version.rb
|
281
194
|
RUN bundle install
|
282
195
|
COPY .evergreen/patch-debuggers .evergreen/patch-debuggers
|
283
|
-
|
284
|
-
# Running under docker with root access
|
285
|
-
RUN .evergreen/patch-debuggers /var/lib/gems
|
286
|
-
<% else %>
|
287
|
-
RUN .evergreen/patch-debuggers /opt/rubies
|
288
|
-
<% end %>
|
196
|
+
RUN .evergreen/patch-debuggers /opt/rubies
|
289
197
|
|
290
198
|
<% end %>
|
291
199
|
|