mongoid 7.1.6 → 7.1.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) 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 +31 -0
  6. data/lib/mongoid.rb +1 -0
  7. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +1 -1
  8. data/lib/mongoid/association/proxy.rb +1 -1
  9. data/lib/mongoid/association/referenced/has_many/enumerable.rb +1 -1
  10. data/lib/mongoid/association/referenced/has_many/proxy.rb +1 -1
  11. data/lib/mongoid/attributes.rb +8 -1
  12. data/lib/mongoid/criteria.rb +1 -1
  13. data/lib/mongoid/criteria/queryable/selector.rb +0 -4
  14. data/lib/mongoid/document.rb +3 -2
  15. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  16. data/lib/mongoid/interceptable.rb +4 -2
  17. data/lib/mongoid/reloadable.rb +5 -0
  18. data/lib/mongoid/validatable/associated.rb +1 -1
  19. data/lib/mongoid/validatable/presence.rb +3 -3
  20. data/lib/mongoid/validatable/uniqueness.rb +1 -1
  21. data/lib/mongoid/version.rb +1 -1
  22. data/lib/rails/generators/mongoid/config/config_generator.rb +8 -1
  23. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
  24. data/spec/app/models/address.rb +4 -0
  25. data/spec/app/models/customer.rb +11 -0
  26. data/spec/app/models/customer_address.rb +12 -0
  27. data/spec/app/models/dictionary.rb +6 -0
  28. data/spec/app/models/person.rb +9 -0
  29. data/spec/integration/app_spec.rb +178 -88
  30. data/spec/integration/callbacks_models.rb +49 -0
  31. data/spec/integration/callbacks_spec.rb +216 -0
  32. data/spec/integration/document_spec.rb +21 -0
  33. data/spec/lite_spec_helper.rb +6 -6
  34. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +50 -0
  35. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +17 -4
  36. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +17 -0
  37. data/spec/mongoid/atomic/paths_spec.rb +41 -0
  38. data/spec/mongoid/attributes_spec.rb +241 -0
  39. data/spec/mongoid/clients/options_spec.rb +2 -0
  40. data/spec/mongoid/contextual/atomic_spec.rb +17 -4
  41. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +36 -0
  42. data/spec/mongoid/criteria_spec.rb +4 -0
  43. data/spec/mongoid/document_query_spec.rb +51 -0
  44. data/spec/mongoid/errors/mongoid_error_spec.rb +20 -8
  45. data/spec/mongoid/factory_spec.rb +2 -2
  46. data/spec/mongoid/persistable/savable_spec.rb +4 -4
  47. data/spec/mongoid/persistable/settable_spec.rb +30 -0
  48. data/spec/mongoid/persistable_spec.rb +2 -2
  49. data/spec/shared/bin/get-mongodb-download-url +17 -0
  50. data/spec/shared/bin/s3-copy +45 -0
  51. data/spec/shared/bin/s3-upload +69 -0
  52. data/spec/shared/lib/mrss/cluster_config.rb +19 -4
  53. data/spec/shared/lib/mrss/constraints.rb +62 -6
  54. data/spec/shared/lib/mrss/docker_runner.rb +271 -0
  55. data/spec/shared/lib/mrss/lite_constraints.rb +16 -0
  56. data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
  57. data/spec/shared/lib/mrss/spec_organizer.rb +32 -2
  58. data/spec/shared/lib/mrss/utils.rb +15 -0
  59. data/spec/shared/share/Dockerfile.erb +322 -0
  60. data/spec/shared/share/haproxy-1.conf +16 -0
  61. data/spec/shared/share/haproxy-2.conf +17 -0
  62. data/spec/shared/shlib/distro.sh +73 -0
  63. data/spec/shared/shlib/server.sh +317 -0
  64. data/spec/shared/shlib/set_env.sh +131 -0
  65. data/spec/spec_helper.rb +3 -1
  66. data/spec/support/constraints.rb +0 -226
  67. data/spec/support/spec_config.rb +8 -0
  68. metadata +542 -480
  69. metadata.gz.sig +0 -0
  70. data/spec/support/child_process_helper.rb +0 -76
  71. data/spec/support/lite_constraints.rb +0 -22
@@ -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,73 @@
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
+ distro=ubuntu1604-arm
17
+ elif lsb_release -is |grep -q Debian; then
18
+ release=`lsb_release -rs |tr -d .`
19
+ # In docker, release is something like 9.11.
20
+ # In evergreen, release is 9.2.
21
+ release=`echo $release |sed -e 's/^9.*/92/'`
22
+ distro="debian$release"
23
+ elif lsb_release -is |grep -q Ubuntu; then
24
+ if test "`uname -m`" = ppc64le; then
25
+ release=`lsb_release -rs |tr -d .`
26
+ distro="ubuntu$release-ppc"
27
+ else
28
+ release=`lsb_release -rs |tr -d .`
29
+ distro="ubuntu$release"
30
+ fi
31
+ else
32
+ echo 'Unknown Debian flavor' 1>&2
33
+ exit 1
34
+ fi
35
+ elif lsb_release -is |grep -qi suse; then
36
+ if test "`uname -m`" = s390x; then
37
+ release=`lsb_release -rs |sed -e 's/\..*//'`
38
+ distro="suse$release-s390x"
39
+ else
40
+ echo 'Unknown Suse arch' 1>&2
41
+ exit 1
42
+ fi
43
+ elif test -f /etc/redhat-release; then
44
+ # RHEL or CentOS
45
+ if test "`uname -m`" = s390x; then
46
+ distro=rhel72-s390x
47
+ elif test "`uname -m`" = ppc64le; then
48
+ distro=rhel71-ppc
49
+ elif lsb_release >/dev/null 2>&1; then
50
+ if lsb_release -is |grep -q RedHat; then
51
+ release=`lsb_release -rs |tr -d .`
52
+ distro="rhel$release"
53
+ elif lsb_release -is |grep -q CentOS; then
54
+ release=`lsb_release -rs |cut -c 1 |sed -e s/7/70/ -e s/6/62/ -e s/8/80/`
55
+ distro="rhel$release"
56
+ else
57
+ echo 'Unknown RHEL flavor' 1>&2
58
+ exit 1
59
+ fi
60
+ else
61
+ echo lsb_release missing, using /etc/redhat-release 1>&2
62
+ release=`grep -o 'release [0-9]' /etc/redhat-release |awk '{print $2}'`
63
+ release=`echo $release |sed -e s/7/70/ -e s/6/62/ -e s/8/80/`
64
+ distro=rhel$release
65
+ fi
66
+ else
67
+ lsb_release -a
68
+ echo 'Unknown distro' 1>&2
69
+ exit 1
70
+ fi
71
+ echo "Detected distro: $distro" 1>&2
72
+ echo $distro
73
+ }
@@ -0,0 +1,317 @@
1
+ # This file contains functions pertaining to downloading, starting and
2
+ # configuring a MongoDB server.
3
+
4
+ set_fcv() {
5
+ if test -n "$FCV"; then
6
+ mongo --eval 'assert.commandWorked(db.adminCommand( { setFeatureCompatibilityVersion: "'"$FCV"'" } ));' "$MONGODB_URI"
7
+ mongo --quiet --eval 'db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )' |grep "version.*$FCV"
8
+ fi
9
+ }
10
+
11
+ add_uri_option() {
12
+ opt=$1
13
+
14
+ if ! echo $MONGODB_URI |sed -e s,//,, |grep -q /; then
15
+ MONGODB_URI="$MONGODB_URI/"
16
+ fi
17
+
18
+ if ! echo $MONGODB_URI |grep -q '?'; then
19
+ MONGODB_URI="$MONGODB_URI?"
20
+ fi
21
+
22
+ MONGODB_URI="$MONGODB_URI&$opt"
23
+ }
24
+
25
+ prepare_server() {
26
+ arch=$1
27
+
28
+ if test -n "$USE_OPT_MONGODB"; then
29
+ export BINDIR=/opt/mongodb/bin
30
+ export PATH=$BINDIR:$PATH
31
+ return
32
+ fi
33
+
34
+ if test "$MONGODB_VERSION" = latest; then
35
+ # Test on the most recent published 4.3 release.
36
+ # https://jira.mongodb.org/browse/RUBY-1724
37
+ echo 'Using "latest" server is not currently implemented' 1>&2
38
+ exit 1
39
+ else
40
+ download_version="$MONGODB_VERSION"
41
+ fi
42
+
43
+ url=`$(dirname $0)/get-mongodb-download-url $download_version $arch`
44
+
45
+ prepare_server_from_url $url
46
+ }
47
+
48
+ prepare_server_from_url() {
49
+ url=$1
50
+
51
+ mongodb_dir="$MONGO_ORCHESTRATION_HOME"/mdb
52
+ mkdir -p "$mongodb_dir"
53
+ curl --retry 3 $url |tar xz -C "$mongodb_dir" -f -
54
+ BINDIR="$mongodb_dir"/`basename $url |sed -e s/.tgz//`/bin
55
+ export PATH="$BINDIR":$PATH
56
+ }
57
+
58
+ install_mlaunch_virtualenv() {
59
+ python2 -V || true
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
76
+ }
77
+
78
+ install_mlaunch_pip() {
79
+ if test -n "$USE_OPT_MONGODB" && which mlaunch >/dev/null 2>&1; then
80
+ # mlaunch is preinstalled in the docker image, do not install it here
81
+ return
82
+ fi
83
+
84
+ python -V || true
85
+ python3 -V || true
86
+ pythonpath="$MONGO_ORCHESTRATION_HOME"/python
87
+ pip install -t "$pythonpath" 'mtools-legacy[mlaunch]'
88
+ export PATH="$pythonpath/bin":$PATH
89
+ export PYTHONPATH="$pythonpath"
90
+ }
91
+
92
+ install_mlaunch_git() {
93
+ repo=$1
94
+ branch=$2
95
+ python -V || true
96
+ python3 -V || true
97
+ which pip || true
98
+ which pip3 || true
99
+
100
+ if false; then
101
+ if ! virtualenv --version; then
102
+ python3 `which pip3` install --user virtualenv
103
+ export PATH=$HOME/.local/bin:$PATH
104
+ virtualenv --version
105
+ fi
106
+
107
+ venvpath="$MONGO_ORCHESTRATION_HOME"/venv
108
+ virtualenv -p python3 $venvpath
109
+ . $venvpath/bin/activate
110
+
111
+ pip3 install psutil pymongo
112
+
113
+ git clone $repo mlaunch
114
+ cd mlaunch
115
+ git checkout origin/$branch
116
+ python3 setup.py install
117
+ cd ..
118
+ else
119
+ pip install --user 'virtualenv==13'
120
+ export PATH=$HOME/.local/bin:$PATH
121
+
122
+ venvpath="$MONGO_ORCHESTRATION_HOME"/venv
123
+ virtualenv $venvpath
124
+ . $venvpath/bin/activate
125
+
126
+ pip install psutil pymongo
127
+
128
+ git clone $repo mlaunch
129
+ (cd mlaunch &&
130
+ git checkout origin/$branch &&
131
+ python setup.py install
132
+ )
133
+ fi
134
+ }
135
+
136
+ calculate_server_args() {
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
+
144
+ if test $mongo_version = latest; then
145
+ mongo_version=49
146
+ fi
147
+
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
+
156
+ # diagnosticDataCollectionEnabled is a mongod-only parameter on server 3.2,
157
+ # and mlaunch does not support specifying mongod-only parameters:
158
+ # https://github.com/rueckstiess/mtools/issues/696
159
+ # Pass it to 3.4 and newer servers where it is accepted by all daemons.
160
+ if test $mongo_version -ge 34; then
161
+ args="$args --setParameter diagnosticDataCollectionEnabled=false"
162
+ fi
163
+ local uri_options=
164
+ if test "$TOPOLOGY" = replica-set; then
165
+ args="$args --replicaset --name test-rs --nodes 2 --arbiter"
166
+ export HAVE_ARBITER=1
167
+ elif test "$TOPOLOGY" = sharded-cluster; then
168
+ args="$args --replicaset --nodes 2 --sharded 1 --name test-rs"
169
+ if test -z "$SINGLE_MONGOS"; then
170
+ args="$args --mongos 2"
171
+ fi
172
+ elif test "$TOPOLOGY" = standalone; then
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
190
+ fi
191
+ if test -n "$MMAPV1"; then
192
+ args="$args --storageEngine mmapv1 --smallfiles --noprealloc"
193
+ uri_options="$uri_options&retryReads=false&retryWrites=false"
194
+ fi
195
+ if test "$AUTH" = auth; then
196
+ args="$args --auth --username bob --password pwd123"
197
+ elif test "$AUTH" = x509; then
198
+ args="$args --auth --username bootstrap --password bootstrap"
199
+ elif echo "$AUTH" |grep -q ^aws; then
200
+ args="$args --auth --username bootstrap --password bootstrap"
201
+ args="$args --setParameter authenticationMechanisms=MONGODB-AWS,SCRAM-SHA-1,SCRAM-SHA-256"
202
+ uri_options="$uri_options&authMechanism=MONGODB-AWS&authSource=\$external"
203
+ fi
204
+
205
+ if test -n "$OCSP"; then
206
+ if test -z "$OCSP_ALGORITHM"; then
207
+ echo "OCSP_ALGORITHM must be set if OCSP is set" 1>&2
208
+ exit 1
209
+ fi
210
+ fi
211
+
212
+ local server_cert_path server_ca_path server_client_cert_path
213
+ if test "$SSL" = ssl || test -n "$OCSP_ALGORITHM"; then
214
+ if test -n "$OCSP_ALGORITHM"; then
215
+ if test "$OCSP_MUST_STAPLE" = 1; then
216
+ server_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server-mustStaple.pem
217
+ else
218
+ server_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
219
+ fi
220
+ server_ca_path=spec/support/ocsp/$OCSP_ALGORITHM/ca.crt
221
+ server_client_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
222
+ else
223
+ server_cert_path=spec/support/certificates/server-second-level-bundle.pem
224
+ server_ca_path=spec/support/certificates/ca.crt
225
+ server_client_cert_path=spec/support/certificates/client.pem
226
+ fi
227
+
228
+ if test -n "$OCSP_ALGORITHM"; then
229
+ client_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
230
+ elif test "$AUTH" = x509; then
231
+ client_cert_path=spec/support/certificates/client-x509.pem
232
+
233
+ uri_options="$uri_options&authMechanism=MONGODB-X509"
234
+ elif echo $RVM_RUBY |grep -q jruby; then
235
+ # JRuby does not grok chained certificate bundles -
236
+ # https://github.com/jruby/jruby-openssl/issues/181
237
+ client_cert_path=spec/support/certificates/client.pem
238
+ else
239
+ client_cert_path=spec/support/certificates/client-second-level-bundle.pem
240
+ fi
241
+
242
+ uri_options="$uri_options&tls=true&"\
243
+ "tlsCAFile=$server_ca_path&"\
244
+ "tlsCertificateKeyFile=$client_cert_path"
245
+
246
+ args="$args --sslMode requireSSL"\
247
+ " --sslPEMKeyFile $server_cert_path"\
248
+ " --sslCAFile $server_ca_path"\
249
+ " --sslClientCertificate $server_client_cert_path"
250
+ fi
251
+
252
+ # Docker forwards ports to the external interface, not to the loopback.
253
+ # Hence we must bind to all interfaces here.
254
+ if test -n "$BIND_ALL"; then
255
+ args="$args --bind_ip_all"
256
+ fi
257
+
258
+ # MongoDB servers pre-4.2 do not enable zlib compression by default
259
+ if test "$COMPRESSOR" = snappy; then
260
+ args="$args --networkMessageCompressors snappy"
261
+ elif test "$COMPRESSOR" = zlib; then
262
+ args="$args --networkMessageCompressors zlib"
263
+ fi
264
+
265
+ if test -n "$OCSP_ALGORITHM" || test -n "$OCSP_VERIFIER"; then
266
+ python3 -m pip install asn1crypto oscrypto flask
267
+ fi
268
+
269
+ local ocsp_args=
270
+ if test -n "$OCSP_ALGORITHM"; then
271
+ if test -z "$server_ca_path"; then
272
+ echo "server_ca_path must have been set" 1>&2
273
+ exit 1
274
+ fi
275
+ ocsp_args="--ca_file $server_ca_path"
276
+ if test "$OCSP_DELEGATE" = 1; then
277
+ ocsp_args="$ocsp_args \
278
+ --ocsp_responder_cert spec/support/ocsp/$OCSP_ALGORITHM/ocsp-responder.crt \
279
+ --ocsp_responder_key spec/support/ocsp/$OCSP_ALGORITHM/ocsp-responder.key \
280
+ "
281
+ else
282
+ ocsp_args="$ocsp_args \
283
+ --ocsp_responder_cert spec/support/ocsp/$OCSP_ALGORITHM/ca.crt \
284
+ --ocsp_responder_key spec/support/ocsp/$OCSP_ALGORITHM/ca.key \
285
+ "
286
+ fi
287
+ if test -n "$OCSP_STATUS"; then
288
+ ocsp_args="$ocsp_args --fault $OCSP_STATUS"
289
+ fi
290
+ fi
291
+
292
+ OCSP_ARGS="$ocsp_args"
293
+ SERVER_ARGS="$args"
294
+ URI_OPTIONS="$uri_options"
295
+ }
296
+
297
+ launch_ocsp_mock() {
298
+ if test -n "$OCSP_ARGS"; then
299
+ # Bind to 0.0.0.0 for Docker
300
+ python3 spec/support/ocsp/ocsp_mock.py $OCSP_ARGS -b 0.0.0.0 -p 8100 &
301
+ OCSP_MOCK_PID=$!
302
+ fi
303
+ }
304
+
305
+ launch_server() {
306
+ local dbdir="$1"
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
317
+ }
@@ -0,0 +1,131 @@
1
+ TOOLCHAIN_VERSION=289d4bec7c61e88000cea582c05fd8073b932122
2
+
3
+ set_env_java() {
4
+ ls -l /opt || true
5
+ ls -l /usr/lib/jvm || true
6
+
7
+ # Use toolchain java if it exists
8
+ if [ -f /opt/java/jdk8/bin/java ]; then
9
+ export JAVACMD=/opt/java/jdk8/bin/java
10
+ #export PATH=$PATH:/opt/java/jdk8/bin
11
+ fi
12
+
13
+ # ppc64le has it in a different place
14
+ if test -z "$JAVACMD" && [ -f /usr/lib/jvm/java-1.8.0/bin/java ]; then
15
+ export JAVACMD=/usr/lib/jvm/java-1.8.0/bin/java
16
+ #export PATH=$PATH:/usr/lib/jvm/java-1.8.0/bin
17
+ fi
18
+
19
+ if true; then
20
+ # newer
21
+ # rhel71-ppc, https://jira.mongodb.org/browse/BUILD-9231
22
+ if test -z "$JAVACMD" &&
23
+ (ls /opt/java || true) |grep -q java-1.8.0-openjdk-1.8.0 &&
24
+ test -f /opt/java/java-1.8.0-openjdk-1.8.0*/bin/java;
25
+ then
26
+ path=$(cd /opt/java && ls -d java-1.8.0-openjdk-1.8.0* |head -n 1)
27
+ export JAVACMD=/opt/java/"$path"/bin/java
28
+ fi
29
+ else
30
+ # older
31
+ # rhel71-ppc seems to have an /opt/java/jdk8/bin/java but it doesn't work
32
+ if test -n "$JAVACMD" && ! exec $JAVACMD -version; then
33
+ JAVACMD=
34
+ # we will try the /usr/lib/jvm then
35
+ fi
36
+ fi
37
+
38
+ if test -n "$JAVACMD"; then
39
+ eval $JAVACMD -version
40
+ elif which java 2>/dev/null; then
41
+ java -version
42
+ else
43
+ echo No java runtime found
44
+ fi
45
+ }
46
+
47
+ set_env_ruby() {
48
+ if test -z "$RVM_RUBY"; then
49
+ echo "Empty RVM_RUBY, aborting"
50
+ exit 2
51
+ fi
52
+
53
+ #ls -l /opt
54
+
55
+ # Necessary for jruby
56
+ set_env_java
57
+
58
+ if [ "$RVM_RUBY" == "ruby-head" ]; then
59
+ # When we use ruby-head, we do not install the Ruby toolchain.
60
+ # But we still need Python 3.6+ to run mlaunch.
61
+ # Since the ruby-head tests are run on ubuntu1604, we can use the
62
+ # globally installed Python toolchain.
63
+ #export PATH=/opt/python/3.7/bin:$PATH
64
+
65
+ # 12.04, 14.04 and 16.04 are good
66
+ curl --retry 3 -fL http://rubies.travis-ci.org/ubuntu/`lsb_release -rs`/x86_64/ruby-head.tar.bz2 |tar xfj -
67
+ # TODO adjust gem path?
68
+ export PATH=`pwd`/ruby-head/bin:`pwd`/ruby-head/lib/ruby/gems/2.6.0/bin:$PATH
69
+ ruby --version
70
+ ruby --version |grep dev
71
+ elif test "$SYSTEM_RUBY" = 1; then
72
+ # Nothing
73
+ :
74
+ else
75
+ if test "$USE_OPT_TOOLCHAIN" = 1; then
76
+ # Nothing, also PATH is already set
77
+ :
78
+ elif true; then
79
+
80
+ # For testing toolchains:
81
+ #toolchain_url=https://s3.amazonaws.com//mciuploads/mongo-ruby-toolchain/`host_distro`/f11598d091441ffc8d746aacfdc6c26741a3e629/mongo_ruby_driver_toolchain_`host_distro |tr - _`_patch_f11598d091441ffc8d746aacfdc6c26741a3e629_5e46f2793e8e866f36eda2c5_20_02_14_19_18_18.tar.gz
82
+ toolchain_url=http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/ruby-toolchain-`host_distro`-$TOOLCHAIN_VERSION.tar.xz
83
+ curl --retry 3 -fL $toolchain_url |tar Jxf -
84
+ export PATH=`pwd`/rubies/$RVM_RUBY/bin:$PATH
85
+ #export PATH=`pwd`/rubies/python/3/bin:$PATH
86
+
87
+ # Attempt to get bundler to report all errors - so far unsuccessful
88
+ #curl --retry 3 -o bundler-openssl.diff https://github.com/bundler/bundler/compare/v2.0.1...p-mongo:report-errors.diff
89
+ #find . -path \*/lib/bundler/fetcher.rb -exec patch {} bundler-openssl.diff \;
90
+
91
+ else
92
+
93
+ # Normal operation
94
+ if ! test -d $HOME/.rubies/$RVM_RUBY/bin; then
95
+ echo "Ruby directory does not exist: $HOME/.rubies/$RVM_RUBY/bin" 1>&2
96
+ echo "Contents of /opt:" 1>&2
97
+ ls -l /opt 1>&2 || true
98
+ echo ".rubies symlink:" 1>&2
99
+ ls -ld $HOME/.rubies 1>&2 || true
100
+ echo "Our rubies:" 1>&2
101
+ ls -l $HOME/.rubies 1>&2 || true
102
+ exit 2
103
+ fi
104
+ export PATH=$HOME/.rubies/$RVM_RUBY/bin:$PATH
105
+
106
+ fi
107
+
108
+ ruby --version
109
+
110
+ # Ensure we're using the right ruby
111
+ ruby_name=`echo $RVM_RUBY |awk -F- '{print $1}'`
112
+ ruby_version=`echo $RVM_RUBY |awk -F- '{print $2}' |cut -c 1-3`
113
+
114
+ ruby -v |fgrep $ruby_name
115
+ ruby -v |fgrep $ruby_version
116
+
117
+ # We shouldn't need to update rubygems, and there is value in
118
+ # testing on whatever rubygems came with each supported ruby version
119
+ #echo 'updating rubygems'
120
+ #gem update --system
121
+
122
+ # Only install bundler when not using ruby-head.
123
+ # ruby-head comes with bundler and gem complains
124
+ # because installing bundler would overwrite the bundler binary.
125
+ # We now install bundler in the toolchain, hence nothing needs to be done
126
+ # in the tests.
127
+ if false && echo "$RVM_RUBY" |grep -q jruby; then
128
+ gem install bundler -v '<2'
129
+ fi
130
+ fi
131
+ }