mongo 2.14.0 → 2.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/mongo/background_thread.rb +11 -0
- data/lib/mongo/cluster/sdam_flow.rb +14 -0
- data/lib/mongo/cluster.rb +0 -26
- data/lib/mongo/collection/view/iterable.rb +16 -6
- data/lib/mongo/collection.rb +2 -0
- data/lib/mongo/cursor.rb +10 -0
- data/lib/mongo/database.rb +14 -2
- data/lib/mongo/grid/fs_bucket.rb +37 -37
- data/lib/mongo/operation/parallel_scan/command.rb +1 -2
- data/lib/mongo/operation/shared/read_preference_supported.rb +38 -36
- data/lib/mongo/operation/shared/sessions_supported.rb +3 -2
- data/lib/mongo/protocol/msg.rb +2 -2
- data/lib/mongo/protocol/query.rb +11 -11
- data/lib/mongo/server/connection_pool.rb +0 -2
- data/lib/mongo/server.rb +0 -14
- data/lib/mongo/server_selector/secondary_preferred.rb +2 -7
- data/lib/mongo/srv/monitor.rb +0 -11
- data/lib/mongo/version.rb +1 -1
- data/spec/integration/query_cache_spec.rb +45 -0
- data/spec/integration/sdam_error_handling_spec.rb +1 -1
- data/spec/integration/sdam_events_spec.rb +3 -5
- data/spec/integration/secondary_reads_spec.rb +102 -0
- data/spec/mongo/cluster_spec.rb +2 -18
- data/spec/mongo/index/view_spec.rb +4 -2
- data/spec/mongo/operation/read_preference_legacy_spec.rb +9 -19
- data/spec/mongo/operation/read_preference_op_msg_spec.rb +3 -3
- data/spec/mongo/server/app_metadata_shared.rb +33 -7
- data/spec/mongo/server_selector/secondary_preferred_spec.rb +6 -6
- data/spec/runners/transactions/operation.rb +13 -2
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/lib/mrss/cluster_config.rb +221 -0
- data/spec/shared/lib/mrss/constraints.rb +43 -0
- data/spec/shared/lib/mrss/docker_runner.rb +265 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +16 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +115 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +3 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +231 -0
- data/spec/shared/shlib/distro.sh +73 -0
- data/spec/shared/shlib/server.sh +290 -0
- data/spec/shared/shlib/set_env.sh +128 -0
- data/spec/solo/clean_exit_spec.rb +21 -0
- data/spec/support/client_registry.rb +8 -4
- data/spec/support/client_registry_macros.rb +4 -4
- data/spec/support/spec_config.rb +12 -0
- data/spec/support/spec_setup.rb +48 -38
- data.tar.gz.sig +0 -0
- metadata +1005 -983
- metadata.gz.sig +0 -0
@@ -0,0 +1,290 @@
|
|
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 47; then
|
151
|
+
args="$args --setParameter acceptAPIVersion2=1"
|
152
|
+
fi
|
153
|
+
|
154
|
+
# diagnosticDataCollectionEnabled is a mongod-only parameter on server 3.2,
|
155
|
+
# and mlaunch does not support specifying mongod-only parameters:
|
156
|
+
# https://github.com/rueckstiess/mtools/issues/696
|
157
|
+
# Pass it to 3.4 and newer servers where it is accepted by all daemons.
|
158
|
+
if test $mongo_version -ge 34; then
|
159
|
+
args="$args --setParameter diagnosticDataCollectionEnabled=false"
|
160
|
+
fi
|
161
|
+
local uri_options=
|
162
|
+
if test "$TOPOLOGY" = replica-set; then
|
163
|
+
args="$args --replicaset --name ruby-driver-rs --nodes 2 --arbiter"
|
164
|
+
export HAVE_ARBITER=1
|
165
|
+
elif test "$TOPOLOGY" = sharded-cluster; then
|
166
|
+
args="$args --replicaset --nodes 2 --sharded 1 --name ruby-driver-rs"
|
167
|
+
if test -z "$SINGLE_MONGOS"; then
|
168
|
+
args="$args --mongos 2"
|
169
|
+
fi
|
170
|
+
else
|
171
|
+
args="$args --single"
|
172
|
+
fi
|
173
|
+
if test -n "$MMAPV1"; then
|
174
|
+
args="$args --storageEngine mmapv1 --smallfiles --noprealloc"
|
175
|
+
uri_options="$uri_options&retryReads=false&retryWrites=false"
|
176
|
+
fi
|
177
|
+
if test "$AUTH" = auth; then
|
178
|
+
args="$args --auth --username bob --password pwd123"
|
179
|
+
elif test "$AUTH" = x509; then
|
180
|
+
args="$args --auth --username bootstrap --password bootstrap"
|
181
|
+
elif echo "$AUTH" |grep -q ^aws; then
|
182
|
+
args="$args --auth --username bootstrap --password bootstrap"
|
183
|
+
args="$args --setParameter authenticationMechanisms=MONGODB-AWS,SCRAM-SHA-1,SCRAM-SHA-256"
|
184
|
+
uri_options="$uri_options&authMechanism=MONGODB-AWS&authSource=\$external"
|
185
|
+
fi
|
186
|
+
|
187
|
+
if test -n "$OCSP"; then
|
188
|
+
if test -z "$OCSP_ALGORITHM"; then
|
189
|
+
echo "OCSP_ALGORITHM must be set if OCSP is set" 1>&2
|
190
|
+
exit 1
|
191
|
+
fi
|
192
|
+
fi
|
193
|
+
|
194
|
+
local server_cert_path server_ca_path server_client_cert_path
|
195
|
+
if test "$SSL" = ssl || test -n "$OCSP_ALGORITHM"; then
|
196
|
+
if test -n "$OCSP_ALGORITHM"; then
|
197
|
+
if test "$OCSP_MUST_STAPLE" = 1; then
|
198
|
+
server_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server-mustStaple.pem
|
199
|
+
else
|
200
|
+
server_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
|
201
|
+
fi
|
202
|
+
server_ca_path=spec/support/ocsp/$OCSP_ALGORITHM/ca.crt
|
203
|
+
server_client_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
|
204
|
+
else
|
205
|
+
server_cert_path=spec/support/certificates/server-second-level-bundle.pem
|
206
|
+
server_ca_path=spec/support/certificates/ca.crt
|
207
|
+
server_client_cert_path=spec/support/certificates/client.pem
|
208
|
+
fi
|
209
|
+
|
210
|
+
if test -n "$OCSP_ALGORITHM"; then
|
211
|
+
client_cert_path=spec/support/ocsp/$OCSP_ALGORITHM/server.pem
|
212
|
+
elif test "$AUTH" = x509; then
|
213
|
+
client_cert_path=spec/support/certificates/client-x509.pem
|
214
|
+
|
215
|
+
uri_options="$uri_options&authMechanism=MONGODB-X509"
|
216
|
+
elif echo $RVM_RUBY |grep -q jruby; then
|
217
|
+
# JRuby does not grok chained certificate bundles -
|
218
|
+
# https://github.com/jruby/jruby-openssl/issues/181
|
219
|
+
client_cert_path=spec/support/certificates/client.pem
|
220
|
+
else
|
221
|
+
client_cert_path=spec/support/certificates/client-second-level-bundle.pem
|
222
|
+
fi
|
223
|
+
|
224
|
+
uri_options="$uri_options&tls=true&"\
|
225
|
+
"tlsCAFile=$server_ca_path&"\
|
226
|
+
"tlsCertificateKeyFile=$client_cert_path"
|
227
|
+
|
228
|
+
args="$args --sslMode requireSSL"\
|
229
|
+
" --sslPEMKeyFile $server_cert_path"\
|
230
|
+
" --sslCAFile $server_ca_path"\
|
231
|
+
" --sslClientCertificate $server_client_cert_path"
|
232
|
+
fi
|
233
|
+
|
234
|
+
# Docker forwards ports to the external interface, not to the loopback.
|
235
|
+
# Hence we must bind to all interfaces here.
|
236
|
+
if test -n "$BIND_ALL"; then
|
237
|
+
args="$args --bind_ip_all"
|
238
|
+
fi
|
239
|
+
|
240
|
+
# MongoDB servers pre-4.2 do not enable zlib compression by default
|
241
|
+
if test "$COMPRESSOR" = snappy; then
|
242
|
+
args="$args --networkMessageCompressors snappy"
|
243
|
+
elif test "$COMPRESSOR" = zlib; then
|
244
|
+
args="$args --networkMessageCompressors zlib"
|
245
|
+
fi
|
246
|
+
|
247
|
+
if test -n "$OCSP_ALGORITHM" || test -n "$OCSP_VERIFIER"; then
|
248
|
+
python3 -m pip install asn1crypto oscrypto flask
|
249
|
+
fi
|
250
|
+
|
251
|
+
local ocsp_args=
|
252
|
+
if test -n "$OCSP_ALGORITHM"; then
|
253
|
+
if test -z "$server_ca_path"; then
|
254
|
+
echo "server_ca_path must have been set" 1>&2
|
255
|
+
exit 1
|
256
|
+
fi
|
257
|
+
ocsp_args="--ca_file $server_ca_path"
|
258
|
+
if test "$OCSP_DELEGATE" = 1; then
|
259
|
+
ocsp_args="$ocsp_args \
|
260
|
+
--ocsp_responder_cert spec/support/ocsp/$OCSP_ALGORITHM/ocsp-responder.crt \
|
261
|
+
--ocsp_responder_key spec/support/ocsp/$OCSP_ALGORITHM/ocsp-responder.key \
|
262
|
+
"
|
263
|
+
else
|
264
|
+
ocsp_args="$ocsp_args \
|
265
|
+
--ocsp_responder_cert spec/support/ocsp/$OCSP_ALGORITHM/ca.crt \
|
266
|
+
--ocsp_responder_key spec/support/ocsp/$OCSP_ALGORITHM/ca.key \
|
267
|
+
"
|
268
|
+
fi
|
269
|
+
if test -n "$OCSP_STATUS"; then
|
270
|
+
ocsp_args="$ocsp_args --fault $OCSP_STATUS"
|
271
|
+
fi
|
272
|
+
fi
|
273
|
+
|
274
|
+
OCSP_ARGS="$ocsp_args"
|
275
|
+
SERVER_ARGS="$args"
|
276
|
+
URI_OPTIONS="$uri_options"
|
277
|
+
}
|
278
|
+
|
279
|
+
launch_ocsp_mock() {
|
280
|
+
if test -n "$OCSP_ARGS"; then
|
281
|
+
# Bind to 0.0.0.0 for Docker
|
282
|
+
python3 spec/support/ocsp/ocsp_mock.py $OCSP_ARGS -b 0.0.0.0 -p 8100 &
|
283
|
+
OCSP_MOCK_PID=$!
|
284
|
+
fi
|
285
|
+
}
|
286
|
+
|
287
|
+
launch_server() {
|
288
|
+
local dbdir="$1"
|
289
|
+
python -m mtools.mlaunch.mlaunch --dir "$dbdir" --binarypath "$BINDIR" $SERVER_ARGS
|
290
|
+
}
|
@@ -0,0 +1,128 @@
|
|
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
|
+
else
|
72
|
+
if test "$USE_OPT_TOOLCHAIN" = 1; then
|
73
|
+
# nothing, also PATH is already set
|
74
|
+
:
|
75
|
+
elif true; then
|
76
|
+
|
77
|
+
# For testing toolchains:
|
78
|
+
#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
|
79
|
+
toolchain_url=http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/ruby-toolchain-`host_distro`-$TOOLCHAIN_VERSION.tar.xz
|
80
|
+
curl --retry 3 -fL $toolchain_url |tar Jxf -
|
81
|
+
export PATH=`pwd`/rubies/$RVM_RUBY/bin:$PATH
|
82
|
+
#export PATH=`pwd`/rubies/python/3/bin:$PATH
|
83
|
+
|
84
|
+
# Attempt to get bundler to report all errors - so far unsuccessful
|
85
|
+
#curl --retry 3 -o bundler-openssl.diff https://github.com/bundler/bundler/compare/v2.0.1...p-mongo:report-errors.diff
|
86
|
+
#find . -path \*/lib/bundler/fetcher.rb -exec patch {} bundler-openssl.diff \;
|
87
|
+
|
88
|
+
else
|
89
|
+
|
90
|
+
# Normal operation
|
91
|
+
if ! test -d $HOME/.rubies/$RVM_RUBY/bin; then
|
92
|
+
echo "Ruby directory does not exist: $HOME/.rubies/$RVM_RUBY/bin" 1>&2
|
93
|
+
echo "Contents of /opt:" 1>&2
|
94
|
+
ls -l /opt 1>&2 || true
|
95
|
+
echo ".rubies symlink:" 1>&2
|
96
|
+
ls -ld $HOME/.rubies 1>&2 || true
|
97
|
+
echo "Our rubies:" 1>&2
|
98
|
+
ls -l $HOME/.rubies 1>&2 || true
|
99
|
+
exit 2
|
100
|
+
fi
|
101
|
+
export PATH=$HOME/.rubies/$RVM_RUBY/bin:$PATH
|
102
|
+
|
103
|
+
fi
|
104
|
+
|
105
|
+
ruby --version
|
106
|
+
|
107
|
+
# Ensure we're using the right ruby
|
108
|
+
ruby_name=`echo $RVM_RUBY |awk -F- '{print $1}'`
|
109
|
+
ruby_version=`echo $RVM_RUBY |awk -F- '{print $2}' |cut -c 1-3`
|
110
|
+
|
111
|
+
ruby -v |fgrep $ruby_name
|
112
|
+
ruby -v |fgrep $ruby_version
|
113
|
+
|
114
|
+
# We shouldn't need to update rubygems, and there is value in
|
115
|
+
# testing on whatever rubygems came with each supported ruby version
|
116
|
+
#echo 'updating rubygems'
|
117
|
+
#gem update --system
|
118
|
+
|
119
|
+
# Only install bundler when not using ruby-head.
|
120
|
+
# ruby-head comes with bundler and gem complains
|
121
|
+
# because installing bundler would overwrite the bundler binary.
|
122
|
+
# We now install bundler in the toolchain, hence nothing needs to be done
|
123
|
+
# in the tests.
|
124
|
+
if false && echo "$RVM_RUBY" |grep -q jruby; then
|
125
|
+
gem install bundler -v '<2'
|
126
|
+
fi
|
127
|
+
fi
|
128
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'mongo'
|
2
|
+
|
3
|
+
describe 'Clean exit' do
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
unless %w(1 true yes).include?(ENV['SOLO'])
|
7
|
+
skip 'Set SOLO=1 in environment to run solo tests'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'with SRV URI' do
|
12
|
+
let(:uri) do
|
13
|
+
'mongodb+srv://test1.test.build.10gen.cc/?tls=false'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'exits cleanly' do
|
17
|
+
client = Mongo::Client.new(uri)
|
18
|
+
client.database.collection_names.to_a
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -188,10 +188,14 @@ class ClientRegistry
|
|
188
188
|
end
|
189
189
|
private :new_global_client
|
190
190
|
|
191
|
-
def new_local_client(*args)
|
192
|
-
|
193
|
-
|
194
|
-
|
191
|
+
def new_local_client(*args, &block)
|
192
|
+
if block_given?
|
193
|
+
Mongo::Client.new(*args, &block)
|
194
|
+
else
|
195
|
+
Mongo::Client.new(*args).tap do |client|
|
196
|
+
@lock.synchronize do
|
197
|
+
@local_clients << client
|
198
|
+
end
|
195
199
|
end
|
196
200
|
end
|
197
201
|
end
|