mongoid 9.0.0 → 9.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -0
  3. data/Rakefile +44 -21
  4. data/lib/config/locales/en.yml +20 -0
  5. data/lib/mongoid/association/accessors.rb +7 -2
  6. data/lib/mongoid/association/nested/one.rb +14 -1
  7. data/lib/mongoid/association/referenced/belongs_to/binding.rb +7 -1
  8. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  9. data/lib/mongoid/association/referenced/belongs_to.rb +15 -0
  10. data/lib/mongoid/association/referenced/has_many.rb +9 -8
  11. data/lib/mongoid/association/referenced/has_one/buildable.rb +3 -8
  12. data/lib/mongoid/association/referenced/with_polymorphic_criteria.rb +41 -0
  13. data/lib/mongoid/atomic_update_preparer.rb +7 -6
  14. data/lib/mongoid/attributes/nested.rb +2 -1
  15. data/lib/mongoid/clients/sessions.rb +12 -15
  16. data/lib/mongoid/composable.rb +2 -0
  17. data/lib/mongoid/config.rb +9 -0
  18. data/lib/mongoid/contextual/aggregable/memory.rb +3 -2
  19. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -2
  20. data/lib/mongoid/criteria/findable.rb +2 -2
  21. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -1
  22. data/lib/mongoid/document.rb +2 -0
  23. data/lib/mongoid/errors/invalid_around_callback.rb +16 -0
  24. data/lib/mongoid/errors/unrecognized_model_alias.rb +53 -0
  25. data/lib/mongoid/errors/unrecognized_resolver.rb +27 -0
  26. data/lib/mongoid/errors/unregistered_class.rb +47 -0
  27. data/lib/mongoid/errors.rb +4 -0
  28. data/lib/mongoid/fields.rb +13 -7
  29. data/lib/mongoid/identifiable.rb +28 -0
  30. data/lib/mongoid/interceptable.rb +18 -13
  31. data/lib/mongoid/model_resolver.rb +154 -0
  32. data/lib/mongoid/persistence_context.rb +2 -1
  33. data/lib/mongoid/scopable.rb +7 -1
  34. data/lib/mongoid/touchable.rb +1 -7
  35. data/lib/mongoid/traversable.rb +5 -0
  36. data/lib/mongoid/version.rb +1 -1
  37. data/spec/integration/associations/belongs_to_spec.rb +129 -0
  38. data/spec/integration/persistence/collection_options_spec.rb +36 -0
  39. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +4 -0
  40. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +1 -0
  41. data/spec/mongoid/association/referenced/belongs_to_spec.rb +58 -21
  42. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +4 -0
  43. data/spec/mongoid/association_spec.rb +14 -0
  44. data/spec/mongoid/attributes/nested_spec.rb +1 -0
  45. data/spec/mongoid/attributes_spec.rb +16 -0
  46. data/spec/mongoid/clients/transactions_spec.rb +2 -2
  47. data/spec/mongoid/contextual/aggregable/memory_spec.rb +11 -0
  48. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +11 -0
  49. data/spec/mongoid/contextual/mongo_spec.rb +72 -3
  50. data/spec/mongoid/fields_spec.rb +2 -2
  51. data/spec/mongoid/interceptable_spec.rb +31 -0
  52. data/spec/mongoid/model_resolver_spec.rb +167 -0
  53. data/spec/mongoid/monkey_patches_spec.rb +1 -1
  54. data/spec/mongoid/persistence_context_spec.rb +17 -4
  55. data/spec/mongoid/scopable_spec.rb +88 -85
  56. data/spec/mongoid/serializable_spec.rb +16 -9
  57. data/spec/mongoid/touchable_spec.rb +75 -0
  58. data/spec/mongoid/touchable_spec_models.rb +16 -0
  59. data/spec/support/models/band.rb +1 -0
  60. data/spec/support/models/lat_lng.rb +6 -0
  61. metadata +20 -82
  62. checksums.yaml.gz.sig +0 -1
  63. data/spec/shared/LICENSE +0 -20
  64. data/spec/shared/bin/get-mongodb-download-url +0 -17
  65. data/spec/shared/bin/s3-copy +0 -45
  66. data/spec/shared/bin/s3-upload +0 -69
  67. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  68. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  69. data/spec/shared/lib/mrss/constraints.rb +0 -378
  70. data/spec/shared/lib/mrss/docker_runner.rb +0 -298
  71. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  72. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  73. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  74. data/spec/shared/lib/mrss/server_version_registry.rb +0 -113
  75. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  76. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  77. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  78. data/spec/shared/lib/mrss/utils.rb +0 -37
  79. data/spec/shared/share/Dockerfile.erb +0 -281
  80. data/spec/shared/share/haproxy-1.conf +0 -16
  81. data/spec/shared/share/haproxy-2.conf +0 -17
  82. data/spec/shared/shlib/config.sh +0 -27
  83. data/spec/shared/shlib/distro.sh +0 -74
  84. data/spec/shared/shlib/server.sh +0 -417
  85. data/spec/shared/shlib/set_env.sh +0 -146
  86. data.tar.gz.sig +0 -0
  87. metadata.gz.sig +0 -1
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- require 'singleton'
5
-
6
- module Mrss
7
-
8
- def self.patch_mongo_for_session_registry
9
-
10
- Mongo::Client.class_eval do
11
- alias :get_session_without_tracking :get_session
12
-
13
- def get_session(options = {})
14
- get_session_without_tracking(options).tap do |session|
15
- SessionRegistry.instance.register(session)
16
- end
17
- end
18
- end
19
-
20
- Mongo::Session.class_eval do
21
- alias :end_session_without_tracking :end_session
22
-
23
- def end_session
24
- SessionRegistry.instance.unregister(self)
25
- end_session_without_tracking
26
- end
27
- end
28
- end
29
- end
30
-
31
- module Mrss
32
- class SessionRegistry
33
- include Singleton
34
-
35
- def initialize
36
- @registry = {}
37
- end
38
-
39
- def register(session)
40
- @registry[session.session_id] = session if session
41
- end
42
-
43
- def unregister(session)
44
- @registry.delete(session.session_id) unless session.ended?
45
- end
46
-
47
- def verify_sessions_ended!
48
- @registry.delete_if { |_, session| session.ended? }
49
-
50
- unless @registry.empty?
51
- sessions = @registry.map { |_, session| session }
52
- raise "Session registry contains live sessions: #{sessions.join(', ')}"
53
- end
54
- end
55
-
56
- def clear_registry
57
- @registry = {}
58
- end
59
- end
60
- end
@@ -1,179 +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
- randomize: false
30
- )
31
- @spec_root = spec_root || File.join(root, 'spec')
32
- @classifiers = classifiers
33
- @priority_order = priority_order
34
- @rspec_json_path = rspec_json_path || File.join(root, 'tmp/rspec.json')
35
- @rspec_all_json_path = rspec_all_json_path || File.join(root, 'tmp/rspec-all.json')
36
- @randomize = !!randomize
37
- end
38
-
39
- attr_reader :spec_root, :classifiers, :priority_order
40
- attr_reader :rspec_json_path, :rspec_all_json_path
41
-
42
- def randomize?
43
- @randomize
44
- end
45
-
46
- def seed
47
- @seed ||= (rand * 100_000).to_i
48
- end
49
-
50
- def buckets
51
- @buckets ||= {}.tap do |buckets|
52
- Find.find(spec_root) do |path|
53
- next unless File.file?(path)
54
- next unless path =~ /_spec\.rb\z/
55
- rel_path = path[(spec_root.length + 1)..path.length]
56
-
57
- found = false
58
- classifiers.each do |(regexp, category)|
59
- if regexp =~ rel_path
60
- buckets[category] ||= []
61
- buckets[category] << File.join('spec', rel_path)
62
- found = true
63
- break
64
- end
65
- end
66
-
67
- unless found
68
- buckets[nil] ||= []
69
- buckets[nil] << File.join('spec', rel_path)
70
- end
71
- end
72
- end.freeze
73
- end
74
-
75
- def ordered_buckets
76
- @ordered_buckets ||= {}.tap do |ordered_buckets|
77
- buckets = self.buckets.dup
78
- priority_order.each do |category|
79
- files = buckets.delete(category)
80
- ordered_buckets[category] = files
81
- end
82
-
83
- if files = buckets.delete(nil)
84
- ordered_buckets[nil] = files
85
- end
86
-
87
- unless buckets.empty?
88
- raise BucketsNotPrioritized, "Some buckets were not prioritized: #{buckets.keys.map(&:to_s).join(', ')}"
89
- end
90
- end.freeze
91
- end
92
-
93
- def run
94
- run_buckets(*buckets.keys)
95
- end
96
-
97
- def run_buckets(*buckets)
98
- FileUtils.rm_f(rspec_all_json_path)
99
-
100
- buckets.each do |bucket|
101
- if bucket && !self.buckets[bucket]
102
- raise "Unknown bucket #{bucket}"
103
- end
104
- end
105
- buckets = Hash[self.buckets.select { |k, v| buckets.include?(k) }]
106
-
107
- failed = []
108
-
109
- priority_order.each do |category|
110
- if files = buckets.delete(category)
111
- unless run_files(category, files)
112
- failed << category
113
- end
114
- end
115
- end
116
- if files = buckets.delete(nil)
117
- unless run_files('remaining', files)
118
- failed << 'remaining'
119
- end
120
- end
121
-
122
- unless buckets.empty?
123
- raise "Some buckets were not executed: #{buckets.keys.map(&:to_s).join(', ')}"
124
- end
125
-
126
- if failed.any?
127
- raise "The following buckets failed: #{failed.map(&:to_s).join(', ')}"
128
- end
129
- end
130
-
131
- def run_files(category, paths)
132
- puts "Running #{category.to_s.gsub('_', ' ')} tests"
133
- FileUtils.rm_f(rspec_json_path)
134
- cmd = %w(rspec) + paths
135
- if randomize?
136
- cmd += %W(--order rand:#{seed})
137
- end
138
-
139
- begin
140
- puts "Running #{cmd.join(' ')}"
141
- ChildProcessHelper.check_call(cmd)
142
- ensure
143
- if File.exist?(rspec_json_path)
144
- if File.exist?(rspec_all_json_path)
145
- merge_rspec_results
146
- else
147
- FileUtils.cp(rspec_json_path, rspec_all_json_path)
148
- end
149
- end
150
- end
151
-
152
- true
153
- rescue ChildProcessHelper::SpawnError
154
- false
155
- end
156
-
157
- def merge_rspec_results
158
- all = JSON.parse(File.read(rspec_all_json_path))
159
- new = JSON.parse(File.read(rspec_json_path))
160
- all['examples'] += new.delete('examples')
161
- new.delete('summary').each do |k, v|
162
- all['summary'][k] += v
163
- end
164
- new.delete('version')
165
- 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
- unless new.empty?
170
- raise "Unhandled rspec results keys: #{new.keys.join(', ')}"
171
- end
172
- # We do not merge summary lines, delete them from aggregated results
173
- all.delete('summary_line')
174
- File.open(rspec_all_json_path, 'w') do |f|
175
- f << JSON.dump(all)
176
- end
177
- end
178
- end
179
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- module Mrss
5
- module Utils
6
- extend self
7
-
8
- def print_backtrace(dest=STDERR)
9
- raise
10
- rescue => e
11
- dest.puts e.backtrace.join("\n")
12
- end
13
-
14
- # Parses the given version string, accounting for suffix information that
15
- # Gem::Version cannot successfully parse.
16
- #
17
- # @param [ String ] version the version to parse
18
- #
19
- # @return [ Gem::Version ] the parsed version
20
- #
21
- # @raise [ ArgumentError ] if the string cannot be parsed.
22
- def parse_version(version)
23
- Gem::Version.new(version)
24
- rescue ArgumentError
25
- match = version.match(/\A(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)?(-[A-Za-z\+\d]+)?\z/)
26
- raise ArgumentError.new("Malformed version number string #{version}") if match.nil?
27
-
28
- Gem::Version.new(
29
- [
30
- match[:major],
31
- match[:minor],
32
- match[:patch]
33
- ].join('.')
34
- )
35
- end
36
- end
37
- end
@@ -1,281 +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
- # When changing, also update the hash in shlib/set_env.sh.
16
- TOOLCHAIN_VERSION='ded7ea845b08cf96f11a747d9540ba3199580dea'
17
-
18
- def ruby_toolchain_url(ruby)
19
- "http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/#{TOOLCHAIN_VERSION}/#{distro}/#{ruby}.tar.xz"
20
- end
21
-
22
- #ruby_toolchain_url = "https://s3.amazonaws.com//mciuploads/mongo-ruby-toolchain/#{distro}/#{TOOLCHAIN_VERSION}/mongo_ruby_driver_toolchain_#{distro.gsub('-', '_')}_patch_#{TOOLCHAIN_VERSION}_#{toolchain_lower}.tar.gz"
23
-
24
- %>
25
-
26
- FROM <%= base_image %>
27
-
28
- ENV DOCKER=1
29
-
30
- <% if debian? %>
31
-
32
- ENV DEBIAN_FRONTEND=noninteractive
33
-
34
- <% else %>
35
-
36
- RUN echo assumeyes=1 |tee -a /etc/yum.conf
37
-
38
- <% end %>
39
-
40
- <% if ruby_head? %>
41
-
42
- # To use current versions of mlaunch, Python 3.7+ is required.
43
- # Many distros ship with older Pythons, therefore we need to install
44
- # a newer Python from somewhere. This section installs the Python
45
- # toolchain which comes with recent Pythons.
46
-
47
- #RUN curl --retry 3 -fL <%= python_toolchain_url %> -o python-toolchain.tar.gz
48
- #RUN tar -xC /opt -zf python-toolchain.tar.gz
49
-
50
- <% end %>
51
-
52
- <% if debian? %>
53
-
54
- # zsh is not required for any scripts but it is a better interactive shell
55
- # than bash.
56
- # Ruby runtime dependencies: libyaml-0-2
57
- # Compiling ruby libraries: gcc make
58
- # Compiling python packages: python3-dev
59
- # JRuby: openjdk-17-jdk-headless
60
- # Server dependencies: libsnmp30 libcurl3/libcurl4
61
- # Determining OS we are running on: lsb-release
62
- # Load balancer testing: haproxy
63
- # Kerberos testing: krb5-user
64
- # Local Kerberos server: krb5-kdc krb5-admin-server
65
- # Installing mlaunch from git: git
66
- # ruby-head archive: bzip2
67
- # nio4r on JRuby: libgmp-dev
68
- # Snappy compression: libsnappy-dev
69
- # nokogiri: zlib1g-dev
70
- # Mongoid testing: tzdata shared-mime-info
71
- # Mongoid application testing: nodejs (8.x or newer)
72
- # Test suite: procps for ps (to kill JRubies)
73
- #
74
- # We currently use Python 2-compatible version of mtools, which
75
- # is installable via pip (which uses Python 2). All of the MongoDB
76
- # distros have pip installed (but none as of this writing have pip3)
77
- # therefore install python-pip in all configurations here.
78
-
79
- <% packages = %w(
80
- procps lsb-release bzip2 curl wget gpg zsh
81
- git make gcc g++ libyaml-dev libgmp-dev zlib1g-dev libsnappy-dev
82
- krb5-user krb5-kdc krb5-admin-server libsasl2-dev libsasl2-modules-gssapi-mit
83
- haproxy libcurl4
84
- python3-pip
85
- tzdata shared-mime-info software-properties-common xz-utils nodejs npm
86
- openjdk-17-jdk-headless
87
- ) %>
88
-
89
- <% if distro =~ /ubuntu2004/ %>
90
- <% packages << 'libsnmp35' %>
91
- <% elsif distro =~ /ubuntu2204|debian11/ %>
92
- <% packages << 'libsnmp40' %>
93
- <% else %>
94
- <% packages << 'libsnmp30' %>
95
- <% end %>
96
-
97
- <% if distro !~ /ubuntu2004|ubuntu2204|debian11/ %>
98
- <% packages << 'python-pip' %>
99
- <% end %>
100
-
101
- <% if distro =~ /ubuntu2204|debian11/ %>
102
- <% packages << 'python3-venv' %>
103
- <% end %>
104
-
105
- <% if distro =~ /ubuntu2004|ubuntu2204/ %>
106
- <% packages += %w(ruby bundler) %>
107
- <% end %>
108
-
109
- RUN apt-get update && apt-get install -y <%= packages.join(' ') %>
110
-
111
- <% if ubuntu? %>
112
- RUN wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null
113
- RUN echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/kitware.list >/dev/null
114
- <% end %>
115
- RUN apt-get update && apt-get install -y cmake
116
-
117
- <% else %>
118
-
119
- # Enterprise server: net-snmp
120
- # lsb_release: redhat-lsb-core
121
- # our runner scripts: which
122
- # Ruby dependency: libyaml
123
- # compiling python packages: gcc python-devel
124
- # Kerberos tests: krb5-workstation + cyrus-sasl-devel to build the
125
- # mongo_kerberos gem + cyrus-sasl-gssapi for authentication to work
126
- # Local Kerberos server: krb5-server
127
- # JRuby: java-17-openjdk
128
- #
129
- # Note: lacking cyrus-sasl-gssapi produces a cryptic message
130
- # "SASL(-4): no mechanism available: No worthy mechs found"
131
- # https://github.com/farorm/python-ad/issues/10
132
-
133
- RUN yum --enablerepo=powertools install -y redhat-lsb-core which git gcc gcc-c++ libyaml-devel krb5-server \
134
- krb5-workstation cyrus-sasl-devel cyrus-sasl-gssapi java-17-openjdk \
135
- net-snmp python38 python38-devel cmake nodejs npm xz
136
-
137
- <% end %>
138
-
139
- <% if preload? %>
140
-
141
- <% if distro =~ /debian9|ubuntu1604|ubuntu1804/ %>
142
- # Install python 3.7 for mlaunch.
143
- RUN curl -fL --retry 3 https://github.com/p-mongodb/deps/raw/main/<%= distro %>-python37.tar.xz | \
144
- tar xfJ - -C /opt
145
- ENV PATH=/opt/python37/bin:$PATH
146
- RUN python3 -V
147
- <% end %>
148
-
149
- <% if true || distro =~ /rhel|ubuntu1604/ %>
150
-
151
- # Ubuntu 12.04 ships pip 1.0 which is ancient and does not work.
152
- #
153
- # Ubuntu 16.04 apparently also ships a pip that does not work:
154
- # https://stackoverflow.com/questions/37495375/python-pip-install-throws-typeerror-unsupported-operand-types-for-retry
155
- # Potentially this only affects environments with less than ideal
156
- # connectivity (or, perhaps, when python package registry is experiencing
157
- # availability issues) when pip must retry to install packages.
158
- #
159
- # rhel apparently does not package pip at all in core repoitories,
160
- # therefore install it the manual way.
161
- #
162
- # https://pip.pypa.io/en/stable/installing/
163
- RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/get-pip.py | python3
164
- RUN python3 -m pip install --upgrade pip setuptools wheel
165
-
166
- <% end %>
167
-
168
- # Current virtualenv fails with
169
- # https://github.com/pypa/virtualenv/issues/1630
170
- <% mtools = 'legacy' %>
171
- <% case mtools
172
- when 'legacy' %>
173
- # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
174
- RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
175
- <% when 'git' %>
176
- # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
177
- RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil
178
-
179
- # Install mtools from git because released versions do not work with pymongo 4.0
180
- RUN git clone https://github.com/p-mongodb/mtools && \
181
- cd mtools && \
182
- python3 setup.py install
183
- <% else %>
184
- # mtools[mlaunch] does not work: https://github.com/rueckstiess/mtools/issues/856
185
- # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
186
- RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil mtools
187
- <% end %>
188
-
189
- <% if @env.fetch('MONGODB_VERSION') >= '4.4' %>
190
- # ubuntu1604 installs MarkupSafe 0.0.0 here instead of 2.0.0+
191
- # as specified by dependencies, causing OCSP mock to not work.
192
- RUN python3 -mpip install asn1crypto oscrypto flask --upgrade --ignore-installed
193
- <% end %>
194
-
195
- # FLE is tested against 4.0+ servers.
196
- <% if @env.fetch('MONGODB_VERSION') >= '4.0' %>
197
- # Requirements in drivers-evergreen-tools:
198
- # boto3~=1.19 cryptography~=3.4.8 pykmip~=0.10.0
199
- # cryptography does not install due to lacking setuptools_rust
200
- # (either that version or anything that isn't part of system packages)
201
- RUN python3 -mpip install boto3~=1.19 cryptography pykmip~=0.10.0 'sqlalchemy<2.0.0'
202
- <% end %>
203
-
204
- <% unless ruby_head? || system_ruby? %>
205
-
206
- RUN curl --retry 3 -fL <%= ruby_toolchain_url(ruby) %> |tar -xC /opt -Jf -
207
- ENV PATH=/opt/rubies/<%= ruby %>/bin:$PATH \
208
- USE_OPT_TOOLCHAIN=1
209
- #ENV PATH=/opt/rubies/python/3/bin:$PATH
210
-
211
- <% end %>
212
-
213
- <% end %>
214
-
215
- <% if distro =~ /debian|ubuntu/ %>
216
- # mkdir was moved from /usr/bin to /bin and MongoDB's distros
217
- # apparently keep using the old location.
218
- # This definitely affects debian10.
219
- # https://stackoverflow.com/questions/64653051/make-usr-bin-mkdir-command-not-found-during-gem-install-nokogiri-in-ubuntu
220
- RUN test -f /usr/bin/mkdir || ln -s /bin/mkdir /usr/bin/mkdir
221
- <% end %>
222
-
223
- WORKDIR /app
224
-
225
- <% if preload? && !ruby_head? %>
226
-
227
- COPY Gemfile .
228
- COPY gemfiles gemfiles
229
- COPY *.gemspec .
230
- COPY lib/<%= project_lib_subdir %>/version.rb lib/<%= project_lib_subdir %>/version.rb
231
- RUN bundle install
232
- COPY .evergreen/patch-debuggers .evergreen/patch-debuggers
233
- <% if system_ruby? %>
234
- # Running under docker with root access
235
- RUN .evergreen/patch-debuggers /var/lib/gems
236
- <% else %>
237
- RUN .evergreen/patch-debuggers /opt/rubies
238
- <% end %>
239
-
240
- <% end %>
241
-
242
- <% if fle? %>
243
- RUN curl --retry 3 -fL "https://s3.amazonaws.com/mciuploads/libmongocrypt/all/master/latest/libmongocrypt-all.tar.gz" |tar zxf -
244
-
245
- <%= "ENV LIBMONGOCRYPT_PATH #{libmongocrypt_path}" %>
246
- <% end %>
247
-
248
- <% if preload? %>
249
- ENV DOCKER_PRELOAD=1
250
- <% end %>
251
-
252
- RUN npm install --global yarn
253
-
254
- ENV MONGO_ORCHESTRATION_HOME=/tmpfs \
255
- PROJECT_DIRECTORY=/app \
256
- <%= @env.map { |k, v| %Q`#{k}="#{v.gsub('$', "\\$").gsub('"', "\\\"")}"` }.join(" \\\n ") %>
257
-
258
- <% if interactive? %>
259
- ENV INTERACTIVE=1
260
- <% end %>
261
-
262
- COPY . .
263
-
264
- RUN bash -c '. .evergreen/download-mongodb.sh && get_distro && get_mongodb_download_url_for "$DISTRO" "<%= server_version %>" && curl --retry 3 -fL $MONGODB_DOWNLOAD_URL |tar xzf - && mv mongo*/ /opt/mongodb'
265
- ENV USE_OPT_MONGODB=1 USE_SYSTEM_PYTHON_PACKAGES=1
266
-
267
- <% if expose? %>
268
-
269
- <% ports = [] %>
270
-
271
- <% 0.upto(num_exposed_ports-1) do |i| %>
272
- <% ports << 27017 + i %>
273
- <% end %>
274
-
275
- <% if @env['OCSP_ALGORITHM'] %>
276
- <% ports << 8100 %>
277
- <% end %>
278
-
279
- EXPOSE <%= ports.map(&:to_s).join(' ') %>
280
-
281
- <% end %>
@@ -1,16 +0,0 @@
1
- # Modeled after
2
- # https://github.com/mongodb-labs/drivers-evergreen-tools/blob/master/.evergreen/run-load-balancer.sh
3
-
4
- defaults
5
- mode tcp
6
- timeout connect 7s
7
- timeout client 55s
8
- timeout server 55s
9
-
10
- frontend mongos_frontend
11
- bind *:27017
12
- use_backend mongos_backend
13
-
14
- backend mongos_backend
15
- mode tcp
16
- server mongos_one 127.0.0.1:27117 check
@@ -1,17 +0,0 @@
1
- # Modeled after
2
- # https://github.com/mongodb-labs/drivers-evergreen-tools/blob/master/.evergreen/run-load-balancer.sh
3
-
4
- defaults
5
- mode tcp
6
- timeout connect 7s
7
- timeout client 55s
8
- timeout server 55s
9
-
10
- frontend mongos_frontend
11
- bind *:27017
12
- use_backend mongos_backend
13
-
14
- backend mongos_backend
15
- mode tcp
16
- server mongos_one 127.0.0.1:27117 check
17
- server mongos_two 127.0.0.1:27118 check
@@ -1,27 +0,0 @@
1
- show_local_instructions_impl() {
2
- local arch="$1"
3
- shift
4
-
5
- echo To test this configuration locally:
6
- local params=
7
- while test -n "$1"; do
8
- key="$1"
9
- shift
10
- # ${!foo} syntax is bash specific:
11
- # https://stackoverflow.com/questions/14049057/bash-expand-variable-in-a-variable
12
- value="${!key}"
13
- if test -n "$value"; then
14
- params="$params $key=$value"
15
- fi
16
- done
17
-
18
- # $0 has the current script being executed which is also the script that
19
- # was initially invoked EXCEPT for the AWS configurations which use the
20
- # wrapper script.
21
- if echo "$AUTH" |grep -q ^aws; then
22
- script=.evergreen/run-tests-aws-auth.sh
23
- else
24
- script="$0"
25
- fi
26
- echo ./.evergreen/test-on-docker -d $arch $params -s "$script"
27
- }
@@ -1,74 +0,0 @@
1
- detected_distro=
2
-
3
- host_distro() {
4
- if test -z "$detected_distro"; then
5
- detected_distro=`_detect_distro`
6
- fi
7
- echo "$detected_distro"
8
- }
9
-
10
- _detect_distro() {
11
- local distro
12
- distro=
13
- if test -f /etc/debian_version; then
14
- # Debian or Ubuntu
15
- if test "`uname -m`" = aarch64; then
16
- release=`lsb_release -rs |tr -d .`
17
- distro="ubuntu$release"-arm
18
- elif lsb_release -is |grep -q Debian; then
19
- release=`lsb_release -rs |tr -d .`
20
- # In docker, release is something like 9.11.
21
- # In evergreen, release is 9.2.
22
- release=`echo $release |sed -e 's/^9.*/92/'`
23
- distro="debian$release"
24
- elif lsb_release -is |grep -q Ubuntu; then
25
- if test "`uname -m`" = ppc64le; then
26
- release=`lsb_release -rs |tr -d .`
27
- distro="ubuntu$release-ppc"
28
- else
29
- release=`lsb_release -rs |tr -d .`
30
- distro="ubuntu$release"
31
- fi
32
- else
33
- echo 'Unknown Debian flavor' 1>&2
34
- exit 1
35
- fi
36
- elif lsb_release -is |grep -qi suse; then
37
- if test "`uname -m`" = s390x; then
38
- release=`lsb_release -rs |sed -e 's/\..*//'`
39
- distro="suse$release-s390x"
40
- else
41
- echo 'Unknown Suse arch' 1>&2
42
- exit 1
43
- fi
44
- elif test -f /etc/redhat-release; then
45
- # RHEL or CentOS
46
- if test "`uname -m`" = s390x; then
47
- distro=rhel72-s390x
48
- elif test "`uname -m`" = ppc64le; then
49
- distro=rhel71-ppc
50
- elif lsb_release >/dev/null 2>&1; then
51
- if lsb_release -is |grep -q RedHat; then
52
- release=`lsb_release -rs |tr -d .`
53
- distro="rhel$release"
54
- elif lsb_release -is |grep -q CentOS; then
55
- release=`lsb_release -rs |cut -c 1 |sed -e s/7/70/ -e s/6/62/ -e s/8/80/`
56
- distro="rhel$release"
57
- else
58
- echo 'Unknown RHEL flavor' 1>&2
59
- exit 1
60
- fi
61
- else
62
- echo lsb_release missing, using /etc/redhat-release 1>&2
63
- release=`grep -o 'release [0-9]' /etc/redhat-release |awk '{print $2}'`
64
- release=`echo $release |sed -e s/7/70/ -e s/6/62/ -e s/8/80/`
65
- distro=rhel$release
66
- fi
67
- else
68
- lsb_release -a
69
- echo 'Unknown distro' 1>&2
70
- exit 1
71
- fi
72
- echo "Detected distro: $distro" 1>&2
73
- echo $distro
74
- }