mongoid 7.2.1 → 7.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.md +1 -1
  5. data/Rakefile +16 -0
  6. data/lib/config/locales/en.yml +2 -2
  7. data/lib/mongoid/association/accessors.rb +13 -1
  8. data/lib/mongoid/association/constrainable.rb +1 -1
  9. data/lib/mongoid/association/depending.rb +4 -4
  10. data/lib/mongoid/association/embedded/batchable.rb +1 -1
  11. data/lib/mongoid/association/embedded/embedded_in.rb +1 -1
  12. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +10 -3
  13. data/lib/mongoid/association/nested/many.rb +1 -1
  14. data/lib/mongoid/association/nested/one.rb +4 -2
  15. data/lib/mongoid/association/proxy.rb +6 -1
  16. data/lib/mongoid/association/referenced/auto_save.rb +2 -2
  17. data/lib/mongoid/association/referenced/has_many/enumerable.rb +493 -495
  18. data/lib/mongoid/association/referenced/has_many/proxy.rb +2 -2
  19. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +2 -2
  20. data/lib/mongoid/attributes.rb +32 -14
  21. data/lib/mongoid/attributes/projector.rb +120 -0
  22. data/lib/mongoid/cacheable.rb +2 -2
  23. data/lib/mongoid/clients.rb +1 -1
  24. data/lib/mongoid/clients/factory.rb +22 -8
  25. data/lib/mongoid/config.rb +19 -2
  26. data/lib/mongoid/contextual/aggregable/mongo.rb +10 -8
  27. data/lib/mongoid/copyable.rb +1 -1
  28. data/lib/mongoid/criteria.rb +4 -5
  29. data/lib/mongoid/criteria/findable.rb +1 -1
  30. data/lib/mongoid/criteria/queryable/expandable.rb +0 -24
  31. data/lib/mongoid/criteria/queryable/extensions.rb +0 -4
  32. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
  33. data/lib/mongoid/criteria/queryable/mergeable.rb +46 -20
  34. data/lib/mongoid/criteria/queryable/selectable.rb +8 -8
  35. data/lib/mongoid/document.rb +1 -15
  36. data/lib/mongoid/errors/delete_restriction.rb +8 -9
  37. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  38. data/lib/mongoid/evolvable.rb +1 -1
  39. data/lib/mongoid/extensions/boolean.rb +1 -2
  40. data/lib/mongoid/extensions/false_class.rb +1 -1
  41. data/lib/mongoid/extensions/hash.rb +2 -2
  42. data/lib/mongoid/extensions/true_class.rb +1 -1
  43. data/lib/mongoid/fields.rb +43 -5
  44. data/lib/mongoid/inspectable.rb +1 -1
  45. data/lib/mongoid/matcher.rb +26 -43
  46. data/lib/mongoid/matcher/bits.rb +41 -0
  47. data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
  48. data/lib/mongoid/matcher/bits_all_set.rb +20 -0
  49. data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
  50. data/lib/mongoid/matcher/bits_any_set.rb +20 -0
  51. data/lib/mongoid/matcher/elem_match.rb +2 -1
  52. data/lib/mongoid/matcher/expression.rb +9 -14
  53. data/lib/mongoid/matcher/field_expression.rb +4 -5
  54. data/lib/mongoid/matcher/field_operator.rb +6 -0
  55. data/lib/mongoid/matcher/mod.rb +17 -0
  56. data/lib/mongoid/matcher/type.rb +99 -0
  57. data/lib/mongoid/persistable/deletable.rb +1 -2
  58. data/lib/mongoid/persistable/destroyable.rb +8 -2
  59. data/lib/mongoid/persistable/updatable.rb +27 -2
  60. data/lib/mongoid/query_cache.rb +35 -29
  61. data/lib/mongoid/reloadable.rb +5 -0
  62. data/lib/mongoid/selectable.rb +5 -7
  63. data/lib/mongoid/shardable.rb +21 -5
  64. data/lib/mongoid/touchable.rb +23 -4
  65. data/lib/mongoid/validatable/associated.rb +1 -1
  66. data/lib/mongoid/validatable/presence.rb +3 -3
  67. data/lib/mongoid/validatable/uniqueness.rb +1 -1
  68. data/lib/mongoid/version.rb +1 -1
  69. data/lib/rails/generators/mongoid/config/config_generator.rb +8 -1
  70. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
  71. data/spec/integration/app_spec.rb +139 -82
  72. data/spec/integration/associations/embeds_many_spec.rb +44 -0
  73. data/spec/integration/associations/has_one_spec.rb +48 -0
  74. data/spec/integration/criteria/date_field_spec.rb +1 -1
  75. data/spec/integration/document_spec.rb +30 -0
  76. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  77. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  78. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  79. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  80. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  81. data/spec/integration/matcher_operator_data/elem_match.yml +46 -0
  82. data/spec/integration/matcher_operator_data/implicit_traversal.yml +96 -0
  83. data/spec/integration/matcher_operator_data/in.yml +16 -0
  84. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  85. data/spec/integration/matcher_operator_data/type.yml +70 -0
  86. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  87. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  88. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  89. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  90. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  91. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  92. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  93. data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
  94. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  95. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  96. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  97. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  98. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  99. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  100. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  101. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  102. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  103. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  104. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  105. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  106. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  107. data/spec/lite_spec_helper.rb +4 -3
  108. data/spec/mongoid/association/depending_spec.rb +391 -352
  109. data/spec/mongoid/association/nested/one_spec.rb +18 -14
  110. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +25 -8
  111. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -1
  112. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -1
  113. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -1
  114. data/spec/mongoid/association/referenced/has_one_models.rb +8 -0
  115. data/spec/mongoid/atomic/paths_spec.rb +64 -12
  116. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  117. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  118. data/spec/mongoid/attributes/projector_spec.rb +41 -0
  119. data/spec/mongoid/attributes_spec.rb +333 -0
  120. data/spec/mongoid/clients/factory_spec.rb +48 -0
  121. data/spec/mongoid/config_spec.rb +32 -0
  122. data/spec/mongoid/contextual/atomic_spec.rb +17 -4
  123. data/spec/mongoid/contextual/mongo_spec.rb +2 -2
  124. data/spec/mongoid/criteria/modifiable_spec.rb +1 -1
  125. data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -73
  126. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -1
  127. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +105 -7
  128. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +229 -24
  129. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
  130. data/spec/mongoid/criteria/queryable/selectable_spec.rb +1 -565
  131. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
  132. data/spec/mongoid/criteria_projection_spec.rb +411 -0
  133. data/spec/mongoid/criteria_spec.rb +0 -275
  134. data/spec/mongoid/document_fields_spec.rb +26 -0
  135. data/spec/mongoid/document_query_spec.rb +51 -0
  136. data/spec/mongoid/document_spec.rb +13 -13
  137. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
  138. data/spec/mongoid/errors/mongoid_error_spec.rb +20 -8
  139. data/spec/mongoid/extensions/false_class_spec.rb +1 -1
  140. data/spec/mongoid/extensions/string_spec.rb +5 -5
  141. data/spec/mongoid/extensions/true_class_spec.rb +1 -1
  142. data/spec/mongoid/fields/localized_spec.rb +4 -4
  143. data/spec/mongoid/fields_spec.rb +4 -4
  144. data/spec/mongoid/inspectable_spec.rb +12 -4
  145. data/spec/mongoid/matcher/extract_attribute_data/numeric_keys.yml +104 -0
  146. data/spec/mongoid/matcher/extract_attribute_data/traversal.yml +68 -88
  147. data/spec/mongoid/matcher/extract_attribute_spec.rb +3 -13
  148. data/spec/mongoid/persistable/deletable_spec.rb +175 -1
  149. data/spec/mongoid/persistable/destroyable_spec.rb +191 -3
  150. data/spec/mongoid/persistable/savable_spec.rb +3 -5
  151. data/spec/mongoid/persistable/settable_spec.rb +30 -0
  152. data/spec/mongoid/persistable/upsertable_spec.rb +1 -1
  153. data/spec/mongoid/persistable_spec.rb +2 -2
  154. data/spec/mongoid/query_cache_middleware_spec.rb +8 -0
  155. data/spec/mongoid/reloadable_spec.rb +18 -1
  156. data/spec/mongoid/shardable_spec.rb +44 -0
  157. data/spec/mongoid/touchable_spec.rb +104 -16
  158. data/spec/mongoid/touchable_spec_models.rb +52 -0
  159. data/spec/mongoid/validatable_spec.rb +1 -1
  160. data/spec/shared/bin/get-mongodb-download-url +17 -0
  161. data/spec/shared/bin/s3-copy +45 -0
  162. data/spec/shared/bin/s3-upload +69 -0
  163. data/spec/shared/lib/mrss/cluster_config.rb +19 -4
  164. data/spec/shared/lib/mrss/constraints.rb +46 -8
  165. data/spec/shared/lib/mrss/docker_runner.rb +10 -1
  166. data/spec/shared/lib/mrss/lite_constraints.rb +16 -0
  167. data/spec/shared/lib/mrss/server_version_registry.rb +79 -33
  168. data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
  169. data/spec/shared/lib/mrss/utils.rb +15 -0
  170. data/spec/shared/share/Dockerfile.erb +122 -29
  171. data/spec/shared/share/haproxy-1.conf +16 -0
  172. data/spec/shared/share/haproxy-2.conf +17 -0
  173. data/spec/shared/shlib/server.sh +58 -11
  174. data/spec/shared/shlib/set_env.sh +4 -1
  175. data/spec/spec_helper.rb +7 -3
  176. data/spec/support/client_registry.rb +9 -0
  177. data/spec/support/models/bolt.rb +8 -0
  178. data/spec/support/models/hole.rb +13 -0
  179. data/spec/support/models/mop.rb +9 -0
  180. data/spec/support/models/nut.rb +8 -0
  181. data/spec/support/models/person.rb +6 -0
  182. data/spec/support/models/sealer.rb +8 -0
  183. data/spec/support/models/shirt.rb +12 -0
  184. data/spec/support/models/spacer.rb +8 -0
  185. data/spec/support/models/threadlocker.rb +8 -0
  186. data/spec/support/models/washer.rb +8 -0
  187. data/spec/support/spec_config.rb +8 -0
  188. metadata +636 -528
  189. metadata.gz.sig +0 -0
  190. data/spec/support/cluster_config.rb +0 -158
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ # encoding: utf-8
3
+
1
4
  autoload :JSON, 'json'
2
5
  autoload :FileUtils, 'fileutils'
3
6
  autoload :Find, 'find'
@@ -22,18 +25,28 @@ module Mrss
22
25
  end
23
26
 
24
27
  def initialize(root: nil, classifiers:, priority_order:,
25
- spec_root: nil, rspec_json_path: nil, rspec_all_json_path: nil
28
+ spec_root: nil, rspec_json_path: nil, rspec_all_json_path: nil,
29
+ randomize: false
26
30
  )
27
31
  @spec_root = spec_root || File.join(root, 'spec')
28
32
  @classifiers = classifiers
29
33
  @priority_order = priority_order
30
34
  @rspec_json_path = rspec_json_path || File.join(root, 'tmp/rspec.json')
31
35
  @rspec_all_json_path = rspec_all_json_path || File.join(root, 'tmp/rspec-all.json')
36
+ @randomize = !!randomize
32
37
  end
33
38
 
34
39
  attr_reader :spec_root, :classifiers, :priority_order
35
40
  attr_reader :rspec_json_path, :rspec_all_json_path
36
41
 
42
+ def randomize?
43
+ @randomize
44
+ end
45
+
46
+ def seed
47
+ @seed ||= (rand * 100_000).to_i
48
+ end
49
+
37
50
  def buckets
38
51
  @buckets ||= {}.tap do |buckets|
39
52
  Find.find(spec_root) do |path|
@@ -78,10 +91,20 @@ module Mrss
78
91
  end
79
92
 
80
93
  def run
94
+ run_buckets(*buckets.keys)
95
+ end
96
+
97
+ def run_buckets(*buckets)
81
98
  FileUtils.rm_f(rspec_all_json_path)
82
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
+
83
107
  failed = []
84
- buckets = self.buckets.dup
85
108
 
86
109
  priority_order.each do |category|
87
110
  if files = buckets.delete(category)
@@ -109,8 +132,12 @@ module Mrss
109
132
  puts "Running #{category.to_s.gsub('_', ' ')} tests"
110
133
  FileUtils.rm_f(rspec_json_path)
111
134
  cmd = %w(rspec) + paths
135
+ if randomize?
136
+ cmd += %W(--order rand:#{seed})
137
+ end
112
138
 
113
139
  begin
140
+ puts "Running #{cmd.join(' ')}"
114
141
  ChildProcessHelper.check_call(cmd)
115
142
  ensure
116
143
  if File.exist?(rspec_json_path)
@@ -136,6 +163,9 @@ module Mrss
136
163
  end
137
164
  new.delete('version')
138
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')
139
169
  unless new.empty?
140
170
  raise "Unhandled rspec results keys: #{new.keys.join(', ')}"
141
171
  end
@@ -0,0 +1,15 @@
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
@@ -58,6 +58,7 @@ FROM <%= base_image %>
58
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
61
62
  # Kerberos testing: krb5-user
62
63
  # Local Kerberos server: krb5-kdc krb5-admin-server
63
64
  # Installing mlaunch from git: git
@@ -65,7 +66,7 @@ FROM <%= base_image %>
65
66
  # nio4r on JRuby: libgmp-dev
66
67
  # Snappy compression: libsnappy-dev
67
68
  # nokogiri: zlib1g-dev
68
- # Mongoid testing: tzdata
69
+ # Mongoid testing: tzdata shared-mime-info
69
70
  # Mongoid application testing: nodejs (8.x or newer)
70
71
  #
71
72
  # We currently use Python 2-compatible version of mtools, which
@@ -76,20 +77,42 @@ FROM <%= base_image %>
76
77
  <% packages = %w(
77
78
  lsb-release bzip2 curl zsh
78
79
  git make gcc libyaml-0-2 libgmp-dev zlib1g-dev libsnappy-dev
79
- libsnmp30
80
80
  krb5-user krb5-kdc krb5-admin-server libsasl2-dev libsasl2-modules-gssapi-mit
81
- python-pip python2.7-dev python3-pip
82
- tzdata
81
+ haproxy
82
+ python3-pip
83
+ tzdata shared-mime-info
83
84
  ) %>
84
85
 
85
- # ubuntu1404 only has openjdk-7-jre-headless
86
- <% if distro !~ /ubuntu1404/ %>
86
+ <% if distro =~ /ubuntu1404/ %>
87
+ # For building python & setuptools
88
+ <% packages += %w(libssl-dev unzip) %>
89
+ <% end %>
90
+
91
+ <% if distro !~ /ubuntu2004/ %>
92
+ <% packages += %w(python2.7-dev) %>
93
+ <% end %>
94
+
95
+ <% if distro =~ /ubuntu2004/ %>
96
+ <% packages << 'libsnmp35' %>
97
+ <% else %>
98
+ <% packages << 'libsnmp30' %>
99
+ <% end %>
100
+
101
+ <% if distro !~ /ubuntu2004/ %>
102
+ <% packages << 'python-pip' %>
103
+ <% end %>
104
+
105
+ <% if distro =~ /debian10/ %>
106
+ <% packages << 'openjdk-11-jre-headless' %>
107
+ <% elsif distro =~ /ubuntu1404/ %>
108
+ # Ubuntu 14.04 only has openjdk 7, this is too old to be useful
109
+ <% else %>
87
110
  <% packages << 'openjdk-8-jre-headless' %>
88
111
  <% end %>
89
112
 
90
113
  # ubuntu1404, ubuntu1604: libcurl3
91
- # ubuntu1804: libcurl4
92
- <% if distro =~ /ubuntu1804/ %>
114
+ # ubuntu1804, ubuntu2004, debian10: libcurl4
115
+ <% if distro =~ /ubuntu1804|ubuntu2004|debian10/ %>
93
116
  <% packages << 'libcurl4' %>
94
117
  <% else %>
95
118
  <% packages << 'libcurl3' %>
@@ -99,9 +122,36 @@ FROM <%= base_image %>
99
122
  <% packages << 'nodejs' %>
100
123
  <% end %>
101
124
 
125
+ <% if distro =~ /ubuntu2004/ %>
126
+ <% packages += %w(ruby ruby2.7 bundler python2 python2-dev) %>
127
+ <% end %>
128
+
102
129
  RUN apt-get update && apt-get install -y <%= packages.join(' ') %>
103
130
  <% else %>
104
131
 
132
+ <% if distro =~ /rhel6/ %>
133
+
134
+ # CentOS 6 is dead - to use it retrieve the packages from vault:
135
+ # https://stackoverflow.com/questions/53562691/error-cannot-retrieve-repository-metadata-repomd-xml-for-repository-base-pl
136
+
137
+ <%
138
+
139
+ cfg = <<-CFG
140
+ [base]
141
+ name=CentOS-$releasever - Base
142
+ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
143
+ #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
144
+ baseurl=http://vault.centos.org/6.10/os/x86_64/
145
+ gpgcheck=1
146
+ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
147
+ CFG
148
+
149
+ %>
150
+
151
+ RUN printf "<%= cfg.gsub("\n", "\\n") %>" >/etc/yum.repos.d/CentOS-Base.repo
152
+
153
+ <% end %>
154
+
105
155
  # Enterprise server: net-snmp
106
156
  # lsb_release: redhat-lsb-core
107
157
  # our runner scripts: which
@@ -118,7 +168,7 @@ FROM <%= base_image %>
118
168
 
119
169
  RUN yum install -y redhat-lsb-core which git gcc libyaml krb5-server \
120
170
  krb5-workstation cyrus-sasl-devel cyrus-sasl-gssapi java-1.8.0-openjdk \
121
- net-snmp
171
+ net-snmp python3
122
172
 
123
173
  <% if distro =~ /rhel6/ %>
124
174
 
@@ -134,27 +184,34 @@ FROM <%= base_image %>
134
184
  RUN yum install -y python-devel
135
185
 
136
186
  <% end %>
137
-
187
+
138
188
  <% end %>
139
189
 
140
190
  <% if preload? %>
141
191
 
142
- WORKDIR /app
143
-
144
- RUN curl --retry 3 -fL <%= server_download_url %> |tar xzf - && \
145
- mv mongo*/ /opt/mongodb
146
- ENV USE_OPT_MONGODB=1
147
-
148
- <% unless ruby_head? %>
149
-
150
- RUN curl --retry 3 -fL <%= ruby_toolchain_url %> |tar -xC /opt -Jf -
151
- ENV PATH=/opt/rubies/<%= ruby %>/bin:$PATH \
152
- USE_OPT_TOOLCHAIN=1
153
- #ENV PATH=/opt/rubies/python/3/bin:$PATH
154
-
155
- <% end %>
156
-
157
- <% if distro =~ /rhel|ubuntu1604/ %>
192
+ <% if distro =~ /ubuntu1404/ %>
193
+
194
+ # I couldn't find a prebuilt package of anything more recent than 2.7.6
195
+ # for 14.04.
196
+ RUN curl --retry 3 -fL https://www.python.org/ftp/python/2.7.16/Python-2.7.16.tar.xz | \
197
+ tar xfJ - && \
198
+ cd Python-2.7.16 && \
199
+ ./configure && \
200
+ nice make -j4 && \
201
+ make install && \
202
+ cd .. && rm -rf Python-2.7.16
203
+
204
+ ENV PATH=/usr/local/bin:$PATH
205
+
206
+ RUN curl --retry 3 -fL -o setuptools-44.1.1.zip https://files.pythonhosted.org/packages/b2/40/4e00501c204b457f10fe410da0c97537214b2265247bc9a5bc6edd55b9e4/setuptools-44.1.1.zip && \
207
+ unzip setuptools-44.1.1.zip && \
208
+ cd setuptools-44.1.1 && \
209
+ python setup.py install && \
210
+ cd .. && rm -rf setuptools-44.1.1
211
+
212
+ <% end%>
213
+
214
+ <% if true || distro =~ /rhel|ubuntu1604/ %>
158
215
 
159
216
  # Ubuntu 12.04 ships pip 1.0 which is ancient and does not work.
160
217
  #
@@ -168,17 +225,48 @@ FROM <%= base_image %>
168
225
  # therefore install it the manual way.
169
226
  #
170
227
  # https://pip.pypa.io/en/stable/installing/
171
- RUN curl --retry 3 -fL https://raw.githubusercontent.com/pypa/get-pip/master/2.7/get-pip.py | python
228
+ RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/2.7/get-pip.py | python2
229
+
230
+ <% end %>
172
231
 
232
+ # Current virtualenv fails with
233
+ # https://github.com/pypa/virtualenv/issues/1630
234
+ <% if distro =~ /ubuntu2004/ %>
235
+ RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
236
+ <% else %>
237
+ RUN python2 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]'
173
238
  <% end %>
174
239
 
175
240
  RUN pip --version && \
176
241
  pip install mtools-legacy[mlaunch]
177
242
 
178
243
  <% if @env.fetch('MONGODB_VERSION') >= '4.4' %>
179
- RUN python3 -mpip install asn1crypto oscrypto flask
244
+ # ubuntu1604 installs MarkupSafe 0.0.0 here instead of 2.0.0+
245
+ # as specified by dependencies, causing OCSP mock to not work.
246
+ RUN python3 -mpip install asn1crypto oscrypto flask --upgrade
180
247
  <% end %>
181
248
 
249
+ <% unless ruby_head? || system_ruby? %>
250
+
251
+ RUN curl --retry 3 -fL <%= ruby_toolchain_url %> |tar -xC /opt -Jf -
252
+ ENV PATH=/opt/rubies/<%= ruby %>/bin:$PATH \
253
+ USE_OPT_TOOLCHAIN=1
254
+ #ENV PATH=/opt/rubies/python/3/bin:$PATH
255
+
256
+ <% end %>
257
+
258
+ RUN curl --retry 3 -fL <%= server_download_url %> |tar xzf - && \
259
+ mv mongo*/ /opt/mongodb
260
+ ENV USE_OPT_MONGODB=1 USE_SYSTEM_PYTHON_PACKAGES=1
261
+
262
+ <% end %>
263
+
264
+ <% if distro =~ /debian|ubuntu/ %>
265
+ # mkdir was moved from /usr/bin to /bin and MongoDB's distros
266
+ # apparently keep using the old location.
267
+ # This definitely affects debian10.
268
+ # https://stackoverflow.com/questions/64653051/make-usr-bin-mkdir-command-not-found-during-gem-install-nokogiri-in-ubuntu
269
+ RUN test -f /usr/bin/mkdir || ln -s /bin/mkdir /usr/bin/mkdir
182
270
  <% end %>
183
271
 
184
272
  WORKDIR /app
@@ -191,7 +279,12 @@ WORKDIR /app
191
279
  COPY lib/<%= project_lib_subdir %>/version.rb lib/<%= project_lib_subdir %>/version.rb
192
280
  RUN bundle install
193
281
  COPY .evergreen/patch-debuggers .evergreen/patch-debuggers
194
- RUN .evergreen/patch-debuggers /opt/rubies
282
+ <% if system_ruby? %>
283
+ # Running under docker with root access
284
+ RUN .evergreen/patch-debuggers /var/lib/gems
285
+ <% else %>
286
+ RUN .evergreen/patch-debuggers /opt/rubies
287
+ <% end %>
195
288
 
196
289
  <% end %>
197
290
 
@@ -0,0 +1,16 @@
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
@@ -0,0 +1,17 @@
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
@@ -57,13 +57,22 @@ prepare_server_from_url() {
57
57
 
58
58
  install_mlaunch_virtualenv() {
59
59
  python2 -V || true
60
- # Current virtualenv fails with
61
- # https://github.com/pypa/virtualenv/issues/1630
62
- python -m pip install 'virtualenv<20' --user
63
- venvpath="$MONGO_ORCHESTRATION_HOME"/venv
64
- python2 -m virtualenv -p python2 $venvpath
65
- . $venvpath/bin/activate
66
- pip install 'mtools-legacy[mlaunch]'
60
+ if ! python2 -m virtualenv -h >/dev/null; then
61
+ # Current virtualenv fails with
62
+ # https://github.com/pypa/virtualenv/issues/1630
63
+ python2 -m pip install 'virtualenv<20' --user
64
+ fi
65
+ if test "$USE_SYSTEM_PYTHON_PACKAGES" = 1 &&
66
+ python2 -m pip list |grep mtools-legacy
67
+ then
68
+ # Use the existing mtools-legacy
69
+ :
70
+ else
71
+ venvpath="$MONGO_ORCHESTRATION_HOME"/venv
72
+ python2 -m virtualenv -p python2 $venvpath
73
+ . $venvpath/bin/activate
74
+ pip install 'mtools-legacy[mlaunch]'
75
+ fi
67
76
  }
68
77
 
69
78
  install_mlaunch_pip() {
@@ -126,11 +135,24 @@ install_mlaunch_git() {
126
135
 
127
136
  calculate_server_args() {
128
137
  local mongo_version=`echo $MONGODB_VERSION |tr -d .`
138
+
139
+ if test -z "$mongo_version"; then
140
+ echo "$MONGODB_VERSION must be set and not contain only dots" 1>&2
141
+ exit 3
142
+ fi
143
+
129
144
  if test $mongo_version = latest; then
130
- mongo_version=44
145
+ mongo_version=49
131
146
  fi
132
147
 
133
148
  local args="--setParameter enableTestCommands=1"
149
+
150
+ if test $mongo_version -ge 50; then
151
+ args="$args --setParameter acceptApiVersion2=1"
152
+ elif test $mongo_version -ge 47; then
153
+ args="$args --setParameter acceptAPIVersion2=1"
154
+ fi
155
+
134
156
  # diagnosticDataCollectionEnabled is a mongod-only parameter on server 3.2,
135
157
  # and mlaunch does not support specifying mongod-only parameters:
136
158
  # https://github.com/rueckstiess/mtools/issues/696
@@ -140,15 +162,31 @@ calculate_server_args() {
140
162
  fi
141
163
  local uri_options=
142
164
  if test "$TOPOLOGY" = replica-set; then
143
- args="$args --replicaset --name ruby-driver-rs --nodes 2 --arbiter"
165
+ args="$args --replicaset --name test-rs --nodes 2 --arbiter"
144
166
  export HAVE_ARBITER=1
145
167
  elif test "$TOPOLOGY" = sharded-cluster; then
146
- args="$args --replicaset --nodes 1 --sharded 1 --name ruby-driver-rs"
168
+ args="$args --replicaset --nodes 2 --sharded 1 --name test-rs"
147
169
  if test -z "$SINGLE_MONGOS"; then
148
170
  args="$args --mongos 2"
149
171
  fi
150
- else
172
+ elif test "$TOPOLOGY" = standalone; then
151
173
  args="$args --single"
174
+ elif test "$TOPOLOGY" = load-balanced; then
175
+ args="$args --replicaset --nodes 2 --sharded 1 --name test-rs --port 27117"
176
+ if test -z "$MRSS_ROOT"; then
177
+ echo "Please set MRSS_ROOT" 1>&2
178
+ exit 2
179
+ fi
180
+ if test -n "$SINGLE_MONGOS"; then
181
+ haproxy_config=$MRSS_ROOT/share/haproxy-1.conf
182
+ else
183
+ args="$args --mongos 2"
184
+ haproxy_config=$MRSS_ROOT/share/haproxy-1.conf
185
+ fi
186
+ uri_options="$uri_options&loadBalanced=true"
187
+ else
188
+ echo "Unknown topology: $TOPOLOGY" 1>&2
189
+ exit 1
152
190
  fi
153
191
  if test -n "$MMAPV1"; then
154
192
  args="$args --storageEngine mmapv1 --smallfiles --noprealloc"
@@ -267,4 +305,13 @@ launch_ocsp_mock() {
267
305
  launch_server() {
268
306
  local dbdir="$1"
269
307
  python -m mtools.mlaunch.mlaunch --dir "$dbdir" --binarypath "$BINDIR" $SERVER_ARGS
308
+
309
+ if test "$TOPOLOGY" = load-balanced; then
310
+ if test -z "$haproxy_config"; then
311
+ echo haproxy_config should have been set 1>&2
312
+ exit 3
313
+ fi
314
+
315
+ haproxy -D -f $haproxy_config -p $mongodb_dir/haproxy.pid
316
+ fi
270
317
  }