bson 5.0.2 → 5.1.0

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -0
  3. data/ext/bson/extconf.rb +1 -1
  4. data/lib/bson/binary.rb +126 -4
  5. data/lib/bson/document.rb +8 -0
  6. data/lib/bson/object_id.rb +1 -1
  7. data/lib/bson/regexp.rb +3 -3
  8. data/lib/bson/vector.rb +44 -0
  9. data/lib/bson/version.rb +5 -16
  10. data/lib/bson.rb +1 -0
  11. data/spec/bson/document_as_spec.rb +14 -0
  12. data/spec/bson/vector_spec.rb +33 -0
  13. data/spec/runners/binary_vector.rb +78 -0
  14. data/spec/shared/LICENSE +20 -0
  15. data/spec/shared/bin/get-mongodb-download-url +17 -0
  16. data/spec/shared/bin/s3-copy +45 -0
  17. data/spec/shared/bin/s3-upload +69 -0
  18. data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
  19. data/spec/shared/lib/mrss/cluster_config.rb +231 -0
  20. data/spec/shared/lib/mrss/constraints.rb +378 -0
  21. data/spec/shared/lib/mrss/docker_runner.rb +298 -0
  22. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  23. data/spec/shared/lib/mrss/event_subscriber.rb +210 -0
  24. data/spec/shared/lib/mrss/lite_constraints.rb +238 -0
  25. data/spec/shared/lib/mrss/release/candidate.rb +284 -0
  26. data/spec/shared/lib/mrss/release/product_data.rb +144 -0
  27. data/spec/shared/lib/mrss/server_version_registry.rb +113 -0
  28. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  29. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  30. data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
  31. data/spec/shared/lib/mrss/utils.rb +37 -0
  32. data/spec/shared/lib/tasks/candidate.rake +64 -0
  33. data/spec/shared/share/Dockerfile.erb +251 -0
  34. data/spec/shared/share/haproxy-1.conf +16 -0
  35. data/spec/shared/share/haproxy-2.conf +17 -0
  36. data/spec/shared/shlib/config.sh +27 -0
  37. data/spec/shared/shlib/distro.sh +84 -0
  38. data/spec/shared/shlib/server.sh +423 -0
  39. data/spec/shared/shlib/set_env.sh +110 -0
  40. data/spec/spec_helper.rb +2 -0
  41. data/spec/spec_tests/binary_vector_spec.rb +82 -0
  42. data/spec/spec_tests/data/binary_vector/README.md +61 -0
  43. data/spec/spec_tests/data/binary_vector/float32.json +65 -0
  44. data/spec/spec_tests/data/binary_vector/int8.json +57 -0
  45. data/spec/spec_tests/data/binary_vector/packed_bit.json +83 -0
  46. data/spec/spec_tests/data/corpus/binary.json +30 -0
  47. metadata +70 -6
@@ -0,0 +1,251 @@
1
+ <%
2
+
3
+ def ruby_toolchain_url(ruby)
4
+ "http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-toolchain/library/#{distro}/#{ruby}.tar.xz"
5
+ end
6
+
7
+ %>
8
+
9
+ FROM <%= base_image %>
10
+
11
+ ENV DOCKER=1
12
+
13
+ <% if debian? %>
14
+
15
+ ENV DEBIAN_FRONTEND=noninteractive
16
+
17
+ <% else %>
18
+
19
+ RUN echo assumeyes=1 |tee -a /etc/yum.conf
20
+
21
+ <% end %>
22
+
23
+ <% if debian? %>
24
+
25
+ # zsh is not required for any scripts but it is a better interactive shell
26
+ # than bash.
27
+ # Ruby runtime dependencies: libyaml-0-2
28
+ # Compiling ruby libraries: gcc make
29
+ # Compiling python packages: python3-dev
30
+ # JRuby: openjdk-17-jdk-headless
31
+ # Server dependencies: libsnmp30 libcurl3/libcurl4
32
+ # Determining OS we are running on: lsb-release
33
+ # Load balancer testing: haproxy
34
+ # Kerberos testing: krb5-user
35
+ # Local Kerberos server: krb5-kdc krb5-admin-server
36
+ # Installing mlaunch from git: git
37
+ # ruby-head archive: bzip2
38
+ # nio4r on JRuby: libgmp-dev
39
+ # Snappy compression: libsnappy-dev
40
+ # nokogiri: zlib1g-dev
41
+ # Mongoid testing: tzdata shared-mime-info
42
+ # Mongoid application testing: nodejs (8.x or newer)
43
+ # Test suite: procps for ps (to kill JRubies)
44
+ #
45
+ # We currently use Python 2-compatible version of mtools, which
46
+ # is installable via pip (which uses Python 2). All of the MongoDB
47
+ # distros have pip installed (but none as of this writing have pip3)
48
+ # therefore install python-pip in all configurations here.
49
+
50
+ <% packages = %w(
51
+ procps lsb-release bzip2 curl wget gpg zsh
52
+ git make gcc g++ libyaml-dev libgmp-dev zlib1g-dev libsnappy-dev
53
+ krb5-user krb5-kdc krb5-admin-server libsasl2-dev libsasl2-modules-gssapi-mit
54
+ haproxy libcurl4
55
+ tzdata shared-mime-info software-properties-common xz-utils nodejs npm
56
+ openjdk-17-jdk-headless
57
+ ) %>
58
+
59
+ <% if distro =~ /ubuntu2004/ %>
60
+ <% packages << 'libsnmp35' %>
61
+ <% elsif distro =~ /ubuntu2204|debian11/ %>
62
+ <% packages << 'libsnmp40' %>
63
+ <% else %>
64
+ <% packages << 'libsnmp30' %>
65
+ <% end %>
66
+
67
+ <% if distro !~ /ubuntu2004|ubuntu2204|debian11/ %>
68
+ <% packages << 'python-pip' %>
69
+ <% end %>
70
+
71
+ <% if distro =~ /ubuntu2204|debian11/ %>
72
+ <% packages << 'python3-venv' %>
73
+ <% end %>
74
+
75
+ <% if distro =~ /ubuntu2004|ubuntu2204/ %>
76
+ <% packages += %w(ruby bundler) %>
77
+ <% end %>
78
+
79
+ RUN apt-get update && apt-get install -y <%= packages.join(' ') %>
80
+
81
+ <% if ubuntu? %>
82
+ 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
83
+ 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
84
+ <% end %>
85
+ RUN apt-add-repository ppa:deadsnakes/ppa -y
86
+ RUN apt-get update && apt-get install -y cmake python3.10 python3.10-dev python3.10-venv
87
+ RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1
88
+ <% else %>
89
+
90
+ # Enterprise server: net-snmp
91
+ # lsb_release: redhat-lsb-core
92
+ # our runner scripts: which
93
+ # Ruby dependency: libyaml
94
+ # compiling python packages: gcc python-devel
95
+ # Kerberos tests: krb5-workstation + cyrus-sasl-devel to build the
96
+ # mongo_kerberos gem + cyrus-sasl-gssapi for authentication to work
97
+ # Local Kerberos server: krb5-server
98
+ # JRuby: java-17-openjdk
99
+ #
100
+ # Note: lacking cyrus-sasl-gssapi produces a cryptic message
101
+ # "SASL(-4): no mechanism available: No worthy mechs found"
102
+ # https://github.com/farorm/python-ad/issues/10
103
+
104
+ RUN yum --enablerepo=powertools install -y redhat-lsb-core which git gcc gcc-c++ libyaml-devel krb5-server \
105
+ krb5-workstation cyrus-sasl-devel cyrus-sasl-gssapi java-17-openjdk \
106
+ net-snmp python38 python38-devel cmake nodejs npm xz
107
+
108
+ <% end %>
109
+
110
+ <% if preload? %>
111
+
112
+ <% if distro =~ /debian9|ubuntu1604|ubuntu1804/ %>
113
+ # Install python 3.7 for mlaunch.
114
+ RUN curl -fL --retry 3 https://github.com/p-mongodb/deps/raw/main/<%= distro %>-python37.tar.xz | \
115
+ tar xfJ - -C /opt
116
+ ENV PATH=/opt/python37/bin:$PATH
117
+ RUN python3 -V
118
+ <% end %>
119
+
120
+ <% if true || distro =~ /rhel|ubuntu1604/ %>
121
+
122
+ # Ubuntu 12.04 ships pip 1.0 which is ancient and does not work.
123
+ #
124
+ # Ubuntu 16.04 apparently also ships a pip that does not work:
125
+ # https://stackoverflow.com/questions/37495375/python-pip-install-throws-typeerror-unsupported-operand-types-for-retry
126
+ # Potentially this only affects environments with less than ideal
127
+ # connectivity (or, perhaps, when python package registry is experiencing
128
+ # availability issues) when pip must retry to install packages.
129
+ #
130
+ # rhel apparently does not package pip at all in core repoitories,
131
+ # therefore install it the manual way.
132
+ #
133
+ # https://pip.pypa.io/en/stable/installing/
134
+ RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/get-pip.py | python3
135
+ RUN python3 -m pip install --upgrade pip setuptools wheel
136
+
137
+ <% end %>
138
+
139
+ # Current virtualenv fails with
140
+ # https://github.com/pypa/virtualenv/issues/1630
141
+ <% mtools = 'legacy' %>
142
+ <% case mtools
143
+ when 'legacy' %>
144
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
145
+ RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
146
+ <% when 'git' %>
147
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
148
+ RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil
149
+
150
+ # Install mtools from git because released versions do not work with pymongo 4.0
151
+ RUN git clone https://github.com/p-mongodb/mtools && \
152
+ cd mtools && \
153
+ python3 setup.py install
154
+ <% else %>
155
+ # mtools[mlaunch] does not work: https://github.com/rueckstiess/mtools/issues/856
156
+ # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
157
+ RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil mtools
158
+ <% end %>
159
+
160
+ <% if @env.fetch('MONGODB_VERSION') >= '4.4' %>
161
+ # ubuntu1604 installs MarkupSafe 0.0.0 here instead of 2.0.0+
162
+ # as specified by dependencies, causing OCSP mock to not work.
163
+ RUN python3 -mpip install asn1crypto oscrypto flask --upgrade --ignore-installed
164
+ <% end %>
165
+
166
+ # FLE is tested against 4.0+ servers.
167
+ <% if @env.fetch('MONGODB_VERSION') >= '4.0' %>
168
+ # Requirements in drivers-evergreen-tools:
169
+ # boto3~=1.19 cryptography~=3.4.8 pykmip~=0.10.0
170
+ # cryptography does not install due to lacking setuptools_rust
171
+ # (either that version or anything that isn't part of system packages)
172
+ RUN python3 -mpip install boto3~=1.19 cryptography pykmip~=0.10.0 'sqlalchemy<2.0.0'
173
+ <% end %>
174
+
175
+ <% unless ruby_head? || system_ruby? %>
176
+
177
+ RUN curl --retry 3 -fL <%= ruby_toolchain_url(ruby) %> |tar -xC /opt -Jf -
178
+ ENV PATH=/opt/rubies/<%= ruby %>/bin:$PATH \
179
+ USE_OPT_TOOLCHAIN=1
180
+
181
+ <% end %>
182
+
183
+ <% end %>
184
+
185
+ <% if distro =~ /debian|ubuntu/ %>
186
+ # mkdir was moved from /usr/bin to /bin and MongoDB's distros
187
+ # apparently keep using the old location.
188
+ # This definitely affects debian10.
189
+ # https://stackoverflow.com/questions/64653051/make-usr-bin-mkdir-command-not-found-during-gem-install-nokogiri-in-ubuntu
190
+ RUN test -f /usr/bin/mkdir || ln -s /bin/mkdir /usr/bin/mkdir
191
+ <% end %>
192
+
193
+ WORKDIR /app
194
+
195
+ <% if preload? && !ruby_head? %>
196
+
197
+ COPY Gemfile .
198
+ COPY gemfiles gemfiles
199
+ COPY *.gemspec .
200
+ COPY lib/<%= project_lib_subdir %>/version.rb lib/<%= project_lib_subdir %>/version.rb
201
+ RUN bundle install
202
+ COPY .evergreen/patch-debuggers .evergreen/patch-debuggers
203
+ <% if system_ruby? %>
204
+ # Running under docker with root access
205
+ RUN .evergreen/patch-debuggers /var/lib/gems
206
+ <% else %>
207
+ RUN .evergreen/patch-debuggers /opt/rubies
208
+ <% end %>
209
+
210
+ <% end %>
211
+
212
+ <% if fle? %>
213
+ RUN curl --retry 3 -fL "https://s3.amazonaws.com/mciuploads/libmongocrypt/all/master/latest/libmongocrypt-all.tar.gz" |tar zxf -
214
+
215
+ <%= "ENV LIBMONGOCRYPT_PATH #{libmongocrypt_path}" %>
216
+ <% end %>
217
+
218
+ <% if preload? %>
219
+ ENV DOCKER_PRELOAD=1
220
+ <% end %>
221
+
222
+ RUN npm install --global yarn
223
+
224
+ ENV MONGO_ORCHESTRATION_HOME=/tmpfs \
225
+ PROJECT_DIRECTORY=/app \
226
+ <%= @env.map { |k, v| %Q`#{k}="#{v.gsub('$', "\\$").gsub('"', "\\\"")}"` }.join(" \\\n ") %>
227
+
228
+ <% if interactive? %>
229
+ ENV INTERACTIVE=1
230
+ <% end %>
231
+
232
+ COPY . .
233
+
234
+ 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'
235
+ ENV USE_OPT_MONGODB=1 USE_SYSTEM_PYTHON_PACKAGES=1
236
+
237
+ <% if expose? %>
238
+
239
+ <% ports = [] %>
240
+
241
+ <% 0.upto(num_exposed_ports-1) do |i| %>
242
+ <% ports << 27017 + i %>
243
+ <% end %>
244
+
245
+ <% if @env['OCSP_ALGORITHM'] %>
246
+ <% ports << 8100 %>
247
+ <% end %>
248
+
249
+ EXPOSE <%= ports.map(&:to_s).join(' ') %>
250
+
251
+ <% 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,84 @@
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
+ elif test -f /etc/os-release; then
68
+ name=`grep -o '^NAME=.*' /etc/os-release | awk -F '"' '{ print $2 }'`
69
+ version=`grep -o '^VERSION=.*' /etc/os-release | awk -F '"' '{ print $2 }'`
70
+ if test "$name" = "Amazon Linux"; then
71
+ distro=amazon$version
72
+ else
73
+ cat /etc/os-release
74
+ echo 'Unknown distro' 1>&2
75
+ exit 1
76
+ fi
77
+ else
78
+ lsb_release -a
79
+ echo 'Unknown distro' 1>&2
80
+ exit 1
81
+ fi
82
+ echo "Detected distro: $distro" 1>&2
83
+ echo $distro
84
+ }