diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 55fbd70875..2d321d0b38 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: @@ -1233,7 +1237,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 @@ -1257,7 +1261,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 @@ -1292,7 +1296,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}" @@ -1304,7 +1308,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}" @@ -1394,7 +1398,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 @@ -1407,7 +1411,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 @@ -1424,7 +1428,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 @@ -1436,7 +1440,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 @@ -1448,7 +1452,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 @@ -1523,7 +1527,7 @@ 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"] @@ -1572,6 +1576,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' @@ -1593,7 +1599,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 6232124426..9083d1586d 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 afa40bd4f9..2dbc222dd0 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 @@ -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| %> @@ -342,7 +345,7 @@ 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 %> @@ -391,6 +394,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' @@ -412,7 +417,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/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 31e9b8befd..f1bd48a125 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 @@ -345,7 +346,6 @@ if test "$COMPRESSOR" = zstd; then add_uri_option compressors=zstd fi - echo "Running tests" set +e if test -n "$TEST_CMD"; then 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 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 8d1a195472..74c38dd14c 100644 --- a/spec/integration/client_side_encryption/kms_tls_options_spec.rb +++ b/spec/integration/client_side_encryption/kms_tls_options_spec.rb @@ -322,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/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/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 } 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..a865d095f6 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 @@ -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) diff --git a/spec/mongo/cursor_spec.rb b/spec/mongo/cursor_spec.rb index a309e03dfe..68c378d189 100644 --- a/spec/mongo/cursor_spec.rb +++ b/spec/mongo/cursor_spec.rb @@ -569,6 +569,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}" }} @@ -592,8 +593,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 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