mongoid 8.0.9 → 8.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +3 -3
  4. data/README.md +3 -3
  5. data/Rakefile +18 -67
  6. data/lib/config/locales/en.yml +46 -14
  7. data/lib/mongoid/association/accessors.rb +3 -7
  8. data/lib/mongoid/association/builders.rb +1 -1
  9. data/lib/mongoid/association/eager_loadable.rb +0 -3
  10. data/lib/mongoid/association/embedded/batchable.rb +2 -2
  11. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  12. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +2 -1
  13. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +3 -2
  14. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +6 -6
  15. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +1 -1
  16. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +1 -1
  17. data/lib/mongoid/association/macros.rb +0 -6
  18. data/lib/mongoid/association/nested/one.rb +40 -2
  19. data/lib/mongoid/association/proxy.rb +1 -1
  20. data/lib/mongoid/association/referenced/counter_cache.rb +2 -2
  21. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +1 -1
  22. data/lib/mongoid/association/referenced/has_many/enumerable.rb +2 -2
  23. data/lib/mongoid/association/referenced/has_many/proxy.rb +3 -3
  24. data/lib/mongoid/association/reflections.rb +2 -2
  25. data/lib/mongoid/atomic.rb +7 -16
  26. data/lib/mongoid/attributes/dynamic.rb +1 -1
  27. data/lib/mongoid/attributes/nested.rb +2 -2
  28. data/lib/mongoid/attributes/processing.rb +5 -29
  29. data/lib/mongoid/attributes/projector.rb +1 -1
  30. data/lib/mongoid/attributes/readonly.rb +1 -1
  31. data/lib/mongoid/attributes.rb +8 -2
  32. data/lib/mongoid/changeable.rb +107 -5
  33. data/lib/mongoid/clients/storage_options.rb +2 -5
  34. data/lib/mongoid/clients/validators/storage.rb +1 -13
  35. data/lib/mongoid/collection_configurable.rb +58 -0
  36. data/lib/mongoid/composable.rb +2 -0
  37. data/lib/mongoid/config/defaults.rb +60 -0
  38. data/lib/mongoid/config/options.rb +0 -3
  39. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  40. data/lib/mongoid/config/validators.rb +1 -0
  41. data/lib/mongoid/config.rb +88 -27
  42. data/lib/mongoid/contextual/atomic.rb +1 -1
  43. data/lib/mongoid/contextual/memory.rb +233 -33
  44. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  45. data/lib/mongoid/contextual/mongo.rb +370 -133
  46. data/lib/mongoid/contextual/none.rb +162 -7
  47. data/lib/mongoid/contextual.rb +12 -0
  48. data/lib/mongoid/criteria/findable.rb +2 -2
  49. data/lib/mongoid/criteria/includable.rb +4 -3
  50. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -15
  51. data/lib/mongoid/criteria/queryable/key.rb +1 -1
  52. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  53. data/lib/mongoid/criteria/queryable/optional.rb +8 -8
  54. data/lib/mongoid/criteria/queryable/selectable.rb +43 -12
  55. data/lib/mongoid/criteria/queryable/selector.rb +1 -1
  56. data/lib/mongoid/criteria/queryable/storable.rb +1 -1
  57. data/lib/mongoid/criteria.rb +6 -5
  58. data/lib/mongoid/deprecable.rb +1 -2
  59. data/lib/mongoid/deprecation.rb +3 -3
  60. data/lib/mongoid/document.rb +1 -8
  61. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  62. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  63. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  64. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  65. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  66. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  67. data/lib/mongoid/errors.rb +4 -1
  68. data/lib/mongoid/extensions/hash.rb +2 -24
  69. data/lib/mongoid/extensions/object.rb +2 -2
  70. data/lib/mongoid/extensions/time.rb +2 -0
  71. data/lib/mongoid/fields/localized.rb +10 -0
  72. data/lib/mongoid/fields/standard.rb +10 -0
  73. data/lib/mongoid/fields.rb +59 -35
  74. data/lib/mongoid/findable.rb +27 -3
  75. data/lib/mongoid/interceptable.rb +6 -116
  76. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  77. data/lib/mongoid/matcher/type.rb +1 -1
  78. data/lib/mongoid/persistable/creatable.rb +1 -0
  79. data/lib/mongoid/persistable/deletable.rb +1 -1
  80. data/lib/mongoid/persistable/savable.rb +13 -1
  81. data/lib/mongoid/persistable/unsettable.rb +2 -2
  82. data/lib/mongoid/persistable/updatable.rb +51 -1
  83. data/lib/mongoid/persistable/upsertable.rb +20 -1
  84. data/lib/mongoid/persistable.rb +3 -0
  85. data/lib/mongoid/query_cache.rb +5 -1
  86. data/lib/mongoid/railties/database.rake +7 -2
  87. data/lib/mongoid/reloadable.rb +5 -3
  88. data/lib/mongoid/stateful.rb +22 -1
  89. data/lib/mongoid/tasks/database.rake +12 -0
  90. data/lib/mongoid/tasks/database.rb +20 -0
  91. data/lib/mongoid/timestamps/created.rb +1 -8
  92. data/lib/mongoid/traversable.rb +0 -12
  93. data/lib/mongoid/utils.rb +22 -0
  94. data/lib/mongoid/validatable/associated.rb +17 -98
  95. data/lib/mongoid/validatable/macros.rb +5 -5
  96. data/lib/mongoid/validatable.rb +4 -9
  97. data/lib/mongoid/version.rb +1 -1
  98. data/lib/mongoid/warnings.rb +17 -1
  99. data/lib/mongoid.rb +16 -3
  100. data/spec/integration/app_spec.rb +2 -2
  101. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +0 -40
  102. data/spec/integration/callbacks_spec.rb +99 -12
  103. data/spec/integration/discriminator_key_spec.rb +4 -5
  104. data/spec/integration/i18n_fallbacks_spec.rb +3 -2
  105. data/spec/mongoid/association/eager_spec.rb +2 -24
  106. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +27 -0
  107. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +20 -25
  108. data/spec/mongoid/association/embedded/embeds_many_models.rb +1 -0
  109. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +0 -4
  110. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  111. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -18
  112. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +5 -27
  113. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +9 -50
  114. data/spec/mongoid/association/syncable_spec.rb +1 -1
  115. data/spec/mongoid/association_spec.rb +0 -60
  116. data/spec/mongoid/attributes_spec.rb +3 -33
  117. data/spec/mongoid/changeable_spec.rb +299 -24
  118. data/spec/mongoid/clients_spec.rb +122 -13
  119. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  120. data/spec/mongoid/config/defaults_spec.rb +160 -0
  121. data/spec/mongoid/config_spec.rb +154 -27
  122. data/spec/mongoid/contextual/memory_spec.rb +332 -76
  123. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  124. data/spec/mongoid/contextual/mongo_spec.rb +1009 -125
  125. data/spec/mongoid/contextual/none_spec.rb +49 -2
  126. data/spec/mongoid/copyable_spec.rb +2 -10
  127. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -10
  128. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  129. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +419 -0
  130. data/spec/mongoid/criteria/queryable/selectable_spec.rb +1 -1
  131. data/spec/mongoid/criteria/queryable/selector_spec.rb +3 -76
  132. data/spec/mongoid/criteria/queryable/storable_spec.rb +0 -72
  133. data/spec/mongoid/criteria_projection_spec.rb +1 -4
  134. data/spec/mongoid/criteria_spec.rb +5 -9
  135. data/spec/mongoid/document_spec.rb +0 -27
  136. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  137. data/spec/mongoid/extensions/hash_spec.rb +3 -3
  138. data/spec/mongoid/extensions/time_spec.rb +8 -43
  139. data/spec/mongoid/extensions/time_with_zone_spec.rb +7 -52
  140. data/spec/mongoid/fields/localized_spec.rb +46 -28
  141. data/spec/mongoid/fields_spec.rb +136 -77
  142. data/spec/mongoid/findable_spec.rb +391 -34
  143. data/spec/mongoid/indexable_spec.rb +16 -10
  144. data/spec/mongoid/interceptable_spec.rb +153 -442
  145. data/spec/mongoid/interceptable_spec_models.rb +111 -51
  146. data/spec/mongoid/persistable/deletable_spec.rb +26 -6
  147. data/spec/mongoid/persistable/destroyable_spec.rb +26 -6
  148. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  149. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  150. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  151. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  152. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  153. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  154. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  155. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  156. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  157. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  158. data/spec/mongoid/persistable/upsertable_spec.rb +80 -6
  159. data/spec/mongoid/persistence_context_spec.rb +7 -57
  160. data/spec/mongoid/query_cache_spec.rb +56 -61
  161. data/spec/mongoid/reloadable_spec.rb +24 -28
  162. data/spec/mongoid/scopable_spec.rb +70 -0
  163. data/spec/mongoid/serializable_spec.rb +23 -44
  164. data/spec/mongoid/stateful_spec.rb +122 -8
  165. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  166. data/spec/mongoid/tasks/database_spec.rb +127 -0
  167. data/spec/mongoid/timestamps/created_spec.rb +0 -23
  168. data/spec/mongoid/timestamps_spec.rb +9 -11
  169. data/spec/mongoid/touchable_spec.rb +277 -5
  170. data/spec/mongoid/touchable_spec_models.rb +3 -1
  171. data/spec/mongoid/traversable_spec.rb +9 -24
  172. data/spec/mongoid/validatable/associated_spec.rb +34 -27
  173. data/spec/mongoid/validatable/uniqueness_spec.rb +2 -3
  174. data/spec/mongoid_spec.rb +36 -10
  175. data/spec/shared/LICENSE +20 -0
  176. data/spec/shared/bin/get-mongodb-download-url +17 -0
  177. data/spec/shared/bin/s3-copy +45 -0
  178. data/spec/shared/bin/s3-upload +69 -0
  179. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  180. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  181. data/spec/shared/lib/mrss/constraints.rb +378 -0
  182. data/spec/shared/lib/mrss/docker_runner.rb +298 -0
  183. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  184. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  185. data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
  186. data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
  187. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  188. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  189. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  190. data/spec/shared/lib/mrss/utils.rb +37 -0
  191. data/spec/shared/share/Dockerfile.erb +321 -0
  192. data/spec/shared/share/haproxy-1.conf +16 -0
  193. data/spec/shared/share/haproxy-2.conf +17 -0
  194. data/spec/shared/shlib/config.sh +27 -0
  195. data/spec/shared/shlib/distro.sh +74 -0
  196. data/spec/shared/shlib/server.sh +416 -0
  197. data/spec/shared/shlib/set_env.sh +169 -0
  198. data/spec/spec_helper.rb +5 -0
  199. data/spec/support/immutable_ids.rb +118 -0
  200. data/spec/support/macros.rb +47 -15
  201. data/spec/support/models/artist.rb +0 -1
  202. data/spec/support/models/band.rb +1 -0
  203. data/spec/support/models/book.rb +1 -0
  204. data/spec/support/models/building.rb +2 -0
  205. data/spec/support/models/cover.rb +10 -0
  206. data/spec/support/models/name.rb +0 -10
  207. data/spec/support/models/person.rb +0 -1
  208. data/spec/support/models/product.rb +1 -0
  209. data.tar.gz.sig +0 -0
  210. metadata +746 -636
  211. metadata.gz.sig +2 -0
  212. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  213. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
  214. data/spec/support/models/purse.rb +0 -9
@@ -0,0 +1,321 @@
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='e8c60866f54bed7e336a37df3a97d6ae1b971b7d'
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-8-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 libyaml-0-2 libgmp-dev zlib1g-dev libsnappy-dev
82
+ krb5-user krb5-kdc krb5-admin-server libsasl2-dev libsasl2-modules-gssapi-mit
83
+ haproxy
84
+ python3-pip
85
+ tzdata shared-mime-info software-properties-common
86
+ ) %>
87
+
88
+ <% if distro =~ /ubuntu2004/ %>
89
+ <% packages << 'libsnmp35' %>
90
+ <% elsif distro =~ /ubuntu2204|debian11/ %>
91
+ <% packages << 'libsnmp40' %>
92
+ <% else %>
93
+ <% packages << 'libsnmp30' %>
94
+ <% end %>
95
+
96
+ <% if distro !~ /ubuntu2004|ubuntu2204|debian11/ %>
97
+ <% packages << 'python-pip' %>
98
+ <% end %>
99
+
100
+ <% if distro =~ /ubuntu2204|debian11/ %>
101
+ <% packages << 'python3-venv' %>
102
+ <% end %>
103
+
104
+ <% if distro =~ /debian10|ubuntu2204|debian11/ %>
105
+ <% packages << 'openjdk-11-jdk-headless' %>
106
+ <% elsif distro =~ /ubuntu1404/ %>
107
+ # Ubuntu 14.04 only has openjdk 7, this is too old to be useful
108
+ <% else %>
109
+ <% packages << 'openjdk-8-jdk-headless' %>
110
+ <% end %>
111
+
112
+ # ubuntu1404, ubuntu1604: libcurl3
113
+ # ubuntu1804, ubuntu2004, debian10: libcurl4
114
+ <% if distro =~ /ubuntu1804|ubuntu2004|ubuntu2204|debian10|debian11/ %>
115
+ <% packages << 'libcurl4' %>
116
+ <% else %>
117
+ <% packages << 'libcurl3' %>
118
+ <% end %>
119
+
120
+ <% if distro =~ /ubuntu1804|ubuntu2004|ubuntu2204/ %>
121
+ <% packages << 'nodejs' %>
122
+ <% end %>
123
+
124
+ <% if distro =~ /ubuntu2004|ubuntu2204/ %>
125
+ <% packages += %w(ruby bundler) %>
126
+ <% end %>
127
+
128
+ RUN apt-get update && apt-get install -y <%= packages.join(' ') %>
129
+
130
+ <% if ubuntu? %>
131
+ 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
132
+ 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
133
+ <% end %>
134
+ RUN apt-get update && apt-get install -y cmake
135
+
136
+ <% else %>
137
+
138
+ <% if distro =~ /rhel6/ %>
139
+
140
+ # CentOS 6 is dead - to use it retrieve the packages from vault:
141
+ # https://stackoverflow.com/questions/53562691/error-cannot-retrieve-repository-metadata-repomd-xml-for-repository-base-pl
142
+
143
+ <%
144
+
145
+ cfg = <<-CFG
146
+ [base]
147
+ name=CentOS-$releasever - Base
148
+ #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
149
+ #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
150
+ baseurl=http://vault.centos.org/6.10/os/x86_64/
151
+ gpgcheck=1
152
+ gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
153
+ CFG
154
+
155
+ %>
156
+
157
+ RUN printf "<%= cfg.gsub("\n", "\\n") %>" >/etc/yum.repos.d/CentOS-Base.repo
158
+
159
+ <% end %>
160
+
161
+ # Enterprise server: net-snmp
162
+ # lsb_release: redhat-lsb-core
163
+ # our runner scripts: which
164
+ # Ruby dependency: libyaml
165
+ # compiling python packages: gcc python-devel
166
+ # Kerberos tests: krb5-workstation + cyrus-sasl-devel to build the
167
+ # mongo_kerberos gem + cyrus-sasl-gssapi for authentication to work
168
+ # Local Kerberos server: krb5-server
169
+ # JRuby: java-1.8.0-openjdk
170
+ #
171
+ # Note: lacking cyrus-sasl-gssapi produces a cryptic message
172
+ # "SASL(-4): no mechanism available: No worthy mechs found"
173
+ # https://github.com/farorm/python-ad/issues/10
174
+
175
+ RUN yum install -y redhat-lsb-core which git gcc libyaml krb5-server \
176
+ krb5-workstation cyrus-sasl-devel cyrus-sasl-gssapi java-1.8.0-openjdk \
177
+ net-snmp python38 python38-devel cmake nodejs
178
+
179
+ <% end %>
180
+
181
+ <% if preload? %>
182
+
183
+ <% if distro =~ /debian9|ubuntu1604|ubuntu1804/ %>
184
+ # Install python 3.7 for mlaunch.
185
+ RUN curl -fL --retry 3 https://github.com/p-mongodb/deps/raw/main/<%= distro %>-python37.tar.xz | \
186
+ tar xfJ - -C /opt
187
+ ENV PATH=/opt/python37/bin:$PATH
188
+ RUN python3 -V
189
+ <% end %>
190
+
191
+ <% if true || distro =~ /rhel|ubuntu1604/ %>
192
+
193
+ # Ubuntu 12.04 ships pip 1.0 which is ancient and does not work.
194
+ #
195
+ # Ubuntu 16.04 apparently also ships a pip that does not work:
196
+ # https://stackoverflow.com/questions/37495375/python-pip-install-throws-typeerror-unsupported-operand-types-for-retry
197
+ # Potentially this only affects environments with less than ideal
198
+ # connectivity (or, perhaps, when python package registry is experiencing
199
+ # availability issues) when pip must retry to install packages.
200
+ #
201
+ # rhel apparently does not package pip at all in core repoitories,
202
+ # therefore install it the manual way.
203
+ #
204
+ # https://pip.pypa.io/en/stable/installing/
205
+ RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/get-pip.py | python3
206
+ RUN python3 -m pip install --upgrade pip setuptools wheel
207
+
208
+ <% end %>
209
+
210
+ # Current virtualenv fails with
211
+ # https://github.com/pypa/virtualenv/issues/1630
212
+ <% mtools = 'legacy' %>
213
+ <% case mtools
214
+ when 'legacy' %>
215
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
216
+ RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
217
+ <% when 'git' %>
218
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
219
+ RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil
220
+
221
+ # Install mtools from git because released versions do not work with pymongo 4.0
222
+ RUN git clone https://github.com/p-mongodb/mtools && \
223
+ cd mtools && \
224
+ python3 setup.py install
225
+ <% else %>
226
+ # mtools[mlaunch] does not work: https://github.com/rueckstiess/mtools/issues/856
227
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
228
+ RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil mtools
229
+ <% end %>
230
+
231
+ <% if @env.fetch('MONGODB_VERSION') >= '4.4' %>
232
+ # ubuntu1604 installs MarkupSafe 0.0.0 here instead of 2.0.0+
233
+ # as specified by dependencies, causing OCSP mock to not work.
234
+ RUN python3 -mpip install asn1crypto oscrypto flask --upgrade --ignore-installed
235
+ <% end %>
236
+
237
+ # FLE is tested against 4.0+ servers.
238
+ <% if @env.fetch('MONGODB_VERSION') >= '4.0' %>
239
+ # Requirements in drivers-evergreen-tools:
240
+ # boto3~=1.19 cryptography~=3.4.8 pykmip~=0.10.0
241
+ # cryptography does not install due to lacking setuptools_rust
242
+ # (either that version or anything that isn't part of system packages)
243
+ RUN python3 -mpip install boto3~=1.19 cryptography pykmip~=0.10.0 'sqlalchemy<2.0.0'
244
+ <% end %>
245
+
246
+ <% unless ruby_head? || system_ruby? %>
247
+
248
+ RUN curl --retry 3 -fL <%= ruby_toolchain_url(ruby) %> |tar -xC /opt -Jf -
249
+ ENV PATH=/opt/rubies/<%= ruby %>/bin:$PATH \
250
+ USE_OPT_TOOLCHAIN=1
251
+ #ENV PATH=/opt/rubies/python/3/bin:$PATH
252
+
253
+ <% end %>
254
+
255
+ <% end %>
256
+
257
+ <% if distro =~ /debian|ubuntu/ %>
258
+ # mkdir was moved from /usr/bin to /bin and MongoDB's distros
259
+ # apparently keep using the old location.
260
+ # This definitely affects debian10.
261
+ # https://stackoverflow.com/questions/64653051/make-usr-bin-mkdir-command-not-found-during-gem-install-nokogiri-in-ubuntu
262
+ RUN test -f /usr/bin/mkdir || ln -s /bin/mkdir /usr/bin/mkdir
263
+ <% end %>
264
+
265
+ WORKDIR /app
266
+
267
+ <% if preload? && !ruby_head? %>
268
+
269
+ COPY Gemfile .
270
+ COPY gemfiles gemfiles
271
+ COPY *.gemspec .
272
+ COPY lib/<%= project_lib_subdir %>/version.rb lib/<%= project_lib_subdir %>/version.rb
273
+ RUN bundle install
274
+ COPY .evergreen/patch-debuggers .evergreen/patch-debuggers
275
+ <% if system_ruby? %>
276
+ # Running under docker with root access
277
+ RUN .evergreen/patch-debuggers /var/lib/gems
278
+ <% else %>
279
+ RUN .evergreen/patch-debuggers /opt/rubies
280
+ <% end %>
281
+
282
+ <% end %>
283
+
284
+ <% if fle? %>
285
+ RUN curl --retry 3 -fL "https://s3.amazonaws.com/mciuploads/libmongocrypt/all/master/latest/libmongocrypt-all.tar.gz" |tar zxf -
286
+
287
+ <%= "ENV LIBMONGOCRYPT_PATH #{libmongocrypt_path}" %>
288
+ <% end %>
289
+
290
+ <% if preload? %>
291
+ ENV DOCKER_PRELOAD=1
292
+ <% end %>
293
+
294
+ ENV MONGO_ORCHESTRATION_HOME=/tmpfs \
295
+ PROJECT_DIRECTORY=/app \
296
+ <%= @env.map { |k, v| %Q`#{k}="#{v.gsub('$', "\\$").gsub('"', "\\\"")}"` }.join(" \\\n ") %>
297
+
298
+ <% if interactive? %>
299
+ ENV INTERACTIVE=1
300
+ <% end %>
301
+
302
+ COPY . .
303
+
304
+ 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'
305
+ ENV USE_OPT_MONGODB=1 USE_SYSTEM_PYTHON_PACKAGES=1
306
+
307
+ <% if expose? %>
308
+
309
+ <% ports = [] %>
310
+
311
+ <% 0.upto(num_exposed_ports-1) do |i| %>
312
+ <% ports << 27017 + i %>
313
+ <% end %>
314
+
315
+ <% if @env['OCSP_ALGORITHM'] %>
316
+ <% ports << 8100 %>
317
+ <% end %>
318
+
319
+ EXPOSE <%= ports.map(&:to_s).join(' ') %>
320
+
321
+ <% end %>
@@ -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
@@ -0,0 +1,27 @@
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
+ }
@@ -0,0 +1,74 @@
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
+ }