From 5cb8c3ec412afa5b9ca2e51d1eb3acc8fc66c556 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Tue, 17 Feb 2026 12:58:55 -0700 Subject: [PATCH 01/18] Add rapid to the matrix of database versions to test --- .evergreen/config.yml | 26 +++++++++++++++----------- .evergreen/config/axes.yml.erb | 4 ++++ .evergreen/config/standard.yml.erb | 19 +++++++++++-------- .mod/drivers-evergreen-tools | 2 +- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 6ec839c605..9097e3702f 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -777,6 +777,10 @@ axes: - id: "mongodb-version" display_name: MongoDB Version values: + - id: "rapid" + display_name: "Rapid" + variables: + MONGODB_VERSION: "rapid" - id: "8.0" display_name: "8.0" variables: @@ -1245,7 +1249,7 @@ buildvariants: - matrix_name: "single-lb" matrix_spec: ruby: "ruby-4.0" - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] topology: load-balanced single-mongos: single-mongos os: ubuntu2204 @@ -1269,7 +1273,7 @@ buildvariants: - matrix_name: "single-mongos" matrix_spec: ruby: "ruby-4.0" - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] topology: "sharded-cluster" single-mongos: single-mongos os: ubuntu2204 @@ -1281,7 +1285,7 @@ buildvariants: - matrix_name: CSOT matrix_spec: ruby: "ruby-4.0" - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] topology: replica-set-single-node os: ubuntu2204 display_name: "CSOT - ${mongodb-version}" @@ -1304,7 +1308,7 @@ buildvariants: matrix_spec: retry-reads: no-retry-reads ruby: "ruby-4.0" - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] topology: ["standalone", "replica-set", "sharded-cluster"] os: ubuntu2204 display_name: "${mongodb-version} ${topology} ${retry-reads} ${ruby}" @@ -1316,7 +1320,7 @@ buildvariants: matrix_spec: retry-writes: no-retry-writes ruby: "ruby-4.0" - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] topology: [replica-set, sharded-cluster] os: ubuntu2204 display_name: "${mongodb-version} ${topology} ${retry-writes} ${ruby}" @@ -1406,7 +1410,7 @@ buildvariants: matrix_spec: auth-and-ssl: [ "auth-and-ssl", "noauth-and-nossl" ] ruby: "ruby-4.0" - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] topology: "replica-set" compressor: 'zlib' os: ubuntu2204 @@ -1419,7 +1423,7 @@ buildvariants: matrix_spec: auth-and-ssl: [ "auth-and-ssl", "noauth-and-nossl" ] ruby: "ruby-4.0" - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] topology: "replica-set" compressor: 'snappy' os: ubuntu2204 @@ -1436,7 +1440,7 @@ buildvariants: matrix_spec: auth-and-ssl: [ "auth-and-ssl", "noauth-and-nossl" ] ruby: "ruby-4.0" - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] topology: "replica-set" compressor: 'zstd' os: ubuntu2204 @@ -1448,7 +1452,7 @@ buildvariants: - matrix_name: activesupport-"ruby-4.0" matrix_spec: ruby: "ruby-4.0" - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] topology: replica-set as: as os: ubuntu2204 @@ -1460,7 +1464,7 @@ buildvariants: - matrix_name: bson-"ruby-4.0" matrix_spec: ruby: "ruby-4.0" - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] topology: replica-set bson: "*" os: ubuntu2204 @@ -1592,7 +1596,7 @@ buildvariants: auth-and-ssl: [ aws-regular, aws-assume-role, aws-web-identity ] ruby: "ruby-4.0" topology: standalone - mongodb-version: "8.0" + mongodb-version: ["8.0", "rapid"] os: ubuntu2204 display_name: "AWS ${auth-and-ssl} ${mongodb-version} ${ruby}" tags: ["pr"] diff --git a/.evergreen/config/axes.yml.erb b/.evergreen/config/axes.yml.erb index 66f1ec5f9b..5219f22e87 100644 --- a/.evergreen/config/axes.yml.erb +++ b/.evergreen/config/axes.yml.erb @@ -2,6 +2,10 @@ axes: - id: "mongodb-version" display_name: MongoDB Version values: + - id: "rapid" + display_name: "Rapid" + variables: + MONGODB_VERSION: "rapid" - id: "8.0" display_name: "8.0" variables: diff --git a/.evergreen/config/standard.yml.erb b/.evergreen/config/standard.yml.erb index 83c0d404e1..10041345c3 100644 --- a/.evergreen/config/standard.yml.erb +++ b/.evergreen/config/standard.yml.erb @@ -27,7 +27,10 @@ jrubies # The latest stable version of MongoDB - latest_stable_mdb = "8.0".inspect # so it gets quoted as a string + latest_stable_mdb_raw = "8.0" + latest_stable_mdb = latest_stable_mdb_raw.inspect # so it gets quoted as a string + + stable_and_rapid = [ latest_stable_mdb_raw, "rapid" ] recent_mdb = %w( 8.0 7.0 ) %> @@ -112,7 +115,7 @@ buildvariants: - matrix_name: "single-lb" matrix_spec: ruby: <%= latest_ruby %> - mongodb-version: <%= latest_stable_mdb %> + mongodb-version: <%= stable_and_rapid %> topology: load-balanced single-mongos: single-mongos os: ubuntu2204 @@ -136,7 +139,7 @@ buildvariants: - matrix_name: "single-mongos" matrix_spec: ruby: <%= latest_ruby %> - mongodb-version: <%= latest_stable_mdb %> + mongodb-version: <%= stable_and_rapid %> topology: "sharded-cluster" single-mongos: single-mongos os: ubuntu2204 @@ -148,7 +151,7 @@ buildvariants: - matrix_name: CSOT matrix_spec: ruby: <%= latest_ruby %> - mongodb-version: <%= latest_stable_mdb %> + mongodb-version: <%= stable_and_rapid %> topology: replica-set-single-node os: ubuntu2204 display_name: "CSOT - ${mongodb-version}" @@ -171,7 +174,7 @@ buildvariants: matrix_spec: retry-reads: no-retry-reads ruby: <%= latest_ruby %> - mongodb-version: <%= latest_stable_mdb %> + mongodb-version: <%= stable_and_rapid %> topology: <%= topologies %> os: ubuntu2204 display_name: "${mongodb-version} ${topology} ${retry-reads} ${ruby}" @@ -183,7 +186,7 @@ buildvariants: matrix_spec: retry-writes: no-retry-writes ruby: <%= latest_ruby %> - mongodb-version: <%= latest_stable_mdb %> + mongodb-version: <%= stable_and_rapid %> topology: [replica-set, sharded-cluster] os: ubuntu2204 display_name: "${mongodb-version} ${topology} ${retry-writes} ${ruby}" @@ -270,7 +273,7 @@ buildvariants: - name: "run-main-test-suite" <% [ - [latest_ruby, latest_stable_mdb, 'ubuntu2204'], + [latest_ruby, stable_and_rapid, 'ubuntu2204'], [supported_mri_ruby_2, '"6.0"', 'ubuntu2004'] ].each do |rubies, mdb, distro| %> @@ -399,7 +402,7 @@ buildvariants: auth-and-ssl: [ aws-regular, aws-assume-role, aws-web-identity ] ruby: <%= latest_ruby %> topology: standalone - mongodb-version: <%= latest_stable_mdb %> + mongodb-version: <%= stable_and_rapid %> os: ubuntu2204 display_name: "AWS ${auth-and-ssl} ${mongodb-version} ${ruby}" tags: ["pr"] diff --git a/.mod/drivers-evergreen-tools b/.mod/drivers-evergreen-tools index 9142b7055e..f3720c0b98 160000 --- a/.mod/drivers-evergreen-tools +++ b/.mod/drivers-evergreen-tools @@ -1 +1 @@ -Subproject commit 9142b7055ea5940e59ad41c4b069376f867031da +Subproject commit f3720c0b98fb14a8b452670f7cda5ef8080e7eaf From d91e130d8e3d21dfe8fe50a7d2ff7b45224348f9 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Tue, 17 Feb 2026 13:23:51 -0700 Subject: [PATCH 02/18] hard code the rapid version drivers-evergreen-tools is (for some reason) pulling 8.3.0-alpha when I ask for rapid... --- .evergreen/config.yml | 2 +- .evergreen/config/axes.yml.erb | 2 +- .mod/drivers-evergreen-tools | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 9097e3702f..a6dbfd6bf3 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -780,7 +780,7 @@ axes: - id: "rapid" display_name: "Rapid" variables: - MONGODB_VERSION: "rapid" + MONGODB_VERSION: "8.2" - id: "8.0" display_name: "8.0" variables: diff --git a/.evergreen/config/axes.yml.erb b/.evergreen/config/axes.yml.erb index 5219f22e87..c12c36677e 100644 --- a/.evergreen/config/axes.yml.erb +++ b/.evergreen/config/axes.yml.erb @@ -5,7 +5,7 @@ axes: - id: "rapid" display_name: "Rapid" variables: - MONGODB_VERSION: "rapid" + MONGODB_VERSION: "8.2" - id: "8.0" display_name: "8.0" variables: diff --git a/.mod/drivers-evergreen-tools b/.mod/drivers-evergreen-tools index f3720c0b98..9142b7055e 160000 --- a/.mod/drivers-evergreen-tools +++ b/.mod/drivers-evergreen-tools @@ -1 +1 @@ -Subproject commit f3720c0b98fb14a8b452670f7cda5ef8080e7eaf +Subproject commit 9142b7055ea5940e59ad41c4b069376f867031da From 12f60930f7fb3fb3e3ab86f121921566a9789015 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Tue, 17 Feb 2026 13:44:58 -0700 Subject: [PATCH 03/18] we need the newer drivers-evergreen-tools, after all --- .mod/drivers-evergreen-tools | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.mod/drivers-evergreen-tools b/.mod/drivers-evergreen-tools index 9142b7055e..f3720c0b98 160000 --- a/.mod/drivers-evergreen-tools +++ b/.mod/drivers-evergreen-tools @@ -1 +1 @@ -Subproject commit 9142b7055ea5940e59ad41c4b069376f867031da +Subproject commit f3720c0b98fb14a8b452670f7cda5ef8080e7eaf From f15de3b99b873bece8e9a3322c1f43c9cccb9eae Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Tue, 17 Feb 2026 15:09:47 -0700 Subject: [PATCH 04/18] make sure waitress is installed (for ocsp mocking) --- .evergreen/run-tests.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 27e02c3302..da94291800 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -61,6 +61,7 @@ prepare_server if test "$DOCKER_PRELOAD" != 1; then install_mlaunch_venv + pip3 install waitress fi # Make sure cmake is installed (in case we need to install the libmongocrypt From eb6611f54859673f466f4833370abe9c803fe485 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Thu, 19 Feb 2026 10:23:27 -0700 Subject: [PATCH 05/18] disable mongocryptd specs per SERVER-118428 --- .evergreen/config.yml | 6 ++++-- .evergreen/config/standard.yml.erb | 6 ++++-- spec/support/crypt.rb | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index a6dbfd6bf3..dc49f558c4 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -1539,12 +1539,12 @@ buildvariants: tasks: - name: "test-mlaunch" - - matrix_name: "fle above 4.4" + - matrix_name: "fle" matrix_spec: auth-and-ssl: "noauth-and-nossl" ruby: ["ruby-4.0", "ruby-3.4", "ruby-3.3", "ruby-3.2", "ruby-3.1"] topology: [replica-set, sharded-cluster] - mongodb-version: [ '6.0', '7.0', '8.0' ] + mongodb-version: [ '6.0', '7.0', '8.0', 'rapid' ] os: ubuntu2204 fle: helper display_name: "FLE: ${mongodb-version} ${topology} ${ruby}" @@ -1575,6 +1575,8 @@ buildvariants: # tasks: # - name: "test-fle" + # Runs specs against the latest server. This is not automatically run on PR's + # because we don't want to block PR's when the latest DB breaks something. - name: 'latest-server' activate: false display_name: 'Latest MongoDB Server' diff --git a/.evergreen/config/standard.yml.erb b/.evergreen/config/standard.yml.erb index 10041345c3..db844c82bd 100644 --- a/.evergreen/config/standard.yml.erb +++ b/.evergreen/config/standard.yml.erb @@ -345,12 +345,12 @@ buildvariants: - name: "test-mlaunch" <% end %> - - matrix_name: "fle above 4.4" + - matrix_name: "fle" matrix_spec: auth-and-ssl: "noauth-and-nossl" ruby: <%= supported_mri_rubies_3_ubuntu %> topology: [replica-set, sharded-cluster] - mongodb-version: [ '6.0', '7.0', '8.0' ] + mongodb-version: [ '6.0', '7.0', '8.0', 'rapid' ] os: ubuntu2204 fle: helper display_name: "FLE: ${mongodb-version} ${topology} ${ruby}" @@ -381,6 +381,8 @@ buildvariants: # tasks: # - name: "test-fle" + # Runs specs against the latest server. This is not automatically run on PR's + # because we don't want to block PR's when the latest DB breaks something. - name: 'latest-server' activate: false display_name: 'Latest MongoDB Server' diff --git a/spec/support/crypt.rb b/spec/support/crypt.rb index f6337eeb63..14b65720a1 100644 --- a/spec/support/crypt.rb +++ b/spec/support/crypt.rb @@ -23,6 +23,21 @@ module Crypt # For all FLE-related tests shared_context 'define shared FLE helpers' do + # SERVER-118428 -- mongocryptd rejects large messages + # DRIVERS-3382 -- once SERVER-118428 is fixed, remove these checks + before do + if extra_options[:mongocryptd_uri] + version = ClusterConfig.instance.server_version + bad_mongocryptd = case version + when /^8\.2/ then version >= '8.2.4' + when /^8\.0/ then version >= '8.0.18' + when /^7\.0/ then version >= '7.0.29' + else false + end + skip 'Bad mongocryptd version -- see DRIVERS-3382' if bad_mongocryptd + end + end + # 96-byte binary string, base64-encoded local master key let(:local_master_key_b64) do Crypt::LOCAL_MASTER_KEY_B64 From b7cdfa56c35f1761b106214142624c1cdd0e7242 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Thu, 19 Feb 2026 14:56:23 -0700 Subject: [PATCH 06/18] some 6.0 specs are broken by changes to mock kms server --- .../client_side_encryption/kms_tls_options_spec.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/spec/integration/client_side_encryption/kms_tls_options_spec.rb b/spec/integration/client_side_encryption/kms_tls_options_spec.rb index a36b1d745b..6b3ce3d0aa 100644 --- a/spec/integration/client_side_encryption/kms_tls_options_spec.rb +++ b/spec/integration/client_side_encryption/kms_tls_options_spec.rb @@ -389,7 +389,9 @@ end let(:should_raise_with_tls) do - true + # 6.0 mongocrypt expects a JSON-compatible error message from the KMS, but + # the mock KMS server returns an HTML error page. + ClusterConfig.instance.server_version >= '7.0' end it_behaves_like 'it respect KMS TLS options' @@ -410,7 +412,9 @@ end let(:should_raise_with_tls) do - true + # 6.0 mongocrypt expects a JSON-compatible error message from the KMS, but + # the mock KMS server returns an HTML error page. + ClusterConfig.instance.server_version >= '7.0' end it_behaves_like 'it respect KMS TLS options' From de398e6b3e280100a98a4377c5367e280f8a136f Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Thu, 19 Feb 2026 15:29:45 -0700 Subject: [PATCH 07/18] have to approach this with a narrower filter --- .../kms_tls_options_spec.rb | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/spec/integration/client_side_encryption/kms_tls_options_spec.rb b/spec/integration/client_side_encryption/kms_tls_options_spec.rb index 6b3ce3d0aa..8abb6e8ee5 100644 --- a/spec/integration/client_side_encryption/kms_tls_options_spec.rb +++ b/spec/integration/client_side_encryption/kms_tls_options_spec.rb @@ -18,6 +18,13 @@ ) end + # 6.0 mongocrypt expects a JSON-compatible error message from the KMS, but + # the mock KMS server returns an HTML error page. + let(:affected_by_mock_kms_server_change) do + (kms_provider == 'azure' || kms_provider == 'gcp') && + ClusterConfig.instance.server_version >= '7.0' + end + let(:client_encryption_no_client_cert) do Mongo::ClientEncryption.new( client, @@ -314,7 +321,7 @@ end it 'raises KmsError directly without wrapping CryptError' do - if should_raise_with_tls + if should_raise_with_tls && !affected_by_mock_kms_server_change begin client_encryption_with_tls.create_data_key( kms_provider, @@ -389,9 +396,7 @@ end let(:should_raise_with_tls) do - # 6.0 mongocrypt expects a JSON-compatible error message from the KMS, but - # the mock KMS server returns an HTML error page. - ClusterConfig.instance.server_version >= '7.0' + true end it_behaves_like 'it respect KMS TLS options' @@ -412,9 +417,7 @@ end let(:should_raise_with_tls) do - # 6.0 mongocrypt expects a JSON-compatible error message from the KMS, but - # the mock KMS server returns an HTML error page. - ClusterConfig.instance.server_version >= '7.0' + true end it_behaves_like 'it respect KMS TLS options' From acf07e0128a3462965fef6733713261227374fc5 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Thu, 19 Feb 2026 16:04:16 -0700 Subject: [PATCH 08/18] ugh, got the logic flipped --- spec/integration/client_side_encryption/kms_tls_options_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/integration/client_side_encryption/kms_tls_options_spec.rb b/spec/integration/client_side_encryption/kms_tls_options_spec.rb index 8abb6e8ee5..ff1c1f4878 100644 --- a/spec/integration/client_side_encryption/kms_tls_options_spec.rb +++ b/spec/integration/client_side_encryption/kms_tls_options_spec.rb @@ -22,7 +22,7 @@ # the mock KMS server returns an HTML error page. let(:affected_by_mock_kms_server_change) do (kms_provider == 'azure' || kms_provider == 'gcp') && - ClusterConfig.instance.server_version >= '7.0' + ClusterConfig.instance.server_version < '7.0' end let(:client_encryption_no_client_cert) do From 2f3b154c522582fe9fa2fff2c1aa0edfb04b0f2b Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Fri, 20 Feb 2026 10:01:29 -0700 Subject: [PATCH 09/18] rapid really does mean the latest minor release (even pre-releases) --- .evergreen/config.yml | 2 +- .evergreen/config/axes.yml.erb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index dc49f558c4..d4e48a29c0 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -780,7 +780,7 @@ axes: - id: "rapid" display_name: "Rapid" variables: - MONGODB_VERSION: "8.2" + MONGODB_VERSION: "rapid" - id: "8.0" display_name: "8.0" variables: diff --git a/.evergreen/config/axes.yml.erb b/.evergreen/config/axes.yml.erb index c12c36677e..5219f22e87 100644 --- a/.evergreen/config/axes.yml.erb +++ b/.evergreen/config/axes.yml.erb @@ -5,7 +5,7 @@ axes: - id: "rapid" display_name: "Rapid" variables: - MONGODB_VERSION: "8.2" + MONGODB_VERSION: "rapid" - id: "8.0" display_name: "8.0" variables: From fb56a03e489595510262cfa7de219bf11c0337df Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Mon, 23 Feb 2026 08:14:08 -0700 Subject: [PATCH 10/18] skip failing spec (caused by RUBY-3781) --- spec/spec_tests/data/sdam_unified/hello-network-error.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/spec_tests/data/sdam_unified/hello-network-error.yml b/spec/spec_tests/data/sdam_unified/hello-network-error.yml index cdb10909ff..3b5df7c4e8 100644 --- a/spec/spec_tests/data/sdam_unified/hello-network-error.yml +++ b/spec/spec_tests/data/sdam_unified/hello-network-error.yml @@ -104,6 +104,7 @@ tests: - _id: 2 - description: Network error on Monitor check + skipReason: "RUBY-3781: Ruby driver's legacy_write_with_retry causes this to fail" operations: - name: createEntities object: testRunner From ff8dfe3db79e6479e99a8e62f622991b94715153 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Wed, 4 Mar 2026 16:21:14 -0700 Subject: [PATCH 11/18] account for change of behavior in 8.3 --- spec/mongo/cursor_spec.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spec/mongo/cursor_spec.rb b/spec/mongo/cursor_spec.rb index 9aac3655b6..efd1da0221 100644 --- a/spec/mongo/cursor_spec.rb +++ b/spec/mongo/cursor_spec.rb @@ -572,6 +572,7 @@ context 'when the result set is iterated fully and the cursor id is non-zero' do min_server_fcv '5.0' + max_server_fcv '8.2' # 8.3 will exhaust the cursor with the last getMore let(:documents) do (1..5).map{ |i| { field: "test#{i}" }} @@ -595,8 +596,8 @@ end it 'schedules a kill cursors command' do - get_more_commands = subscriber.started_events.select { |e| e.command_name == 'killCursors' } - expect(get_more_commands.length).to be 1 + commands = subscriber.started_events.select { |e| e.command_name == 'killCursors' } + expect(commands.length).to be 1 end end end From 2425f8a89a8377e5162b8333107cd06d3e7dfff3 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Tue, 10 Mar 2026 08:44:27 -0600 Subject: [PATCH 12/18] disable FLE & CSOT tests for rapid --- .evergreen/config.yml | 4 ++-- .evergreen/config/standard.yml.erb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index d4e48a29c0..f65536b806 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -1285,7 +1285,7 @@ buildvariants: - matrix_name: CSOT matrix_spec: ruby: "ruby-4.0" - mongodb-version: ["8.0", "rapid"] + mongodb-version: "8.0" topology: replica-set-single-node os: ubuntu2204 display_name: "CSOT - ${mongodb-version}" @@ -1544,7 +1544,7 @@ buildvariants: auth-and-ssl: "noauth-and-nossl" ruby: ["ruby-4.0", "ruby-3.4", "ruby-3.3", "ruby-3.2", "ruby-3.1"] topology: [replica-set, sharded-cluster] - mongodb-version: [ '6.0', '7.0', '8.0', 'rapid' ] + mongodb-version: [ '6.0', '7.0', '8.0' ] os: ubuntu2204 fle: helper display_name: "FLE: ${mongodb-version} ${topology} ${ruby}" diff --git a/.evergreen/config/standard.yml.erb b/.evergreen/config/standard.yml.erb index db844c82bd..b08b64e571 100644 --- a/.evergreen/config/standard.yml.erb +++ b/.evergreen/config/standard.yml.erb @@ -151,7 +151,7 @@ buildvariants: - matrix_name: CSOT matrix_spec: ruby: <%= latest_ruby %> - mongodb-version: <%= stable_and_rapid %> + mongodb-version: <%= latest_stable_mdb %> topology: replica-set-single-node os: ubuntu2204 display_name: "CSOT - ${mongodb-version}" @@ -350,7 +350,7 @@ buildvariants: auth-and-ssl: "noauth-and-nossl" ruby: <%= supported_mri_rubies_3_ubuntu %> topology: [replica-set, sharded-cluster] - mongodb-version: [ '6.0', '7.0', '8.0', 'rapid' ] + mongodb-version: [ '6.0', '7.0', '8.0' ] os: ubuntu2204 fle: helper display_name: "FLE: ${mongodb-version} ${topology} ${ruby}" From d6f30d52b7c33d780a6d064ef80ac90ac406a72c Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Thu, 12 Mar 2026 11:22:51 -0600 Subject: [PATCH 13/18] drop_one with invalid index no longer fails under 8.3.0-alpha3 I'm removing this test entirely because it really just checks for server behavior, rather than driver behavior. --- spec/mongo/index/view_spec.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spec/mongo/index/view_spec.rb b/spec/mongo/index/view_spec.rb index 9b1e669d0b..7ceb03070d 100644 --- a/spec/mongo/index/view_spec.rb +++ b/spec/mongo/index/view_spec.rb @@ -59,12 +59,11 @@ view_with_session.drop_one('another_-1') end - let(:failed_operation) do - view_with_session.drop_one('_another_-1') + let(:session) do + client.start_session end it_behaves_like 'an operation using a session' - it_behaves_like 'a failed operation using a session' end context 'when the index exists' do From 0fe26a4c1e8c61ffc03846e28dad9f25396d0c35 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Tue, 17 Mar 2026 17:15:36 -0600 Subject: [PATCH 14/18] try to account for crypt shared location --- .evergreen/run-tests.sh | 8 ++++++++ .../kms_tls_options_spec.rb | 14 +++----------- spec/mongo/client_construction_spec.rb | 11 +++++++++-- spec/support/crypt.rb | 15 --------------- 4 files changed, 20 insertions(+), 28 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index da94291800..ac0162b988 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -213,6 +213,13 @@ if test -n "$FLE"; then cd - fi + # work around error about trying to load a different crypt_shared lib when one + # is already loaded. Note that putting the shared library in the current directory + # means it will always be located, even if crypt_shared_lib_path is not set. + cp ${MONGO_RUBY_DRIVER_CRYPT_SHARED_LIB_PATH} ${PROJECT_DIRECTORY} + export MONGO_RUBY_DRIVER_CRYPT_SHARED_LIB_PATH=${PROJECT_DIRECTORY}/mongo_crypt_v1.so + export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PROJECT_DIRECTORY} + # Start the KMS servers first so that they are launching while we are # fetching libmongocrypt. if test "$DOCKER_PRELOAD" != 1; then @@ -344,6 +351,7 @@ if test "$COMPRESSOR" = zstd; then add_uri_option compressors=zstd fi +# TEST_CMD="bundle exec rspec -f d spec/mongo/client_construction_spec.rb" echo "Running tests" set +e diff --git a/spec/integration/client_side_encryption/kms_tls_options_spec.rb b/spec/integration/client_side_encryption/kms_tls_options_spec.rb index 9261b5c158..74c38dd14c 100644 --- a/spec/integration/client_side_encryption/kms_tls_options_spec.rb +++ b/spec/integration/client_side_encryption/kms_tls_options_spec.rb @@ -17,13 +17,6 @@ ) end - # 6.0 mongocrypt expects a JSON-compatible error message from the KMS, but - # the mock KMS server returns an HTML error page. - let(:affected_by_mock_kms_server_change) do - (kms_provider == 'azure' || kms_provider == 'gcp') && - ClusterConfig.instance.server_version < '7.0' - end - let(:client_encryption_no_client_cert) do Mongo::ClientEncryption.new( client, @@ -320,7 +313,7 @@ end it 'raises KmsError directly without wrapping CryptError' do - if should_raise_with_tls && !affected_by_mock_kms_server_change + if should_raise_with_tls begin client_encryption_with_tls.create_data_key( kms_provider, @@ -329,9 +322,8 @@ } ) rescue Mongo::Error::KmsError => exc - exc.message.should =~ /Error when connecting to KMS provider|Empty KMS response/ - exc.message.should =~ /libmongocrypt error code/ - exc.message.should_not =~ /CryptError/ + expect(exc.message).to include('libmongocrypt error code') + expect(exc.message).not_to include('CryptError') else fail 'Expected to raise KmsError' end diff --git a/spec/mongo/client_construction_spec.rb b/spec/mongo/client_construction_spec.rb index 1830b67a4f..1a2b007065 100644 --- a/spec/mongo/client_construction_spec.rb +++ b/spec/mongo/client_construction_spec.rb @@ -178,6 +178,8 @@ let(:extra_options) do { + crypt_shared_lib_path: SpecConfig.instance.crypt_shared_lib_path, + crypt_shared_lib_required: SpecConfig.instance.crypt_shared_lib_required, mongocryptd_uri: mongocryptd_uri, mongocryptd_bypass_spawn: mongocryptd_bypass_spawn, mongocryptd_spawn_path: mongocryptd_spawn_path, @@ -299,7 +301,12 @@ expect(encryption_options[:extra_options][:mongocryptd_spawn_path]).to eq(mongocryptd_spawn_path) expect(encryption_options[:extra_options][:mongocryptd_spawn_args]).to eq(mongocryptd_spawn_args) - expect(client.encrypter.mongocryptd_client.options[:monitoring_io]).to be false + if (SpecConfig.instance.crypt_shared_lib_path || '').strip.length > 0 + expect(client.encrypter.mongocryptd_client).to be_nil + else + expect(client.encrypter.mongocryptd_client).not_to be_nil + expect(client.encrypter.mongocryptd_client.options[:monitoring_io]).to be false + end end context 'with default extra options' do @@ -1998,7 +2005,7 @@ block_client.encrypter.mongocryptd_client, block_client.encrypter.key_vault_client, block_client.encrypter.metadata_client - ].each do |crypt_client| + ].compact.each do |crypt_client| expect(crypt_client.cluster.connected?).to be false end end diff --git a/spec/support/crypt.rb b/spec/support/crypt.rb index 14b65720a1..f6337eeb63 100644 --- a/spec/support/crypt.rb +++ b/spec/support/crypt.rb @@ -23,21 +23,6 @@ module Crypt # For all FLE-related tests shared_context 'define shared FLE helpers' do - # SERVER-118428 -- mongocryptd rejects large messages - # DRIVERS-3382 -- once SERVER-118428 is fixed, remove these checks - before do - if extra_options[:mongocryptd_uri] - version = ClusterConfig.instance.server_version - bad_mongocryptd = case version - when /^8\.2/ then version >= '8.2.4' - when /^8\.0/ then version >= '8.0.18' - when /^7\.0/ then version >= '7.0.29' - else false - end - skip 'Bad mongocryptd version -- see DRIVERS-3382' if bad_mongocryptd - end - end - # 96-byte binary string, base64-encoded local master key let(:local_master_key_b64) do Crypt::LOCAL_MASTER_KEY_B64 From 9d741d70c177e57aa7556c29203ce1daa417c816 Mon Sep 17 00:00:00 2001 From: Jamis Buck Date: Tue, 24 Mar 2026 16:50:44 -0600 Subject: [PATCH 15/18] remove unnecessary environment shenanigans --- .evergreen/run-tests.sh | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 019acfea42..f1bd48a125 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -215,13 +215,6 @@ if test -n "$FLE"; then fi fi - # work around error about trying to load a different crypt_shared lib when one - # is already loaded. Note that putting the shared library in the current directory - # means it will always be located, even if crypt_shared_lib_path is not set. - cp ${MONGO_RUBY_DRIVER_CRYPT_SHARED_LIB_PATH} ${PROJECT_DIRECTORY} - export MONGO_RUBY_DRIVER_CRYPT_SHARED_LIB_PATH=${PROJECT_DIRECTORY}/mongo_crypt_v1.so - export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PROJECT_DIRECTORY} - # Start the KMS servers first so that they are launching while we are # fetching libmongocrypt. if test "$DOCKER_PRELOAD" != 1; then @@ -353,8 +346,6 @@ if test "$COMPRESSOR" = zstd; then add_uri_option compressors=zstd fi -# TEST_CMD="bundle exec rspec -f d spec/mongo/client_construction_spec.rb" - echo "Running tests" set +e if test -n "$TEST_CMD"; then From 20812ca22a84b9b663294219d3eddff924f398b1 Mon Sep 17 00:00:00 2001 From: Dmitry Rybakov Date: Wed, 25 Mar 2026 12:40:37 +0100 Subject: [PATCH 16/18] Fix more fle specs --- spec/mongo/crypt/auto_encryption_context_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/mongo/crypt/auto_encryption_context_spec.rb b/spec/mongo/crypt/auto_encryption_context_spec.rb index 93dee5903f..0f3fcb73d9 100644 --- a/spec/mongo/crypt/auto_encryption_context_spec.rb +++ b/spec/mongo/crypt/auto_encryption_context_spec.rb @@ -9,7 +9,7 @@ include_context 'define shared FLE helpers' let(:credentials) { Mongo::Crypt::KMS::Credentials.new(kms_providers) } - let(:mongocrypt) { Mongo::Crypt::Handle.new(credentials, logger: logger) } + let(:mongocrypt) { Mongo::Crypt::Handle.new(credentials, {}, extra_options.merge(logger: logger)) } let(:context) { described_class.new(mongocrypt, io, db_name, command) } let(:logger) { nil } From dd0b875c5fe973d0543becc559029e264e83d22d Mon Sep 17 00:00:00 2001 From: Dmitry Rybakov Date: Wed, 25 Mar 2026 13:03:35 +0100 Subject: [PATCH 17/18] Fix even more fle specs --- spec/mongo/crypt/auto_decryption_context_spec.rb | 2 +- spec/mongo/crypt/data_key_context_spec.rb | 2 +- spec/mongo/crypt/explicit_decryption_context_spec.rb | 2 +- spec/mongo/crypt/explicit_encryption_context_spec.rb | 2 +- spec/mongo/crypt/handle_spec.rb | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/mongo/crypt/auto_decryption_context_spec.rb b/spec/mongo/crypt/auto_decryption_context_spec.rb index 8d6abdaaad..6920601187 100644 --- a/spec/mongo/crypt/auto_decryption_context_spec.rb +++ b/spec/mongo/crypt/auto_decryption_context_spec.rb @@ -9,7 +9,7 @@ include_context 'define shared FLE helpers' let(:credentials) { Mongo::Crypt::KMS::Credentials.new(kms_providers) } - let(:mongocrypt) { Mongo::Crypt::Handle.new(credentials, logger: logger) } + let(:mongocrypt) { Mongo::Crypt::Handle.new(credentials, {}, extra_options.merge(logger: logger)) } let(:context) { described_class.new(mongocrypt, io, command) } let(:logger) { nil } diff --git a/spec/mongo/crypt/data_key_context_spec.rb b/spec/mongo/crypt/data_key_context_spec.rb index b1b261e07b..7b6b44da97 100644 --- a/spec/mongo/crypt/data_key_context_spec.rb +++ b/spec/mongo/crypt/data_key_context_spec.rb @@ -16,7 +16,7 @@ end let(:mongocrypt) do - Mongo::Crypt::Handle.new(credentials, kms_tls_options) + Mongo::Crypt::Handle.new(credentials, kms_tls_options, extra_options) end let(:io) { double("Mongo::Crypt::EncryptionIO") } diff --git a/spec/mongo/crypt/explicit_decryption_context_spec.rb b/spec/mongo/crypt/explicit_decryption_context_spec.rb index 644d0a7db9..d6eca4d36f 100644 --- a/spec/mongo/crypt/explicit_decryption_context_spec.rb +++ b/spec/mongo/crypt/explicit_decryption_context_spec.rb @@ -9,7 +9,7 @@ include_context 'define shared FLE helpers' let(:credentials) { Mongo::Crypt::KMS::Credentials.new(kms_providers) } - let(:mongocrypt) { Mongo::Crypt::Handle.new(credentials, logger: logger) } + let(:mongocrypt) { Mongo::Crypt::Handle.new(credentials, {}, extra_options.merge(logger: logger)) } let(:context) { described_class.new(mongocrypt, io, value) } let(:logger) { nil } let(:io) { double("Mongo::ClientEncryption::IO") } diff --git a/spec/mongo/crypt/explicit_encryption_context_spec.rb b/spec/mongo/crypt/explicit_encryption_context_spec.rb index 74350ed87a..424c559b11 100644 --- a/spec/mongo/crypt/explicit_encryption_context_spec.rb +++ b/spec/mongo/crypt/explicit_encryption_context_spec.rb @@ -9,7 +9,7 @@ include_context 'define shared FLE helpers' let(:credentials) { Mongo::Crypt::KMS::Credentials.new(kms_providers) } - let(:mongocrypt) { Mongo::Crypt::Handle.new(credentials, logger: logger) } + let(:mongocrypt) { Mongo::Crypt::Handle.new(credentials, {}, extra_options.merge(logger: logger)) } let(:context) { described_class.new(mongocrypt, io, value, options) } let(:logger) { nil } diff --git a/spec/mongo/crypt/handle_spec.rb b/spec/mongo/crypt/handle_spec.rb index e4dab20985..0a7e6940a4 100644 --- a/spec/mongo/crypt/handle_spec.rb +++ b/spec/mongo/crypt/handle_spec.rb @@ -38,7 +38,7 @@ end let(:crypt_shared_lib_path) do - nil + SpecConfig.instance.crypt_shared_lib_path end let(:crypt_shared_lib_required) do From b524faae729f6c37f04fffa774be4785ad5c66e8 Mon Sep 17 00:00:00 2001 From: Dmitry Rybakov Date: Wed, 25 Mar 2026 13:20:14 +0100 Subject: [PATCH 18/18] Fix as many fle specs as possible --- spec/mongo/crypt/handle_spec.rb | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/spec/mongo/crypt/handle_spec.rb b/spec/mongo/crypt/handle_spec.rb index 0a7e6940a4..a865d095f6 100644 --- a/spec/mongo/crypt/handle_spec.rb +++ b/spec/mongo/crypt/handle_spec.rb @@ -163,9 +163,8 @@ context 'if bypass_query_analysis is true' do min_server_version '6.0.0' - let(:bypass_query_analysis) do - true - end + let(:bypass_query_analysis) { true } + let(:crypt_shared_lib_path) { nil } it 'does not load the crypt shared lib' do expect(Mongo::Crypt::Binding).not_to receive(:setopt_append_crypt_shared_lib_search_path) @@ -177,9 +176,8 @@ context 'if explicit_encryption_only is true' do min_server_version '6.0.0' - let(:explicit_encryption_only) do - true - end + let(:explicit_encryption_only) { true } + let(:crypt_shared_lib_path) { nil } it 'does not load the crypt shared lib' do expect(Mongo::Crypt::Binding).not_to receive(:setopt_append_crypt_shared_lib_search_path)