From 30a7bda89fd60fd7680b4ded58f691b3039545d1 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 22 Jan 2025 10:39:19 -0600 Subject: [PATCH 001/121] PYTHON-4540 Cleaner separation of test lifecycle --- .evergreen/config.yml | 39 +-- .evergreen/run-azurekms-fail-test.sh | 5 +- .evergreen/run-azurekms-test.sh | 15 +- .evergreen/run-gcpkms-test.sh | 14 +- .evergreen/run-tests.sh | 253 ++------------ .evergreen/scripts/generate_config.py | 17 +- .evergreen/scripts/run-gcpkms-fail-test.sh | 4 +- .evergreen/scripts/run-load-balancer.sh | 3 - .evergreen/scripts/setup-dev-env.sh | 6 +- .evergreen/scripts/setup-encryption.sh | 5 - .evergreen/scripts/setup-tests.sh | 313 ++++++++++++++++-- .evergreen/scripts/stop-load-balancer.sh | 5 - ...p-encryption.sh => setup-libmongocrypt.sh} | 8 - .evergreen/teardown-encryption.sh | 10 - .evergreen/teardown-tests.sh | 27 ++ CONTRIBUTING.md | 12 +- justfile | 8 +- 17 files changed, 379 insertions(+), 365 deletions(-) delete mode 100755 .evergreen/scripts/run-load-balancer.sh delete mode 100755 .evergreen/scripts/setup-encryption.sh delete mode 100755 .evergreen/scripts/stop-load-balancer.sh rename .evergreen/{setup-encryption.sh => setup-libmongocrypt.sh} (84%) delete mode 100755 .evergreen/teardown-encryption.sh create mode 100755 .evergreen/teardown-tests.sh diff --git a/.evergreen/config.yml b/.evergreen/config.yml index f854f6bd3d..4217150668 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -280,15 +280,6 @@ functions: working_dir: "src" args: - .evergreen/scripts/setup-tests.sh - - command: subprocess.exec - params: - working_dir: "src" - binary: bash - background: true - include_expansions_in_env: ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN"] - args: - - .evergreen/scripts/run-with-env.sh - - .evergreen/scripts/setup-encryption.sh - command: subprocess.exec type: test params: @@ -299,15 +290,6 @@ functions: - .evergreen/scripts/run-with-env.sh - .evergreen/scripts/run-tests.sh - "run direct tests": - - command: subprocess.exec - type: test - params: - working_dir: "src" - binary: bash - include_expansions_in_env: ["PYTHON_BINARY"] - args: [ .evergreen/scripts/run-direct-tests.sh ] - "run enterprise auth tests": - command: subprocess.exec type: test @@ -587,25 +569,6 @@ functions: args: - ${DRIVERS_TOOLS}/.evergreen/ocsp/setup.sh - "run load-balancer": - - command: subprocess.exec - params: - binary: bash - include_expansions_in_env: ["MONGODB_URI"] - args: - - src/.evergreen/scripts/run-with-env.sh - - src/.evergreen/scripts/run-load-balancer.sh - - command: expansions.update - params: - file: lb-expansion.yml - - "stop load-balancer": - - command: subprocess.exec - params: - binary: bash - args: - - src/.evergreen/scripts/stop-load-balancer.sh - "teardown atlas": - command: subprocess.exec params: @@ -935,7 +898,7 @@ tasks: vars: VERSION: "8.0" TOPOLOGY: "replica_set" - - func: "run direct tests" + - func: "run tests" - name: "atlas-connect" tags: ["atlas-connect"] diff --git a/.evergreen/run-azurekms-fail-test.sh b/.evergreen/run-azurekms-fail-test.sh index d1117dcb32..31ca30b3e2 100755 --- a/.evergreen/run-azurekms-fail-test.sh +++ b/.evergreen/run-azurekms-fail-test.sh @@ -3,10 +3,9 @@ set -o errexit # Exit the script with error if any of the commands fail HERE=$(dirname ${BASH_SOURCE:-$0}) . $DRIVERS_TOOLS/.evergreen/csfle/azurekms/setup-secrets.sh export LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz -SKIP_SERVERS=1 bash $HERE/setup-encryption.sh +SUCCESS=false TEST_FLE_AZURE_AUTO=1 bash $HERE/scripts/setup-tests.sh PYTHON_BINARY=/opt/mongodbtoolchain/v4/bin/python3 \ KEY_NAME="${AZUREKMS_KEYNAME}" \ KEY_VAULT_ENDPOINT="${AZUREKMS_KEYVAULTENDPOINT}" \ - SUCCESS=false TEST_FLE_AZURE_AUTO=1 \ $HERE/just.sh test-eg -bash $HERE/teardown-encryption.sh +bash $HERE/scripts/teardown-tests.sh diff --git a/.evergreen/run-azurekms-test.sh b/.evergreen/run-azurekms-test.sh index 28a84a52e2..70b78edad8 100755 --- a/.evergreen/run-azurekms-test.sh +++ b/.evergreen/run-azurekms-test.sh @@ -7,23 +7,22 @@ export AZUREKMS_RESOURCEGROUP=${AZUREKMS_RESOURCEGROUP} export AZUREKMS_VMNAME=${AZUREKMS_VMNAME} export AZUREKMS_PRIVATEKEYPATH=/tmp/testazurekms_privatekey export LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz -SKIP_SERVERS=1 bash $HERE/setup-encryption.sh # Set up the remote files to test. git add . git commit -m "add files" || true -git archive -o /tmp/mongo-python-driver.tar HEAD -tar -rf /tmp/mongo-python-driver.tar libmongocrypt -gzip -f /tmp/mongo-python-driver.tar +git archive -o /tmp/mongo-python-driver.tgz HEAD # shellcheck disable=SC2088 -AZUREKMS_SRC="/tmp/mongo-python-driver.tar.gz" AZUREKMS_DST="~/" \ +AZUREKMS_SRC="/tmp/mongo-python-driver.tgz" AZUREKMS_DST="~/" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/copy-file.sh echo "Copying files ... end" echo "Untarring file ... begin" -AZUREKMS_CMD="tar xf mongo-python-driver.tar.gz" \ +AZUREKMS_CMD="tar xf mongo-python-driver.tgz" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" -AZUREKMS_CMD="KEY_NAME=\"$AZUREKMS_KEYNAME\" KEY_VAULT_ENDPOINT=\"$AZUREKMS_KEYVAULTENDPOINT\" SUCCESS=true TEST_FLE_AZURE_AUTO=1 bash ./.evergreen/just.sh test-eg" \ +AZUREKMS_CMD="SUCCESS=true TEST_FLE_AZURE_AUTO=1 bash ./.evergreen/scripts/setup-test.sh" \ + $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh +AZUREKMS_CMD="KEY_NAME=\"$AZUREKMS_KEYNAME\" KEY_VAULT_ENDPOINT=\"$AZUREKMS_KEYVAULTENDPOINT\" bash ./.evergreen/just.sh test-eg" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh echo "Running test ... end" -bash $HERE/teardown-encryption.sh +bash $HERE/scripts/teardown-tests.sh diff --git a/.evergreen/run-gcpkms-test.sh b/.evergreen/run-gcpkms-test.sh index 37ec2bfe56..8d9171d4fc 100755 --- a/.evergreen/run-gcpkms-test.sh +++ b/.evergreen/run-gcpkms-test.sh @@ -9,19 +9,17 @@ export GCPKMS_PROJECT=${GCPKMS_PROJECT} export GCPKMS_ZONE=${GCPKMS_ZONE} export GCPKMS_INSTANCENAME=${GCPKMS_INSTANCENAME} export LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz -SKIP_SERVERS=1 bash $HERE/setup-encryption.sh # Set up the remote files to test. git add . git commit -m "add files" || true -git archive -o /tmp/mongo-python-driver.tar HEAD -tar -rf /tmp/mongo-python-driver.tar libmongocrypt -gzip -f /tmp/mongo-python-driver.tar -GCPKMS_SRC=/tmp/mongo-python-driver.tar.gz GCPKMS_DST=$GCPKMS_INSTANCENAME: $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/copy-file.sh +git archive -o /tmp/mongo-python-driver.tgz HEAD +GCPKMS_SRC=/tmp/mongo-python-driver.tgz GCPKMS_DST=$GCPKMS_INSTANCENAME: $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/copy-file.sh echo "Copying files ... end" echo "Untarring file ... begin" -GCPKMS_CMD="tar xf mongo-python-driver.tar.gz" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh +GCPKMS_CMD="tar xf mongo-python-driver.tgz" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" -GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 ./.evergreen/just.sh test-eg" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh +GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 ./.evergreen/scripts/setup-test.sh" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh +GCPKMS_CMD="./.evergreen/just.sh test-eg" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Running test ... end" -bash $HERE/teardown-encryption.sh +bash $HERE/scripts/teardown-tests.sh diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index d647955059..eabae6224b 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -1,52 +1,30 @@ #!/bin/bash -set -o errexit # Exit the script with error if any of the commands fail -set -o xtrace +set -eu -# Note: It is assumed that you have already set up a virtual environment before running this file. - -# Supported/used environment variables: -# AUTH Set to enable authentication. Defaults to "noauth" -# SSL Set to enable SSL. Defaults to "nossl" -# GREEN_FRAMEWORK The green framework to test with, if any. -# COVERAGE If non-empty, run the test suite with coverage. -# COMPRESSORS If non-empty, install appropriate compressor. -# LIBMONGOCRYPT_URL The URL to download libmongocrypt. -# TEST_DATA_LAKE If non-empty, run data lake tests. -# TEST_ENCRYPTION If non-empty, run encryption tests. -# TEST_CRYPT_SHARED If non-empty, install crypt_shared lib. -# TEST_SERVERLESS If non-empy, test on serverless. -# TEST_LOADBALANCER If non-empy, test load balancing. -# TEST_FLE_AZURE_AUTO If non-empy, test auto FLE on Azure -# TEST_FLE_GCP_AUTO If non-empy, test auto FLE on GCP -# TEST_PYOPENSSL If non-empy, test with PyOpenSSL -# TEST_ENTERPRISE_AUTH If non-empty, test with Enterprise Auth -# TEST_AUTH_AWS If non-empty, test AWS Auth Mechanism -# TEST_AUTH_OIDC If non-empty, test OIDC Auth Mechanism -# TEST_PERF If non-empty, run performance tests -# TEST_OCSP If non-empty, run OCSP tests -# TEST_ATLAS If non-empty, test Atlas connections -# TEST_INDEX_MANAGEMENT If non-empty, run index management tests -# TEST_ENCRYPTION_PYOPENSSL If non-empy, test encryption with PyOpenSSL - -AUTH=${AUTH:-noauth} -SSL=${SSL:-nossl} -TEST_SUITES=${TEST_SUITES:-} -TEST_ARGS="${*:1}" +SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) +ROOT_DIR="$(dirname $(dirname $HERE))" export PIP_QUIET=1 # Quiet by default export PIP_PREFER_BINARY=1 # Prefer binary dists by default -set +x -PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") - # Try to source local Drivers Secrets -if [ -f ./secrets-export.sh ]; then +if [ -f $ROOT_DIR/secrets-export.sh ]; then echo "Sourcing secrets" source ./secrets-export.sh else echo "Not sourcing secrets" fi +# Try to source the test inputs +if [ -f $SCRIPT_DIR/test-env.sh ]; then + echo "Sourcing test inputs" + source $SCRIPT_DIR/test-env.sh +else + echo "Not sourcing test inputs" +fi + +PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") + # Start compiling the args we'll pass to uv. # Run in an isolated environment so as not to pollute the base venv. UV_ARGS=("--isolated --extra test") @@ -56,110 +34,12 @@ if [ -z "${NO_EXT:-}" ] && [ "$PYTHON_IMPL" = "CPython" ]; then uv run tools/fail_if_no_c.py fi -if [ "$AUTH" != "noauth" ]; then - if [ -n "$TEST_DATA_LAKE" ]; then - export DB_USER="mhuser" - export DB_PASSWORD="pencil" - elif [ -n "$TEST_SERVERLESS" ]; then - source "${DRIVERS_TOOLS}"/.evergreen/serverless/secrets-export.sh - export DB_USER=$SERVERLESS_ATLAS_USER - export DB_PASSWORD=$SERVERLESS_ATLAS_PASSWORD - export MONGODB_URI="$SERVERLESS_URI" - echo "MONGODB_URI=$MONGODB_URI" - export SINGLE_MONGOS_LB_URI=$MONGODB_URI - export MULTI_MONGOS_LB_URI=$MONGODB_URI - elif [ -n "$TEST_AUTH_OIDC" ]; then - export DB_USER=$OIDC_ADMIN_USER - export DB_PASSWORD=$OIDC_ADMIN_PWD - export DB_IP="$MONGODB_URI" - else - export DB_USER="bob" - export DB_PASSWORD="pwd123" - fi - echo "Added auth, DB_USER: $DB_USER" -fi - -if [ -n "$TEST_ENTERPRISE_AUTH" ]; then - UV_ARGS+=("--extra gssapi") - if [ "Windows_NT" = "$OS" ]; then - echo "Setting GSSAPI_PASS" - export GSSAPI_PASS=${SASL_PASS} - export GSSAPI_CANONICALIZE="true" - else - # BUILD-3830 - touch krb5.conf.empty - export KRB5_CONFIG=${PROJECT_DIRECTORY}/.evergreen/krb5.conf.empty - - echo "Writing keytab" - echo ${KEYTAB_BASE64} | base64 -d > ${PROJECT_DIRECTORY}/.evergreen/drivers.keytab - echo "Running kinit" - kinit -k -t ${PROJECT_DIRECTORY}/.evergreen/drivers.keytab -p ${PRINCIPAL} - fi - echo "Setting GSSAPI variables" - export GSSAPI_HOST=${SASL_HOST} - export GSSAPI_PORT=${SASL_PORT} - export GSSAPI_PRINCIPAL=${PRINCIPAL} - - export TEST_SUITES="auth" -fi - -if [ -n "$TEST_LOADBALANCER" ]; then - export LOAD_BALANCER=1 - export SINGLE_MONGOS_LB_URI="${SINGLE_MONGOS_LB_URI:-mongodb://127.0.0.1:8000/?loadBalanced=true}" - export MULTI_MONGOS_LB_URI="${MULTI_MONGOS_LB_URI:-mongodb://127.0.0.1:8001/?loadBalanced=true}" - export TEST_SUITES="load_balancer" -fi - -if [ "$SSL" != "nossl" ]; then - export CLIENT_PEM="$DRIVERS_TOOLS/.evergreen/x509gen/client.pem" - export CA_PEM="$DRIVERS_TOOLS/.evergreen/x509gen/ca.pem" - - if [ -n "$TEST_LOADBALANCER" ]; then - export SINGLE_MONGOS_LB_URI="${SINGLE_MONGOS_LB_URI}&tls=true" - export MULTI_MONGOS_LB_URI="${MULTI_MONGOS_LB_URI}&tls=true" - fi -fi - -if [ "$COMPRESSORS" = "snappy" ]; then - UV_ARGS+=("--extra snappy") -elif [ "$COMPRESSORS" = "zstd" ]; then - UV_ARGS+=("--extra zstandard") -fi - -# PyOpenSSL test setup. -if [ -n "$TEST_PYOPENSSL" ]; then - UV_ARGS+=("--extra ocsp") -fi - if [ -n "$TEST_ENCRYPTION" ] || [ -n "$TEST_FLE_AZURE_AUTO" ] || [ -n "$TEST_FLE_GCP_AUTO" ]; then # Check for libmongocrypt download. if [ ! -d "libmongocrypt" ]; then - echo "Run encryption setup first!" + echo "Run test setup first!" exit 1 fi - - UV_ARGS+=("--extra encryption") - # TODO: Test with 'pip install pymongocrypt' - UV_ARGS+=("--group pymongocrypt_source") - - # Use the nocrypto build to avoid dependency issues with older windows/python versions. - BASE=$(pwd)/libmongocrypt/nocrypto - if [ -f "${BASE}/lib/libmongocrypt.so" ]; then - PYMONGOCRYPT_LIB=${BASE}/lib/libmongocrypt.so - elif [ -f "${BASE}/lib/libmongocrypt.dylib" ]; then - PYMONGOCRYPT_LIB=${BASE}/lib/libmongocrypt.dylib - elif [ -f "${BASE}/bin/mongocrypt.dll" ]; then - PYMONGOCRYPT_LIB=${BASE}/bin/mongocrypt.dll - # libmongocrypt's windows dll is not marked executable. - chmod +x $PYMONGOCRYPT_LIB - PYMONGOCRYPT_LIB=$(cygpath -m $PYMONGOCRYPT_LIB) - elif [ -f "${BASE}/lib64/libmongocrypt.so" ]; then - PYMONGOCRYPT_LIB=${BASE}/lib64/libmongocrypt.so - else - echo "Cannot find libmongocrypt shared object file" - exit 1 - fi - export PYMONGOCRYPT_LIB # Ensure pymongocrypt is working properly. # shellcheck disable=SC2048 uv run ${UV_ARGS[*]} python -c "import pymongocrypt; print('pymongocrypt version: '+pymongocrypt.__version__)" @@ -168,112 +48,27 @@ if [ -n "$TEST_ENCRYPTION" ] || [ -n "$TEST_FLE_AZURE_AUTO" ] || [ -n "$TEST_FLE # PATH is updated by configure-env.sh for access to mongocryptd. fi -if [ -n "$TEST_ENCRYPTION" ]; then - if [ -n "$TEST_ENCRYPTION_PYOPENSSL" ]; then - UV_ARGS+=("--extra ocsp") - fi - - if [ -n "$TEST_CRYPT_SHARED" ]; then - CRYPT_SHARED_DIR=`dirname $CRYPT_SHARED_LIB_PATH` - echo "using crypt_shared_dir $CRYPT_SHARED_DIR" - export DYLD_FALLBACK_LIBRARY_PATH=$CRYPT_SHARED_DIR:$DYLD_FALLBACK_LIBRARY_PATH - export LD_LIBRARY_PATH=$CRYPT_SHARED_DIR:$LD_LIBRARY_PATH - export PATH=$CRYPT_SHARED_DIR:$PATH - fi - # Only run the encryption tests. - TEST_SUITES="encryption" -fi - -if [ -n "$TEST_FLE_AZURE_AUTO" ] || [ -n "$TEST_FLE_GCP_AUTO" ]; then - if [[ -z "$SUCCESS" ]]; then - echo "Must define SUCCESS" - exit 1 - fi - - if echo "$MONGODB_URI" | grep -q "@"; then - echo "MONGODB_URI unexpectedly contains user credentials in FLE test!"; - exit 1 - fi - TEST_SUITES="csfle" -fi - -if [ -n "$TEST_INDEX_MANAGEMENT" ]; then - source $DRIVERS_TOOLS/.evergreen/atlas/secrets-export.sh - export DB_USER="${DRIVERS_ATLAS_LAMBDA_USER}" - set +x - export DB_PASSWORD="${DRIVERS_ATLAS_LAMBDA_PASSWORD}" - set -x - TEST_SUITES="index_management" -fi - -if [ -n "$TEST_DATA_LAKE" ] && [ -z "$TEST_ARGS" ]; then - TEST_SUITES="data_lake" -fi - -if [ -n "$TEST_ATLAS" ]; then - TEST_SUITES="atlas" -fi - -if [ -n "$TEST_OCSP" ]; then - UV_ARGS+=("--extra ocsp") - TEST_SUITES="ocsp" -fi - -if [ -n "$TEST_AUTH_AWS" ]; then - UV_ARGS+=("--extra aws") - TEST_SUITES="auth_aws" -fi +PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") +echo "Running $AUTH tests over $SSL with python $(uv python find)" +uv run python -c 'import sys; print(sys.version)' -if [ -n "$TEST_AUTH_OIDC" ]; then - UV_ARGS+=("--extra aws") - TEST_SUITES="auth_oidc" -fi +# Show the installed packages +# shellcheck disable=SC2048 +PIP_QUIET=0 uv run ${UV_ARGS[*]} --with pip pip list +# Record the start time for a perf test. if [ -n "$PERF_TEST" ]; then - UV_ARGS+=("--group perf") start_time=$(date +%s) - TEST_SUITES="perf" - # PYTHON-4769 Run perf_test.py directly otherwise pytest's test collection negatively - # affects the benchmark results. - TEST_ARGS="test/performance/perf_test.py $TEST_ARGS" fi -echo "Running $AUTH tests over $SSL with python $(uv python find)" -uv run python -c 'import sys; print(sys.version)' - - # Run the tests, and store the results in Evergreen compatible XUnit XML # files in the xunit-results/ directory. - -# Run the tests with coverage if requested and coverage is installed. -# Only cover CPython. PyPy reports suspiciously low coverage. -if [ -n "$COVERAGE" ] && [ "$PYTHON_IMPL" = "CPython" ]; then - # Keep in sync with combine-coverage.sh. - # coverage >=5 is needed for relative_files=true. - UV_ARGS+=("--group coverage") - TEST_ARGS="$TEST_ARGS --cov" -fi - -if [ -n "$GREEN_FRAMEWORK" ]; then - UV_ARGS+=("--group $GREEN_FRAMEWORK") -fi - -# Show the installed packages -# shellcheck disable=SC2048 -PIP_QUIET=0 uv run ${UV_ARGS[*]} --with pip pip list - if [ -z "$GREEN_FRAMEWORK" ]; then - # Use --capture=tee-sys so pytest prints test output inline: - # https://docs.pytest.org/en/stable/how-to/capture-stdout-stderr.html - PYTEST_ARGS="-v --capture=tee-sys --durations=5 $TEST_ARGS" - if [ -n "$TEST_SUITES" ]; then - PYTEST_ARGS="-m $TEST_SUITES $PYTEST_ARGS" - fi # shellcheck disable=SC2048 - uv run ${UV_ARGS[*]} pytest $PYTEST_ARGS + uv run ${UV_ARGS} pytest $TEST_ARGS else # shellcheck disable=SC2048 - uv run ${UV_ARGS[*]} green_framework_test.py $GREEN_FRAMEWORK -v $TEST_ARGS + uv run ${UV_ARGS} green_framework_test.py $GREEN_FRAMEWORK -v $TEST_ARGS fi # Handle perf test post actions. diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index e9624ab109..1be458c23b 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -343,11 +343,11 @@ def create_encryption_variants() -> list[BuildVariant]: batchtime = BATCHTIME_WEEK def get_encryption_expansions(encryption): - expansions = dict(test_encryption="true") + expansions = dict(TEST_ENCRYPTION="true") if "crypt_shared" in encryption: - expansions["test_crypt_shared"] = "true" + expansions["TEST_CRYPT_SHARED"] = "true" if "PyOpenSSL" in encryption: - expansions["test_encryption_pyopenssl"] = "true" + expansions["TEST_ENCRYPTION_PYOPENSSL"] = "true" return expansions host = DEFAULT_HOST @@ -486,7 +486,7 @@ def create_enterprise_auth_variants(): def create_pyopenssl_variants(): base_name = "PyOpenSSL" batchtime = BATCHTIME_WEEK - expansions = dict(test_pyopenssl="true") + expansions = dict(TEST_PYOPENSSL="true") variants = [] for python in ALL_PYTHONS: @@ -644,7 +644,7 @@ def create_disable_test_commands_variants(): def create_serverless_variants(): host = DEFAULT_HOST batchtime = BATCHTIME_WEEK - expansions = dict(test_serverless="true", AUTH="auth", SSL="ssl") + expansions = dict(TEST_SERVERLESS="true", AUTH="auth", SSL="ssl") tasks = ["serverless_task_group"] base_name = "Serverless" return [ @@ -833,12 +833,9 @@ def create_load_balancer_tasks(): tags = ["load-balancer", auth, ssl] bootstrap_vars = dict(TOPOLOGY="sharded_cluster", AUTH=auth, SSL=ssl, LOAD_BALANCER="true") bootstrap_func = FunctionCall(func="bootstrap mongo-orchestration", vars=bootstrap_vars) - balancer_func = FunctionCall(func="run load-balancer") - test_vars = dict(AUTH=auth, SSL=ssl, test_loadbalancer="true") + test_vars = dict(AUTH=auth, SSL=ssl, TEST_LOADBALANCER="true") test_func = FunctionCall(func="run tests", vars=test_vars) - tasks.append( - EvgTask(name=name, tags=tags, commands=[bootstrap_func, balancer_func, test_func]) - ) + tasks.append(EvgTask(name=name, tags=tags, commands=[bootstrap_func, test_func])) return tasks diff --git a/.evergreen/scripts/run-gcpkms-fail-test.sh b/.evergreen/scripts/run-gcpkms-fail-test.sh index 594a2984fa..eaf78ee99d 100755 --- a/.evergreen/scripts/run-gcpkms-fail-test.sh +++ b/.evergreen/scripts/run-gcpkms-fail-test.sh @@ -3,5 +3,5 @@ . .evergreen/scripts/env.sh export PYTHON_BINARY=/opt/mongodbtoolchain/v4/bin/python3 export LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz -SKIP_SERVERS=1 bash ./.evergreen/setup-encryption.sh -SUCCESS=false TEST_FLE_GCP_AUTO=1 ./.evergreen/just.sh test-eg +SUCCESS=false TEST_FLE_GCP_AUTO=1 bash $HERE/scripts/setup-tests.sh +bash ./.evergreen/just.sh test-eg diff --git a/.evergreen/scripts/run-load-balancer.sh b/.evergreen/scripts/run-load-balancer.sh deleted file mode 100755 index 7d431777e5..0000000000 --- a/.evergreen/scripts/run-load-balancer.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -MONGODB_URI=${MONGODB_URI} bash "${DRIVERS_TOOLS}"/.evergreen/run-load-balancer.sh start diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 3f8d0c4292..72f939be7b 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -5,10 +5,14 @@ set -eu HERE=$(dirname ${BASH_SOURCE:-$0}) pushd "$(dirname "$(dirname $HERE)")" > /dev/null -# Source the env file to pick up common variables. +# Source the env files to pick up common variables. if [ -f $HERE/env.sh ]; then source $HERE/env.sh fi +# PYTHON_BINARY may be defined in test-env.sh. +if [ -f $HERE/test-env.sh ]; then + source $HERE/test-env.sh +fi # Ensure dependencies are installed. . $HERE/install-dependencies.sh diff --git a/.evergreen/scripts/setup-encryption.sh b/.evergreen/scripts/setup-encryption.sh deleted file mode 100755 index 5b73240205..0000000000 --- a/.evergreen/scripts/setup-encryption.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -if [ -n "${test_encryption}" ]; then - bash .evergreen/setup-encryption.sh -fi diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index 65462b2a68..b00f436af5 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -1,27 +1,290 @@ -#!/bin/bash -eux - -PROJECT_DIRECTORY="$(pwd)" -SCRIPT_DIR="$PROJECT_DIRECTORY/.evergreen/scripts" - -if [ -f "$SCRIPT_DIR/test-env.sh" ]; then - echo "Reading $SCRIPT_DIR/test-env.sh file" - . "$SCRIPT_DIR/test-env.sh" - exit 0 -fi - -cat < "$SCRIPT_DIR"/test-env.sh -export test_encryption="${test_encryption:-}" -export test_encryption_pyopenssl="${test_encryption_pyopenssl:-}" -export test_crypt_shared="${test_crypt_shared:-}" -export test_pyopenssl="${test_pyopenssl:-}" -export test_loadbalancer="${test_loadbalancer:-}" -export test_serverless="${test_serverless:-}" -export TEST_INDEX_MANAGEMENT="${TEST_INDEX_MANAGEMENT:-}" -export TEST_DATA_LAKE="${TEST_DATA_LAKE:-}" -export ORCHESTRATION_FILE="${ORCHESTRATION_FILE:-}" -export AUTH="${AUTH:-noauth}" -export SSL="${SSL:-nossl}" -export PYTHON_BINARY="${PYTHON_BINARY:-}" -EOT +#!/bin/bash +set -eu + +# Supported/used environment variables: +# AUTH Set to enable authentication. Defaults to "noauth" +# SSL Set to enable SSL. Defaults to "nossl" +# GREEN_FRAMEWORK The green framework to test with, if any. +# COVERAGE If non-empty, run the test suite with coverage. +# COMPRESSORS If non-empty, install appropriate compressor. +# LIBMONGOCRYPT_URL The URL to download libmongocrypt. +# TEST_DATA_LAKE If non-empty, run data lake tests. +# TEST_ENCRYPTION If non-empty, run encryption tests. +# TEST_CRYPT_SHARED If non-empty, install crypt_shared lib. +# TEST_SERVERLESS If non-empy, test on serverless. +# TEST_LOADBALANCER If non-empy, test load balancing. +# TEST_FLE_AZURE_AUTO If non-empy, test auto FLE on Azure +# TEST_FLE_GCP_AUTO If non-empy, test auto FLE on GCP +# TEST_PYOPENSSL If non-empy, test with PyOpenSSL +# TEST_ENTERPRISE_AUTH If non-empty, test with Enterprise Auth +# TEST_AUTH_AWS If non-empty, test AWS Auth Mechanism +# TEST_AUTH_OIDC If non-empty, test OIDC Auth Mechanism +# TEST_PERF If non-empty, run performance tests +# TEST_OCSP If non-empty, run OCSP tests +# TEST_ATLAS If non-empty, test Atlas connections +# TEST_INDEX_MANAGEMENT If non-empty, run index management tests +# TEST_ENCRYPTION_PYOPENSSL If non-empy, test encryption with PyOpenSSL +# PERF_TEST If non-empty, run the performance tests. +# MONGODB_URI If non-empty, use as the MONGODB_URI in tests +# SUCCESS Flag used to indicate whether a test is expected to pass or fail. +# PYTHON_BINARY The python binary to use in tests. + +SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) +ROOT_DIR="$(dirname $(dirname $HERE))" + +pushd $ROOT_DIR > /dev/null + +# Clear any existing files. +rm -rf $ROOT_DIR/secrets-export.sh +rm -rf $SCRIPT_DIR/test-env.sh + +# Handle default values +AUTH=${AUTH:-noauth} +SSL=${SSL:-nossl} +TEST_ENCRYPTION="${TEST_ENCRYPTION:-}" +TEST_ENCRYPTION_PYOPENSSL="${TEST_ENCRYPTION_PYOPENSSL:-}" +TEST_CRYPT_SHARED="${TEST_CRYPT_SHARED:-}" +TEST_PYOPENSSL="${TEST_PYOPENSSL:-}" +TEST_LOAD_BALANCER="${TEST_LOAD_BALANCER:-}" +TEST_SERVERLESS="${TEST_SERVERLESS:-}" +TEST_INDEX_MANAGEMENT="${TEST_INDEX_MANAGEMENT:-}" +TEST_DATA_LAKE="${TEST_DATA_LAKE:-}" +COMPRESSORS="${COMPRESSORS:-}" +SUCCESS="${SUCCESS:-}" +MONGODB_URI="${MONGODB_URI:-}" +PERF_TEST="${PERF_TEST:-}" +GREEN_FRAMEWORK="${GREEN_FRAMEWORK:-}" +PYTHON_BINARY="${PYTHON_BINARY:-}" + +function _write_env() { + echo "export $1=$2" >> $SCRIPT_DIR/test-env.sh +} + +_write_env TEST_ENCRYPTION $TEST_ENCRYPTION +_write_env TEST_ENCRYPTION_PYOPENSSL $TEST_ENCRYPTION_PYOPENSSL +_write_env TEST_CRYPT_SHARED $TEST_CRYPT_SHARED +_write_env TEST_PYOPENSSL $TEST_PYOPENSSL +_write_env TEST_LOAD_BALANCER $TEST_LOAD_BALANCER +_write_env TEST_SERVERLESS $TEST_SERVERLESS +_write_env TEST_INDEX_MANAGEMENT $TEST_INDEX_MANAGEMENT +_write_env TEST_DATA_LAKE $TEST_DATA_LAKE +_write_env PYTHON_BINARY $PYTHON_BINARY +_write_env COMPRESSORS $COMPRESSORS +_write_env SUCCESS $SUCCESS +_write_env MONGODB_URI $MONGODB_URI +_write_env PERF_TEST $PERF_TEST +_write_env GREEN_FRAMEWORK $GREEN_FRAMEWORK +_write_env PYTHON_BINARY $PYTHON_BINARY chmod +x "$SCRIPT_DIR"/test-env.sh + +TEST_SUITES=${TEST_SUITES:-} +TEST_ARGS="${*:1}" +# Start compiling the args we'll pass to uv. +# Run in an isolated environment so as not to pollute the base venv. +UV_ARGS=("--isolated --extra test") + +if [ "$AUTH" != "noauth" ]; then + if [ -n "$TEST_DATA_LAKE" ]; then + DB_USER="mhuser" + _write_env DB_PASSWORD "pencil" + elif [ -n "$TEST_SERVERLESS" ]; then + source "${DRIVERS_TOOLS}"/.evergreen/serverless/secrets-export.sh + DB_USER=$SERVERLESS_ATLAS_USER + _write_env DB_PASSWORD $SERVERLESS_ATLAS_PASSWORD + _write_env MONGODB_URI $SERVERLESS_URI + _write_env SINGLE_MONGOS_LB_URI $MONGODB_URI + _write_env MULTI_MONGOS_LB_URI $MONGODB_URI + elif [ -n "$TEST_AUTH_OIDC" ]; then + DB_USER=$OIDC_ADMIN_USER + _write_env DB_PASSWORD $OIDC_ADMIN_PWD + _write_env DB_IP "$MONGODB_URI" + elif [ -n "$TEST_INDEX_MANAGEMENT" ]; then + source $DRIVERS_TOOLS/.evergreen/atlas/secrets-export.sh + DB_USER="${DRIVERS_ATLAS_LAMBDA_USER}" + _write_env DB_PASSWORD "${DRIVERS_ATLAS_LAMBDA_PASSWORD}" + else + DB_USER="bob" + _write_env DB_PASSWORD "pwd123" + fi + _write_env DB_USER $DB_USER + echo "Added auth, DB_USER: $DB_USER" +fi + +if [ -n "$TEST_ENTERPRISE_AUTH" ]; then + UV_ARGS+=("--extra gssapi") + if [ "Windows_NT" = "$OS" ]; then + echo "Setting GSSAPI_PASS" + _write_env GSSAPI_PASS ${SASL_PASS} + _write_env GSSAPI_CANONICALIZE "true" + else + # BUILD-3830 + touch krb5.conf.empty + _write_env KRB5_CONFIG ${ROOT_DIR}/.evergreen/krb5.conf.empty + + echo "Writing keytab" + echo ${KEYTAB_BASE64} | base64 -d > ${ROOT_DIR}/.evergreen/drivers.keytab + echo "Running kinit" + kinit -k -t ${ROOT_DIR}/.evergreen/drivers.keytab -p ${PRINCIPAL} + fi + echo "Setting GSSAPI variables" + _write_env GSSAPI_HOST ${SASL_HOST} + _write_env GSSAPI_PORT ${SASL_PORT} + _write_env GSSAPI_PRINCIPAL ${PRINCIPAL} + + TEST_SUITES="auth" +fi + +if [ -n "$TEST_LOADBALANCER" ]; then + _write_env LOAD_BALANCER 1 + _write_env SINGLE_MONGOS_LB_URI "${SINGLE_MONGOS_LB_URI:-mongodb://127.0.0.1:8000/?loadBalanced=true}" + _write_env MULTI_MONGOS_LB_URI "${MULTI_MONGOS_LB_URI:-mongodb://127.0.0.1:8001/?loadBalanced=true}" + TEST_SUITES="load_balancer" + MONGODB_URI=${MONGODB_URI} bash "${DRIVERS_TOOLS}"/.evergreen/run-load-balancer.sh start +fi + +if [ "$SSL" != "nossl" ]; then + _write_env CLIENT_PEM "$DRIVERS_TOOLS/.evergreen/x509gen/client.pem" + _write_env CA_PEM "$DRIVERS_TOOLS/.evergreen/x509gen/ca.pem" + + if [ -n "$TEST_LOADBALANCER" ]; then + _write_env SINGLE_MONGOS_LB_URI "${SINGLE_MONGOS_LB_URI}&tls=true" + _write_env MULTI_MONGOS_LB_URI "${MULTI_MONGOS_LB_URI}&tls=true" + fi +fi + +if [ "$COMPRESSORS" = "snappy" ]; then + UV_ARGS+=("--extra snappy") +elif [ "$COMPRESSORS" = "zstd" ]; then + UV_ARGS+=("--extra zstandard") +fi + +# PyOpenSSL test setup. +if [ -n "$TEST_PYOPENSSL" ]; then + UV_ARGS+=("--extra ocsp") +fi + +if [ -n "$TEST_ENCRYPTION" ] || [ -n "$TEST_FLE_AZURE_AUTO" ] || [ -n "$TEST_FLE_GCP_AUTO" ]; then + # Check for libmongocrypt download. + if [ ! -d "libmongocrypt" ]; then + bash $SCRIPT_DIR/setup-libmongocrypt.sh + fi + + UV_ARGS+=("--extra encryption") + # TODO: Test with 'pip install pymongocrypt' + UV_ARGS+=("--group pymongocrypt_source") + + # Use the nocrypto build to avoid dependency issues with older windows/python versions. + BASE=$(pwd)/libmongocrypt/nocrypto + if [ -f "${BASE}/lib/libmongocrypt.so" ]; then + PYMONGOCRYPT_LIB=${BASE}/lib/libmongocrypt.so + elif [ -f "${BASE}/lib/libmongocrypt.dylib" ]; then + PYMONGOCRYPT_LIB=${BASE}/lib/libmongocrypt.dylib + elif [ -f "${BASE}/bin/mongocrypt.dll" ]; then + PYMONGOCRYPT_LIB=${BASE}/bin/mongocrypt.dll + # libmongocrypt's windows dll is not marked executable. + chmod +x $PYMONGOCRYPT_LIB + PYMONGOCRYPT_LIB=$(cygpath -m $PYMONGOCRYPT_LIB) + elif [ -f "${BASE}/lib64/libmongocrypt.so" ]; then + PYMONGOCRYPT_LIB=${BASE}/lib64/libmongocrypt.so + else + echo "Cannot find libmongocrypt shared object file" + exit 1 + fi + _write_env PYMONGOCRYPT_LIB $PYMONGOCRYPT_LIB + # PATH is updated by configure-env.sh for access to mongocryptd. +fi + +if [ -n "$TEST_ENCRYPTION" ]; then + bash "${DRIVERS_TOOLS}"/.evergreen/csfle/setup-secrets.sh + bash "${DRIVERS_TOOLS}"/.evergreen/csfle/start-servers.sh + + if [ -n "$TEST_ENCRYPTION_PYOPENSSL" ]; then + UV_ARGS+=("--extra ocsp") + fi + + if [ -n "$TEST_CRYPT_SHARED" ]; then + CRYPT_SHARED_DIR=`dirname $CRYPT_SHARED_LIB_PATH` + echo "using crypt_shared_dir $CRYPT_SHARED_DIR" + _write_env DYLD_FALLBACK_LIBRARY_PATH $CRYPT_SHARED_DIR:$DYLD_FALLBACK_LIBRARY_PATH + _write_env LD_LIBRARY_PATH $CRYPT_SHARED_DIR:$LD_LIBRARY_PATH + _write_env PATH "$CRYPT_SHARED_DIR:$PATH" + fi + # Only run the encryption tests. + TEST_SUITES="encryption" +fi + +if [ -n "$TEST_FLE_AZURE_AUTO" ] || [ -n "$TEST_FLE_GCP_AUTO" ]; then + if [[ -z "$SUCCESS" ]]; then + echo "Must define SUCCESS" + exit 1 + fi + + if echo "$MONGODB_URI" | grep -q "@"; then + echo "MONGODB_URI unexpectedly contains user credentials in FLE test!"; + exit 1 + fi + TEST_SUITES="csfle" +fi + +if [ -n "$TEST_INDEX_MANAGEMENT" ]; then + TEST_SUITES="index_management" +fi + +if [ -n "$TEST_DATA_LAKE" ] && [ -z "$TEST_ARGS" ]; then + TEST_SUITES="data_lake" +fi + +if [ -n "$TEST_ATLAS" ]; then + TEST_SUITES="atlas" +fi + +if [ -n "$TEST_OCSP" ]; then + UV_ARGS+=("--extra ocsp") + TEST_SUITES="ocsp" +fi + +if [ -n "$TEST_AUTH_AWS" ]; then + UV_ARGS+=("--extra aws") + TEST_SUITES="auth_aws" +fi + +if [ -n "$TEST_AUTH_OIDC" ]; then + UV_ARGS+=("--extra aws") + TEST_SUITES="auth_oidc" +fi + +if [ -n "$PERF_TEST" ]; then + UV_ARGS+=("--group perf") + TEST_SUITES="perf" + # PYTHON-4769 Run perf_test.py directly otherwise pytest's test collection negatively + # affects the benchmark results. + TEST_ARGS="test/performance/perf_test.py $TEST_ARGS" +fi + +# Add coverage if requested. +# Only cover CPython. PyPy reports suspiciously low coverage. +if [ -n "$COVERAGE" ] && [ "$PYTHON_IMPL" = "CPython" ]; then + # Keep in sync with combine-coverage.sh. + # coverage >=5 is needed for relative_files=true. + UV_ARGS+=("--group coverage") + TEST_ARGS="$TEST_ARGS --cov" +fi + +if [ -n "$GREEN_FRAMEWORK" ]; then + UV_ARGS+=("--group $GREEN_FRAMEWORK") +fi + +if [ -z "$GREEN_FRAMEWORK" ]; then + # Use --capture=tee-sys so pytest prints test output inline: + # https://docs.pytest.org/en/stable/how-to/capture-stdout-stderr.html + TEST_ARGS="-v --capture=tee-sys --durations=5 $TEST_ARGS" + if [ -n "$TEST_SUITES" ]; then + TEST_ARGS="-m $TEST_SUITES $TEST_ARGS" + fi +fi + +_write_env TEST_ARGS $TEST_ARGS +_write_env UV_ARGS "${UV_ARGS[*]}" + +popd > /dev/null diff --git a/.evergreen/scripts/stop-load-balancer.sh b/.evergreen/scripts/stop-load-balancer.sh deleted file mode 100755 index 2d3c5366ec..0000000000 --- a/.evergreen/scripts/stop-load-balancer.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -cd "${DRIVERS_TOOLS}"/.evergreen || exit -DRIVERS_TOOLS=${DRIVERS_TOOLS} -bash "${DRIVERS_TOOLS}"/.evergreen/run-load-balancer.sh stop diff --git a/.evergreen/setup-encryption.sh b/.evergreen/setup-libmongocrypt.sh similarity index 84% rename from .evergreen/setup-encryption.sh rename to .evergreen/setup-libmongocrypt.sh index b403ef9ca8..b2084c2982 100755 --- a/.evergreen/setup-encryption.sh +++ b/.evergreen/setup-libmongocrypt.sh @@ -50,11 +50,3 @@ mkdir libmongocrypt tar xzf libmongocrypt.tar.gz -C ./libmongocrypt ls -la libmongocrypt ls -la libmongocrypt/nocrypto - -if [ -z "${SKIP_SERVERS:-}" ]; then - PYTHON_BINARY_OLD=${PYTHON_BINARY} - export PYTHON_BINARY="" - bash "${DRIVERS_TOOLS}"/.evergreen/csfle/setup-secrets.sh - export PYTHON_BINARY=$PYTHON_BINARY_OLD - bash "${DRIVERS_TOOLS}"/.evergreen/csfle/start-servers.sh -fi diff --git a/.evergreen/teardown-encryption.sh b/.evergreen/teardown-encryption.sh deleted file mode 100755 index 5ce2f1d71b..0000000000 --- a/.evergreen/teardown-encryption.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -o errexit # Exit the script with error if any of the commands fail -set -o xtrace - -if [ -z "${DRIVERS_TOOLS}" ]; then - echo "Missing environment variable DRIVERS_TOOLS" -fi - -bash ${DRIVERS_TOOLS}/.evergreen/csfle/stop-servers.sh -rm -rf libmongocrypt/ libmongocrypt.tar.gz mongocryptd.pid diff --git a/.evergreen/teardown-tests.sh b/.evergreen/teardown-tests.sh new file mode 100755 index 0000000000..cb5878f0ec --- /dev/null +++ b/.evergreen/teardown-tests.sh @@ -0,0 +1,27 @@ +#!/bin/bash +set -eu + +SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) +ROOT_DIR="$(dirname $(dirname $HERE))" + +if [ ! -f $SCRIPT_DIR/test-env.sh ]; then + exit 0 +fi +if [ -f $SCRIPT_DIR/env.sh ]; then + source $SCRIPT_DIR/env.sh +fi + +source $SCRIPT_DIR/test-env.sh + +# Shut down csfle servers if applicable +if [ -n "${TEST_ENCRYPTION:-}" ]; then + bash ${DRIVERS_TOOLS}/.evergreen/csfle/stop-servers.sh +fi + +# Shut down load balancer if applicable. +if [ -n "${TEST_LOADBALANCER:-}" ]; then + bash "${DRIVERS_TOOLS}"/.evergreen/run-load-balancer.sh stop +fi + +# Remove temporary test files. +rm -rf libmongocrypt/ libmongocrypt.tar.gz mongocryptd.pid > /dev/null diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 536110fcfc..3997eaa87c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -211,18 +211,18 @@ the pages will re-render and the browser will automatically refresh. `git clone git@github.com:mongodb-labs/drivers-evergreen-tools.git`. - Start the servers using `LOAD_BALANCER=true TOPOLOGY=sharded_cluster AUTH=noauth SSL=nossl MONGODB_VERSION=6.0 DRIVERS_TOOLS=$PWD/drivers-evergreen-tools MONGO_ORCHESTRATION_HOME=$PWD/drivers-evergreen-tools/.evergreen/orchestration $PWD/drivers-evergreen-tools/.evergreen/run-orchestration.sh`. -- Start the load balancer using: - `MONGODB_URI='mongodb://localhost:27017,localhost:27018/' $PWD/drivers-evergreen-tools/.evergreen/run-load-balancer.sh start`. +- Set upt the test using: + `MONGODB_URI='mongodb://localhost:27017,localhost:27018/' TEST_LOADBALANCER=1 just setup-test`. - Run the tests from the `pymongo` checkout directory using: - `TEST_LOADBALANCER=1 just test-eg`. + `just test-eg`. ## Running Encryption Tests Locally - Clone `drivers-evergreen-tools`: `git clone git@github.com:mongodb-labs/drivers-evergreen-tools.git`. - Run `export DRIVERS_TOOLS=$PWD/drivers-evergreen-tools` -- Run `AWS_PROFILE= just setup-encryption` after setting up your AWS profile with `aws configure sso`. -- Run the tests with `TEST_ENCRYPTION=1 just test-eg`. -- When done, run `just teardown-encryption` to clean up. +- Run `TEST_ENCRYPTION=1 AWS_PROFILE= just setup-test` after setting up your AWS profile with `aws configure sso`. +- Run the tests with `just test-eg`. +- When done, run `just teardown-test` to clean up. ## Re-sync Spec Tests diff --git a/justfile b/justfile index 6bcfe0c79c..7819f6b1c9 100644 --- a/justfile +++ b/justfile @@ -71,9 +71,9 @@ test-eg *args: bash ./.evergreen/run-tests.sh {{args}} [group('encryption')] -setup-encryption: - bash .evergreen/setup-encryption.sh +setup-test: + bash .evergreen/scripts/setup-tests.sh [group('encryption')] -teardown-encryption: - bash .evergreen/teardown-encryption.sh +teardown-test: + bash .evergreen/scripts/teardown-tests.sh From cfb4deb9935c5111c4fed14d6246b1568a32f680 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 22 Jan 2025 10:39:40 -0600 Subject: [PATCH 002/121] update tests --- .evergreen/generated_configs/tasks.yml | 9 +-- .evergreen/generated_configs/variants.yml | 80 +++++++++++------------ CONTRIBUTING.md | 2 +- 3 files changed, 44 insertions(+), 47 deletions(-) diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index c666c6901a..505bb8b42d 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -8,12 +8,11 @@ tasks: AUTH: auth SSL: ssl LOAD_BALANCER: "true" - - func: run load-balancer - func: run tests vars: AUTH: auth SSL: ssl - test_loadbalancer: "true" + TEST_LOADBALANCER: "true" tags: [load-balancer, auth, ssl] - name: test-load-balancer-noauth-ssl commands: @@ -23,12 +22,11 @@ tasks: AUTH: noauth SSL: ssl LOAD_BALANCER: "true" - - func: run load-balancer - func: run tests vars: AUTH: noauth SSL: ssl - test_loadbalancer: "true" + TEST_LOADBALANCER: "true" tags: [load-balancer, noauth, ssl] - name: test-load-balancer-noauth-nossl commands: @@ -38,12 +36,11 @@ tasks: AUTH: noauth SSL: nossl LOAD_BALANCER: "true" - - func: run load-balancer - func: run tests vars: AUTH: noauth SSL: nossl - test_loadbalancer: "true" + TEST_LOADBALANCER: "true" tags: [load-balancer, noauth, nossl] # Server tests diff --git a/.evergreen/generated_configs/variants.yml b/.evergreen/generated_configs/variants.yml index 79c9b22c93..a6d9033ab5 100644 --- a/.evergreen/generated_configs/variants.yml +++ b/.evergreen/generated_configs/variants.yml @@ -318,7 +318,7 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_encryption: "true" + TEST_ENCRYPTION: "true" PYTHON_BINARY: /opt/python/3.9/bin/python3 tags: [encryption_tag] - name: encryption-rhel8-python3.13 @@ -331,7 +331,7 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_encryption: "true" + TEST_ENCRYPTION: "true" PYTHON_BINARY: /opt/python/3.13/bin/python3 tags: [encryption_tag] - name: encryption-rhel8-pypy3.10 @@ -344,7 +344,7 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_encryption: "true" + TEST_ENCRYPTION: "true" PYTHON_BINARY: /opt/python/pypy3.10/bin/python3 tags: [encryption_tag] - name: encryption-crypt_shared-rhel8-python3.9 @@ -357,8 +357,8 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_encryption: "true" - test_crypt_shared: "true" + TEST_ENCRYPTION: "true" + TEST_CRYPT_SHARED: "true" PYTHON_BINARY: /opt/python/3.9/bin/python3 tags: [encryption_tag] - name: encryption-crypt_shared-rhel8-python3.13 @@ -371,8 +371,8 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_encryption: "true" - test_crypt_shared: "true" + TEST_ENCRYPTION: "true" + TEST_CRYPT_SHARED: "true" PYTHON_BINARY: /opt/python/3.13/bin/python3 tags: [encryption_tag] - name: encryption-crypt_shared-rhel8-pypy3.10 @@ -385,8 +385,8 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_encryption: "true" - test_crypt_shared: "true" + TEST_ENCRYPTION: "true" + TEST_CRYPT_SHARED: "true" PYTHON_BINARY: /opt/python/pypy3.10/bin/python3 tags: [encryption_tag] - name: encryption-pyopenssl-rhel8-python3.9 @@ -399,8 +399,8 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_encryption: "true" - test_encryption_pyopenssl: "true" + TEST_ENCRYPTION: "true" + TEST_ENCRYPTION_PYOPENSSL: "true" PYTHON_BINARY: /opt/python/3.9/bin/python3 tags: [encryption_tag] - name: encryption-pyopenssl-rhel8-python3.13 @@ -413,8 +413,8 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_encryption: "true" - test_encryption_pyopenssl: "true" + TEST_ENCRYPTION: "true" + TEST_ENCRYPTION_PYOPENSSL: "true" PYTHON_BINARY: /opt/python/3.13/bin/python3 tags: [encryption_tag] - name: encryption-pyopenssl-rhel8-pypy3.10 @@ -427,8 +427,8 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_encryption: "true" - test_encryption_pyopenssl: "true" + TEST_ENCRYPTION: "true" + TEST_ENCRYPTION_PYOPENSSL: "true" PYTHON_BINARY: /opt/python/pypy3.10/bin/python3 tags: [encryption_tag] - name: encryption-rhel8-python3.10 @@ -438,7 +438,7 @@ buildvariants: run_on: - rhel87-small expansions: - test_encryption: "true" + TEST_ENCRYPTION: "true" PYTHON_BINARY: /opt/python/3.10/bin/python3 - name: encryption-crypt_shared-rhel8-python3.11 tasks: @@ -447,8 +447,8 @@ buildvariants: run_on: - rhel87-small expansions: - test_encryption: "true" - test_crypt_shared: "true" + TEST_ENCRYPTION: "true" + TEST_CRYPT_SHARED: "true" PYTHON_BINARY: /opt/python/3.11/bin/python3 - name: encryption-pyopenssl-rhel8-python3.12 tasks: @@ -457,8 +457,8 @@ buildvariants: run_on: - rhel87-small expansions: - test_encryption: "true" - test_encryption_pyopenssl: "true" + TEST_ENCRYPTION: "true" + TEST_ENCRYPTION_PYOPENSSL: "true" PYTHON_BINARY: /opt/python/3.12/bin/python3 - name: encryption-macos-python3.9 tasks: @@ -468,7 +468,7 @@ buildvariants: - macos-14 batchtime: 10080 expansions: - test_encryption: "true" + TEST_ENCRYPTION: "true" PYTHON_BINARY: /Library/Frameworks/Python.Framework/Versions/3.9/bin/python3 tags: [encryption_tag] - name: encryption-macos-python3.13 @@ -479,7 +479,7 @@ buildvariants: - macos-14 batchtime: 10080 expansions: - test_encryption: "true" + TEST_ENCRYPTION: "true" PYTHON_BINARY: /Library/Frameworks/Python.Framework/Versions/3.13/bin/python3 tags: [encryption_tag] - name: encryption-crypt_shared-macos-python3.9 @@ -490,8 +490,8 @@ buildvariants: - macos-14 batchtime: 10080 expansions: - test_encryption: "true" - test_crypt_shared: "true" + TEST_ENCRYPTION: "true" + TEST_CRYPT_SHARED: "true" PYTHON_BINARY: /Library/Frameworks/Python.Framework/Versions/3.9/bin/python3 tags: [encryption_tag] - name: encryption-crypt_shared-macos-python3.13 @@ -502,8 +502,8 @@ buildvariants: - macos-14 batchtime: 10080 expansions: - test_encryption: "true" - test_crypt_shared: "true" + TEST_ENCRYPTION: "true" + TEST_CRYPT_SHARED: "true" PYTHON_BINARY: /Library/Frameworks/Python.Framework/Versions/3.13/bin/python3 tags: [encryption_tag] - name: encryption-win64-python3.9 @@ -514,7 +514,7 @@ buildvariants: - windows-64-vsMulti-small batchtime: 10080 expansions: - test_encryption: "true" + TEST_ENCRYPTION: "true" PYTHON_BINARY: C:/python/Python39/python.exe tags: [encryption_tag] - name: encryption-win64-python3.13 @@ -525,7 +525,7 @@ buildvariants: - windows-64-vsMulti-small batchtime: 10080 expansions: - test_encryption: "true" + TEST_ENCRYPTION: "true" PYTHON_BINARY: C:/python/Python313/python.exe tags: [encryption_tag] - name: encryption-crypt_shared-win64-python3.9 @@ -536,8 +536,8 @@ buildvariants: - windows-64-vsMulti-small batchtime: 10080 expansions: - test_encryption: "true" - test_crypt_shared: "true" + TEST_ENCRYPTION: "true" + TEST_CRYPT_SHARED: "true" PYTHON_BINARY: C:/python/Python39/python.exe tags: [encryption_tag] - name: encryption-crypt_shared-win64-python3.13 @@ -548,8 +548,8 @@ buildvariants: - windows-64-vsMulti-small batchtime: 10080 expansions: - test_encryption: "true" - test_crypt_shared: "true" + TEST_ENCRYPTION: "true" + TEST_CRYPT_SHARED: "true" PYTHON_BINARY: C:/python/Python313/python.exe tags: [encryption_tag] @@ -997,7 +997,7 @@ buildvariants: - macos-14 batchtime: 10080 expansions: - test_pyopenssl: "true" + TEST_PYOPENSSL: "true" PYTHON_BINARY: /Library/Frameworks/Python.Framework/Versions/3.9/bin/python3 - name: pyopenssl-rhel8-python3.10 tasks: @@ -1008,7 +1008,7 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_pyopenssl: "true" + TEST_PYOPENSSL: "true" PYTHON_BINARY: /opt/python/3.10/bin/python3 - name: pyopenssl-rhel8-python3.11 tasks: @@ -1019,7 +1019,7 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_pyopenssl: "true" + TEST_PYOPENSSL: "true" PYTHON_BINARY: /opt/python/3.11/bin/python3 - name: pyopenssl-rhel8-python3.12 tasks: @@ -1030,7 +1030,7 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_pyopenssl: "true" + TEST_PYOPENSSL: "true" PYTHON_BINARY: /opt/python/3.12/bin/python3 - name: pyopenssl-win64-python3.13 tasks: @@ -1041,7 +1041,7 @@ buildvariants: - windows-64-vsMulti-small batchtime: 10080 expansions: - test_pyopenssl: "true" + TEST_PYOPENSSL: "true" PYTHON_BINARY: C:/python/Python313/python.exe - name: pyopenssl-rhel8-pypy3.10 tasks: @@ -1052,7 +1052,7 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_pyopenssl: "true" + TEST_PYOPENSSL: "true" PYTHON_BINARY: /opt/python/pypy3.10/bin/python3 # Search index tests @@ -1249,7 +1249,7 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_serverless: "true" + TEST_SERVERLESS: "true" AUTH: auth SSL: ssl PYTHON_BINARY: /opt/python/3.9/bin/python3 @@ -1261,7 +1261,7 @@ buildvariants: - rhel87-small batchtime: 10080 expansions: - test_serverless: "true" + TEST_SERVERLESS: "true" AUTH: auth SSL: ssl PYTHON_BINARY: /opt/python/3.13/bin/python3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3997eaa87c..1765b226af 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -211,7 +211,7 @@ the pages will re-render and the browser will automatically refresh. `git clone git@github.com:mongodb-labs/drivers-evergreen-tools.git`. - Start the servers using `LOAD_BALANCER=true TOPOLOGY=sharded_cluster AUTH=noauth SSL=nossl MONGODB_VERSION=6.0 DRIVERS_TOOLS=$PWD/drivers-evergreen-tools MONGO_ORCHESTRATION_HOME=$PWD/drivers-evergreen-tools/.evergreen/orchestration $PWD/drivers-evergreen-tools/.evergreen/run-orchestration.sh`. -- Set upt the test using: +- Set up the test using: `MONGODB_URI='mongodb://localhost:27017,localhost:27018/' TEST_LOADBALANCER=1 just setup-test`. - Run the tests from the `pymongo` checkout directory using: `just test-eg`. From 2a6cd2f50a7c4fcdf8edd8a5b8b10b05f7d7d1f6 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 22 Jan 2025 10:50:08 -0600 Subject: [PATCH 003/121] fix name --- .evergreen/scripts/setup-tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index b00f436af5..2295dbf19e 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -30,7 +30,7 @@ set -eu # PYTHON_BINARY The python binary to use in tests. SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) -ROOT_DIR="$(dirname $(dirname $HERE))" +ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" pushd $ROOT_DIR > /dev/null From 0207bbb099a4b6c7795ce7aa889a241d61bac212 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 22 Jan 2025 10:59:24 -0600 Subject: [PATCH 004/121] debug --- .evergreen/scripts/setup-tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index 2295dbf19e..e593fb8629 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -eu +set -eux # Supported/used environment variables: # AUTH Set to enable authentication. Defaults to "noauth" From db8a4d3e5f2405ce41754c79ee73b3ef5c023044 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 22 Jan 2025 11:06:35 -0600 Subject: [PATCH 005/121] fixup --- .evergreen/scripts/setup-tests.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index e593fb8629..cca9997a8e 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -eux +set -eu # Supported/used environment variables: # AUTH Set to enable authentication. Defaults to "noauth" @@ -57,7 +57,7 @@ GREEN_FRAMEWORK="${GREEN_FRAMEWORK:-}" PYTHON_BINARY="${PYTHON_BINARY:-}" function _write_env() { - echo "export $1=$2" >> $SCRIPT_DIR/test-env.sh + echo "export $1=${2:-}" >> $SCRIPT_DIR/test-env.sh } _write_env TEST_ENCRYPTION $TEST_ENCRYPTION From 044648d3526179e0233d9bf683f7d0e9014e85c4 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 22 Jan 2025 11:09:57 -0600 Subject: [PATCH 006/121] fix usage of TEST_ENTERPRISE_AUTH --- .evergreen/scripts/setup-tests.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index cca9997a8e..3676ae39bf 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -48,6 +48,7 @@ TEST_PYOPENSSL="${TEST_PYOPENSSL:-}" TEST_LOAD_BALANCER="${TEST_LOAD_BALANCER:-}" TEST_SERVERLESS="${TEST_SERVERLESS:-}" TEST_INDEX_MANAGEMENT="${TEST_INDEX_MANAGEMENT:-}" +TEST_ENTERPRISE_AUTH="${TEST_ENTERPRISE_AUTH:-}" TEST_DATA_LAKE="${TEST_DATA_LAKE:-}" COMPRESSORS="${COMPRESSORS:-}" SUCCESS="${SUCCESS:-}" @@ -67,6 +68,7 @@ _write_env TEST_PYOPENSSL $TEST_PYOPENSSL _write_env TEST_LOAD_BALANCER $TEST_LOAD_BALANCER _write_env TEST_SERVERLESS $TEST_SERVERLESS _write_env TEST_INDEX_MANAGEMENT $TEST_INDEX_MANAGEMENT +_write_env TEST_ENTERPRISE_AUTH $TEST_ENTERPRISE_AUTH _write_env TEST_DATA_LAKE $TEST_DATA_LAKE _write_env PYTHON_BINARY $PYTHON_BINARY _write_env COMPRESSORS $COMPRESSORS From bccc0ec216f775481b2c733fd242f96cd0ba3a92 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 22 Jan 2025 15:13:16 -0600 Subject: [PATCH 007/121] convert to python file --- .evergreen/run-tests.sh | 32 ++-- .evergreen/scripts/setup-tests.py | 289 ++++++++++++++++++++++++++++++ .evergreen/scripts/setup-tests.sh | 261 +-------------------------- 3 files changed, 306 insertions(+), 276 deletions(-) create mode 100644 .evergreen/scripts/setup-tests.py diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index eabae6224b..73071957bb 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -1,8 +1,8 @@ #!/bin/bash -set -eu +set -eux SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) -ROOT_DIR="$(dirname $(dirname $HERE))" +ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" export PIP_QUIET=1 # Quiet by default export PIP_PREFER_BINARY=1 # Prefer binary dists by default @@ -16,9 +16,9 @@ else fi # Try to source the test inputs -if [ -f $SCRIPT_DIR/test-env.sh ]; then +if [ -f $SCRIPT_DIR/scripts/test-env.sh ]; then echo "Sourcing test inputs" - source $SCRIPT_DIR/test-env.sh + source $SCRIPT_DIR/scripts/test-env.sh else echo "Not sourcing test inputs" fi @@ -27,43 +27,39 @@ PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implement # Start compiling the args we'll pass to uv. # Run in an isolated environment so as not to pollute the base venv. -UV_ARGS=("--isolated --extra test") +UV_ARGS=${UV_ARGS:-"--extra test"} +TEST_ARGS=${TEST_ARGS:-} # Ensure C extensions if applicable. if [ -z "${NO_EXT:-}" ] && [ "$PYTHON_IMPL" = "CPython" ]; then uv run tools/fail_if_no_c.py fi -if [ -n "$TEST_ENCRYPTION" ] || [ -n "$TEST_FLE_AZURE_AUTO" ] || [ -n "$TEST_FLE_GCP_AUTO" ]; then - # Check for libmongocrypt download. - if [ ! -d "libmongocrypt" ]; then - echo "Run test setup first!" - exit 1 - fi +if [ -n "${PYMONGOCRYPT_LIB:-}" ]; then # Ensure pymongocrypt is working properly. # shellcheck disable=SC2048 - uv run ${UV_ARGS[*]} python -c "import pymongocrypt; print('pymongocrypt version: '+pymongocrypt.__version__)" + uv run ${UV_ARGS} python -c "import pymongocrypt; print('pymongocrypt version: '+pymongocrypt.__version__)" # shellcheck disable=SC2048 - uv run ${UV_ARGS[*]} python -c "import pymongocrypt; print('libmongocrypt version: '+pymongocrypt.libmongocrypt_version())" + uv run ${UV_ARGS} python -c "import pymongocrypt; print('libmongocrypt version: '+pymongocrypt.libmongocrypt_version())" # PATH is updated by configure-env.sh for access to mongocryptd. fi PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") -echo "Running $AUTH tests over $SSL with python $(uv python find)" +echo "Running ${AUTH:-noauth} tests over ${SSL:-nossl} with python $(uv python find)" uv run python -c 'import sys; print(sys.version)' # Show the installed packages # shellcheck disable=SC2048 -PIP_QUIET=0 uv run ${UV_ARGS[*]} --with pip pip list +PIP_QUIET=0 uv run ${UV_ARGS} --with pip pip list # Record the start time for a perf test. -if [ -n "$PERF_TEST" ]; then +if [ -n "${PERF_TEST:-}" ]; then start_time=$(date +%s) fi # Run the tests, and store the results in Evergreen compatible XUnit XML # files in the xunit-results/ directory. -if [ -z "$GREEN_FRAMEWORK" ]; then +if [ -z "${GREEN_FRAMEWORK:-}" ]; then # shellcheck disable=SC2048 uv run ${UV_ARGS} pytest $TEST_ARGS else @@ -72,7 +68,7 @@ else fi # Handle perf test post actions. -if [ -n "$PERF_TEST" ]; then +if [ -n "${PERF_TEST:-}" ]; then end_time=$(date +%s) elapsed_secs=$((end_time-start_time)) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py new file mode 100644 index 0000000000..5ff8205f00 --- /dev/null +++ b/.evergreen/scripts/setup-tests.py @@ -0,0 +1,289 @@ +from __future__ import annotations + +import base64 +import logging +import os +import platform +import re +import shlex +import stat +import subprocess +import sys +from pathlib import Path + +HERE = Path(__file__).absolute().parent +ROOT = HERE.parent.parent +ENV_FILE = HERE / "test-env.sh" + +AUTH = os.environ.get("AUTH", "noauth") +SSL = os.environ.get("SSL", "nossl") +DRIVERS_TOOLS = os.environ.get("DRIVERS_TOOLS").replace(os.sep, "/") + +TEST_SUITES = os.environ.get("TEST_SUITES", "") +TEST_ARGS = " ".join(sys.argv[1:]) +# Start compiling the args we'll pass to uv. +# Run in an isolated environment so as not to pollute the base venv. +UV_ARGS = ["--isolated --extra test"] + +logging.basicConfig() +LOGGER = logging.getLogger(__name__) + +expected_vars = [ + "TEST_ENCRYPTION", + "TEST_ENCRYPTION_PYOPENSSL", + "TEST_CRYPT_SHARED", + "TEST_PYOPENSSL", + "TEST_LOAD_BALANCER", + "TEST_SERVERLESS", + "TEST_INDEX_MANAGEMENT", + "TEST_ENTERPRISE_AUTH", + "TEST_FLE_AZURE_AUTO", + "TEST_FLE_GCP_AUTO", + "TEST_LOADBALANCER", + "TEST_DATA_LAKE", + "TEST_ATLAS", + "TEST_OCSP", + "TEST_AUTH_AWS", + "TEST_AUTH_OIDC", + "COMPRESSORS", + "SUCCESS", + "MONGODB_URI", + "PERF_TEST", + "GREEN_FRAMEWORK", + "PYTHON_BINARY", +] + +with ENV_FILE.open("w") as fid: + fid.write("set +x\n") + fid.write(f"export AUTH={AUTH}\n") + fid.write(f"export SSL={SSL}\n") + for var in expected_vars: + value = os.environ.get(var, "") + if value: + fid.write(f'export {var}="{value}"\n') + + +def write_env(name, value): + with ENV_FILE.open("a") as fid: + fid.write(f'export {name}="{value}"\n') + + +def source_env(path): + with open(path) as fid: + for line in fid: + match = re.match("export (.*?)=(.+?)", line.strip()) + name, value = match.groups() + os.environ[name] = value + + +def is_set(var): + return os.environ.get(var) + + +def run_command(cmd): + subprocess.check_call(shlex.split(cmd)) # noqa: S603 + + +if (ROOT / "secrets-export.sh").exists(): + source_env(ROOT / "secrets-export.sh") +if (HERE / "env.sh").exists(): + source_env(HERE / "env.sh") + +ENV_FILE.chmod(ENV_FILE.stat().st_mode | stat.S_IEXEC) + +# Handle extras based on the presence of env variables. +extras_map = dict( + TEST_AUTH_OIDC="aws", + TEST_AUTH_AWS="aws", + TEST_OCSP="ocsp", + TEST_PYOPENSSL="ocsp", + TEST_ENTERPRISE_AUTH="gssapi", + TEST_ENCRYPTION="encryption", + TEST_FLE_AZURE_AUTO="encryption", + TEST_FLE_GCP_AUTO="encryption", + TEST_ENCRYPTION_PYOPENSSL="ocsp", +) +for env_var, extra in extras_map.items(): + if env_var in os.environ: + UV_ARGS.append(f"--extra {extra}") + +# Handle the test suite based on the presence of env variables. +test_suite_map = dict( + TEST_DATA_LAKE="data_lake", + TEST_AUTH_OIDC="auth_oidc", + TEST_INDEX_MANAGEMENT="index_management", + TEST_ENTERPRISE_AUTH="auth", + TEST_LOADBALANCER="load_balancer", + TEST_ENCRYPTION="encryption", + TEST_FLE_AZURE_AUTO="csfle", + TEST_FLE_GCP_AUTO="csfle", + TEST_ATLAS="atlas", + TEST_OCSP="ocsp", + TEST_AUTH_AWS="auth_aws", + PERF_TEST="perf", +) +for env_var, test_suite_map in extras_map.items(): + if TEST_SUITES: + continue + if env_var in os.environ: + TEST_SUITES = test_suite_map + +if AUTH == "noauth": + if is_set("TEST_DATA_LAKE"): + DB_USER = "mhuser" + DB_PASSWORD = "pencil" # noqa: S105 + elif is_set("TEST_SERVERLESS"): + source_env(DRIVERS_TOOLS / "/.evergreen/serverless/secrets-export.sh") + DB_USER = os.environ("SERVERLESS_ATLAS_USER") + DB_PASSWORD = os.environ("SERVERLESS_ATLAS_PASSWORD") + write_env("MONGODB_URI", os.environ("SERVERLESS_URI")) + write_env("SINGLE_MONGOS_LB_URI", os.environ("SERVERLESS_URI")) + write_env("MULTI_MONGOS_LB_URI", os.environ("SERVERLESS_URI")) + elif is_set("TEST_AUTH_OIDC"): + DB_USER = os.environ["OIDC_ADMIN_USER"] + DB_PASSWORD = os.environ["OIDC_ADMIN_PWD"] + write_env("DB_IP", os.environ["MONGODB_URI"]) + elif is_set("TEST_INDEX_MANAGEMENT"): + source_env(DRIVERS_TOOLS / ".evergreen/atlas/secrets-export.sh") + DB_USER = os.environ["DRIVERS_ATLAS_LAMBDA_USER"] + DB_PASSWORD = os.environ["DRIVERS_ATLAS_LAMBDA_PASSWORD"] + else: + DB_USER = "bob" + DB_PASSWORD = "pwd123" # noqa: S105 + write_env("DB_USER", DB_USER) + write_env("DB_PASSWORD", DB_PASSWORD) + LOGGER.info("Added auth, DB_USER: %s", DB_USER) + + +if is_set("TEST_ENTERPRISE_AUTH"): + if os.name == "nt": + LOGGER.info("Setting GSSAPI_PASS") + write_env("GSSAPI_PASS", os.environ["SASL_PASS"]) + write_env("GSSAPI_CANONICALIZE", "true") + else: + # BUILD-3830 + krb_conf = ROOT / ".evergreen/krb5.conf.empty" + krb_conf.touch() + write_env("KRB5_CONFIG", krb_conf) + LOGGER.info("Writing keytab") + keytab = base64.b64decode(os.environ["KEYTAB_BASE64"]) + keytab_file = ROOT / ".evergreen/drivers.keytab" + with keytab_file.open("w") as fid: + fid.write(keytab) + principal = os.environ["PRINCIPAL"] + LOGGER.info("Running kinit") + cmd = f"kinit -k -t {keytab_file} -p {principal}" + run_command(cmd) + + LOGGER.info("Setting GSSAPI variables") + write_env("GSSAPI_HOST", os.environ["SASL_HOST"]) + write_env("GSSAPI_PORT", os.environ["SASL_PORT"]) + write_env("GSSAPI_PRINCIPAL", os.environ["PRINCIPAL"]) + + +if is_set("TEST_LOADBALANCER"): + write_env("LOAD_BALANCER", "1") + SINGLE_MONGOS_LB_URI = os.environ.get( + "SINGLE_MONGOS_LB_URI", "mongodb://127.0.0.1:8000/?loadBalanced=true" + ) + MULTI_MONGOS_LB_URI = os.environ.get( + "MULTI_MONGOS_LB_URI", "mongodb://127.0.0.1:8001/?loadBalanced=true" + ) + if SSL != "nossl": + SINGLE_MONGOS_LB_URI += "&tls=true" + MULTI_MONGOS_LB_URI += "&tls=true" + write_env("SINGLE_MONGOS_LB_URI", SINGLE_MONGOS_LB_URI) + write_env("MULTI_MONGOS_LB_URI", MULTI_MONGOS_LB_URI) + cmd = f'bash "${DRIVERS_TOOLS}/.evergreen/run-load-balancer.sh" start' + run_command(cmd) + +if SSL != "nossl": + write_env("CLIENT_PEM", f"{DRIVERS_TOOLS}/.evergreen/x509gen/client.pem") + write_env("CA_PEM", f"{DRIVERS_TOOLS}/.evergreen/x509gen/ca.pem") + +compressors = os.environ.get("COMPRESSORS") +if compressors == "snappy": + UV_ARGS.append("--extra snappy") +elif compressors == "zstd": + UV_ARGS.append("--extra zstandard") + + +if is_set("TEST_ENCRYPTION") or is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): + # Check for libmongocrypt download. + if not (ROOT / "libmongocrypt").exists(): + run_command(f"bash {HERE}/setup-libmongocrypt.sh") + + # TODO: Test with 'pip install pymongocrypt' + UV_ARGS.append("--group pymongocrypt_source") + + # Use the nocrypto build to avoid dependency issues with older windows/python versions. + BASE = ROOT / "libmongocrypt/nocrypto" + if sys.platform == "linux": + if (BASE / "lib/libmongocrypt.so").exists(): + PYMONGOCRYPT_LIB = BASE / "lib/libmongocrypt.so" + else: + PYMONGOCRYPT_LIB = BASE / "lib64/libmongocrypt.so" + elif sys.platform == "darwin": + PYMONGOCRYPT_LIB = BASE / "lib/libmongocrypt.dylib" + else: + PYMONGOCRYPT_LIB = BASE / "bin/mongocrypt.dll" + # libmongocrypt's windows dll is not marked executable. + PYMONGOCRYPT_LIB.chmod(PYMONGOCRYPT_LIB.stat().st_mode | stat.S_IEXEC) + if not PYMONGOCRYPT_LIB.exists(): + raise RuntimeError("Cannot find libmongocrypt shared object file") + write_env("PYMONGOCRYPT_LIB", PYMONGOCRYPT_LIB.as_posix()) + # PATH is updated by configure-env.sh for access to mongocryptd. + +if is_set("TEST_ENCRYPTION"): + run_command(f"bash {DRIVERS_TOOLS}/.evergreen/setup-secrets.sh") + run_command(f"bash {DRIVERS_TOOLS}/.evergreen/start-servers.sh") + + +if is_set("TEST_CRYPT_SHARED"): + CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent() + LOGGER.info("Using crypt_shared_dir %s", CRYPT_SHARED_DIR) + DYLD_FALLBACK_LIBRARY_PATH = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") + LD_LIBRARY_PATH = os.environ.get("LD_LIBRARY_PATH", "") + PATH = os.environ("PATH") + write_env("DYLD_FALLBACK_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:{DYLD_FALLBACK_LIBRARY_PATH}") + write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:{LD_LIBRARY_PATH}") + write_env("PATH", f"{CRYPT_SHARED_DIR}:{PATH}") + + +if is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): + if "SUCCESS" not in os.environ: + raise RuntimeError("Must define SUCCESS") + + MONGODB_URI = os.environ["MONGODB_URI"] + if "@" in MONGODB_URI: + raise RuntimeError("MONGODB_URI unexpectedly contains user credentials in FLE test!") + + +if is_set("PERF_TEST"): + UV_ARGS.append("--group perf") + # PYTHON-4769 Run perf_test.py directly otherwise pytest's test collection negatively + # affects the benchmark results. + TEST_ARGS = f"test/performance/perf_test.py {TEST_ARGS}" + +# Add coverage if requested. +# Only cover CPython. PyPy reports suspiciously low coverage. +if is_set("COVERAGE") and platform.python_implementation() == "CPython": + # Keep in sync with combine-coverage.sh. + # coverage >=5 is needed for relative_files=true. + UV_ARGS.append("--group coverage") + TEST_ARGS = f"{TEST_ARGS} --cov" + + +if is_set("GREEN_FRAMEWORK"): + framework = os.environ["GREEN_FRAMEWORK"] + UV_ARGS.append(f"--group {framework}") + +else: + # Use --capture=tee-sys so pytest prints test output inline: + # https://docs.pytest.org/en/stable/how-to/capture-stdout-stderr.html + TEST_ARGS = f"-v --capture=tee-sys --durations=5 {TEST_ARGS}" + if TEST_SUITES: + TEST_ARGS = f"-m {TEST_SUITES} {TEST_ARGS}" + +write_env("TEST_ARGS", TEST_ARGS) +write_env("UV_ARGS", " ".join(UV_ARGS)) diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index 3676ae39bf..5a8df226d6 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -32,261 +32,6 @@ set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" -pushd $ROOT_DIR > /dev/null - -# Clear any existing files. -rm -rf $ROOT_DIR/secrets-export.sh -rm -rf $SCRIPT_DIR/test-env.sh - -# Handle default values -AUTH=${AUTH:-noauth} -SSL=${SSL:-nossl} -TEST_ENCRYPTION="${TEST_ENCRYPTION:-}" -TEST_ENCRYPTION_PYOPENSSL="${TEST_ENCRYPTION_PYOPENSSL:-}" -TEST_CRYPT_SHARED="${TEST_CRYPT_SHARED:-}" -TEST_PYOPENSSL="${TEST_PYOPENSSL:-}" -TEST_LOAD_BALANCER="${TEST_LOAD_BALANCER:-}" -TEST_SERVERLESS="${TEST_SERVERLESS:-}" -TEST_INDEX_MANAGEMENT="${TEST_INDEX_MANAGEMENT:-}" -TEST_ENTERPRISE_AUTH="${TEST_ENTERPRISE_AUTH:-}" -TEST_DATA_LAKE="${TEST_DATA_LAKE:-}" -COMPRESSORS="${COMPRESSORS:-}" -SUCCESS="${SUCCESS:-}" -MONGODB_URI="${MONGODB_URI:-}" -PERF_TEST="${PERF_TEST:-}" -GREEN_FRAMEWORK="${GREEN_FRAMEWORK:-}" -PYTHON_BINARY="${PYTHON_BINARY:-}" - -function _write_env() { - echo "export $1=${2:-}" >> $SCRIPT_DIR/test-env.sh -} - -_write_env TEST_ENCRYPTION $TEST_ENCRYPTION -_write_env TEST_ENCRYPTION_PYOPENSSL $TEST_ENCRYPTION_PYOPENSSL -_write_env TEST_CRYPT_SHARED $TEST_CRYPT_SHARED -_write_env TEST_PYOPENSSL $TEST_PYOPENSSL -_write_env TEST_LOAD_BALANCER $TEST_LOAD_BALANCER -_write_env TEST_SERVERLESS $TEST_SERVERLESS -_write_env TEST_INDEX_MANAGEMENT $TEST_INDEX_MANAGEMENT -_write_env TEST_ENTERPRISE_AUTH $TEST_ENTERPRISE_AUTH -_write_env TEST_DATA_LAKE $TEST_DATA_LAKE -_write_env PYTHON_BINARY $PYTHON_BINARY -_write_env COMPRESSORS $COMPRESSORS -_write_env SUCCESS $SUCCESS -_write_env MONGODB_URI $MONGODB_URI -_write_env PERF_TEST $PERF_TEST -_write_env GREEN_FRAMEWORK $GREEN_FRAMEWORK -_write_env PYTHON_BINARY $PYTHON_BINARY - -chmod +x "$SCRIPT_DIR"/test-env.sh - -TEST_SUITES=${TEST_SUITES:-} -TEST_ARGS="${*:1}" -# Start compiling the args we'll pass to uv. -# Run in an isolated environment so as not to pollute the base venv. -UV_ARGS=("--isolated --extra test") - -if [ "$AUTH" != "noauth" ]; then - if [ -n "$TEST_DATA_LAKE" ]; then - DB_USER="mhuser" - _write_env DB_PASSWORD "pencil" - elif [ -n "$TEST_SERVERLESS" ]; then - source "${DRIVERS_TOOLS}"/.evergreen/serverless/secrets-export.sh - DB_USER=$SERVERLESS_ATLAS_USER - _write_env DB_PASSWORD $SERVERLESS_ATLAS_PASSWORD - _write_env MONGODB_URI $SERVERLESS_URI - _write_env SINGLE_MONGOS_LB_URI $MONGODB_URI - _write_env MULTI_MONGOS_LB_URI $MONGODB_URI - elif [ -n "$TEST_AUTH_OIDC" ]; then - DB_USER=$OIDC_ADMIN_USER - _write_env DB_PASSWORD $OIDC_ADMIN_PWD - _write_env DB_IP "$MONGODB_URI" - elif [ -n "$TEST_INDEX_MANAGEMENT" ]; then - source $DRIVERS_TOOLS/.evergreen/atlas/secrets-export.sh - DB_USER="${DRIVERS_ATLAS_LAMBDA_USER}" - _write_env DB_PASSWORD "${DRIVERS_ATLAS_LAMBDA_PASSWORD}" - else - DB_USER="bob" - _write_env DB_PASSWORD "pwd123" - fi - _write_env DB_USER $DB_USER - echo "Added auth, DB_USER: $DB_USER" -fi - -if [ -n "$TEST_ENTERPRISE_AUTH" ]; then - UV_ARGS+=("--extra gssapi") - if [ "Windows_NT" = "$OS" ]; then - echo "Setting GSSAPI_PASS" - _write_env GSSAPI_PASS ${SASL_PASS} - _write_env GSSAPI_CANONICALIZE "true" - else - # BUILD-3830 - touch krb5.conf.empty - _write_env KRB5_CONFIG ${ROOT_DIR}/.evergreen/krb5.conf.empty - - echo "Writing keytab" - echo ${KEYTAB_BASE64} | base64 -d > ${ROOT_DIR}/.evergreen/drivers.keytab - echo "Running kinit" - kinit -k -t ${ROOT_DIR}/.evergreen/drivers.keytab -p ${PRINCIPAL} - fi - echo "Setting GSSAPI variables" - _write_env GSSAPI_HOST ${SASL_HOST} - _write_env GSSAPI_PORT ${SASL_PORT} - _write_env GSSAPI_PRINCIPAL ${PRINCIPAL} - - TEST_SUITES="auth" -fi - -if [ -n "$TEST_LOADBALANCER" ]; then - _write_env LOAD_BALANCER 1 - _write_env SINGLE_MONGOS_LB_URI "${SINGLE_MONGOS_LB_URI:-mongodb://127.0.0.1:8000/?loadBalanced=true}" - _write_env MULTI_MONGOS_LB_URI "${MULTI_MONGOS_LB_URI:-mongodb://127.0.0.1:8001/?loadBalanced=true}" - TEST_SUITES="load_balancer" - MONGODB_URI=${MONGODB_URI} bash "${DRIVERS_TOOLS}"/.evergreen/run-load-balancer.sh start -fi - -if [ "$SSL" != "nossl" ]; then - _write_env CLIENT_PEM "$DRIVERS_TOOLS/.evergreen/x509gen/client.pem" - _write_env CA_PEM "$DRIVERS_TOOLS/.evergreen/x509gen/ca.pem" - - if [ -n "$TEST_LOADBALANCER" ]; then - _write_env SINGLE_MONGOS_LB_URI "${SINGLE_MONGOS_LB_URI}&tls=true" - _write_env MULTI_MONGOS_LB_URI "${MULTI_MONGOS_LB_URI}&tls=true" - fi -fi - -if [ "$COMPRESSORS" = "snappy" ]; then - UV_ARGS+=("--extra snappy") -elif [ "$COMPRESSORS" = "zstd" ]; then - UV_ARGS+=("--extra zstandard") -fi - -# PyOpenSSL test setup. -if [ -n "$TEST_PYOPENSSL" ]; then - UV_ARGS+=("--extra ocsp") -fi - -if [ -n "$TEST_ENCRYPTION" ] || [ -n "$TEST_FLE_AZURE_AUTO" ] || [ -n "$TEST_FLE_GCP_AUTO" ]; then - # Check for libmongocrypt download. - if [ ! -d "libmongocrypt" ]; then - bash $SCRIPT_DIR/setup-libmongocrypt.sh - fi - - UV_ARGS+=("--extra encryption") - # TODO: Test with 'pip install pymongocrypt' - UV_ARGS+=("--group pymongocrypt_source") - - # Use the nocrypto build to avoid dependency issues with older windows/python versions. - BASE=$(pwd)/libmongocrypt/nocrypto - if [ -f "${BASE}/lib/libmongocrypt.so" ]; then - PYMONGOCRYPT_LIB=${BASE}/lib/libmongocrypt.so - elif [ -f "${BASE}/lib/libmongocrypt.dylib" ]; then - PYMONGOCRYPT_LIB=${BASE}/lib/libmongocrypt.dylib - elif [ -f "${BASE}/bin/mongocrypt.dll" ]; then - PYMONGOCRYPT_LIB=${BASE}/bin/mongocrypt.dll - # libmongocrypt's windows dll is not marked executable. - chmod +x $PYMONGOCRYPT_LIB - PYMONGOCRYPT_LIB=$(cygpath -m $PYMONGOCRYPT_LIB) - elif [ -f "${BASE}/lib64/libmongocrypt.so" ]; then - PYMONGOCRYPT_LIB=${BASE}/lib64/libmongocrypt.so - else - echo "Cannot find libmongocrypt shared object file" - exit 1 - fi - _write_env PYMONGOCRYPT_LIB $PYMONGOCRYPT_LIB - # PATH is updated by configure-env.sh for access to mongocryptd. -fi - -if [ -n "$TEST_ENCRYPTION" ]; then - bash "${DRIVERS_TOOLS}"/.evergreen/csfle/setup-secrets.sh - bash "${DRIVERS_TOOLS}"/.evergreen/csfle/start-servers.sh - - if [ -n "$TEST_ENCRYPTION_PYOPENSSL" ]; then - UV_ARGS+=("--extra ocsp") - fi - - if [ -n "$TEST_CRYPT_SHARED" ]; then - CRYPT_SHARED_DIR=`dirname $CRYPT_SHARED_LIB_PATH` - echo "using crypt_shared_dir $CRYPT_SHARED_DIR" - _write_env DYLD_FALLBACK_LIBRARY_PATH $CRYPT_SHARED_DIR:$DYLD_FALLBACK_LIBRARY_PATH - _write_env LD_LIBRARY_PATH $CRYPT_SHARED_DIR:$LD_LIBRARY_PATH - _write_env PATH "$CRYPT_SHARED_DIR:$PATH" - fi - # Only run the encryption tests. - TEST_SUITES="encryption" -fi - -if [ -n "$TEST_FLE_AZURE_AUTO" ] || [ -n "$TEST_FLE_GCP_AUTO" ]; then - if [[ -z "$SUCCESS" ]]; then - echo "Must define SUCCESS" - exit 1 - fi - - if echo "$MONGODB_URI" | grep -q "@"; then - echo "MONGODB_URI unexpectedly contains user credentials in FLE test!"; - exit 1 - fi - TEST_SUITES="csfle" -fi - -if [ -n "$TEST_INDEX_MANAGEMENT" ]; then - TEST_SUITES="index_management" -fi - -if [ -n "$TEST_DATA_LAKE" ] && [ -z "$TEST_ARGS" ]; then - TEST_SUITES="data_lake" -fi - -if [ -n "$TEST_ATLAS" ]; then - TEST_SUITES="atlas" -fi - -if [ -n "$TEST_OCSP" ]; then - UV_ARGS+=("--extra ocsp") - TEST_SUITES="ocsp" -fi - -if [ -n "$TEST_AUTH_AWS" ]; then - UV_ARGS+=("--extra aws") - TEST_SUITES="auth_aws" -fi - -if [ -n "$TEST_AUTH_OIDC" ]; then - UV_ARGS+=("--extra aws") - TEST_SUITES="auth_oidc" -fi - -if [ -n "$PERF_TEST" ]; then - UV_ARGS+=("--group perf") - TEST_SUITES="perf" - # PYTHON-4769 Run perf_test.py directly otherwise pytest's test collection negatively - # affects the benchmark results. - TEST_ARGS="test/performance/perf_test.py $TEST_ARGS" -fi - -# Add coverage if requested. -# Only cover CPython. PyPy reports suspiciously low coverage. -if [ -n "$COVERAGE" ] && [ "$PYTHON_IMPL" = "CPython" ]; then - # Keep in sync with combine-coverage.sh. - # coverage >=5 is needed for relative_files=true. - UV_ARGS+=("--group coverage") - TEST_ARGS="$TEST_ARGS --cov" -fi - -if [ -n "$GREEN_FRAMEWORK" ]; then - UV_ARGS+=("--group $GREEN_FRAMEWORK") -fi - -if [ -z "$GREEN_FRAMEWORK" ]; then - # Use --capture=tee-sys so pytest prints test output inline: - # https://docs.pytest.org/en/stable/how-to/capture-stdout-stderr.html - TEST_ARGS="-v --capture=tee-sys --durations=5 $TEST_ARGS" - if [ -n "$TEST_SUITES" ]; then - TEST_ARGS="-m $TEST_SUITES $TEST_ARGS" - fi -fi - -_write_env TEST_ARGS $TEST_ARGS -_write_env UV_ARGS "${UV_ARGS[*]}" - -popd > /dev/null +. $ROOT_DIR/.evergreen/utils.sh +PYTHON=${PYTHON_BINAR:-$(find_python3)} +$PYTHON $SCRIPT_DIR/setup-tests.py From 331132051f0ac7271030d0e8419a8977d63e35a2 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 22 Jan 2025 18:21:47 -0600 Subject: [PATCH 008/121] cleanup --- .evergreen/{ => scripts}/setup-libmongocrypt.sh | 0 .evergreen/scripts/setup-tests.py | 8 ++++---- .evergreen/scripts/setup-tests.sh | 3 +-- .evergreen/{ => scripts}/teardown-tests.sh | 10 ++++++---- .gitignore | 1 + 5 files changed, 12 insertions(+), 10 deletions(-) rename .evergreen/{ => scripts}/setup-libmongocrypt.sh (100%) rename .evergreen/{ => scripts}/teardown-tests.sh (87%) diff --git a/.evergreen/setup-libmongocrypt.sh b/.evergreen/scripts/setup-libmongocrypt.sh similarity index 100% rename from .evergreen/setup-libmongocrypt.sh rename to .evergreen/scripts/setup-libmongocrypt.sh diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 5ff8205f00..1081406f30 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -46,7 +46,6 @@ "TEST_AUTH_AWS", "TEST_AUTH_OIDC", "COMPRESSORS", - "SUCCESS", "MONGODB_URI", "PERF_TEST", "GREEN_FRAMEWORK", @@ -194,7 +193,7 @@ def run_command(cmd): MULTI_MONGOS_LB_URI += "&tls=true" write_env("SINGLE_MONGOS_LB_URI", SINGLE_MONGOS_LB_URI) write_env("MULTI_MONGOS_LB_URI", MULTI_MONGOS_LB_URI) - cmd = f'bash "${DRIVERS_TOOLS}/.evergreen/run-load-balancer.sh" start' + cmd = f'bash "{DRIVERS_TOOLS}/.evergreen/run-load-balancer.sh" start' run_command(cmd) if SSL != "nossl": @@ -235,8 +234,8 @@ def run_command(cmd): # PATH is updated by configure-env.sh for access to mongocryptd. if is_set("TEST_ENCRYPTION"): - run_command(f"bash {DRIVERS_TOOLS}/.evergreen/setup-secrets.sh") - run_command(f"bash {DRIVERS_TOOLS}/.evergreen/start-servers.sh") + run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/setup-secrets.sh") + run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/start-servers.sh") if is_set("TEST_CRYPT_SHARED"): @@ -254,6 +253,7 @@ def run_command(cmd): if "SUCCESS" not in os.environ: raise RuntimeError("Must define SUCCESS") + write_env("SUCCESS", os.environ["SUCCESS"]) MONGODB_URI = os.environ["MONGODB_URI"] if "@" in MONGODB_URI: raise RuntimeError("MONGODB_URI unexpectedly contains user credentials in FLE test!") diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index 5a8df226d6..cec282533d 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -25,8 +25,7 @@ set -eu # TEST_INDEX_MANAGEMENT If non-empty, run index management tests # TEST_ENCRYPTION_PYOPENSSL If non-empy, test encryption with PyOpenSSL # PERF_TEST If non-empty, run the performance tests. -# MONGODB_URI If non-empty, use as the MONGODB_URI in tests -# SUCCESS Flag used to indicate whether a test is expected to pass or fail. +# MONGODB_URI If non-empty, use as the MONGODB_URI in tests. # PYTHON_BINARY The python binary to use in tests. SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) diff --git a/.evergreen/teardown-tests.sh b/.evergreen/scripts/teardown-tests.sh similarity index 87% rename from .evergreen/teardown-tests.sh rename to .evergreen/scripts/teardown-tests.sh index cb5878f0ec..5a3fff713b 100755 --- a/.evergreen/teardown-tests.sh +++ b/.evergreen/scripts/teardown-tests.sh @@ -2,7 +2,12 @@ set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) -ROOT_DIR="$(dirname $(dirname $HERE))" +ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" + +# Remove temporary test files. +pushd $ROOT_DIR > /dev/null +rm -rf libmongocrypt/ libmongocrypt.tar.gz mongocryptd.pid > /dev/null +popd > /dev/null if [ ! -f $SCRIPT_DIR/test-env.sh ]; then exit 0 @@ -22,6 +27,3 @@ fi if [ -n "${TEST_LOADBALANCER:-}" ]; then bash "${DRIVERS_TOOLS}"/.evergreen/run-load-balancer.sh stop fi - -# Remove temporary test files. -rm -rf libmongocrypt/ libmongocrypt.tar.gz mongocryptd.pid > /dev/null diff --git a/.gitignore b/.gitignore index 2582c517fd..8c095c2157 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ libmongocrypt/ expansion.yml *expansions.yml .evergreen/scripts/env.sh +.evergreen/scripts/test-env.sh # Lambda temp files test/lambda/.aws-sam From 591106d81bbba0eaf7378b9f7e9dfcc807c3bac4 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 22 Jan 2025 20:53:59 -0600 Subject: [PATCH 009/121] cleanup --- .evergreen/config.yml | 20 +++--- .evergreen/scripts/setup-tests.py | 101 +++++++++++++++--------------- 2 files changed, 62 insertions(+), 59 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 4217150668..1f13fd9a15 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -42,7 +42,7 @@ functions: # Make an evergreen expansion file with dynamic values - command: subprocess.exec params: - include_expansions_in_env: ["is_patch", "project", "version_id", "AUTH", "SSL", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "SETDEFAULTENCODING", "test_loadbalancer", "test_serverless", "SKIP_CSOT_TESTS", "MONGODB_STARTED", "DISABLE_TEST_COMMANDS", "GREEN_FRAMEWORK", "NO_EXT", "COVERAGE", "COMPRESSORS", "TEST_SUITES", "MONGODB_API_VERSION", "skip_crypt_shared", "VERSION", "TOPOLOGY", "STORAGE_ENGINE", "ORCHESTRATION_FILE", "REQUIRE_API_VERSION", "LOAD_BALANCER", "skip_web_identity_auth_test", "skip_ECS_auth_test"] + include_expansions_in_env: ["is_patch", "project", "version_id", "AUTH", "SSL", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "SETDEFAULTENCODING", "TEST_LOADBALANCER", "TEST_SEVERLESS", "SKIP_CSOT_TESTS", "MONGODB_STARTED", "DISABLE_TEST_COMMANDS", "GREEN_FRAMEWORK", "NO_EXT", "COVERAGE", "COMPRESSORS", "TEST_SUITES", "MONGODB_API_VERSION", "skip_crypt_shared", "VERSION", "TOPOLOGY", "STORAGE_ENGINE", "ORCHESTRATION_FILE", "REQUIRE_API_VERSION", "LOAD_BALANCER", "skip_web_identity_auth_test", "skip_ECS_auth_test"] binary: bash working_dir: "src" args: @@ -275,7 +275,7 @@ functions: "run tests": - command: subprocess.exec params: - include_expansions_in_env: ["TEST_DATA_LAKE", "PYTHON_BINARY", "AUTH", "SSL", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE"] + include_expansions_in_env: ["TEST_DATA_LAKE", "PYTHON_BINARY", "AUTH", "SSL", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE"] binary: bash working_dir: "src" args: @@ -324,7 +324,7 @@ functions: "run aws auth test with regular aws credentials": - command: subprocess.exec params: - include_expansions_in_env: ["TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE"] + include_expansions_in_env: ["TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE"] binary: bash working_dir: "src" args: @@ -343,7 +343,7 @@ functions: "run aws auth test with assume role credentials": - command: subprocess.exec params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE" ] + include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] binary: bash working_dir: "src" args: @@ -362,7 +362,7 @@ functions: "run aws auth test with aws EC2 credentials": - command: subprocess.exec params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE" ] + include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] binary: bash working_dir: "src" args: @@ -381,7 +381,7 @@ functions: "run aws auth test with aws web identity credentials": - command: subprocess.exec params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE" ] + include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] binary: bash working_dir: "src" args: @@ -413,7 +413,7 @@ functions: "run aws auth test with aws credentials as environment variables": - command: subprocess.exec params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE" ] + include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] binary: bash working_dir: "src" args: @@ -432,7 +432,7 @@ functions: "run aws auth test with aws credentials and session token as environment variables": - command: subprocess.exec params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE" ] + include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] binary: bash working_dir: "src" args: @@ -451,7 +451,7 @@ functions: "run oidc auth test with test credentials": - command: subprocess.exec params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE" ] + include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] binary: bash working_dir: "src" args: @@ -545,7 +545,7 @@ functions: "run-ocsp-test": - command: subprocess.exec params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "test_encryption", "test_encryption_pyopenssl", "test_crypt_shared", "test_pyopenssl", "test_loadbalancer", "test_serverless", "ORCHESTRATION_FILE" ] + include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] binary: bash working_dir: "src" args: diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 1081406f30..75ef23a579 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -15,20 +15,10 @@ ROOT = HERE.parent.parent ENV_FILE = HERE / "test-env.sh" -AUTH = os.environ.get("AUTH", "noauth") -SSL = os.environ.get("SSL", "nossl") -DRIVERS_TOOLS = os.environ.get("DRIVERS_TOOLS").replace(os.sep, "/") - -TEST_SUITES = os.environ.get("TEST_SUITES", "") -TEST_ARGS = " ".join(sys.argv[1:]) -# Start compiling the args we'll pass to uv. -# Run in an isolated environment so as not to pollute the base venv. -UV_ARGS = ["--isolated --extra test"] - logging.basicConfig() LOGGER = logging.getLogger(__name__) -expected_vars = [ +EXPECTED_VARS = [ "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", @@ -52,14 +42,34 @@ "PYTHON_BINARY", ] -with ENV_FILE.open("w") as fid: - fid.write("set +x\n") - fid.write(f"export AUTH={AUTH}\n") - fid.write(f"export SSL={SSL}\n") - for var in expected_vars: - value = os.environ.get(var, "") - if value: - fid.write(f'export {var}="{value}"\n') +# Handle the test suite based on the presence of env variables. +TEST_SUITE_MAP = dict( + TEST_DATA_LAKE="data_lake", + TEST_AUTH_OIDC="auth_oidc", + TEST_INDEX_MANAGEMENT="index_management", + TEST_ENTERPRISE_AUTH="auth", + TEST_LOADBALANCER="load_balancer", + TEST_ENCRYPTION="encryption", + TEST_FLE_AZURE_AUTO="csfle", + TEST_FLE_GCP_AUTO="csfle", + TEST_ATLAS="atlas", + TEST_OCSP="ocsp", + TEST_AUTH_AWS="auth_aws", + PERF_TEST="perf", +) + +# Handle extras based on the presence of env variables. +EXTRAS_MAP = dict( + TEST_AUTH_OIDC="aws", + TEST_AUTH_AWS="aws", + TEST_OCSP="ocsp", + TEST_PYOPENSSL="ocsp", + TEST_ENTERPRISE_AUTH="gssapi", + TEST_ENCRYPTION="encryption", + TEST_FLE_AZURE_AUTO="encryption", + TEST_FLE_GCP_AUTO="encryption", + TEST_ENCRYPTION_PYOPENSSL="ocsp", +) def write_env(name, value): @@ -83,49 +93,42 @@ def run_command(cmd): subprocess.check_call(shlex.split(cmd)) # noqa: S603 +# Load variables. if (ROOT / "secrets-export.sh").exists(): source_env(ROOT / "secrets-export.sh") if (HERE / "env.sh").exists(): source_env(HERE / "env.sh") +# Set up default values. +DRIVERS_TOOLS = os.environ.get("DRIVERS_TOOLS").replace(os.sep, "/") +AUTH = os.environ.get("AUTH", "noauth") +SSL = os.environ.get("SSL", "nossl") +TEST_SUITES = os.environ.get("TEST_SUITES", "") +TEST_ARGS = " ".join(sys.argv[1:]) +# Start compiling the args we'll pass to uv. +# Run in an isolated environment so as not to pollute the base venv. +UV_ARGS = ["--isolated --extra test"] + +# Save variables in EXPECTED_VARS that have values. +with ENV_FILE.open("w") as fid: + fid.write("set +x\n") + fid.write(f"export AUTH={AUTH}\n") + fid.write(f"export SSL={SSL}\n") + for var in EXPECTED_VARS: + value = os.environ.get(var, "") + if value: + fid.write(f'export {var}="{value}"\n') ENV_FILE.chmod(ENV_FILE.stat().st_mode | stat.S_IEXEC) -# Handle extras based on the presence of env variables. -extras_map = dict( - TEST_AUTH_OIDC="aws", - TEST_AUTH_AWS="aws", - TEST_OCSP="ocsp", - TEST_PYOPENSSL="ocsp", - TEST_ENTERPRISE_AUTH="gssapi", - TEST_ENCRYPTION="encryption", - TEST_FLE_AZURE_AUTO="encryption", - TEST_FLE_GCP_AUTO="encryption", - TEST_ENCRYPTION_PYOPENSSL="ocsp", -) -for env_var, extra in extras_map.items(): +for env_var, extra in EXTRAS_MAP.items(): if env_var in os.environ: UV_ARGS.append(f"--extra {extra}") -# Handle the test suite based on the presence of env variables. -test_suite_map = dict( - TEST_DATA_LAKE="data_lake", - TEST_AUTH_OIDC="auth_oidc", - TEST_INDEX_MANAGEMENT="index_management", - TEST_ENTERPRISE_AUTH="auth", - TEST_LOADBALANCER="load_balancer", - TEST_ENCRYPTION="encryption", - TEST_FLE_AZURE_AUTO="csfle", - TEST_FLE_GCP_AUTO="csfle", - TEST_ATLAS="atlas", - TEST_OCSP="ocsp", - TEST_AUTH_AWS="auth_aws", - PERF_TEST="perf", -) -for env_var, test_suite_map in extras_map.items(): +for env_var, suite in TEST_SUITE_MAP.items(): if TEST_SUITES: continue if env_var in os.environ: - TEST_SUITES = test_suite_map + TEST_SUITES = suite if AUTH == "noauth": if is_set("TEST_DATA_LAKE"): From 3d0e3c9c23be3e2dbb125a48ef8e39e9a246b362 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 22 Jan 2025 21:05:39 -0600 Subject: [PATCH 010/121] fix source_env --- .evergreen/scripts/setup-tests.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 75ef23a579..46a50e3197 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -81,6 +81,8 @@ def source_env(path): with open(path) as fid: for line in fid: match = re.match("export (.*?)=(.+?)", line.strip()) + if not match: + continue name, value = match.groups() os.environ[name] = value From 4529b6df8e7062fdab63feab5c614ecd8a6aa03f Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 06:02:52 -0600 Subject: [PATCH 011/121] cleanup --- .evergreen/config.yml | 3 +- .evergreen/scripts/run-tests.sh | 54 ------------------------------- .evergreen/scripts/setup-tests.py | 9 ++++++ 3 files changed, 10 insertions(+), 56 deletions(-) delete mode 100755 .evergreen/scripts/run-tests.sh diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 1f13fd9a15..44acf79956 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -287,8 +287,7 @@ functions: binary: bash include_expansions_in_env: ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN", "PYTHON_BINARY", "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "SINGLE_MONGOS_LB_URI", "MULTI_MONGOS_LB_URI", "TEST_SUITES"] args: - - .evergreen/scripts/run-with-env.sh - - .evergreen/scripts/run-tests.sh + - .evergreen/run-tests.sh "run enterprise auth tests": - command: subprocess.exec diff --git a/.evergreen/scripts/run-tests.sh b/.evergreen/scripts/run-tests.sh deleted file mode 100755 index ea923b3f5e..0000000000 --- a/.evergreen/scripts/run-tests.sh +++ /dev/null @@ -1,54 +0,0 @@ -#!/bin/bash - -# Disable xtrace -set +x -if [ -n "${MONGODB_STARTED}" ]; then - export PYMONGO_MUST_CONNECT=true -fi -if [ -n "${DISABLE_TEST_COMMANDS}" ]; then - export PYMONGO_DISABLE_TEST_COMMANDS=1 -fi -if [ -n "${test_encryption}" ]; then - # Disable xtrace (just in case it was accidentally set). - set +x - bash "${DRIVERS_TOOLS}"/.evergreen/csfle/await-servers.sh - export TEST_ENCRYPTION=1 - if [ -n "${test_encryption_pyopenssl}" ]; then - export TEST_ENCRYPTION_PYOPENSSL=1 - fi -fi -if [ -n "${test_crypt_shared}" ]; then - export TEST_CRYPT_SHARED=1 - export CRYPT_SHARED_LIB_PATH=${CRYPT_SHARED_LIB_PATH} -fi -if [ -n "${test_pyopenssl}" ]; then - export TEST_PYOPENSSL=1 -fi -if [ -n "${SETDEFAULTENCODING}" ]; then - export SETDEFAULTENCODING="${SETDEFAULTENCODING}" -fi -if [ -n "${test_loadbalancer}" ]; then - export TEST_LOADBALANCER=1 - export SINGLE_MONGOS_LB_URI="${SINGLE_MONGOS_LB_URI}" - export MULTI_MONGOS_LB_URI="${MULTI_MONGOS_LB_URI}" -fi -if [ -n "${test_serverless}" ]; then - export TEST_SERVERLESS=1 -fi -if [ -n "${TEST_INDEX_MANAGEMENT:-}" ]; then - export TEST_INDEX_MANAGEMENT=1 -fi -if [ -n "${SKIP_CSOT_TESTS}" ]; then - export SKIP_CSOT_TESTS=1 -fi -GREEN_FRAMEWORK=${GREEN_FRAMEWORK} \ - PYTHON_BINARY=${PYTHON_BINARY} \ - NO_EXT=${NO_EXT} \ - COVERAGE=${COVERAGE} \ - COMPRESSORS=${COMPRESSORS} \ - AUTH=${AUTH} \ - SSL=${SSL} \ - TEST_DATA_LAKE=${TEST_DATA_LAKE:-} \ - TEST_SUITES=${TEST_SUITES:-} \ - MONGODB_API_VERSION=${MONGODB_API_VERSION} \ - bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh test-eg diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 46a50e3197..1ff4b7ccae 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -118,6 +118,8 @@ def run_command(cmd): fid.write(f"export SSL={SSL}\n") for var in EXPECTED_VARS: value = os.environ.get(var, "") + # Remove any existing quote chars. + value = value.replace('"', "") if value: fid.write(f'export {var}="{value}"\n') ENV_FILE.chmod(ENV_FILE.stat().st_mode | stat.S_IEXEC) @@ -159,6 +161,13 @@ def run_command(cmd): LOGGER.info("Added auth, DB_USER: %s", DB_USER) +if is_set("MONGODB_STARTED"): + write_env("PYMONGO_MUST_CONNECT", "true") + +if is_set("DISABLE_TEST_COMMANDS"): + write_env("PYMONGO_DISABLE_TEST_COMMANDS", "1") + + if is_set("TEST_ENTERPRISE_AUTH"): if os.name == "nt": LOGGER.info("Setting GSSAPI_PASS") From 238a6be333e74005271a0f54fdb01d82bb1dbe38 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 06:23:34 -0600 Subject: [PATCH 012/121] debug --- .evergreen/scripts/setup-tests.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index cec282533d..f93e0da5f3 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -34,3 +34,6 @@ ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" . $ROOT_DIR/.evergreen/utils.sh PYTHON=${PYTHON_BINAR:-$(find_python3)} $PYTHON $SCRIPT_DIR/setup-tests.py + +cat $SCRIPT_DIR/test-env.sh +exit 1 From 98e79d58c9f5ba2a78b7c1e04a44c16ea399972d Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 07:24:16 -0600 Subject: [PATCH 013/121] more debug --- .evergreen/scripts/setup-tests.py | 2 ++ .evergreen/scripts/setup-tests.sh | 1 + 2 files changed, 3 insertions(+) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 1ff4b7ccae..ad9440a716 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -74,6 +74,8 @@ def write_env(name, value): with ENV_FILE.open("a") as fid: + # Remove any existing quote chars. + value = value.replace('"', "") fid.write(f'export {name}="{value}"\n') diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index f93e0da5f3..bbb163fb37 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -31,6 +31,7 @@ set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" +env . $ROOT_DIR/.evergreen/utils.sh PYTHON=${PYTHON_BINAR:-$(find_python3)} $PYTHON $SCRIPT_DIR/setup-tests.py From 8301f4d212b89e3428ce83e646d17d2a3fb98aab Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 09:54:03 -0600 Subject: [PATCH 014/121] more debug --- .evergreen/scripts/setup-tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index ad9440a716..dc5b2dea3d 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -15,7 +15,7 @@ ROOT = HERE.parent.parent ENV_FILE = HERE / "test-env.sh" -logging.basicConfig() +logging.basicConfig(level=logging.INFO) LOGGER = logging.getLogger(__name__) EXPECTED_VARS = [ @@ -291,6 +291,7 @@ def run_command(cmd): if is_set("GREEN_FRAMEWORK"): + LOGGER.info("REALLY?") framework = os.environ["GREEN_FRAMEWORK"] UV_ARGS.append(f"--group {framework}") From 212b1a7d5ffd61f5bc5195b77064b7ab79adde93 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 10:15:03 -0600 Subject: [PATCH 015/121] more debug --- .evergreen/scripts/setup-tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index dc5b2dea3d..76a77492e8 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -291,7 +291,7 @@ def run_command(cmd): if is_set("GREEN_FRAMEWORK"): - LOGGER.info("REALLY?") + LOGGER.info("REALLY?: *%s*", os.environ["GREEN_FRAMEWORK"]) framework = os.environ["GREEN_FRAMEWORK"] UV_ARGS.append(f"--group {framework}") From 1b272de47a5ee7c38246893893157a6dc9566fd7 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 10:28:15 -0600 Subject: [PATCH 016/121] more debug --- .evergreen/scripts/setup-tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 76a77492e8..e178f2e803 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -86,6 +86,7 @@ def source_env(path): if not match: continue name, value = match.groups() + print("Setting", name, value) # noqa: T201 os.environ[name] = value From 0ba9e2d535965f4209d87f5b2ee230db8e54df9f Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 10:29:30 -0600 Subject: [PATCH 017/121] more debug --- .evergreen/scripts/setup-tests.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index e178f2e803..13cfb4d9d4 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -10,6 +10,7 @@ import subprocess import sys from pathlib import Path +from pprint import pprint HERE = Path(__file__).absolute().parent ROOT = HERE.parent.parent @@ -79,6 +80,9 @@ def write_env(name, value): fid.write(f'export {name}="{value}"\n') +pprint(os.environ) # noqa: T203 + + def source_env(path): with open(path) as fid: for line in fid: From 7909a652a25e5bd3cad5f735121e1973d4d204da Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 10:44:16 -0600 Subject: [PATCH 018/121] more debug --- .evergreen/scripts/setup-tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 13cfb4d9d4..3b8d5f463e 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -91,6 +91,7 @@ def source_env(path): continue name, value = match.groups() print("Setting", name, value) # noqa: T201 + print(line) # noqa: T201 os.environ[name] = value From aae0bbc1aa3c3ca639831e91d6ec7bd4e8077bd6 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 10:51:22 -0600 Subject: [PATCH 019/121] debug --- .evergreen/scripts/setup-tests.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 3b8d5f463e..f84cbbd0e6 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -86,13 +86,13 @@ def write_env(name, value): def source_env(path): with open(path) as fid: for line in fid: - match = re.match("export (.*?)=(.+?)", line.strip()) + match = re.match("export (.*?)=(.*)", line.strip()) if not match: continue name, value = match.groups() - print("Setting", name, value) # noqa: T201 - print(line) # noqa: T201 - os.environ[name] = value + value = value.replace('"', "") + if value.strip(): + os.environ[name] = value def is_set(var): From ead2472a6bc9b032cd34c68de2898d0acc03ba50 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 12:12:43 -0600 Subject: [PATCH 020/121] try again --- .evergreen/scripts/setup-tests.py | 5 ----- .evergreen/scripts/setup-tests.sh | 3 --- 2 files changed, 8 deletions(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index f84cbbd0e6..76dc6d589d 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -10,7 +10,6 @@ import subprocess import sys from pathlib import Path -from pprint import pprint HERE = Path(__file__).absolute().parent ROOT = HERE.parent.parent @@ -80,9 +79,6 @@ def write_env(name, value): fid.write(f'export {name}="{value}"\n') -pprint(os.environ) # noqa: T203 - - def source_env(path): with open(path) as fid: for line in fid: @@ -297,7 +293,6 @@ def run_command(cmd): if is_set("GREEN_FRAMEWORK"): - LOGGER.info("REALLY?: *%s*", os.environ["GREEN_FRAMEWORK"]) framework = os.environ["GREEN_FRAMEWORK"] UV_ARGS.append(f"--group {framework}") diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index bbb163fb37..d900800f8f 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -35,6 +35,3 @@ env . $ROOT_DIR/.evergreen/utils.sh PYTHON=${PYTHON_BINAR:-$(find_python3)} $PYTHON $SCRIPT_DIR/setup-tests.py - -cat $SCRIPT_DIR/test-env.sh -exit 1 From 14f99be7cfe9a381b2a46ac27ada7f2de1058ccd Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 12:24:10 -0600 Subject: [PATCH 021/121] try again --- .evergreen/run-tests.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 73071957bb..948c3f39a2 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -7,6 +7,14 @@ ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" export PIP_QUIET=1 # Quiet by default export PIP_PREFER_BINARY=1 # Prefer binary dists by default +# Try to source the env file. +if [ -f $SCRIPT_DIR/scripts/env.sh ]; then + echo "Sourcing env inputs" + source $SCRIPT_DIR/scripts/env.sh +else + echo "Not sourcing env inputs" +fi + # Try to source local Drivers Secrets if [ -f $ROOT_DIR/secrets-export.sh ]; then echo "Sourcing secrets" From 7a913557d2d68efa93267727c96a77850ee315f8 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 13:11:14 -0600 Subject: [PATCH 022/121] clean up --- .evergreen/config.yml | 4 +--- .evergreen/scripts/setup-tests.sh | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 44acf79956..8d9bf0862a 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -285,9 +285,7 @@ functions: params: working_dir: "src" binary: bash - include_expansions_in_env: ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN", "PYTHON_BINARY", "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "SINGLE_MONGOS_LB_URI", "MULTI_MONGOS_LB_URI", "TEST_SUITES"] - args: - - .evergreen/run-tests.sh + args: [.evergreen/just.sh, test-eg] "run enterprise auth tests": - command: subprocess.exec diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index d900800f8f..8db647cf0a 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -31,7 +31,6 @@ set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" -env . $ROOT_DIR/.evergreen/utils.sh -PYTHON=${PYTHON_BINAR:-$(find_python3)} +PYTHON=${PYTHON_BINARY:-$(find_python3)} $PYTHON $SCRIPT_DIR/setup-tests.py From 258044c7c8775ab22874861b7939388ba5a7a103 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 13:51:20 -0600 Subject: [PATCH 023/121] debug --- .evergreen/just.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.evergreen/just.sh b/.evergreen/just.sh index bebbca8282..36752afb26 100755 --- a/.evergreen/just.sh +++ b/.evergreen/just.sh @@ -2,4 +2,6 @@ set -eu . .evergreen/scripts/setup-dev-env.sh +cat .evergreen/scripts/test-env.sh +exit 1 just "$@" From a1973e9ec92f3e3d322e9b8ce363719d52c98bd5 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 23 Jan 2025 21:03:37 -0600 Subject: [PATCH 024/121] try again --- .evergreen/scripts/setup-tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 76dc6d589d..a5071a514a 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -117,6 +117,7 @@ def run_command(cmd): # Save variables in EXPECTED_VARS that have values. with ENV_FILE.open("w") as fid: + fid.write("#!/usr/bin/env bash\n") fid.write("set +x\n") fid.write(f"export AUTH={AUTH}\n") fid.write(f"export SSL={SSL}\n") From 1a57484356141fb1cc5dae495590a51f0535f91d Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 07:08:13 -0600 Subject: [PATCH 025/121] remove exit --- .evergreen/just.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/.evergreen/just.sh b/.evergreen/just.sh index 36752afb26..d8aabdcdce 100755 --- a/.evergreen/just.sh +++ b/.evergreen/just.sh @@ -3,5 +3,4 @@ set -eu . .evergreen/scripts/setup-dev-env.sh cat .evergreen/scripts/test-env.sh -exit 1 just "$@" From 7fcddce604f185ef7a517f01c14002902b4a7e26 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 07:36:36 -0600 Subject: [PATCH 026/121] debug --- .evergreen/just.sh | 1 + .evergreen/run-tests.sh | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/.evergreen/just.sh b/.evergreen/just.sh index d8aabdcdce..bd7492e5a5 100755 --- a/.evergreen/just.sh +++ b/.evergreen/just.sh @@ -2,5 +2,6 @@ set -eu . .evergreen/scripts/setup-dev-env.sh +# TODO remove before merging. cat .evergreen/scripts/test-env.sh just "$@" diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 948c3f39a2..866ff7cc04 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -31,6 +31,9 @@ else echo "Not sourcing test inputs" fi +env +exit 1 + PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") # Start compiling the args we'll pass to uv. @@ -67,6 +70,7 @@ fi # Run the tests, and store the results in Evergreen compatible XUnit XML # files in the xunit-results/ directory. +echo "Running tests with $TEST_ARGS..." if [ -z "${GREEN_FRAMEWORK:-}" ]; then # shellcheck disable=SC2048 uv run ${UV_ARGS} pytest $TEST_ARGS @@ -74,6 +78,7 @@ else # shellcheck disable=SC2048 uv run ${UV_ARGS} green_framework_test.py $GREEN_FRAMEWORK -v $TEST_ARGS fi +echo "Running tests with $TEST_ARGS... done." # Handle perf test post actions. if [ -n "${PERF_TEST:-}" ]; then From 1fdc10c3fccdc88e3f4a802a250935565d37ad7f Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 07:46:16 -0600 Subject: [PATCH 027/121] fix auth logic --- .evergreen/scripts/setup-tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index a5071a514a..06462ba1c5 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -139,7 +139,7 @@ def run_command(cmd): if env_var in os.environ: TEST_SUITES = suite -if AUTH == "noauth": +if AUTH != "noauth": if is_set("TEST_DATA_LAKE"): DB_USER = "mhuser" DB_PASSWORD = "pencil" # noqa: S105 From e9aa927b4f5433d69217582fef1d16432237fe9a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 07:46:37 -0600 Subject: [PATCH 028/121] fix auth logic --- .evergreen/run-tests.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 866ff7cc04..e105bb2407 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -31,9 +31,6 @@ else echo "Not sourcing test inputs" fi -env -exit 1 - PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") # Start compiling the args we'll pass to uv. From 173ef6cf920e6fe9a53c3a559067fe738cc5979d Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 08:37:35 -0600 Subject: [PATCH 029/121] debug --- .evergreen/run-tests.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index e105bb2407..7a73b14b44 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -26,11 +26,13 @@ fi # Try to source the test inputs if [ -f $SCRIPT_DIR/scripts/test-env.sh ]; then echo "Sourcing test inputs" - source $SCRIPT_DIR/scripts/test-env.sh + #source $SCRIPT_DIR/scripts/test-env.sh else echo "Not sourcing test inputs" fi +exit 1 + PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") # Start compiling the args we'll pass to uv. From 685a6f6c4fe7fddebdf64e485b2d8c45b010d5fa Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 08:42:33 -0600 Subject: [PATCH 030/121] more debug --- .evergreen/just.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/just.sh b/.evergreen/just.sh index bd7492e5a5..13935179ed 100755 --- a/.evergreen/just.sh +++ b/.evergreen/just.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -eu +set -eux . .evergreen/scripts/setup-dev-env.sh # TODO remove before merging. From fc243dcfb7308fb40b8e7e6442c69cf05fb1096f Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 09:32:43 -0600 Subject: [PATCH 031/121] Fix newline handling --- .evergreen/scripts/install-dependencies.sh | 9 +++------ .evergreen/scripts/setup-tests.py | 6 +++--- .evergreen/setup-spawn-host.sh | 2 +- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 39b77199bb..74ba1d6d91 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -5,9 +5,12 @@ set -eu # On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. if [ "${CI:-}" == "true" ]; then _BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} +elif [ "Windows_NT" = "${OS:-}" ]; then + _BIN_DIR=$HOME/cli_bin else _BIN_DIR=$HOME/.local/bin fi +export PATH="$PATH:$_BIN_DIR" # Helper function to pip install a dependency using a temporary python env. @@ -35,9 +38,6 @@ if ! command -v just 2>/dev/null; then curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- $_TARGET --to "$_BIN_DIR" || { _pip_install rust-just just } - if ! command -v just 2>/dev/null; then - export PATH="$PATH:$_BIN_DIR" - fi echo "Installing just... done." fi @@ -48,8 +48,5 @@ if ! command -v uv 2>/dev/null; then curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="$_BIN_DIR" INSTALLER_NO_MODIFY_PATH=1 sh || { _pip_install uv uv } - if ! command -v uv 2>/dev/null; then - export PATH="$PATH:$_BIN_DIR" - fi echo "Installing uv... done." fi diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 06462ba1c5..d03bd78b87 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -73,7 +73,7 @@ def write_env(name, value): - with ENV_FILE.open("a") as fid: + with ENV_FILE.open("a", newline="\n") as fid: # Remove any existing quote chars. value = value.replace('"', "") fid.write(f'export {name}="{value}"\n') @@ -116,7 +116,7 @@ def run_command(cmd): UV_ARGS = ["--isolated --extra test"] # Save variables in EXPECTED_VARS that have values. -with ENV_FILE.open("w") as fid: +with ENV_FILE.open("w", newline="\n") as fid: fid.write("#!/usr/bin/env bash\n") fid.write("set +x\n") fid.write(f"export AUTH={AUTH}\n") @@ -186,7 +186,7 @@ def run_command(cmd): LOGGER.info("Writing keytab") keytab = base64.b64decode(os.environ["KEYTAB_BASE64"]) keytab_file = ROOT / ".evergreen/drivers.keytab" - with keytab_file.open("w") as fid: + with keytab_file.open("w", newline="\n") as fid: fid.write(keytab) principal = os.environ["PRINCIPAL"] LOGGER.info("Running kinit") diff --git a/.evergreen/setup-spawn-host.sh b/.evergreen/setup-spawn-host.sh index c20e1c756e..4c8fa65e2e 100755 --- a/.evergreen/setup-spawn-host.sh +++ b/.evergreen/setup-spawn-host.sh @@ -16,4 +16,4 @@ rsync -az -e ssh --exclude '.git' --filter=':- .gitignore' -r . $target:$remote_ echo "Copying files to $target... done" ssh $target $remote_dir/.evergreen/scripts/setup-system.sh -ssh $target "cd $remote_dir && PYTHON_BINARY=${PYTHON_BINARY:-} just install" +ssh $target "cd $remote_dir && PYTHON_BINARY=${PYTHON_BINARY:-} .evergreen/scripts/setup-dev-env.sh" From 2405945e5bd54d5ce05b34403eb15c3d1d220e09 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 13:02:42 -0600 Subject: [PATCH 032/121] cleanup --- .evergreen/run-tests.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 7a73b14b44..e105bb2407 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -26,13 +26,11 @@ fi # Try to source the test inputs if [ -f $SCRIPT_DIR/scripts/test-env.sh ]; then echo "Sourcing test inputs" - #source $SCRIPT_DIR/scripts/test-env.sh + source $SCRIPT_DIR/scripts/test-env.sh else echo "Not sourcing test inputs" fi -exit 1 - PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") # Start compiling the args we'll pass to uv. From a277dd950eb0108b7d4e60bc7544d0c80d5cc3de Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 13:46:36 -0600 Subject: [PATCH 033/121] kms fixes --- .evergreen/run-azurekms-test.sh | 2 +- .evergreen/run-gcpkms-test.sh | 2 +- .evergreen/scripts/setup-tests.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.evergreen/run-azurekms-test.sh b/.evergreen/run-azurekms-test.sh index 70b78edad8..5759ad0b27 100755 --- a/.evergreen/run-azurekms-test.sh +++ b/.evergreen/run-azurekms-test.sh @@ -20,7 +20,7 @@ AZUREKMS_CMD="tar xf mongo-python-driver.tgz" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" -AZUREKMS_CMD="SUCCESS=true TEST_FLE_AZURE_AUTO=1 bash ./.evergreen/scripts/setup-test.sh" \ +AZUREKMS_CMD="SUCCESS=true TEST_FLE_AZURE_AUTO=1 bash ./.evergreen/scripts/setup-tests.sh" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh AZUREKMS_CMD="KEY_NAME=\"$AZUREKMS_KEYNAME\" KEY_VAULT_ENDPOINT=\"$AZUREKMS_KEYVAULTENDPOINT\" bash ./.evergreen/just.sh test-eg" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh diff --git a/.evergreen/run-gcpkms-test.sh b/.evergreen/run-gcpkms-test.sh index 8d9171d4fc..3eb88a9c99 100755 --- a/.evergreen/run-gcpkms-test.sh +++ b/.evergreen/run-gcpkms-test.sh @@ -19,7 +19,7 @@ echo "Untarring file ... begin" GCPKMS_CMD="tar xf mongo-python-driver.tgz" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" -GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 ./.evergreen/scripts/setup-test.sh" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh +GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 ./.evergreen/scripts/setup-tests.sh" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh GCPKMS_CMD="./.evergreen/just.sh test-eg" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Running test ... end" bash $HERE/scripts/teardown-tests.sh diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index d03bd78b87..3b90c5f8d4 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -273,7 +273,7 @@ def run_command(cmd): raise RuntimeError("Must define SUCCESS") write_env("SUCCESS", os.environ["SUCCESS"]) - MONGODB_URI = os.environ["MONGODB_URI"] + MONGODB_URI = os.environ.get("MONGODB_URI") if "@" in MONGODB_URI: raise RuntimeError("MONGODB_URI unexpectedly contains user credentials in FLE test!") From 47f1067653d0cc78e4c5092f63d72a964fd7dc3e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 13:56:06 -0600 Subject: [PATCH 034/121] kms fixes --- .evergreen/scripts/setup-tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 3b90c5f8d4..c701fd1c9d 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -273,7 +273,7 @@ def run_command(cmd): raise RuntimeError("Must define SUCCESS") write_env("SUCCESS", os.environ["SUCCESS"]) - MONGODB_URI = os.environ.get("MONGODB_URI") + MONGODB_URI = os.environ.get("MONGODB_URI", "") if "@" in MONGODB_URI: raise RuntimeError("MONGODB_URI unexpectedly contains user credentials in FLE test!") From 71282de56430235a06697855e7c8f34de673f203 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 14:53:50 -0600 Subject: [PATCH 035/121] kms fixes --- .evergreen/just.sh | 2 -- .evergreen/scripts/setup-tests.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.evergreen/just.sh b/.evergreen/just.sh index 13935179ed..5bc3d530a9 100755 --- a/.evergreen/just.sh +++ b/.evergreen/just.sh @@ -2,6 +2,4 @@ set -eux . .evergreen/scripts/setup-dev-env.sh -# TODO remove before merging. -cat .evergreen/scripts/test-env.sh just "$@" diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index c701fd1c9d..772b5cc59c 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -106,7 +106,7 @@ def run_command(cmd): source_env(HERE / "env.sh") # Set up default values. -DRIVERS_TOOLS = os.environ.get("DRIVERS_TOOLS").replace(os.sep, "/") +DRIVERS_TOOLS = os.environ.get("DRIVERS_TOOLS", "").replace(os.sep, "/") AUTH = os.environ.get("AUTH", "noauth") SSL = os.environ.get("SSL", "nossl") TEST_SUITES = os.environ.get("TEST_SUITES", "") From f778bcdeaf9b87797944ed02f9a05aef9b7866e3 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 15:01:38 -0600 Subject: [PATCH 036/121] do not rely on DRIVERS_TOOLS --- .evergreen/scripts/setup-libmongocrypt.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.evergreen/scripts/setup-libmongocrypt.sh b/.evergreen/scripts/setup-libmongocrypt.sh index b2084c2982..99ca6ebd3b 100755 --- a/.evergreen/scripts/setup-libmongocrypt.sh +++ b/.evergreen/scripts/setup-libmongocrypt.sh @@ -2,11 +2,6 @@ set -o errexit # Exit the script with error if any of the commands fail set -o xtrace -if [ -z "${DRIVERS_TOOLS}" ]; then - echo "Missing environment variable DRIVERS_TOOLS" - exit 1 -fi - TARGET="" if [ "Windows_NT" = "${OS:-''}" ]; then # Magic variable in cygwin From 741a5fac3df7bebcdc5f6a249374dfc603996360 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 15:27:54 -0600 Subject: [PATCH 037/121] pass through LIBMONGOCRYPT_URL --- .evergreen/scripts/setup-tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 772b5cc59c..ec6be05323 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -40,6 +40,7 @@ "PERF_TEST", "GREEN_FRAMEWORK", "PYTHON_BINARY", + "LIBMONGOCRYPT_URL", ] # Handle the test suite based on the presence of env variables. From cd3476fd9cc8f11ebd6a983ee7e69ae9156f8e00 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 16:44:43 -0600 Subject: [PATCH 038/121] pass through LIBMONGOCRYPT_URL --- .evergreen/run-azurekms-test.sh | 4 ++-- .evergreen/run-gcpkms-test.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.evergreen/run-azurekms-test.sh b/.evergreen/run-azurekms-test.sh index 5759ad0b27..4492e721f0 100755 --- a/.evergreen/run-azurekms-test.sh +++ b/.evergreen/run-azurekms-test.sh @@ -6,7 +6,7 @@ echo "Copying files ... begin" export AZUREKMS_RESOURCEGROUP=${AZUREKMS_RESOURCEGROUP} export AZUREKMS_VMNAME=${AZUREKMS_VMNAME} export AZUREKMS_PRIVATEKEYPATH=/tmp/testazurekms_privatekey -export LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz +LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz # Set up the remote files to test. git add . git commit -m "add files" || true @@ -20,7 +20,7 @@ AZUREKMS_CMD="tar xf mongo-python-driver.tgz" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" -AZUREKMS_CMD="SUCCESS=true TEST_FLE_AZURE_AUTO=1 bash ./.evergreen/scripts/setup-tests.sh" \ +AZUREKMS_CMD="SUCCESS=true TEST_FLE_AZURE_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash ./.evergreen/scripts/setup-tests.sh" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh AZUREKMS_CMD="KEY_NAME=\"$AZUREKMS_KEYNAME\" KEY_VAULT_ENDPOINT=\"$AZUREKMS_KEYVAULTENDPOINT\" bash ./.evergreen/just.sh test-eg" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh diff --git a/.evergreen/run-gcpkms-test.sh b/.evergreen/run-gcpkms-test.sh index 3eb88a9c99..8c7269b94e 100755 --- a/.evergreen/run-gcpkms-test.sh +++ b/.evergreen/run-gcpkms-test.sh @@ -8,7 +8,7 @@ export GCPKMS_GCLOUD=${GCPKMS_GCLOUD} export GCPKMS_PROJECT=${GCPKMS_PROJECT} export GCPKMS_ZONE=${GCPKMS_ZONE} export GCPKMS_INSTANCENAME=${GCPKMS_INSTANCENAME} -export LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz +LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz # Set up the remote files to test. git add . git commit -m "add files" || true @@ -19,7 +19,7 @@ echo "Untarring file ... begin" GCPKMS_CMD="tar xf mongo-python-driver.tgz" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" -GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 ./.evergreen/scripts/setup-tests.sh" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh +GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL ./.evergreen/scripts/setup-tests.sh" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh GCPKMS_CMD="./.evergreen/just.sh test-eg" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Running test ... end" bash $HERE/scripts/teardown-tests.sh From b0ce96734aee20705ae0b06b1575c322a32802b1 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 24 Jan 2025 17:18:02 -0600 Subject: [PATCH 039/121] another kms fix --- .evergreen/config.yml | 4 +++- .evergreen/run-tests.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 8d9bf0862a..c5e459672c 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -274,6 +274,7 @@ functions: "run tests": - command: subprocess.exec + type: test params: include_expansions_in_env: ["TEST_DATA_LAKE", "PYTHON_BINARY", "AUTH", "SSL", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE"] binary: bash @@ -1463,7 +1464,7 @@ tasks: - name: "testgcpkms-task" commands: - command: subprocess.exec - type: setup + type: test params: working_dir: "src" binary: bash @@ -1491,6 +1492,7 @@ tasks: - name: testazurekms-task commands: - command: subprocess.exec + type: test params: binary: bash working_dir: src diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index e105bb2407..da4bef61a1 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -90,6 +90,6 @@ if [ -n "${PERF_TEST:-}" ]; then fi # Handle coverage post actions. -if [ -n "$COVERAGE" ]; then +if [ -n "${COVERAGE:-}" ]; then rm -rf .pytest_cache fi From d93f5d109b96858da7b33716084dfde204c1688c Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 25 Jan 2025 06:22:46 -0600 Subject: [PATCH 040/121] cleanup --- .evergreen/run-azurekms-test.sh | 12 +- .evergreen/run-gcpkms-test.sh | 11 +- .evergreen/run-mongodb-aws-ecs-test.sh | 1 + .evergreen/run-mongodb-oidc-test.sh | 4 +- .evergreen/run-perf-tests.sh | 1 + .evergreen/scripts/run-atlas-tests.sh | 3 +- .evergreen/scripts/run-ocsp-test.sh | 1 + .evergreen/scripts/setup-tests.py | 407 ++++++++++++------------- .evergreen/scripts/setup-tests.sh | 21 ++ justfile | 4 +- 10 files changed, 236 insertions(+), 229 deletions(-) diff --git a/.evergreen/run-azurekms-test.sh b/.evergreen/run-azurekms-test.sh index 4492e721f0..96a8e7757d 100755 --- a/.evergreen/run-azurekms-test.sh +++ b/.evergreen/run-azurekms-test.sh @@ -7,21 +7,23 @@ export AZUREKMS_RESOURCEGROUP=${AZUREKMS_RESOURCEGROUP} export AZUREKMS_VMNAME=${AZUREKMS_VMNAME} export AZUREKMS_PRIVATEKEYPATH=/tmp/testazurekms_privatekey LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz +SUCCESS=true TEST_FLE_AZURE_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash $HERE/scripts/setup-test.sh # Set up the remote files to test. git add . git commit -m "add files" || true -git archive -o /tmp/mongo-python-driver.tgz HEAD +git archive -o /tmp/mongo-python-driver.tar --add-file $HERE/scripts/test-env.sh HEAD +tar -rf /tmp/mongo-python-driver.tar libmongocrypt +tar -rf /tmp/mongo-python-driver.tar +gzip -f /tmp/mongo-python-driver.tar # shellcheck disable=SC2088 -AZUREKMS_SRC="/tmp/mongo-python-driver.tgz" AZUREKMS_DST="~/" \ +AZUREKMS_SRC="/tmp/mongo-python-driver.tar.gz" AZUREKMS_DST="~/" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/copy-file.sh echo "Copying files ... end" echo "Untarring file ... begin" -AZUREKMS_CMD="tar xf mongo-python-driver.tgz" \ +AZUREKMS_CMD="tar xf mongo-python-driver.tar.gz" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" -AZUREKMS_CMD="SUCCESS=true TEST_FLE_AZURE_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash ./.evergreen/scripts/setup-tests.sh" \ - $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh AZUREKMS_CMD="KEY_NAME=\"$AZUREKMS_KEYNAME\" KEY_VAULT_ENDPOINT=\"$AZUREKMS_KEYVAULTENDPOINT\" bash ./.evergreen/just.sh test-eg" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh echo "Running test ... end" diff --git a/.evergreen/run-gcpkms-test.sh b/.evergreen/run-gcpkms-test.sh index 8c7269b94e..73887058fa 100755 --- a/.evergreen/run-gcpkms-test.sh +++ b/.evergreen/run-gcpkms-test.sh @@ -9,17 +9,20 @@ export GCPKMS_PROJECT=${GCPKMS_PROJECT} export GCPKMS_ZONE=${GCPKMS_ZONE} export GCPKMS_INSTANCENAME=${GCPKMS_INSTANCENAME} LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz +SUCCESS=true TEST_FLE_GCP_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash $HERE/scripts/setup-test.sh # Set up the remote files to test. git add . git commit -m "add files" || true -git archive -o /tmp/mongo-python-driver.tgz HEAD -GCPKMS_SRC=/tmp/mongo-python-driver.tgz GCPKMS_DST=$GCPKMS_INSTANCENAME: $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/copy-file.sh +git archive -o /tmp/mongo-python-driver.tar --add-file $HERE/scripts/test-env.sh HEAD +tar -rf /tmp/mongo-python-driver.tar libmongocrypt +tar -rf /tmp/mongo-python-driver.tar +gzip -f /tmp/mongo-python-driver.tar +GCPKMS_SRC=/tmp/mongo-python-driver.tar.gz GCPKMS_DST=$GCPKMS_INSTANCENAME: $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/copy-file.sh echo "Copying files ... end" echo "Untarring file ... begin" -GCPKMS_CMD="tar xf mongo-python-driver.tgz" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh +GCPKMS_CMD="tar xf mongo-python-driver.tar.gz" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" -GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL ./.evergreen/scripts/setup-tests.sh" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh GCPKMS_CMD="./.evergreen/just.sh test-eg" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Running test ... end" bash $HERE/scripts/teardown-tests.sh diff --git a/.evergreen/run-mongodb-aws-ecs-test.sh b/.evergreen/run-mongodb-aws-ecs-test.sh index 91777be226..96d3c0611e 100755 --- a/.evergreen/run-mongodb-aws-ecs-test.sh +++ b/.evergreen/run-mongodb-aws-ecs-test.sh @@ -31,4 +31,5 @@ export AUTH="auth" export SET_XTRACE_ON=1 cd src rm -rf .venv +bash ./.evergreen/just.sh setup-test bash .evergreen/just.sh test-eg diff --git a/.evergreen/run-mongodb-oidc-test.sh b/.evergreen/run-mongodb-oidc-test.sh index 46c4f24969..552f9ef08e 100755 --- a/.evergreen/run-mongodb-oidc-test.sh +++ b/.evergreen/run-mongodb-oidc-test.sh @@ -29,7 +29,5 @@ else exit 1 fi -export TEST_AUTH_OIDC=1 -export COVERAGE=1 -export AUTH="auth" +TEST_AUTH_OIDC=1 COVERAGE=1 AUTH="auth" bash ./.evergreen/just.sh setup-test bash ./.evergreen/just.sh test-eg "${@:1}" diff --git a/.evergreen/run-perf-tests.sh b/.evergreen/run-perf-tests.sh index e6a51b3297..d0e001c5fc 100755 --- a/.evergreen/run-perf-tests.sh +++ b/.evergreen/run-perf-tests.sh @@ -16,4 +16,5 @@ export OUTPUT_FILE="${PROJECT_DIRECTORY}/results.json" export PYTHON_BINARY=/opt/mongodbtoolchain/v4/bin/python3 export PERF_TEST=1 +bash ./.evergreen/just.sh setup-test bash ./.evergreen/just.sh test-eg diff --git a/.evergreen/scripts/run-atlas-tests.sh b/.evergreen/scripts/run-atlas-tests.sh index 30b8d5a615..e5684b7cb4 100755 --- a/.evergreen/scripts/run-atlas-tests.sh +++ b/.evergreen/scripts/run-atlas-tests.sh @@ -4,4 +4,5 @@ set +x set -o errexit bash "${DRIVERS_TOOLS}"/.evergreen/auth_aws/setup_secrets.sh drivers/atlas_connect -TEST_ATLAS=1 bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh test-eg +TEST_ATLAS=1 bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh setup-test +bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh test-eg diff --git a/.evergreen/scripts/run-ocsp-test.sh b/.evergreen/scripts/run-ocsp-test.sh index 328bd2f203..2b9cbd476d 100755 --- a/.evergreen/scripts/run-ocsp-test.sh +++ b/.evergreen/scripts/run-ocsp-test.sh @@ -4,5 +4,6 @@ TEST_OCSP=1 \ PYTHON_BINARY="${PYTHON_BINARY}" \ CA_FILE="${DRIVERS_TOOLS}/.evergreen/ocsp/${OCSP_ALGORITHM}/ca.pem" \ OCSP_TLS_SHOULD_SUCCEED="${OCSP_TLS_SHOULD_SUCCEED}" \ +bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh setup-test bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh test-eg bash "${DRIVERS_TOOLS}"/.evergreen/ocsp/teardown.sh diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index ec6be05323..16e39547cc 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -4,7 +4,6 @@ import logging import os import platform -import re import shlex import stat import subprocess @@ -14,6 +13,7 @@ HERE = Path(__file__).absolute().parent ROOT = HERE.parent.parent ENV_FILE = HERE / "test-env.sh" +DRIVERS_TOOLS = os.environ.get("DRIVERS_TOOLS", "").replace(os.sep, "/") logging.basicConfig(level=logging.INFO) LOGGER = logging.getLogger(__name__) @@ -80,18 +80,6 @@ def write_env(name, value): fid.write(f'export {name}="{value}"\n') -def source_env(path): - with open(path) as fid: - for line in fid: - match = re.match("export (.*?)=(.*)", line.strip()) - if not match: - continue - name, value = match.groups() - value = value.replace('"', "") - if value.strip(): - os.environ[name] = value - - def is_set(var): return os.environ.get(var) @@ -100,210 +88,201 @@ def run_command(cmd): subprocess.check_call(shlex.split(cmd)) # noqa: S603 -# Load variables. -if (ROOT / "secrets-export.sh").exists(): - source_env(ROOT / "secrets-export.sh") -if (HERE / "env.sh").exists(): - source_env(HERE / "env.sh") - -# Set up default values. -DRIVERS_TOOLS = os.environ.get("DRIVERS_TOOLS", "").replace(os.sep, "/") -AUTH = os.environ.get("AUTH", "noauth") -SSL = os.environ.get("SSL", "nossl") -TEST_SUITES = os.environ.get("TEST_SUITES", "") -TEST_ARGS = " ".join(sys.argv[1:]) -# Start compiling the args we'll pass to uv. -# Run in an isolated environment so as not to pollute the base venv. -UV_ARGS = ["--isolated --extra test"] - -# Save variables in EXPECTED_VARS that have values. -with ENV_FILE.open("w", newline="\n") as fid: - fid.write("#!/usr/bin/env bash\n") - fid.write("set +x\n") - fid.write(f"export AUTH={AUTH}\n") - fid.write(f"export SSL={SSL}\n") - for var in EXPECTED_VARS: - value = os.environ.get(var, "") - # Remove any existing quote chars. - value = value.replace('"', "") - if value: - fid.write(f'export {var}="{value}"\n') -ENV_FILE.chmod(ENV_FILE.stat().st_mode | stat.S_IEXEC) - -for env_var, extra in EXTRAS_MAP.items(): - if env_var in os.environ: - UV_ARGS.append(f"--extra {extra}") - -for env_var, suite in TEST_SUITE_MAP.items(): - if TEST_SUITES: - continue - if env_var in os.environ: - TEST_SUITES = suite - -if AUTH != "noauth": - if is_set("TEST_DATA_LAKE"): - DB_USER = "mhuser" - DB_PASSWORD = "pencil" # noqa: S105 - elif is_set("TEST_SERVERLESS"): - source_env(DRIVERS_TOOLS / "/.evergreen/serverless/secrets-export.sh") - DB_USER = os.environ("SERVERLESS_ATLAS_USER") - DB_PASSWORD = os.environ("SERVERLESS_ATLAS_PASSWORD") - write_env("MONGODB_URI", os.environ("SERVERLESS_URI")) - write_env("SINGLE_MONGOS_LB_URI", os.environ("SERVERLESS_URI")) - write_env("MULTI_MONGOS_LB_URI", os.environ("SERVERLESS_URI")) - elif is_set("TEST_AUTH_OIDC"): - DB_USER = os.environ["OIDC_ADMIN_USER"] - DB_PASSWORD = os.environ["OIDC_ADMIN_PWD"] - write_env("DB_IP", os.environ["MONGODB_URI"]) - elif is_set("TEST_INDEX_MANAGEMENT"): - source_env(DRIVERS_TOOLS / ".evergreen/atlas/secrets-export.sh") - DB_USER = os.environ["DRIVERS_ATLAS_LAMBDA_USER"] - DB_PASSWORD = os.environ["DRIVERS_ATLAS_LAMBDA_PASSWORD"] - else: - DB_USER = "bob" - DB_PASSWORD = "pwd123" # noqa: S105 - write_env("DB_USER", DB_USER) - write_env("DB_PASSWORD", DB_PASSWORD) - LOGGER.info("Added auth, DB_USER: %s", DB_USER) - - -if is_set("MONGODB_STARTED"): - write_env("PYMONGO_MUST_CONNECT", "true") - -if is_set("DISABLE_TEST_COMMANDS"): - write_env("PYMONGO_DISABLE_TEST_COMMANDS", "1") +def handle_test_env(): + AUTH = os.environ.get("AUTH", "noauth") + SSL = os.environ.get("SSL", "nossl") + TEST_SUITES = os.environ.get("TEST_SUITES", "") + TEST_ARGS = " ".join(sys.argv[1:]) + # Start compiling the args we'll pass to uv. + # Run in an isolated environment so as not to pollute the base venv. + UV_ARGS = ["--isolated --extra test"] + + # Save variables in EXPECTED_VARS that have values. + with ENV_FILE.open("w", newline="\n") as fid: + fid.write("#!/usr/bin/env bash\n") + fid.write("set +x\n") + fid.write(f"export AUTH={AUTH}\n") + fid.write(f"export SSL={SSL}\n") + for var in EXPECTED_VARS: + value = os.environ.get(var, "") + # Remove any existing quote chars. + value = value.replace('"', "") + if value: + fid.write(f'export {var}="{value}"\n') + ENV_FILE.chmod(ENV_FILE.stat().st_mode | stat.S_IEXEC) + + for env_var, extra in EXTRAS_MAP.items(): + if env_var in os.environ: + UV_ARGS.append(f"--extra {extra}") + + for env_var, suite in TEST_SUITE_MAP.items(): + if TEST_SUITES: + continue + if env_var in os.environ: + TEST_SUITES = suite + + if AUTH != "noauth": + if is_set("TEST_DATA_LAKE"): + DB_USER = "mhuser" + DB_PASSWORD = "pencil" # noqa: S105 + elif is_set("TEST_SERVERLESS"): + DB_USER = os.environ("SERVERLESS_ATLAS_USER") + DB_PASSWORD = os.environ("SERVERLESS_ATLAS_PASSWORD") + write_env("MONGODB_URI", os.environ("SERVERLESS_URI")) + write_env("SINGLE_MONGOS_LB_URI", os.environ("SERVERLESS_URI")) + write_env("MULTI_MONGOS_LB_URI", os.environ("SERVERLESS_URI")) + elif is_set("TEST_AUTH_OIDC"): + DB_USER = os.environ["OIDC_ADMIN_USER"] + DB_PASSWORD = os.environ["OIDC_ADMIN_PWD"] + write_env("DB_IP", os.environ["MONGODB_URI"]) + elif is_set("TEST_INDEX_MANAGEMENT"): + DB_USER = os.environ["DRIVERS_ATLAS_LAMBDA_USER"] + DB_PASSWORD = os.environ["DRIVERS_ATLAS_LAMBDA_PASSWORD"] + else: + DB_USER = "bob" + DB_PASSWORD = "pwd123" # noqa: S105 + write_env("DB_USER", DB_USER) + write_env("DB_PASSWORD", DB_PASSWORD) + LOGGER.info("Added auth, DB_USER: %s", DB_USER) + + if is_set("MONGODB_STARTED"): + write_env("PYMONGO_MUST_CONNECT", "true") + + if is_set("DISABLE_TEST_COMMANDS"): + write_env("PYMONGO_DISABLE_TEST_COMMANDS", "1") + + if is_set("TEST_ENTERPRISE_AUTH"): + if os.name == "nt": + LOGGER.info("Setting GSSAPI_PASS") + write_env("GSSAPI_PASS", os.environ["SASL_PASS"]) + write_env("GSSAPI_CANONICALIZE", "true") + else: + # BUILD-3830 + krb_conf = ROOT / ".evergreen/krb5.conf.empty" + krb_conf.touch() + write_env("KRB5_CONFIG", krb_conf) + LOGGER.info("Writing keytab") + keytab = base64.b64decode(os.environ["KEYTAB_BASE64"]) + keytab_file = ROOT / ".evergreen/drivers.keytab" + with keytab_file.open("w", newline="\n") as fid: + fid.write(keytab) + principal = os.environ["PRINCIPAL"] + LOGGER.info("Running kinit") + cmd = f"kinit -k -t {keytab_file} -p {principal}" + run_command(cmd) + + LOGGER.info("Setting GSSAPI variables") + write_env("GSSAPI_HOST", os.environ["SASL_HOST"]) + write_env("GSSAPI_PORT", os.environ["SASL_PORT"]) + write_env("GSSAPI_PRINCIPAL", os.environ["PRINCIPAL"]) + + if is_set("TEST_LOADBALANCER"): + write_env("LOAD_BALANCER", "1") + SINGLE_MONGOS_LB_URI = os.environ.get( + "SINGLE_MONGOS_LB_URI", "mongodb://127.0.0.1:8000/?loadBalanced=true" + ) + MULTI_MONGOS_LB_URI = os.environ.get( + "MULTI_MONGOS_LB_URI", "mongodb://127.0.0.1:8001/?loadBalanced=true" + ) + if SSL != "nossl": + SINGLE_MONGOS_LB_URI += "&tls=true" + MULTI_MONGOS_LB_URI += "&tls=true" + write_env("SINGLE_MONGOS_LB_URI", SINGLE_MONGOS_LB_URI) + write_env("MULTI_MONGOS_LB_URI", MULTI_MONGOS_LB_URI) + cmd = f'bash "{DRIVERS_TOOLS}/.evergreen/run-load-balancer.sh" start' + run_command(cmd) + if SSL != "nossl": + write_env("CLIENT_PEM", f"{DRIVERS_TOOLS}/.evergreen/x509gen/client.pem") + write_env("CA_PEM", f"{DRIVERS_TOOLS}/.evergreen/x509gen/ca.pem") + + compressors = os.environ.get("COMPRESSORS") + if compressors == "snappy": + UV_ARGS.append("--extra snappy") + elif compressors == "zstd": + UV_ARGS.append("--extra zstandard") + + if is_set("TEST_ENCRYPTION") or is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): + # Check for libmongocrypt download. + if not (ROOT / "libmongocrypt").exists(): + run_command(f"bash {HERE}/setup-libmongocrypt.sh") + + # TODO: Test with 'pip install pymongocrypt' + UV_ARGS.append("--group pymongocrypt_source") + + # Use the nocrypto build to avoid dependency issues with older windows/python versions. + BASE = ROOT / "libmongocrypt/nocrypto" + if sys.platform == "linux": + if (BASE / "lib/libmongocrypt.so").exists(): + PYMONGOCRYPT_LIB = BASE / "lib/libmongocrypt.so" + else: + PYMONGOCRYPT_LIB = BASE / "lib64/libmongocrypt.so" + elif sys.platform == "darwin": + PYMONGOCRYPT_LIB = BASE / "lib/libmongocrypt.dylib" + else: + PYMONGOCRYPT_LIB = BASE / "bin/mongocrypt.dll" + # libmongocrypt's windows dll is not marked executable. + PYMONGOCRYPT_LIB.chmod(PYMONGOCRYPT_LIB.stat().st_mode | stat.S_IEXEC) + if not PYMONGOCRYPT_LIB.exists(): + raise RuntimeError("Cannot find libmongocrypt shared object file") + write_env("PYMONGOCRYPT_LIB", PYMONGOCRYPT_LIB.as_posix()) + # PATH is updated by configure-env.sh for access to mongocryptd. + + if is_set("TEST_ENCRYPTION"): + run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/setup-secrets.sh") + run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/start-servers.sh") + + if is_set("TEST_CRYPT_SHARED"): + CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent() + LOGGER.info("Using crypt_shared_dir %s", CRYPT_SHARED_DIR) + DYLD_FALLBACK_LIBRARY_PATH = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") + LD_LIBRARY_PATH = os.environ.get("LD_LIBRARY_PATH", "") + PATH = os.environ("PATH") + write_env("DYLD_FALLBACK_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:{DYLD_FALLBACK_LIBRARY_PATH}") + write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:{LD_LIBRARY_PATH}") + write_env("PATH", f"{CRYPT_SHARED_DIR}:{PATH}") + + if is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): + if "SUCCESS" not in os.environ: + raise RuntimeError("Must define SUCCESS") + + write_env("SUCCESS", os.environ["SUCCESS"]) + MONGODB_URI = os.environ.get("MONGODB_URI", "") + if "@" in MONGODB_URI: + raise RuntimeError("MONGODB_URI unexpectedly contains user credentials in FLE test!") + + if is_set("TEST_OCSP"): + write_env("CA_FILE", os.environ["CA_FILE"]) + write_env("OCSP_TLS_SHOULD_SUCCEED", os.environ["OCSP_TLS_SHOULD_SUCCEED"]) + + if is_set("PERF_TEST"): + UV_ARGS.append("--group perf") + # PYTHON-4769 Run perf_test.py directly otherwise pytest's test collection negatively + # affects the benchmark results. + TEST_ARGS = f"test/performance/perf_test.py {TEST_ARGS}" + + # Add coverage if requested. + # Only cover CPython. PyPy reports suspiciously low coverage. + if is_set("COVERAGE") and platform.python_implementation() == "CPython": + # Keep in sync with combine-coverage.sh. + # coverage >=5 is needed for relative_files=true. + UV_ARGS.append("--group coverage") + TEST_ARGS = f"{TEST_ARGS} --cov" + + if is_set("GREEN_FRAMEWORK"): + framework = os.environ["GREEN_FRAMEWORK"] + UV_ARGS.append(f"--group {framework}") -if is_set("TEST_ENTERPRISE_AUTH"): - if os.name == "nt": - LOGGER.info("Setting GSSAPI_PASS") - write_env("GSSAPI_PASS", os.environ["SASL_PASS"]) - write_env("GSSAPI_CANONICALIZE", "true") else: - # BUILD-3830 - krb_conf = ROOT / ".evergreen/krb5.conf.empty" - krb_conf.touch() - write_env("KRB5_CONFIG", krb_conf) - LOGGER.info("Writing keytab") - keytab = base64.b64decode(os.environ["KEYTAB_BASE64"]) - keytab_file = ROOT / ".evergreen/drivers.keytab" - with keytab_file.open("w", newline="\n") as fid: - fid.write(keytab) - principal = os.environ["PRINCIPAL"] - LOGGER.info("Running kinit") - cmd = f"kinit -k -t {keytab_file} -p {principal}" - run_command(cmd) + # Use --capture=tee-sys so pytest prints test output inline: + # https://docs.pytest.org/en/stable/how-to/capture-stdout-stderr.html + TEST_ARGS = f"-v --capture=tee-sys --durations=5 {TEST_ARGS}" + if TEST_SUITES: + TEST_ARGS = f"-m {TEST_SUITES} {TEST_ARGS}" - LOGGER.info("Setting GSSAPI variables") - write_env("GSSAPI_HOST", os.environ["SASL_HOST"]) - write_env("GSSAPI_PORT", os.environ["SASL_PORT"]) - write_env("GSSAPI_PRINCIPAL", os.environ["PRINCIPAL"]) + write_env("TEST_ARGS", TEST_ARGS) + write_env("UV_ARGS", " ".join(UV_ARGS)) -if is_set("TEST_LOADBALANCER"): - write_env("LOAD_BALANCER", "1") - SINGLE_MONGOS_LB_URI = os.environ.get( - "SINGLE_MONGOS_LB_URI", "mongodb://127.0.0.1:8000/?loadBalanced=true" - ) - MULTI_MONGOS_LB_URI = os.environ.get( - "MULTI_MONGOS_LB_URI", "mongodb://127.0.0.1:8001/?loadBalanced=true" - ) - if SSL != "nossl": - SINGLE_MONGOS_LB_URI += "&tls=true" - MULTI_MONGOS_LB_URI += "&tls=true" - write_env("SINGLE_MONGOS_LB_URI", SINGLE_MONGOS_LB_URI) - write_env("MULTI_MONGOS_LB_URI", MULTI_MONGOS_LB_URI) - cmd = f'bash "{DRIVERS_TOOLS}/.evergreen/run-load-balancer.sh" start' - run_command(cmd) - -if SSL != "nossl": - write_env("CLIENT_PEM", f"{DRIVERS_TOOLS}/.evergreen/x509gen/client.pem") - write_env("CA_PEM", f"{DRIVERS_TOOLS}/.evergreen/x509gen/ca.pem") - -compressors = os.environ.get("COMPRESSORS") -if compressors == "snappy": - UV_ARGS.append("--extra snappy") -elif compressors == "zstd": - UV_ARGS.append("--extra zstandard") - - -if is_set("TEST_ENCRYPTION") or is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): - # Check for libmongocrypt download. - if not (ROOT / "libmongocrypt").exists(): - run_command(f"bash {HERE}/setup-libmongocrypt.sh") - - # TODO: Test with 'pip install pymongocrypt' - UV_ARGS.append("--group pymongocrypt_source") - - # Use the nocrypto build to avoid dependency issues with older windows/python versions. - BASE = ROOT / "libmongocrypt/nocrypto" - if sys.platform == "linux": - if (BASE / "lib/libmongocrypt.so").exists(): - PYMONGOCRYPT_LIB = BASE / "lib/libmongocrypt.so" - else: - PYMONGOCRYPT_LIB = BASE / "lib64/libmongocrypt.so" - elif sys.platform == "darwin": - PYMONGOCRYPT_LIB = BASE / "lib/libmongocrypt.dylib" - else: - PYMONGOCRYPT_LIB = BASE / "bin/mongocrypt.dll" - # libmongocrypt's windows dll is not marked executable. - PYMONGOCRYPT_LIB.chmod(PYMONGOCRYPT_LIB.stat().st_mode | stat.S_IEXEC) - if not PYMONGOCRYPT_LIB.exists(): - raise RuntimeError("Cannot find libmongocrypt shared object file") - write_env("PYMONGOCRYPT_LIB", PYMONGOCRYPT_LIB.as_posix()) - # PATH is updated by configure-env.sh for access to mongocryptd. - -if is_set("TEST_ENCRYPTION"): - run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/setup-secrets.sh") - run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/start-servers.sh") - - -if is_set("TEST_CRYPT_SHARED"): - CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent() - LOGGER.info("Using crypt_shared_dir %s", CRYPT_SHARED_DIR) - DYLD_FALLBACK_LIBRARY_PATH = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") - LD_LIBRARY_PATH = os.environ.get("LD_LIBRARY_PATH", "") - PATH = os.environ("PATH") - write_env("DYLD_FALLBACK_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:{DYLD_FALLBACK_LIBRARY_PATH}") - write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:{LD_LIBRARY_PATH}") - write_env("PATH", f"{CRYPT_SHARED_DIR}:{PATH}") - - -if is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): - if "SUCCESS" not in os.environ: - raise RuntimeError("Must define SUCCESS") - - write_env("SUCCESS", os.environ["SUCCESS"]) - MONGODB_URI = os.environ.get("MONGODB_URI", "") - if "@" in MONGODB_URI: - raise RuntimeError("MONGODB_URI unexpectedly contains user credentials in FLE test!") - - -if is_set("PERF_TEST"): - UV_ARGS.append("--group perf") - # PYTHON-4769 Run perf_test.py directly otherwise pytest's test collection negatively - # affects the benchmark results. - TEST_ARGS = f"test/performance/perf_test.py {TEST_ARGS}" - -# Add coverage if requested. -# Only cover CPython. PyPy reports suspiciously low coverage. -if is_set("COVERAGE") and platform.python_implementation() == "CPython": - # Keep in sync with combine-coverage.sh. - # coverage >=5 is needed for relative_files=true. - UV_ARGS.append("--group coverage") - TEST_ARGS = f"{TEST_ARGS} --cov" - - -if is_set("GREEN_FRAMEWORK"): - framework = os.environ["GREEN_FRAMEWORK"] - UV_ARGS.append(f"--group {framework}") - -else: - # Use --capture=tee-sys so pytest prints test output inline: - # https://docs.pytest.org/en/stable/how-to/capture-stdout-stderr.html - TEST_ARGS = f"-v --capture=tee-sys --durations=5 {TEST_ARGS}" - if TEST_SUITES: - TEST_ARGS = f"-m {TEST_SUITES} {TEST_ARGS}" - -write_env("TEST_ARGS", TEST_ARGS) -write_env("UV_ARGS", " ".join(UV_ARGS)) +if __name__ == "__main__": + handle_test_env() diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index 8db647cf0a..fbbb1569fa 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -31,6 +31,27 @@ set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" +# Try to source the env file. +if [ -f $SCRIPT_DIR/scripts/env.sh ]; then + source $SCRIPT_DIR/scripts/env.sh +fi + +# Try to source local Drivers Secrets. +if [ -f $ROOT_DIR/secrets-export.sh ]; then + source ./secrets-export.sh +else +fi + +# Source serverless secrets if applicable. +if [ -n "${TEST_SERVERLESS:-}" ]; then + source $DRIVERS_TOOLS/.evergreen/serverless/secrets-export.sh +fi + +# Source atlas secrets if applicable. +if [ -n "${TEST_INDEX_MANAGEMENT:-}" ]; then + source $DRIVERS_TOOLS/..evergreen/atlas/secrets-export.sh" +fi + . $ROOT_DIR/.evergreen/utils.sh PYTHON=${PYTHON_BINARY:-$(find_python3)} $PYTHON $SCRIPT_DIR/setup-tests.py diff --git a/justfile b/justfile index 7819f6b1c9..8d114dbc96 100644 --- a/justfile +++ b/justfile @@ -70,10 +70,10 @@ test-mockupdb *args: test-eg *args: bash ./.evergreen/run-tests.sh {{args}} -[group('encryption')] +[group('test')] setup-test: bash .evergreen/scripts/setup-tests.sh -[group('encryption')] +[group('test')] teardown-test: bash .evergreen/scripts/teardown-tests.sh From a0e982157736b6e07e0c16d4a8725c900792351a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 25 Jan 2025 06:36:17 -0600 Subject: [PATCH 041/121] cleanup --- .evergreen/run-tests.sh | 29 +++++++++++++---------------- .evergreen/scripts/setup-tests.py | 2 +- .evergreen/scripts/setup-tests.sh | 6 ------ 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index da4bef61a1..a1ab2fce1a 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -eux +set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" @@ -15,28 +15,21 @@ else echo "Not sourcing env inputs" fi -# Try to source local Drivers Secrets -if [ -f $ROOT_DIR/secrets-export.sh ]; then - echo "Sourcing secrets" - source ./secrets-export.sh -else - echo "Not sourcing secrets" -fi - -# Try to source the test inputs +# Ensure there are test inputs. if [ -f $SCRIPT_DIR/scripts/test-env.sh ]; then echo "Sourcing test inputs" source $SCRIPT_DIR/scripts/test-env.sh else - echo "Not sourcing test inputs" + echo "Missing test inputs, please run 'just setup-test'" + exit 1 fi -PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") +# Source the csfle secrets if running encryption test. +if [ -n "${TEST_ENCRYPTION}" ]; then + source $DRIVERS_TOOLS/.evergreen/csfle/secrets-export.sh +fi -# Start compiling the args we'll pass to uv. -# Run in an isolated environment so as not to pollute the base venv. -UV_ARGS=${UV_ARGS:-"--extra test"} -TEST_ARGS=${TEST_ARGS:-} +PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") # Ensure C extensions if applicable. if [ -z "${NO_EXT:-}" ] && [ "$PYTHON_IMPL" = "CPython" ]; then @@ -67,6 +60,10 @@ fi # Run the tests, and store the results in Evergreen compatible XUnit XML # files in the xunit-results/ directory. +TEST_ARGS=${TEST_ARGS} +if [ "$#" -ne 0 ]; then + TEST_ARGS=“$@” +fi echo "Running tests with $TEST_ARGS..." if [ -z "${GREEN_FRAMEWORK:-}" ]; then # shellcheck disable=SC2048 diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 16e39547cc..88b4425e38 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -92,7 +92,7 @@ def handle_test_env(): AUTH = os.environ.get("AUTH", "noauth") SSL = os.environ.get("SSL", "nossl") TEST_SUITES = os.environ.get("TEST_SUITES", "") - TEST_ARGS = " ".join(sys.argv[1:]) + TEST_ARGS = "" # Start compiling the args we'll pass to uv. # Run in an isolated environment so as not to pollute the base venv. UV_ARGS = ["--isolated --extra test"] diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index fbbb1569fa..a6071d6e76 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -36,12 +36,6 @@ if [ -f $SCRIPT_DIR/scripts/env.sh ]; then source $SCRIPT_DIR/scripts/env.sh fi -# Try to source local Drivers Secrets. -if [ -f $ROOT_DIR/secrets-export.sh ]; then - source ./secrets-export.sh -else -fi - # Source serverless secrets if applicable. if [ -n "${TEST_SERVERLESS:-}" ]; then source $DRIVERS_TOOLS/.evergreen/serverless/secrets-export.sh From 93b18750a40b6cbb0400d88bc9e89193616c7ea8 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 25 Jan 2025 06:49:56 -0600 Subject: [PATCH 042/121] syntax --- .evergreen/scripts/setup-tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index a6071d6e76..e7cf5e8c70 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -43,7 +43,7 @@ fi # Source atlas secrets if applicable. if [ -n "${TEST_INDEX_MANAGEMENT:-}" ]; then - source $DRIVERS_TOOLS/..evergreen/atlas/secrets-export.sh" + source $DRIVERS_TOOLS/..evergreen/atlas/secrets-export.sh fi . $ROOT_DIR/.evergreen/utils.sh From 3fe03e90ffc14ba7113281606a13c56a8aee489a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 25 Jan 2025 06:54:32 -0600 Subject: [PATCH 043/121] missing default --- .evergreen/run-tests.sh | 2 +- .evergreen/scripts/setup-tests.py | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index a1ab2fce1a..284e1a60e7 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -25,7 +25,7 @@ else fi # Source the csfle secrets if running encryption test. -if [ -n "${TEST_ENCRYPTION}" ]; then +if [ -n "${TEST_ENCRYPTION:-}" ]; then source $DRIVERS_TOOLS/.evergreen/csfle/secrets-export.sh fi diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 88b4425e38..25e3dd8a63 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -9,6 +9,7 @@ import subprocess import sys from pathlib import Path +from typing import Any HERE = Path(__file__).absolute().parent ROOT = HERE.parent.parent @@ -73,22 +74,22 @@ ) -def write_env(name, value): +def write_env(name: str, value: Any) -> None: with ENV_FILE.open("a", newline="\n") as fid: # Remove any existing quote chars. value = value.replace('"', "") fid.write(f'export {name}="{value}"\n') -def is_set(var): - return os.environ.get(var) +def is_set(var: str) -> bool: + return os.environ.get(var) is not None -def run_command(cmd): +def run_command(cmd: str) -> None: subprocess.check_call(shlex.split(cmd)) # noqa: S603 -def handle_test_env(): +def handle_test_env() -> None: AUTH = os.environ.get("AUTH", "noauth") SSL = os.environ.get("SSL", "nossl") TEST_SUITES = os.environ.get("TEST_SUITES", "") From c2236ef1235a1416078435de8a51511b96ca3df4 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 25 Jan 2025 09:38:02 -0600 Subject: [PATCH 044/121] cleanup --- .evergreen/run-azurekms-test.sh | 2 +- .evergreen/run-gcpkms-test.sh | 2 +- .evergreen/scripts/run-gcpkms-fail-test.sh | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.evergreen/run-azurekms-test.sh b/.evergreen/run-azurekms-test.sh index 96a8e7757d..7183940a40 100755 --- a/.evergreen/run-azurekms-test.sh +++ b/.evergreen/run-azurekms-test.sh @@ -7,7 +7,7 @@ export AZUREKMS_RESOURCEGROUP=${AZUREKMS_RESOURCEGROUP} export AZUREKMS_VMNAME=${AZUREKMS_VMNAME} export AZUREKMS_PRIVATEKEYPATH=/tmp/testazurekms_privatekey LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz -SUCCESS=true TEST_FLE_AZURE_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash $HERE/scripts/setup-test.sh +SUCCESS=true TEST_FLE_AZURE_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash $HERE/scripts/setup-tests.sh # Set up the remote files to test. git add . git commit -m "add files" || true diff --git a/.evergreen/run-gcpkms-test.sh b/.evergreen/run-gcpkms-test.sh index 73887058fa..f606219d7b 100755 --- a/.evergreen/run-gcpkms-test.sh +++ b/.evergreen/run-gcpkms-test.sh @@ -9,7 +9,7 @@ export GCPKMS_PROJECT=${GCPKMS_PROJECT} export GCPKMS_ZONE=${GCPKMS_ZONE} export GCPKMS_INSTANCENAME=${GCPKMS_INSTANCENAME} LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz -SUCCESS=true TEST_FLE_GCP_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash $HERE/scripts/setup-test.sh +SUCCESS=true TEST_FLE_GCP_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash $HERE/scripts/setup-tests.sh # Set up the remote files to test. git add . git commit -m "add files" || true diff --git a/.evergreen/scripts/run-gcpkms-fail-test.sh b/.evergreen/scripts/run-gcpkms-fail-test.sh index eaf78ee99d..dce594b37a 100755 --- a/.evergreen/scripts/run-gcpkms-fail-test.sh +++ b/.evergreen/scripts/run-gcpkms-fail-test.sh @@ -1,6 +1,6 @@ #!/bin/bash - -. .evergreen/scripts/env.sh +HERE=$(dirname ${BASH_SOURCE:-$0}) +. .$HERE/env.sh export PYTHON_BINARY=/opt/mongodbtoolchain/v4/bin/python3 export LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz SUCCESS=false TEST_FLE_GCP_AUTO=1 bash $HERE/scripts/setup-tests.sh From d8ecde98d2a7f9642611e1530f2c3abe620df020 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 06:08:51 -0600 Subject: [PATCH 045/121] fix kms logic --- .evergreen/scripts/run-gcpkms-fail-test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/run-gcpkms-fail-test.sh b/.evergreen/scripts/run-gcpkms-fail-test.sh index dce594b37a..4f3cff94d6 100755 --- a/.evergreen/scripts/run-gcpkms-fail-test.sh +++ b/.evergreen/scripts/run-gcpkms-fail-test.sh @@ -1,6 +1,6 @@ #!/bin/bash HERE=$(dirname ${BASH_SOURCE:-$0}) -. .$HERE/env.sh +. $HERE/env.sh export PYTHON_BINARY=/opt/mongodbtoolchain/v4/bin/python3 export LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz SUCCESS=false TEST_FLE_GCP_AUTO=1 bash $HERE/scripts/setup-tests.sh From b1d87683286f5200c75fc083f352a9175b74740c Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 06:16:40 -0600 Subject: [PATCH 046/121] fix kms logic --- .evergreen/run-azurekms-test.sh | 12 +++++------- .evergreen/run-gcpkms-test.sh | 7 ++----- .evergreen/scripts/run-gcpkms-fail-test.sh | 3 ++- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/.evergreen/run-azurekms-test.sh b/.evergreen/run-azurekms-test.sh index 7183940a40..27cb3fb315 100755 --- a/.evergreen/run-azurekms-test.sh +++ b/.evergreen/run-azurekms-test.sh @@ -7,23 +7,21 @@ export AZUREKMS_RESOURCEGROUP=${AZUREKMS_RESOURCEGROUP} export AZUREKMS_VMNAME=${AZUREKMS_VMNAME} export AZUREKMS_PRIVATEKEYPATH=/tmp/testazurekms_privatekey LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz -SUCCESS=true TEST_FLE_AZURE_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash $HERE/scripts/setup-tests.sh # Set up the remote files to test. git add . git commit -m "add files" || true -git archive -o /tmp/mongo-python-driver.tar --add-file $HERE/scripts/test-env.sh HEAD -tar -rf /tmp/mongo-python-driver.tar libmongocrypt -tar -rf /tmp/mongo-python-driver.tar -gzip -f /tmp/mongo-python-driver.tar +git archive -o /tmp/mongo-python-driver.tgz HEAD # shellcheck disable=SC2088 -AZUREKMS_SRC="/tmp/mongo-python-driver.tar.gz" AZUREKMS_DST="~/" \ +AZUREKMS_SRC="/tmp/mongo-python-driver.tgz" AZUREKMS_DST="~/" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/copy-file.sh echo "Copying files ... end" echo "Untarring file ... begin" -AZUREKMS_CMD="tar xf mongo-python-driver.tar.gz" \ +AZUREKMS_CMD="tar xf mongo-python-driver.tgz" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" +AZUREKMS_CMD="SUCCESS=true TEST_FLE_AZURE_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash .evergreen/just.sh setup-test" \ + $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh AZUREKMS_CMD="KEY_NAME=\"$AZUREKMS_KEYNAME\" KEY_VAULT_ENDPOINT=\"$AZUREKMS_KEYVAULTENDPOINT\" bash ./.evergreen/just.sh test-eg" \ $DRIVERS_TOOLS/.evergreen/csfle/azurekms/run-command.sh echo "Running test ... end" diff --git a/.evergreen/run-gcpkms-test.sh b/.evergreen/run-gcpkms-test.sh index f606219d7b..9a1b0b5b4a 100755 --- a/.evergreen/run-gcpkms-test.sh +++ b/.evergreen/run-gcpkms-test.sh @@ -9,20 +9,17 @@ export GCPKMS_PROJECT=${GCPKMS_PROJECT} export GCPKMS_ZONE=${GCPKMS_ZONE} export GCPKMS_INSTANCENAME=${GCPKMS_INSTANCENAME} LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz -SUCCESS=true TEST_FLE_GCP_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash $HERE/scripts/setup-tests.sh # Set up the remote files to test. git add . git commit -m "add files" || true -git archive -o /tmp/mongo-python-driver.tar --add-file $HERE/scripts/test-env.sh HEAD -tar -rf /tmp/mongo-python-driver.tar libmongocrypt -tar -rf /tmp/mongo-python-driver.tar -gzip -f /tmp/mongo-python-driver.tar +git archive -o /tmp/mongo-python-driver.tgz HEAD GCPKMS_SRC=/tmp/mongo-python-driver.tar.gz GCPKMS_DST=$GCPKMS_INSTANCENAME: $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/copy-file.sh echo "Copying files ... end" echo "Untarring file ... begin" GCPKMS_CMD="tar xf mongo-python-driver.tar.gz" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" +GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash ./evergreen/just.sh setup-test" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh GCPKMS_CMD="./.evergreen/just.sh test-eg" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Running test ... end" bash $HERE/scripts/teardown-tests.sh diff --git a/.evergreen/scripts/run-gcpkms-fail-test.sh b/.evergreen/scripts/run-gcpkms-fail-test.sh index 4f3cff94d6..61f5e30ccc 100755 --- a/.evergreen/scripts/run-gcpkms-fail-test.sh +++ b/.evergreen/scripts/run-gcpkms-fail-test.sh @@ -1,7 +1,8 @@ #!/bin/bash +set -eu HERE=$(dirname ${BASH_SOURCE:-$0}) . $HERE/env.sh export PYTHON_BINARY=/opt/mongodbtoolchain/v4/bin/python3 export LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/master/latest/libmongocrypt.tar.gz -SUCCESS=false TEST_FLE_GCP_AUTO=1 bash $HERE/scripts/setup-tests.sh +SUCCESS=false TEST_FLE_GCP_AUTO=1 bash $HERE/setup-tests.sh bash ./.evergreen/just.sh test-eg From 93163a6033f355579a5f3b385eddd990856017ba Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 06:29:46 -0600 Subject: [PATCH 047/121] debug --- .evergreen/run-gcpkms-test.sh | 4 ++-- .evergreen/run-tests.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.evergreen/run-gcpkms-test.sh b/.evergreen/run-gcpkms-test.sh index 9a1b0b5b4a..73afae9a63 100755 --- a/.evergreen/run-gcpkms-test.sh +++ b/.evergreen/run-gcpkms-test.sh @@ -13,10 +13,10 @@ LIBMONGOCRYPT_URL=https://s3.amazonaws.com/mciuploads/libmongocrypt/debian11/mas git add . git commit -m "add files" || true git archive -o /tmp/mongo-python-driver.tgz HEAD -GCPKMS_SRC=/tmp/mongo-python-driver.tar.gz GCPKMS_DST=$GCPKMS_INSTANCENAME: $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/copy-file.sh +GCPKMS_SRC=/tmp/mongo-python-driver.tgz GCPKMS_DST=$GCPKMS_INSTANCENAME: $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/copy-file.sh echo "Copying files ... end" echo "Untarring file ... begin" -GCPKMS_CMD="tar xf mongo-python-driver.tar.gz" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh +GCPKMS_CMD="tar xf mongo-python-driver.tgz" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash ./evergreen/just.sh setup-test" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 284e1a60e7..82f51f6a6c 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -eu +set -eux SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" From da2f507694d3b9d5d6ab5167a9ec4ae55a470f5c Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 06:37:16 -0600 Subject: [PATCH 048/121] debug --- .evergreen/run-tests.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 82f51f6a6c..76ba5de495 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -eux +set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" @@ -24,6 +24,8 @@ else exit 1 fi +set -x + # Source the csfle secrets if running encryption test. if [ -n "${TEST_ENCRYPTION:-}" ]; then source $DRIVERS_TOOLS/.evergreen/csfle/secrets-export.sh From 55f669cd54c12293d65d90a7049ba58b75187064 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 06:48:01 -0600 Subject: [PATCH 049/121] debug --- .evergreen/run-tests.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 76ba5de495..bf73046dec 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -18,6 +18,8 @@ fi # Ensure there are test inputs. if [ -f $SCRIPT_DIR/scripts/test-env.sh ]; then echo "Sourcing test inputs" + # TODO remove before merging + cat $SCRIPT_DIR/scripts/test-env.sh source $SCRIPT_DIR/scripts/test-env.sh else echo "Missing test inputs, please run 'just setup-test'" From 1dbda392d6e1f515293c341f66b61369fa778ed2 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 17:14:25 -0600 Subject: [PATCH 050/121] fix is_set --- .evergreen/scripts/setup-tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 25e3dd8a63..90e5c2bcd3 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -82,7 +82,8 @@ def write_env(name: str, value: Any) -> None: def is_set(var: str) -> bool: - return os.environ.get(var) is not None + value = os.environ.get(var, "") + return len(value.strip()) > 0 def run_command(cmd: str) -> None: From 9493ae86fd8f1d9c4fe494968ff35140f78bfb1c Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 17:31:39 -0600 Subject: [PATCH 051/121] debug --- .evergreen/just.sh | 2 ++ .evergreen/run-gcpkms-test.sh | 2 +- .evergreen/scripts/setup-tests.sh | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.evergreen/just.sh b/.evergreen/just.sh index 5bc3d530a9..8050a809fe 100755 --- a/.evergreen/just.sh +++ b/.evergreen/just.sh @@ -1,5 +1,7 @@ #!/bin/bash set -eux +echo "Hello from just.sh" +env . .evergreen/scripts/setup-dev-env.sh just "$@" diff --git a/.evergreen/run-gcpkms-test.sh b/.evergreen/run-gcpkms-test.sh index 73afae9a63..077ca0cb9f 100755 --- a/.evergreen/run-gcpkms-test.sh +++ b/.evergreen/run-gcpkms-test.sh @@ -19,7 +19,7 @@ echo "Untarring file ... begin" GCPKMS_CMD="tar xf mongo-python-driver.tgz" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Untarring file ... end" echo "Running test ... begin" -GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash ./evergreen/just.sh setup-test" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh +GCPKMS_CMD="SUCCESS=true TEST_FLE_GCP_AUTO=1 LIBMONGOCRYPT_URL=$LIBMONGOCRYPT_URL bash ./.evergreen/just.sh setup-test" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh GCPKMS_CMD="./.evergreen/just.sh test-eg" $DRIVERS_TOOLS/.evergreen/csfle/gcpkms/run-command.sh echo "Running test ... end" bash $HERE/scripts/teardown-tests.sh diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index e7cf5e8c70..8ae3f29e66 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -31,6 +31,9 @@ set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" +echo "hello from setup-test.sh 1" +env + # Try to source the env file. if [ -f $SCRIPT_DIR/scripts/env.sh ]; then source $SCRIPT_DIR/scripts/env.sh @@ -46,6 +49,10 @@ if [ -n "${TEST_INDEX_MANAGEMENT:-}" ]; then source $DRIVERS_TOOLS/..evergreen/atlas/secrets-export.sh fi +echo "hello from setup-test.sh 2" +env +exit 1 + . $ROOT_DIR/.evergreen/utils.sh PYTHON=${PYTHON_BINARY:-$(find_python3)} $PYTHON $SCRIPT_DIR/setup-tests.py From 24f3ac49895432216db79087f1f70044040665c8 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 17:53:07 -0600 Subject: [PATCH 052/121] cleanup --- .evergreen/config.yml | 56 ---------------------- .evergreen/scripts/run-mongodb-aws-test.sh | 4 +- 2 files changed, 1 insertion(+), 59 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index c5e459672c..c245fed275 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -320,13 +320,6 @@ functions: - ${DRIVERS_TOOLS}/.evergreen/auth_aws/setup-secrets.sh "run aws auth test with regular aws credentials": - - command: subprocess.exec - params: - include_expansions_in_env: ["TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE"] - binary: bash - working_dir: "src" - args: - - .evergreen/scripts/setup-tests.sh - command: subprocess.exec type: test params: @@ -339,13 +332,6 @@ functions: - regular "run aws auth test with assume role credentials": - - command: subprocess.exec - params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] - binary: bash - working_dir: "src" - args: - - .evergreen/scripts/setup-tests.sh - command: subprocess.exec type: test params: @@ -358,13 +344,6 @@ functions: - assume-role "run aws auth test with aws EC2 credentials": - - command: subprocess.exec - params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] - binary: bash - working_dir: "src" - args: - - .evergreen/scripts/setup-tests.sh - command: subprocess.exec type: test params: @@ -377,13 +356,6 @@ functions: - ec2 "run aws auth test with aws web identity credentials": - - command: subprocess.exec - params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] - binary: bash - working_dir: "src" - args: - - .evergreen/scripts/setup-tests.sh - # Test with and without AWS_ROLE_SESSION_NAME set. - command: subprocess.exec type: test @@ -409,13 +381,6 @@ functions: - web-identity "run aws auth test with aws credentials as environment variables": - - command: subprocess.exec - params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] - binary: bash - working_dir: "src" - args: - - .evergreen/scripts/setup-tests.sh - command: subprocess.exec type: test params: @@ -428,13 +393,6 @@ functions: - env-creds "run aws auth test with aws credentials and session token as environment variables": - - command: subprocess.exec - params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] - binary: bash - working_dir: "src" - args: - - .evergreen/scripts/setup-tests.sh - command: subprocess.exec type: test params: @@ -447,13 +405,6 @@ functions: - session-creds "run oidc auth test with test credentials": - - command: subprocess.exec - params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] - binary: bash - working_dir: "src" - args: - - .evergreen/scripts/setup-tests.sh - command: subprocess.exec type: test params: @@ -541,13 +492,6 @@ functions: file: atlas-expansion.yml "run-ocsp-test": - - command: subprocess.exec - params: - include_expansions_in_env: [ "TEST_DATA_LAKE", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE" ] - binary: bash - working_dir: "src" - args: - - .evergreen/scripts/setup-tests.sh - command: subprocess.exec type: test params: diff --git a/.evergreen/scripts/run-mongodb-aws-test.sh b/.evergreen/scripts/run-mongodb-aws-test.sh index 88c3236b3f..e3347f69a5 100755 --- a/.evergreen/scripts/run-mongodb-aws-test.sh +++ b/.evergreen/scripts/run-mongodb-aws-test.sh @@ -27,7 +27,5 @@ echo "Running MONGODB-AWS authentication tests for $1" # show test output set -x -export TEST_AUTH_AWS=1 -export AUTH="auth" -export SET_XTRACE_ON=1 +TEST_AUTH_AWS=1 AUTH="auth" bash ./evergreen/just.sh setup-test bash ./.evergreen/just.sh test-eg From f6ddacfc4ec678b39e9333fda2bc037f33ff5f92 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 20:35:59 -0600 Subject: [PATCH 053/121] disable exit --- .evergreen/run-tests.sh | 5 ----- .evergreen/scripts/run-mongodb-aws-test.sh | 3 --- 2 files changed, 8 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index bf73046dec..92d6fcd03b 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -18,16 +18,11 @@ fi # Ensure there are test inputs. if [ -f $SCRIPT_DIR/scripts/test-env.sh ]; then echo "Sourcing test inputs" - # TODO remove before merging - cat $SCRIPT_DIR/scripts/test-env.sh source $SCRIPT_DIR/scripts/test-env.sh else echo "Missing test inputs, please run 'just setup-test'" - exit 1 fi -set -x - # Source the csfle secrets if running encryption test. if [ -n "${TEST_ENCRYPTION:-}" ]; then source $DRIVERS_TOOLS/.evergreen/csfle/secrets-export.sh diff --git a/.evergreen/scripts/run-mongodb-aws-test.sh b/.evergreen/scripts/run-mongodb-aws-test.sh index e3347f69a5..f4f1712229 100755 --- a/.evergreen/scripts/run-mongodb-aws-test.sh +++ b/.evergreen/scripts/run-mongodb-aws-test.sh @@ -24,8 +24,5 @@ echo "Running MONGODB-AWS authentication tests for $1" # Handle credentials and environment setup. . "$DRIVERS_TOOLS"/.evergreen/auth_aws/aws_setup.sh "$1" -# show test output -set -x - TEST_AUTH_AWS=1 AUTH="auth" bash ./evergreen/just.sh setup-test bash ./.evergreen/just.sh test-eg From db9a253340cc68d7e2650718be35b5ece58d7d4e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 20:41:49 -0600 Subject: [PATCH 054/121] disable exit --- .evergreen/scripts/setup-tests.sh | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index 8ae3f29e66..e7cf5e8c70 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -31,9 +31,6 @@ set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" -echo "hello from setup-test.sh 1" -env - # Try to source the env file. if [ -f $SCRIPT_DIR/scripts/env.sh ]; then source $SCRIPT_DIR/scripts/env.sh @@ -49,10 +46,6 @@ if [ -n "${TEST_INDEX_MANAGEMENT:-}" ]; then source $DRIVERS_TOOLS/..evergreen/atlas/secrets-export.sh fi -echo "hello from setup-test.sh 2" -env -exit 1 - . $ROOT_DIR/.evergreen/utils.sh PYTHON=${PYTHON_BINARY:-$(find_python3)} $PYTHON $SCRIPT_DIR/setup-tests.py From 3d87252fd8da696be40b37040a6750d7102d4d9a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 21:38:21 -0600 Subject: [PATCH 055/121] fixups --- .evergreen/run-tests.sh | 6 +++--- .evergreen/scripts/run-enterprise-auth-tests.sh | 3 ++- .evergreen/scripts/setup-tests.py | 6 ++++++ .evergreen/scripts/setup-tests.sh | 4 ++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 92d6fcd03b..712e7f1695 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -23,9 +23,9 @@ else echo "Missing test inputs, please run 'just setup-test'" fi -# Source the csfle secrets if running encryption test. -if [ -n "${TEST_ENCRYPTION:-}" ]; then - source $DRIVERS_TOOLS/.evergreen/csfle/secrets-export.sh +# Source the local secrets export file if available. +if [ -f "$ROOT_DIR/secrets-export.sh" ]; then + source "$ROOT_DIR/secrets-export.sh" fi PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") diff --git a/.evergreen/scripts/run-enterprise-auth-tests.sh b/.evergreen/scripts/run-enterprise-auth-tests.sh index e015a34ca4..6c300325d2 100755 --- a/.evergreen/scripts/run-enterprise-auth-tests.sh +++ b/.evergreen/scripts/run-enterprise-auth-tests.sh @@ -5,4 +5,5 @@ set -eu set +x # Use the default python to bootstrap secrets. bash "${DRIVERS_TOOLS}"/.evergreen/secrets_handling/setup-secrets.sh drivers/enterprise_auth -TEST_ENTERPRISE_AUTH=1 AUTH=auth bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh test-eg +TEST_ENTERPRISE_AUTH=1 AUTH=auth bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh setup-test +bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh test-eg diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 90e5c2bcd3..78cee902ca 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -191,10 +191,14 @@ def handle_test_env() -> None: MULTI_MONGOS_LB_URI += "&tls=true" write_env("SINGLE_MONGOS_LB_URI", SINGLE_MONGOS_LB_URI) write_env("MULTI_MONGOS_LB_URI", MULTI_MONGOS_LB_URI) + if not DRIVERS_TOOLS: + raise RuntimeError("Missing DRIVERS_TOOLS") cmd = f'bash "{DRIVERS_TOOLS}/.evergreen/run-load-balancer.sh" start' run_command(cmd) if SSL != "nossl": + if not DRIVERS_TOOLS: + raise RuntimeError("Missing DRIVERS_TOOLS") write_env("CLIENT_PEM", f"{DRIVERS_TOOLS}/.evergreen/x509gen/client.pem") write_env("CA_PEM", f"{DRIVERS_TOOLS}/.evergreen/x509gen/ca.pem") @@ -231,6 +235,8 @@ def handle_test_env() -> None: # PATH is updated by configure-env.sh for access to mongocryptd. if is_set("TEST_ENCRYPTION"): + if not DRIVERS_TOOLS: + raise RuntimeError("Missing DRIVERS_TOOLS") run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/setup-secrets.sh") run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/start-servers.sh") diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index e7cf5e8c70..2deabfec37 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -32,8 +32,8 @@ SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" # Try to source the env file. -if [ -f $SCRIPT_DIR/scripts/env.sh ]; then - source $SCRIPT_DIR/scripts/env.sh +if [ -f $SCRIPT_DIR/env.sh ]; then + source $SCRIPT_DIR/env.sh fi # Source serverless secrets if applicable. From a5067b91e79f3aa79ceafac99553b6ea88749179 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 26 Jan 2025 22:01:33 -0600 Subject: [PATCH 056/121] fixups --- .evergreen/config.yml | 4 +++- .evergreen/scripts/setup-tests.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index c245fed275..34c8c1b002 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -276,7 +276,9 @@ functions: - command: subprocess.exec type: test params: - include_expansions_in_env: ["TEST_DATA_LAKE", "PYTHON_BINARY", "AUTH", "SSL", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "ORCHESTRATION_FILE"] + include_expansions_in_env: ["TEST_DATA_LAKE", "PYTHON_BINARY", "AUTH", "SSL", + "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", + "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "MONGODB_URL"] binary: bash working_dir: "src" args: diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index 2deabfec37..e6e541760f 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -43,7 +43,7 @@ fi # Source atlas secrets if applicable. if [ -n "${TEST_INDEX_MANAGEMENT:-}" ]; then - source $DRIVERS_TOOLS/..evergreen/atlas/secrets-export.sh + source $DRIVERS_TOOLS/.evergreen/atlas/secrets-export.sh fi . $ROOT_DIR/.evergreen/utils.sh From 9b9b99b4bac44831c6f672fd9382d6e2bc038821 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 07:32:26 -0600 Subject: [PATCH 057/121] fix index management and debug --- .evergreen/config.yml | 1 + .evergreen/just.sh | 4 +--- .evergreen/scripts/setup-tests.py | 6 +++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 34c8c1b002..733902930f 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -789,6 +789,7 @@ tasks: - func: "run tests" vars: TEST_INDEX_MANAGEMENT: "1" + AUTH: "auth" - name: "mod-wsgi-standalone" tags: ["mod_wsgi"] diff --git a/.evergreen/just.sh b/.evergreen/just.sh index 8050a809fe..bebbca8282 100755 --- a/.evergreen/just.sh +++ b/.evergreen/just.sh @@ -1,7 +1,5 @@ #!/bin/bash -set -eux +set -eu -echo "Hello from just.sh" -env . .evergreen/scripts/setup-dev-env.sh just "$@" diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 78cee902ca..eea141056a 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -87,7 +87,11 @@ def is_set(var: str) -> bool: def run_command(cmd: str) -> None: - subprocess.check_call(shlex.split(cmd)) # noqa: S603 + try: + proc = subprocess.run(shlex.split(cmd), check=True) # noqa: S603 + except subprocess.CalledProcessError as e: + LOGGER.error(proc.stderr.decode("utf-8")) + raise e def handle_test_env() -> None: From b75f007efacd4bafd5bf3b175afe1abcae34b7f1 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 07:42:34 -0600 Subject: [PATCH 058/121] debug load balancer --- .evergreen/scripts/setup-tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index eea141056a..ae75dc0411 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -88,9 +88,9 @@ def is_set(var: str) -> bool: def run_command(cmd: str) -> None: try: - proc = subprocess.run(shlex.split(cmd), check=True) # noqa: S603 + subprocess.run(shlex.split(cmd), check=True) # noqa: S603 except subprocess.CalledProcessError as e: - LOGGER.error(proc.stderr.decode("utf-8")) + LOGGER.error(e.stderr.decode("utf-8")) raise e From 058d95c9e753b162f6aba83056a169f7087dbce4 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 07:48:46 -0600 Subject: [PATCH 059/121] debug load balancer --- .evergreen/scripts/setup-tests.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index ae75dc0411..c23c3ed6e6 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -90,7 +90,10 @@ def run_command(cmd: str) -> None: try: subprocess.run(shlex.split(cmd), check=True) # noqa: S603 except subprocess.CalledProcessError as e: - LOGGER.error(e.stderr.decode("utf-8")) + if e.stderr: + LOGGER.error(e.stderr.decode("utf-8")) + if e.stdout: + LOGGER.error(e.stdout.decode("utf-8")) raise e From 683319720df2fd7b9c07153c266b324922e5e31a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 08:00:15 -0600 Subject: [PATCH 060/121] Fix loadbalancer --- .evergreen/config.yml | 2 +- .evergreen/scripts/setup-tests.py | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 733902930f..491ed8bbd4 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -278,7 +278,7 @@ functions: params: include_expansions_in_env: ["TEST_DATA_LAKE", "PYTHON_BINARY", "AUTH", "SSL", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", - "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "MONGODB_URL"] + "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "MONGODB_URI"] binary: bash working_dir: "src" args: diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index c23c3ed6e6..e690ff35fd 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -87,14 +87,9 @@ def is_set(var: str) -> bool: def run_command(cmd: str) -> None: - try: - subprocess.run(shlex.split(cmd), check=True) # noqa: S603 - except subprocess.CalledProcessError as e: - if e.stderr: - LOGGER.error(e.stderr.decode("utf-8")) - if e.stdout: - LOGGER.error(e.stdout.decode("utf-8")) - raise e + LOGGER.info("Running command %s...", cmd) + subprocess.check_call(shlex.split(cmd)) # noqa: S603 + LOGGER.info("Running command %s... done.", cmd) def handle_test_env() -> None: From 16b1365cdc312206422208132cd3eb11fb44b997 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 09:17:37 -0600 Subject: [PATCH 061/121] freeze the lock file --- .evergreen/run-tests.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 7ebf2697d3..5197a1b858 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -6,6 +6,7 @@ ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" export PIP_QUIET=1 # Quiet by default export PIP_PREFER_BINARY=1 # Prefer binary dists by default +export UV_FROZEN=1 # Do not modify lock files # Try to source the env file. if [ -f $SCRIPT_DIR/scripts/env.sh ]; then From ee80b44c5e57b7d90f4dd37ba2e07e6836c28e59 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 16:13:51 -0600 Subject: [PATCH 062/121] shell lint --- .evergreen/run-tests.sh | 4 ++-- .evergreen/scripts/setup-tests.sh | 2 +- .evergreen/scripts/teardown-tests.sh | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 5197a1b858..8557519253 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -2,7 +2,7 @@ set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) -ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" +ROOT_DIR="$(dirname "$(dirname $SCRIPT_DIR)")" export PIP_QUIET=1 # Quiet by default export PIP_PREFER_BINARY=1 # Prefer binary dists by default @@ -62,7 +62,7 @@ fi # files in the xunit-results/ directory. TEST_ARGS=${TEST_ARGS} if [ "$#" -ne 0 ]; then - TEST_ARGS=“$@” + TEST_ARGS="$*" fi echo "Running tests with $TEST_ARGS..." if [ -z "${GREEN_FRAMEWORK:-}" ]; then diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index e6e541760f..899ab319c2 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -29,7 +29,7 @@ set -eu # PYTHON_BINARY The python binary to use in tests. SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) -ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" +ROOT_DIR="$(dirname "$(dirname $SCRIPT_DIR)")" # Try to source the env file. if [ -f $SCRIPT_DIR/env.sh ]; then diff --git a/.evergreen/scripts/teardown-tests.sh b/.evergreen/scripts/teardown-tests.sh index 5a3fff713b..9c78c0965c 100755 --- a/.evergreen/scripts/teardown-tests.sh +++ b/.evergreen/scripts/teardown-tests.sh @@ -2,7 +2,7 @@ set -eu SCRIPT_DIR=$(dirname ${BASH_SOURCE:-$0}) -ROOT_DIR="$(dirname $(dirname $SCRIPT_DIR))" +ROOT_DIR="$(dirname "$(dirname $SCRIPT_DIR)")" # Remove temporary test files. pushd $ROOT_DIR > /dev/null From a496e7dad66c249c06af4a7e7518f873f99a0c03 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 16:26:58 -0600 Subject: [PATCH 063/121] fix failing tests --- .evergreen/config.yml | 1 + .evergreen/scripts/run-mongodb-aws-test.sh | 2 +- .evergreen/scripts/setup-tests.py | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 491ed8bbd4..14ae6624cd 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -277,6 +277,7 @@ functions: type: test params: include_expansions_in_env: ["TEST_DATA_LAKE", "PYTHON_BINARY", "AUTH", "SSL", + "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "MONGODB_URI"] binary: bash diff --git a/.evergreen/scripts/run-mongodb-aws-test.sh b/.evergreen/scripts/run-mongodb-aws-test.sh index f4f1712229..255f84f295 100755 --- a/.evergreen/scripts/run-mongodb-aws-test.sh +++ b/.evergreen/scripts/run-mongodb-aws-test.sh @@ -24,5 +24,5 @@ echo "Running MONGODB-AWS authentication tests for $1" # Handle credentials and environment setup. . "$DRIVERS_TOOLS"/.evergreen/auth_aws/aws_setup.sh "$1" -TEST_AUTH_AWS=1 AUTH="auth" bash ./evergreen/just.sh setup-test +TEST_AUTH_AWS=1 AUTH="auth" bash ./.evergreen/just.sh setup-test bash ./.evergreen/just.sh test-eg diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index e690ff35fd..e1533c5cb2 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -77,7 +77,7 @@ def write_env(name: str, value: Any) -> None: with ENV_FILE.open("a", newline="\n") as fid: # Remove any existing quote chars. - value = value.replace('"', "") + value = str(value).replace('"', "") fid.write(f'export {name}="{value}"\n') @@ -213,7 +213,7 @@ def handle_test_env() -> None: if is_set("TEST_ENCRYPTION") or is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): # Check for libmongocrypt download. if not (ROOT / "libmongocrypt").exists(): - run_command(f"bash {HERE}/setup-libmongocrypt.sh") + run_command(f"bash {HERE.as_posix()}/setup-libmongocrypt.sh") # TODO: Test with 'pip install pymongocrypt' UV_ARGS.append("--group pymongocrypt_source") @@ -243,7 +243,7 @@ def handle_test_env() -> None: run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/start-servers.sh") if is_set("TEST_CRYPT_SHARED"): - CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent() + CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent LOGGER.info("Using crypt_shared_dir %s", CRYPT_SHARED_DIR) DYLD_FALLBACK_LIBRARY_PATH = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") LD_LIBRARY_PATH = os.environ.get("LD_LIBRARY_PATH", "") From 8213f2b798c2ada1107ed7e025f8063f319929db Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 16:34:35 -0600 Subject: [PATCH 064/121] fix encryption tests --- .evergreen/scripts/setup-tests.py | 2 +- .evergreen/scripts/setup-tests.sh | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index e1533c5cb2..233ac21bb6 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -247,7 +247,7 @@ def handle_test_env() -> None: LOGGER.info("Using crypt_shared_dir %s", CRYPT_SHARED_DIR) DYLD_FALLBACK_LIBRARY_PATH = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") LD_LIBRARY_PATH = os.environ.get("LD_LIBRARY_PATH", "") - PATH = os.environ("PATH") + PATH = os.environ["PATH"] write_env("DYLD_FALLBACK_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:{DYLD_FALLBACK_LIBRARY_PATH}") write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:{LD_LIBRARY_PATH}") write_env("PATH", f"{CRYPT_SHARED_DIR}:{PATH}") diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index 899ab319c2..09a4f1233e 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -46,6 +46,12 @@ if [ -n "${TEST_INDEX_MANAGEMENT:-}" ]; then source $DRIVERS_TOOLS/.evergreen/atlas/secrets-export.sh fi +# Source local secrets if applicable. +if [ -f "$ROOT_DIR/secrets-export.sh" ]; then + source "$ROOT_DIR/secrets-export.sh" +fi + + . $ROOT_DIR/.evergreen/utils.sh PYTHON=${PYTHON_BINARY:-$(find_python3)} $PYTHON $SCRIPT_DIR/setup-tests.py From fc4e7e5ff39c5884efef05d54172471783416829 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 16:43:45 -0600 Subject: [PATCH 065/121] fix for enterprise auth --- .evergreen/scripts/setup-tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 233ac21bb6..2cd6b1b1b0 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -168,7 +168,7 @@ def handle_test_env() -> None: LOGGER.info("Writing keytab") keytab = base64.b64decode(os.environ["KEYTAB_BASE64"]) keytab_file = ROOT / ".evergreen/drivers.keytab" - with keytab_file.open("w", newline="\n") as fid: + with keytab_file.open("wb", newline="\n") as fid: fid.write(keytab) principal = os.environ["PRINCIPAL"] LOGGER.info("Running kinit") From b2daf642397c9bb8978f427946007ec1177d16dc Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 16:46:40 -0600 Subject: [PATCH 066/121] fix for enterprise auth --- .evergreen/scripts/setup-tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 2cd6b1b1b0..9a2aee9048 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -168,7 +168,7 @@ def handle_test_env() -> None: LOGGER.info("Writing keytab") keytab = base64.b64decode(os.environ["KEYTAB_BASE64"]) keytab_file = ROOT / ".evergreen/drivers.keytab" - with keytab_file.open("wb", newline="\n") as fid: + with keytab_file.open("wb") as fid: fid.write(keytab) principal = os.environ["PRINCIPAL"] LOGGER.info("Running kinit") From 56f5c8810ef5780cb084ec440c78132771872014 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 16:52:18 -0600 Subject: [PATCH 067/121] fix for enterprise auth --- .evergreen/scripts/setup-tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 9a2aee9048..604cb6bc6c 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -172,6 +172,7 @@ def handle_test_env() -> None: fid.write(keytab) principal = os.environ["PRINCIPAL"] LOGGER.info("Running kinit") + os.environ["KRB5_CONFIG"] = str(krb_conf) cmd = f"kinit -k -t {keytab_file} -p {principal}" run_command(cmd) From 8e59470bf97f7fce6b674f1b05dca3313809fb62 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 27 Jan 2025 20:08:39 -0600 Subject: [PATCH 068/121] fix handling of mongocrypt.dll --- .evergreen/scripts/setup-libmongocrypt.sh | 5 +++++ .evergreen/scripts/setup-tests.py | 2 -- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.evergreen/scripts/setup-libmongocrypt.sh b/.evergreen/scripts/setup-libmongocrypt.sh index 99ca6ebd3b..775db07cb0 100755 --- a/.evergreen/scripts/setup-libmongocrypt.sh +++ b/.evergreen/scripts/setup-libmongocrypt.sh @@ -45,3 +45,8 @@ mkdir libmongocrypt tar xzf libmongocrypt.tar.gz -C ./libmongocrypt ls -la libmongocrypt ls -la libmongocrypt/nocrypto + +if [ "Windows_NT" = "${OS:-''}" ]; then + # libmongocrypt's windows dll is not marked executable. + chmod +x libmongocrypt/nocrypto/bin/mongocrypt.dll +fi diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 604cb6bc6c..e4b088435f 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -230,8 +230,6 @@ def handle_test_env() -> None: PYMONGOCRYPT_LIB = BASE / "lib/libmongocrypt.dylib" else: PYMONGOCRYPT_LIB = BASE / "bin/mongocrypt.dll" - # libmongocrypt's windows dll is not marked executable. - PYMONGOCRYPT_LIB.chmod(PYMONGOCRYPT_LIB.stat().st_mode | stat.S_IEXEC) if not PYMONGOCRYPT_LIB.exists(): raise RuntimeError("Cannot find libmongocrypt shared object file") write_env("PYMONGOCRYPT_LIB", PYMONGOCRYPT_LIB.as_posix()) From b274210fe782551d7fa71f4f7a0b1b5351e4dd27 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 28 Jan 2025 14:48:47 -0600 Subject: [PATCH 069/121] debug --- .evergreen/run-tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 8557519253..1de7180300 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -64,7 +64,7 @@ TEST_ARGS=${TEST_ARGS} if [ "$#" -ne 0 ]; then TEST_ARGS="$*" fi -echo "Running tests with $TEST_ARGS..." +echo "Running tests with $TEST_ARGS and uv args $UV_ARGS..." if [ -z "${GREEN_FRAMEWORK:-}" ]; then # shellcheck disable=SC2048 uv run ${UV_ARGS} pytest $TEST_ARGS From b853bc92e8e5a7c8f95ad7c1200e57ca3c624d8c Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 8 Feb 2025 11:08:03 -0600 Subject: [PATCH 070/121] use ezra's branch --- .evergreen/scripts/prepare-resources.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/prepare-resources.sh b/.evergreen/scripts/prepare-resources.sh index da869e7055..c8d1b01ab5 100755 --- a/.evergreen/scripts/prepare-resources.sh +++ b/.evergreen/scripts/prepare-resources.sh @@ -6,7 +6,7 @@ pushd $HERE . env.sh rm -rf $DRIVERS_TOOLS -git clone https://github.com/mongodb-labs/drivers-evergreen-tools.git $DRIVERS_TOOLS +git clone --branch det-uv-install https://github.com/eramongodb/drivers-evergreen-tools.git $DRIVERS_TOOLS echo "{ \"releases\": { \"default\": \"$MONGODB_BINARIES\" }}" >$MONGO_ORCHESTRATION_HOME/orchestration.config popd From 84f7fd776ca88a5e476c155392aa526317cf93a0 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 9 Feb 2025 09:06:38 -0600 Subject: [PATCH 071/121] include test suites --- .evergreen/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 14ae6624cd..028caf4d9b 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -42,7 +42,7 @@ functions: # Make an evergreen expansion file with dynamic values - command: subprocess.exec params: - include_expansions_in_env: ["is_patch", "project", "version_id", "AUTH", "SSL", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "SETDEFAULTENCODING", "TEST_LOADBALANCER", "TEST_SEVERLESS", "SKIP_CSOT_TESTS", "MONGODB_STARTED", "DISABLE_TEST_COMMANDS", "GREEN_FRAMEWORK", "NO_EXT", "COVERAGE", "COMPRESSORS", "TEST_SUITES", "MONGODB_API_VERSION", "skip_crypt_shared", "VERSION", "TOPOLOGY", "STORAGE_ENGINE", "ORCHESTRATION_FILE", "REQUIRE_API_VERSION", "LOAD_BALANCER", "skip_web_identity_auth_test", "skip_ECS_auth_test"] + include_expansions_in_env: ["is_patch", "project", "version_id", "AUTH", "SSL", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "SETDEFAULTENCODING", "TEST_LOADBALANCER", "TEST_SEVERLESS", "SKIP_CSOT_TESTS", "MONGODB_STARTED", "DISABLE_TEST_COMMANDS", "GREEN_FRAMEWORK", "NO_EXT", "COVERAGE", "COMPRESSORS", "MONGODB_API_VERSION", "skip_crypt_shared", "VERSION", "TOPOLOGY", "STORAGE_ENGINE", "ORCHESTRATION_FILE", "REQUIRE_API_VERSION", "LOAD_BALANCER", "skip_web_identity_auth_test", "skip_ECS_auth_test"] binary: bash working_dir: "src" args: @@ -277,7 +277,7 @@ functions: type: test params: include_expansions_in_env: ["TEST_DATA_LAKE", "PYTHON_BINARY", "AUTH", "SSL", - "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN", + "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN", "TEST_SUITES", "TEST_INDEX_MANAGEMENT", "CRYPT_SHARED_LIB_PATH", "TEST_ENCRYPTION", "TEST_ENCRYPTION_PYOPENSSL", "TEST_CRYPT_SHARED", "TEST_PYOPENSSL", "TEST_LOADBALANCER", "TEST_SEVERLESS", "MONGODB_URI"] binary: bash From 7e7a2fb5c9ec2724151ea00ff5e13e6b354f5e47 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 9 Feb 2025 10:35:17 -0600 Subject: [PATCH 072/121] debug --- .evergreen/run-tests.sh | 1 + .evergreen/scripts/setup-dev-env.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 1de7180300..1aceabc28c 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -29,6 +29,7 @@ if [ -f "$ROOT_DIR/secrets-export.sh" ]; then source "$ROOT_DIR/secrets-export.sh" fi +echo "PATH2=$PATH" PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") # Ensure C extensions if applicable. diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 216c3f7159..34d5152f4a 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -36,6 +36,7 @@ if [ ! -d $BIN_DIR ]; then echo "export UV_PYTHON=$UV_PYTHON" >> $HERE/env.sh echo "Using python $UV_PYTHON" fi +echo "PATH=$PATH" uv sync --frozen uv run --frozen --with pip pip install -e . echo "Setting up python environment... done." From 9088617a56c92ec2f60192cb0168d2db3429699f Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 9 Feb 2025 11:00:33 -0600 Subject: [PATCH 073/121] fix windows --- .evergreen/scripts/configure-env.sh | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index cb018d09f0..c891cd0fdd 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -16,11 +16,20 @@ DRIVERS_TOOLS="$(dirname $PROJECT_DIRECTORY)/drivers-tools" CARGO_HOME=${CARGO_HOME:-${DRIVERS_TOOLS}/.cargo} UV_TOOL_DIR=$PROJECT_DIRECTORY/.local/uv/tools UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache +MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" +DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" +MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" + +# PATH needs to be a UNIX path, so set this before using cygpath. +PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PATH" # Python has cygwin path problems on Windows. Detect prospective mongo-orchestration home directory if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin DRIVERS_TOOLS=$(cygpath -m $DRIVERS_TOOLS) PROJECT_DIRECTORY=$(cygpath -m $PROJECT_DIRECTORY) + MONGODB_BINARIES=$(cygpath -m $MONGODB_BINARIES) + DRIVERS_TOOLS_BINARIES=$(cygpath -m DRIVERS_TOOLS_BINARIES) + MONGO_ORCHESTRATION_HOME=$(cygpath -m MONGO_ORCHESTRATION_HOME) CARGO_HOME=$(cygpath -m $CARGO_HOME) UV_TOOL_DIR=$(cygpath -m "$UV_TOOL_DIR") UV_CACHE_DIR=$(cygpath -m "$UV_CACHE_DIR") @@ -34,10 +43,6 @@ if [ -f "$SCRIPT_DIR/env.sh" ]; then exit 0 fi -export MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" -export MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" -export DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" - cat < "$SCRIPT_DIR"/env.sh export PROJECT_DIRECTORY="$PROJECT_DIRECTORY" export CURRENT_VERSION="$CURRENT_VERSION" @@ -67,7 +72,7 @@ export TMPDIR="$MONGO_ORCHESTRATION_HOME/db" export UV_TOOL_DIR="$UV_TOOL_DIR" export UV_CACHE_DIR="$UV_CACHE_DIR" export UV_TOOL_BIN_DIR="$DRIVERS_TOOLS_BINARIES" -export PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PATH" +export PATH="$PATH" # shellcheck disable=SC2154 export PROJECT="${project:-mongo-python-driver}" export PIP_QUIET=1 From a417fbc47f0c0c8d22fdf5d34091f3654637a3b2 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 9 Feb 2025 12:33:07 -0600 Subject: [PATCH 074/121] try another path --- .evergreen/scripts/configure-env.sh | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index c891cd0fdd..5281887f14 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -16,20 +16,14 @@ DRIVERS_TOOLS="$(dirname $PROJECT_DIRECTORY)/drivers-tools" CARGO_HOME=${CARGO_HOME:-${DRIVERS_TOOLS}/.cargo} UV_TOOL_DIR=$PROJECT_DIRECTORY/.local/uv/tools UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache -MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" -MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" - -# PATH needs to be a UNIX path, so set this before using cygpath. +MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PATH" # Python has cygwin path problems on Windows. Detect prospective mongo-orchestration home directory if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin DRIVERS_TOOLS=$(cygpath -m $DRIVERS_TOOLS) PROJECT_DIRECTORY=$(cygpath -m $PROJECT_DIRECTORY) - MONGODB_BINARIES=$(cygpath -m $MONGODB_BINARIES) - DRIVERS_TOOLS_BINARIES=$(cygpath -m DRIVERS_TOOLS_BINARIES) - MONGO_ORCHESTRATION_HOME=$(cygpath -m MONGO_ORCHESTRATION_HOME) CARGO_HOME=$(cygpath -m $CARGO_HOME) UV_TOOL_DIR=$(cygpath -m "$UV_TOOL_DIR") UV_CACHE_DIR=$(cygpath -m "$UV_CACHE_DIR") @@ -43,6 +37,8 @@ if [ -f "$SCRIPT_DIR/env.sh" ]; then exit 0 fi +MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" + cat < "$SCRIPT_DIR"/env.sh export PROJECT_DIRECTORY="$PROJECT_DIRECTORY" export CURRENT_VERSION="$CURRENT_VERSION" From feb4b45693c515e7ecf2a2729a9478d78564a3d7 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 9 Feb 2025 16:45:59 -0600 Subject: [PATCH 075/121] debug --- .evergreen/scripts/install-dependencies.sh | 1 + .evergreen/scripts/setup-dev-env.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 74ba1d6d91..c55ec7ca79 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -4,6 +4,7 @@ set -eu # On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. if [ "${CI:-}" == "true" ]; then + echo "REALLY? $DRIVERS_TOOLS_BINARIES" _BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} elif [ "Windows_NT" = "${OS:-}" ]; then _BIN_DIR=$HOME/cli_bin diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 34d5152f4a..c0d1d8591c 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -36,7 +36,7 @@ if [ ! -d $BIN_DIR ]; then echo "export UV_PYTHON=$UV_PYTHON" >> $HERE/env.sh echo "Using python $UV_PYTHON" fi -echo "PATH=$PATH" + uv sync --frozen uv run --frozen --with pip pip install -e . echo "Setting up python environment... done." From 48e1797f4e943d8f0a4f930f1f0784edc0b37a7e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 9 Feb 2025 20:53:51 -0600 Subject: [PATCH 076/121] clean up path handling --- .evergreen/scripts/configure-env.sh | 12 +++++++++++- .evergreen/scripts/install-dependencies.sh | 20 +++++++++----------- .evergreen/scripts/setup-dev-env.sh | 1 - 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 5281887f14..f594d24378 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -18,7 +18,15 @@ UV_TOOL_DIR=$PROJECT_DIRECTORY/.local/uv/tools UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" -PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PATH" + +# On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. +if [ "${CI:-}" == "true" ]; then + PYMONGO_BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} +elif [ "Windows_NT" = "${OS:-}" ]; then + PYMONGO_BIN_DIR=$HOME/cli_bin +else + PYMONGO_BIN_DIR="" +fi # Python has cygwin path problems on Windows. Detect prospective mongo-orchestration home directory if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin @@ -27,6 +35,7 @@ if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin CARGO_HOME=$(cygpath -m $CARGO_HOME) UV_TOOL_DIR=$(cygpath -m "$UV_TOOL_DIR") UV_CACHE_DIR=$(cygpath -m "$UV_CACHE_DIR") + PYMONGO_BIN_DIR=$(cygpath -m $PYMONGO_BIN_DIR) fi SCRIPT_DIR="$PROJECT_DIRECTORY/.evergreen/scripts" @@ -38,6 +47,7 @@ if [ -f "$SCRIPT_DIR/env.sh" ]; then fi MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" +PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PYMONGO_BIN_DIR:$PATH" cat < "$SCRIPT_DIR"/env.sh export PROJECT_DIRECTORY="$PROJECT_DIRECTORY" diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index c55ec7ca79..ef8e18dc69 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -2,17 +2,7 @@ set -eu -# On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. -if [ "${CI:-}" == "true" ]; then - echo "REALLY? $DRIVERS_TOOLS_BINARIES" - _BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} -elif [ "Windows_NT" = "${OS:-}" ]; then - _BIN_DIR=$HOME/cli_bin -else - _BIN_DIR=$HOME/.local/bin -fi -export PATH="$PATH:$_BIN_DIR" - +_BIN_DIR=${PYMONGO_BIN_DIR:-} # Helper function to pip install a dependency using a temporary python env. function _pip_install() { @@ -29,6 +19,10 @@ function _pip_install() { # Ensure just is installed. if ! command -v just 2>/dev/null; then + if [ -z "${_BIN_DIR}" ]; then + echo "Please install just!" + exit 1 + fi # On most systems we can install directly. _TARGET="" if [ "Windows_NT" = "${OS:-}" ]; then @@ -44,6 +38,10 @@ fi # Install uv. if ! command -v uv 2>/dev/null; then + if [ -z "${_BIN_DIR}" ]; then + echo "Please install uv!" + exit 1 + fi echo "Installing uv..." # On most systems we can install directly. curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="$_BIN_DIR" INSTALLER_NO_MODIFY_PATH=1 sh || { diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index c0d1d8591c..d09636a1fa 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -17,7 +17,6 @@ fi # Ensure dependencies are installed. . $HERE/install-dependencies.sh - # Set the location of the python bin dir. if [ "Windows_NT" = "${OS:-}" ]; then BIN_DIR=.venv/Scripts From 37b37c14cfd2272033c8f1db905e477a1d37558e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sun, 9 Feb 2025 21:05:57 -0600 Subject: [PATCH 077/121] include the bin dir --- .evergreen/scripts/configure-env.sh | 1 + .evergreen/sync-spawn-host.sh | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index f594d24378..6fe85390ac 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -75,6 +75,7 @@ export skip_ECS_auth_test="${skip_ECS_auth_test:-}" export CARGO_HOME="$CARGO_HOME" export TMPDIR="$MONGO_ORCHESTRATION_HOME/db" +export PYMONGO_BIN_DIR="$PYMONGO_BIN_DIR" export UV_TOOL_DIR="$UV_TOOL_DIR" export UV_CACHE_DIR="$UV_CACHE_DIR" export UV_TOOL_BIN_DIR="$DRIVERS_TOOLS_BINARIES" diff --git a/.evergreen/sync-spawn-host.sh b/.evergreen/sync-spawn-host.sh index de3374a008..3f6540ad4d 100755 --- a/.evergreen/sync-spawn-host.sh +++ b/.evergreen/sync-spawn-host.sh @@ -7,9 +7,12 @@ fi target=$1 user=${target%@*} +remote_dir=/home/$user/mongo-python-driver +echo "Copying files to $target..." +rsync -az -e ssh --exclude '.git' --filter=':- .gitignore' -r . $target:$remote_dir +echo "Copying files to $target... done." echo "Syncing files to $target..." -rsync -haz -e ssh --exclude '.git' --filter=':- .gitignore' -r . $target:/home/$user/mongo-python-driver # shellcheck disable=SC2034 fswatch -o . | while read f; do rsync -hazv -e ssh --exclude '.git' --filter=':- .gitignore' -r . $target:/home/$user/mongo-python-driver; done echo "Syncing files to $target... done." From fd323b3f02b2f5fe3affc2a03924a81d40306111 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 08:08:49 -0600 Subject: [PATCH 078/121] back to upstream --- .evergreen/scripts/prepare-resources.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/prepare-resources.sh b/.evergreen/scripts/prepare-resources.sh index c8d1b01ab5..da869e7055 100755 --- a/.evergreen/scripts/prepare-resources.sh +++ b/.evergreen/scripts/prepare-resources.sh @@ -6,7 +6,7 @@ pushd $HERE . env.sh rm -rf $DRIVERS_TOOLS -git clone --branch det-uv-install https://github.com/eramongodb/drivers-evergreen-tools.git $DRIVERS_TOOLS +git clone https://github.com/mongodb-labs/drivers-evergreen-tools.git $DRIVERS_TOOLS echo "{ \"releases\": { \"default\": \"$MONGODB_BINARIES\" }}" >$MONGO_ORCHESTRATION_HOME/orchestration.config popd From 598c97e0dd53d51274749d1cf72d956ae5954d1e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 08:49:43 -0600 Subject: [PATCH 079/121] use bash --- .evergreen/scripts/setup-dev-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index d09636a1fa..d852b9093e 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -15,7 +15,7 @@ if [ -f $HERE/test-env.sh ]; then fi # Ensure dependencies are installed. -. $HERE/install-dependencies.sh +bash $HERE/install-dependencies.sh # Set the location of the python bin dir. if [ "Windows_NT" = "${OS:-}" ]; then From 02f807a1504010fc26c4150d90b842c465a1c4d3 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:02:35 -0600 Subject: [PATCH 080/121] use bash --- .evergreen/just.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/just.sh b/.evergreen/just.sh index bebbca8282..a4bba757e3 100755 --- a/.evergreen/just.sh +++ b/.evergreen/just.sh @@ -1,5 +1,5 @@ #!/bin/bash set -eu -. .evergreen/scripts/setup-dev-env.sh +bash .evergreen/scripts/setup-dev-env.sh just "$@" From e960fa9e66d62970cdb001bc9593ba44746d0f1e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:12:47 -0600 Subject: [PATCH 081/121] clean up path handling --- .evergreen/scripts/configure-env.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 6fe85390ac..42fb2538b2 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -16,8 +16,6 @@ DRIVERS_TOOLS="$(dirname $PROJECT_DIRECTORY)/drivers-tools" CARGO_HOME=${CARGO_HOME:-${DRIVERS_TOOLS}/.cargo} UV_TOOL_DIR=$PROJECT_DIRECTORY/.local/uv/tools UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache -DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" -MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" # On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. if [ "${CI:-}" == "true" ]; then @@ -47,6 +45,8 @@ if [ -f "$SCRIPT_DIR/env.sh" ]; then fi MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" +DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" +MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PYMONGO_BIN_DIR:$PATH" cat < "$SCRIPT_DIR"/env.sh From d46bc75170ec1ff0efbfdbc47b8e19940121cc2c Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:23:20 -0600 Subject: [PATCH 082/121] debug --- .evergreen/scripts/configure-env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 42fb2538b2..9873aede81 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -25,6 +25,7 @@ elif [ "Windows_NT" = "${OS:-}" ]; then else PYMONGO_BIN_DIR="" fi +echo "HI: $PYMONGO_BIN_DIR, $CI" # Python has cygwin path problems on Windows. Detect prospective mongo-orchestration home directory if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin From 3897e642f18c7831b7036dc34d4a0f94cec05ab4 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:23:32 -0600 Subject: [PATCH 083/121] debug --- .evergreen/scripts/configure-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 9873aede81..ef913ec105 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -26,7 +26,7 @@ else PYMONGO_BIN_DIR="" fi echo "HI: $PYMONGO_BIN_DIR, $CI" - +exit 1 # Python has cygwin path problems on Windows. Detect prospective mongo-orchestration home directory if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin DRIVERS_TOOLS=$(cygpath -m $DRIVERS_TOOLS) From 42647a3313f4805672f8ab5390ad8caedb1caf05 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:31:39 -0600 Subject: [PATCH 084/121] more debug --- .evergreen/scripts/configure-env.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index ef913ec105..84576112f1 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -19,10 +19,13 @@ UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache # On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. if [ "${CI:-}" == "true" ]; then + echo "1" PYMONGO_BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} elif [ "Windows_NT" = "${OS:-}" ]; then + echo "2" PYMONGO_BIN_DIR=$HOME/cli_bin else + echo "3" PYMONGO_BIN_DIR="" fi echo "HI: $PYMONGO_BIN_DIR, $CI" From 348851ec8c1feff295d06134a779cde2321fa039 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:35:23 -0600 Subject: [PATCH 085/121] more debug --- .evergreen/scripts/configure-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 84576112f1..cdc28ff3d4 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -19,7 +19,7 @@ UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache # On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. if [ "${CI:-}" == "true" ]; then - echo "1" + echo "1, ${CI:-}" PYMONGO_BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} elif [ "Windows_NT" = "${OS:-}" ]; then echo "2" From c6ef95db2f54a3e1d0e3a833ed8c8dcd48d04e8e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:37:25 -0600 Subject: [PATCH 086/121] more debug --- .evergreen/scripts/configure-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index cdc28ff3d4..75839a4f97 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -19,7 +19,7 @@ UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache # On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. if [ "${CI:-}" == "true" ]; then - echo "1, ${CI:-}" + echo "1, 2${CI:-}2" PYMONGO_BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} elif [ "Windows_NT" = "${OS:-}" ]; then echo "2" From 03a7e918da2d83fd5ae3e9bdd1b28624cd4e9f6c Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:41:36 -0600 Subject: [PATCH 087/121] more debug --- .evergreen/scripts/configure-env.sh | 17 ++--------------- .evergreen/scripts/install-dependencies.sh | 2 +- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 75839a4f97..24367c9cb2 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -17,19 +17,7 @@ CARGO_HOME=${CARGO_HOME:-${DRIVERS_TOOLS}/.cargo} UV_TOOL_DIR=$PROJECT_DIRECTORY/.local/uv/tools UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache -# On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. -if [ "${CI:-}" == "true" ]; then - echo "1, 2${CI:-}2" - PYMONGO_BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} -elif [ "Windows_NT" = "${OS:-}" ]; then - echo "2" - PYMONGO_BIN_DIR=$HOME/cli_bin -else - echo "3" - PYMONGO_BIN_DIR="" -fi -echo "HI: $PYMONGO_BIN_DIR, $CI" -exit 1 + # Python has cygwin path problems on Windows. Detect prospective mongo-orchestration home directory if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin DRIVERS_TOOLS=$(cygpath -m $DRIVERS_TOOLS) @@ -51,7 +39,6 @@ fi MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" -PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PYMONGO_BIN_DIR:$PATH" cat < "$SCRIPT_DIR"/env.sh export PROJECT_DIRECTORY="$PROJECT_DIRECTORY" @@ -83,7 +70,7 @@ export PYMONGO_BIN_DIR="$PYMONGO_BIN_DIR" export UV_TOOL_DIR="$UV_TOOL_DIR" export UV_CACHE_DIR="$UV_CACHE_DIR" export UV_TOOL_BIN_DIR="$DRIVERS_TOOLS_BINARIES" -export PATH="$PATH" +export PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PATH" # shellcheck disable=SC2154 export PROJECT="${project:-mongo-python-driver}" export PIP_QUIET=1 diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index ef8e18dc69..f3e600081f 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -2,7 +2,7 @@ set -eu -_BIN_DIR=${PYMONGO_BIN_DIR:-} +_BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} # Helper function to pip install a dependency using a temporary python env. function _pip_install() { From ecdb3a26a10d3007d6309fb52d25308944b38da5 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:44:31 -0600 Subject: [PATCH 088/121] clean up bin dir handling --- .evergreen/scripts/configure-env.sh | 16 ++++++++++++++-- .evergreen/scripts/install-dependencies.sh | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 24367c9cb2..4e01178721 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -17,7 +17,8 @@ CARGO_HOME=${CARGO_HOME:-${DRIVERS_TOOLS}/.cargo} UV_TOOL_DIR=$PROJECT_DIRECTORY/.local/uv/tools UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache - +echo "HI: $PYMONGO_BIN_DIR, $CI" +exit 1 # Python has cygwin path problems on Windows. Detect prospective mongo-orchestration home directory if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin DRIVERS_TOOLS=$(cygpath -m $DRIVERS_TOOLS) @@ -40,6 +41,17 @@ MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" +# On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. +if [ "${CI:-}" == "true" ]; then + PYMONGO_BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} +# We want to use a path that's already on PATH on spawn hosts. +else + PYMONGO_BIN_DIR=$HOME/cli_bin +fi + + +PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PYMONGO_BIN_DIR:$PATH" + cat < "$SCRIPT_DIR"/env.sh export PROJECT_DIRECTORY="$PROJECT_DIRECTORY" export CURRENT_VERSION="$CURRENT_VERSION" @@ -70,7 +82,7 @@ export PYMONGO_BIN_DIR="$PYMONGO_BIN_DIR" export UV_TOOL_DIR="$UV_TOOL_DIR" export UV_CACHE_DIR="$UV_CACHE_DIR" export UV_TOOL_BIN_DIR="$DRIVERS_TOOLS_BINARIES" -export PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PATH" +export PATH="$PATH" # shellcheck disable=SC2154 export PROJECT="${project:-mongo-python-driver}" export PIP_QUIET=1 diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index f3e600081f..ef8e18dc69 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -2,7 +2,7 @@ set -eu -_BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} +_BIN_DIR=${PYMONGO_BIN_DIR:-} # Helper function to pip install a dependency using a temporary python env. function _pip_install() { From 34021332aa4305f5d688832358fa2681279bfab7 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:45:49 -0600 Subject: [PATCH 089/121] clean up bin dir handling --- .evergreen/scripts/configure-env.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 4e01178721..1369d1fd7e 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -17,8 +17,6 @@ CARGO_HOME=${CARGO_HOME:-${DRIVERS_TOOLS}/.cargo} UV_TOOL_DIR=$PROJECT_DIRECTORY/.local/uv/tools UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache -echo "HI: $PYMONGO_BIN_DIR, $CI" -exit 1 # Python has cygwin path problems on Windows. Detect prospective mongo-orchestration home directory if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin DRIVERS_TOOLS=$(cygpath -m $DRIVERS_TOOLS) @@ -26,7 +24,6 @@ if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin CARGO_HOME=$(cygpath -m $CARGO_HOME) UV_TOOL_DIR=$(cygpath -m "$UV_TOOL_DIR") UV_CACHE_DIR=$(cygpath -m "$UV_CACHE_DIR") - PYMONGO_BIN_DIR=$(cygpath -m $PYMONGO_BIN_DIR) fi SCRIPT_DIR="$PROJECT_DIRECTORY/.evergreen/scripts" @@ -49,7 +46,6 @@ else PYMONGO_BIN_DIR=$HOME/cli_bin fi - PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PYMONGO_BIN_DIR:$PATH" cat < "$SCRIPT_DIR"/env.sh From a043adec919d59309745401aefc94515325926d7 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 09:53:30 -0600 Subject: [PATCH 090/121] debug --- .evergreen/scripts/configure-env.sh | 4 +--- .evergreen/scripts/setup-dev-env.sh | 5 +++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 1369d1fd7e..c6f26a48d8 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -46,8 +46,6 @@ else PYMONGO_BIN_DIR=$HOME/cli_bin fi -PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PYMONGO_BIN_DIR:$PATH" - cat < "$SCRIPT_DIR"/env.sh export PROJECT_DIRECTORY="$PROJECT_DIRECTORY" export CURRENT_VERSION="$CURRENT_VERSION" @@ -78,7 +76,7 @@ export PYMONGO_BIN_DIR="$PYMONGO_BIN_DIR" export UV_TOOL_DIR="$UV_TOOL_DIR" export UV_CACHE_DIR="$UV_CACHE_DIR" export UV_TOOL_BIN_DIR="$DRIVERS_TOOLS_BINARIES" -export PATH="$PATH" +export PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PYMONGO_BIN_DIR:$PATH" # shellcheck disable=SC2154 export PROJECT="${project:-mongo-python-driver}" export PIP_QUIET=1 diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index d852b9093e..408c140e0f 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -5,6 +5,8 @@ set -eu HERE=$(dirname ${BASH_SOURCE:-$0}) pushd "$(dirname "$(dirname $HERE)")" > /dev/null +echo "PATH=$PATH" + # Source the env files to pick up common variables. if [ -f $HERE/env.sh ]; then source $HERE/env.sh @@ -14,6 +16,9 @@ if [ -f $HERE/test-env.sh ]; then source $HERE/test-env.sh fi +echo "PATH=$PATH" +exit 1 + # Ensure dependencies are installed. bash $HERE/install-dependencies.sh From 9e69957d6c9b3cc17ff88bb1a3a12161ce880792 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 10:30:16 -0600 Subject: [PATCH 091/121] fix handling of paths --- .evergreen/run-tests.sh | 6 +++--- .evergreen/scripts/setup-dev-env.sh | 9 ++------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 1aceabc28c..130e12949e 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -11,7 +11,7 @@ export UV_FROZEN=1 # Do not modify lock files # Try to source the env file. if [ -f $SCRIPT_DIR/scripts/env.sh ]; then echo "Sourcing env inputs" - source $SCRIPT_DIR/scripts/env.sh + . $SCRIPT_DIR/scripts/env.sh else echo "Not sourcing env inputs" fi @@ -19,14 +19,14 @@ fi # Ensure there are test inputs. if [ -f $SCRIPT_DIR/scripts/test-env.sh ]; then echo "Sourcing test inputs" - source $SCRIPT_DIR/scripts/test-env.sh + . $SCRIPT_DIR/scripts/test-env.sh else echo "Missing test inputs, please run 'just setup-test'" fi # Source the local secrets export file if available. if [ -f "$ROOT_DIR/secrets-export.sh" ]; then - source "$ROOT_DIR/secrets-export.sh" + . "$ROOT_DIR/secrets-export.sh" fi echo "PATH2=$PATH" diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 408c140e0f..a0c04e36e7 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -5,20 +5,15 @@ set -eu HERE=$(dirname ${BASH_SOURCE:-$0}) pushd "$(dirname "$(dirname $HERE)")" > /dev/null -echo "PATH=$PATH" - # Source the env files to pick up common variables. if [ -f $HERE/env.sh ]; then - source $HERE/env.sh + . $HERE/env.sh fi # PYTHON_BINARY may be defined in test-env.sh. if [ -f $HERE/test-env.sh ]; then - source $HERE/test-env.sh + . $HERE/test-env.sh fi -echo "PATH=$PATH" -exit 1 - # Ensure dependencies are installed. bash $HERE/install-dependencies.sh From a3c75b5ade229bed99513141530a9166ebd045c9 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 10:51:47 -0600 Subject: [PATCH 092/121] fix handling of paths --- .evergreen/run-tests.sh | 1 - .evergreen/scripts/configure-env.sh | 7 +++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.evergreen/run-tests.sh b/.evergreen/run-tests.sh index 130e12949e..12935b25a0 100755 --- a/.evergreen/run-tests.sh +++ b/.evergreen/run-tests.sh @@ -29,7 +29,6 @@ if [ -f "$ROOT_DIR/secrets-export.sh" ]; then . "$ROOT_DIR/secrets-export.sh" fi -echo "PATH2=$PATH" PYTHON_IMPL=$(uv run python -c "import platform; print(platform.python_implementation())") # Ensure C extensions if applicable. diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index c6f26a48d8..97babdd298 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -34,9 +34,9 @@ if [ -f "$SCRIPT_DIR/env.sh" ]; then exit 0 fi -MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" -DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" -MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" +export MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" +export MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" +export DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" # On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. if [ "${CI:-}" == "true" ]; then @@ -72,7 +72,6 @@ export skip_ECS_auth_test="${skip_ECS_auth_test:-}" export CARGO_HOME="$CARGO_HOME" export TMPDIR="$MONGO_ORCHESTRATION_HOME/db" -export PYMONGO_BIN_DIR="$PYMONGO_BIN_DIR" export UV_TOOL_DIR="$UV_TOOL_DIR" export UV_CACHE_DIR="$UV_CACHE_DIR" export UV_TOOL_BIN_DIR="$DRIVERS_TOOLS_BINARIES" From c4311b70878b43f70c0edc95454e554dee769587 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 12:15:56 -0600 Subject: [PATCH 093/121] fix handling of paths --- .evergreen/scripts/configure-env.sh | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index 97babdd298..ae3b023afd 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -16,6 +16,15 @@ DRIVERS_TOOLS="$(dirname $PROJECT_DIRECTORY)/drivers-tools" CARGO_HOME=${CARGO_HOME:-${DRIVERS_TOOLS}/.cargo} UV_TOOL_DIR=$PROJECT_DIRECTORY/.local/uv/tools UV_CACHE_DIR=$PROJECT_DIRECTORY/.local/uv/cache +DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" + +# On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. +if [ "${CI:-}" == "true" ]; then + PYMONGO_BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} +# We want to use a path that's already on PATH on spawn hosts. +else + PYMONGO_BIN_DIR=$HOME/cli_bin +fi # Python has cygwin path problems on Windows. Detect prospective mongo-orchestration home directory if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin @@ -24,6 +33,8 @@ if [ "Windows_NT" = "${OS:-}" ]; then # Magic variable in cygwin CARGO_HOME=$(cygpath -m $CARGO_HOME) UV_TOOL_DIR=$(cygpath -m "$UV_TOOL_DIR") UV_CACHE_DIR=$(cygpath -m "$UV_CACHE_DIR") + DRIVERS_TOOLS_BINARIES=$(cygpath -m "$DRIVERS_TOOLS_BINARIES") + PYMONGO_BIN_DIR=$(cygpath -m "$PYMONGO_BIN_DIR") fi SCRIPT_DIR="$PROJECT_DIRECTORY/.evergreen/scripts" @@ -36,15 +47,6 @@ fi export MONGO_ORCHESTRATION_HOME="$DRIVERS_TOOLS/.evergreen/orchestration" export MONGODB_BINARIES="$DRIVERS_TOOLS/mongodb/bin" -export DRIVERS_TOOLS_BINARIES="$DRIVERS_TOOLS/.bin" - -# On Evergreen jobs, "CI" will be set, and we don't want to write to $HOME. -if [ "${CI:-}" == "true" ]; then - PYMONGO_BIN_DIR=${DRIVERS_TOOLS_BINARIES:-} -# We want to use a path that's already on PATH on spawn hosts. -else - PYMONGO_BIN_DIR=$HOME/cli_bin -fi cat < "$SCRIPT_DIR"/env.sh export PROJECT_DIRECTORY="$PROJECT_DIRECTORY" From 9446378543418c28063ee3c98eb0d8cf34762542 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 13:02:54 -0600 Subject: [PATCH 094/121] fix handling of paths --- .evergreen/scripts/install-dependencies.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index ef8e18dc69..bd90457cd2 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -2,6 +2,14 @@ set -eu +HERE=$(dirname ${BASH_SOURCE:-$0}) +pushd "$(dirname "$(dirname $HERE)")" > /dev/null + +# Source the env files to pick up common variables. +if [ -f $HERE/env.sh ]; then + . $HERE/env.sh +fi + _BIN_DIR=${PYMONGO_BIN_DIR:-} # Helper function to pip install a dependency using a temporary python env. From 5521c81e588a036d1de6fcd54aecfd9b9e4efa25 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 13:06:05 -0600 Subject: [PATCH 095/121] debug --- .evergreen/scripts/install-dependencies.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index bd90457cd2..b26ea87ec1 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -eu +set -eux HERE=$(dirname ${BASH_SOURCE:-$0}) pushd "$(dirname "$(dirname $HERE)")" > /dev/null From ba2450950e47d6a89f3c3d1a91b58af1e951fefb Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 13:08:40 -0600 Subject: [PATCH 096/121] debug --- .evergreen/scripts/configure-env.sh | 1 + .evergreen/scripts/install-dependencies.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/configure-env.sh b/.evergreen/scripts/configure-env.sh index ae3b023afd..a008499ea2 100755 --- a/.evergreen/scripts/configure-env.sh +++ b/.evergreen/scripts/configure-env.sh @@ -77,6 +77,7 @@ export TMPDIR="$MONGO_ORCHESTRATION_HOME/db" export UV_TOOL_DIR="$UV_TOOL_DIR" export UV_CACHE_DIR="$UV_CACHE_DIR" export UV_TOOL_BIN_DIR="$DRIVERS_TOOLS_BINARIES" +export PYMONGO_BIN_DIR="$PYMONGO_BIN_DIR" export PATH="$MONGODB_BINARIES:$DRIVERS_TOOLS_BINARIES:$PYMONGO_BIN_DIR:$PATH" # shellcheck disable=SC2154 export PROJECT="${project:-mongo-python-driver}" diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index b26ea87ec1..bd90457cd2 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -1,6 +1,6 @@ #!/bin/bash -set -eux +set -eu HERE=$(dirname ${BASH_SOURCE:-$0}) pushd "$(dirname "$(dirname $HERE)")" > /dev/null From 6bad29dabd7d1ba50255672d13523de0bd9cf25f Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 13:20:11 -0600 Subject: [PATCH 097/121] debug --- .evergreen/scripts/install-dependencies.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index bd90457cd2..3210e7b574 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -10,6 +10,8 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi +echo "HELLO?" +cat $HERE/env.sh _BIN_DIR=${PYMONGO_BIN_DIR:-} # Helper function to pip install a dependency using a temporary python env. From 8d6f297847709c252ec606646c69303782ac5d71 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 13:40:41 -0600 Subject: [PATCH 098/121] use source --- .evergreen/just.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/just.sh b/.evergreen/just.sh index a4bba757e3..bebbca8282 100755 --- a/.evergreen/just.sh +++ b/.evergreen/just.sh @@ -1,5 +1,5 @@ #!/bin/bash set -eu -bash .evergreen/scripts/setup-dev-env.sh +. .evergreen/scripts/setup-dev-env.sh just "$@" From 79ce47d7d41b7f2eab8bfd2aea3dcb473b51a88d Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Mon, 10 Feb 2025 19:12:46 -0600 Subject: [PATCH 099/121] fix path on windows --- .evergreen/scripts/setup-tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index e4b088435f..320c4e419a 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -242,7 +242,7 @@ def handle_test_env() -> None: run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/start-servers.sh") if is_set("TEST_CRYPT_SHARED"): - CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent + CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent.as_posix() LOGGER.info("Using crypt_shared_dir %s", CRYPT_SHARED_DIR) DYLD_FALLBACK_LIBRARY_PATH = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") LD_LIBRARY_PATH = os.environ.get("LD_LIBRARY_PATH", "") From 9825b08cf590f9ec352fbfe743ffa15adff6927f Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 06:25:53 -0600 Subject: [PATCH 100/121] fix path on windows --- .evergreen/scripts/setup-tests.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 320c4e419a..609ca8d44c 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -247,9 +247,12 @@ def handle_test_env() -> None: DYLD_FALLBACK_LIBRARY_PATH = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") LD_LIBRARY_PATH = os.environ.get("LD_LIBRARY_PATH", "") PATH = os.environ["PATH"] - write_env("DYLD_FALLBACK_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:{DYLD_FALLBACK_LIBRARY_PATH}") - write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:{LD_LIBRARY_PATH}") - write_env("PATH", f"{CRYPT_SHARED_DIR}:{PATH}") + write_env( + "DYLD_FALLBACK_LIBRARY_PATH", + f"{CRYPT_SHARED_DIR}{os.pathsep}{DYLD_FALLBACK_LIBRARY_PATH}", + ) + write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}{os.pathsep}{LD_LIBRARY_PATH}") + write_env("PATH", f"{CRYPT_SHARED_DIR}{os.pathsep}{PATH}") if is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): if "SUCCESS" not in os.environ: From 4656eddeca0acec0bbe757eb41b880d1d25eb560 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 06:39:46 -0600 Subject: [PATCH 101/121] fix path on windows --- .evergreen/scripts/setup-tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 609ca8d44c..02fc812cd0 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -242,7 +242,7 @@ def handle_test_env() -> None: run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/start-servers.sh") if is_set("TEST_CRYPT_SHARED"): - CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent.as_posix() + CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent LOGGER.info("Using crypt_shared_dir %s", CRYPT_SHARED_DIR) DYLD_FALLBACK_LIBRARY_PATH = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") LD_LIBRARY_PATH = os.environ.get("LD_LIBRARY_PATH", "") From 8f2bacc6618d3b1ba1d0db4d44ecaf991244b948 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 06:56:12 -0600 Subject: [PATCH 102/121] fix path on windows --- .evergreen/scripts/setup-tests.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 02fc812cd0..b35a4cd539 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -242,17 +242,16 @@ def handle_test_env() -> None: run_command(f"bash {DRIVERS_TOOLS}/.evergreen/csfle/start-servers.sh") if is_set("TEST_CRYPT_SHARED"): - CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent + CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent.as_posix() LOGGER.info("Using crypt_shared_dir %s", CRYPT_SHARED_DIR) DYLD_FALLBACK_LIBRARY_PATH = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") LD_LIBRARY_PATH = os.environ.get("LD_LIBRARY_PATH", "") - PATH = os.environ["PATH"] write_env( "DYLD_FALLBACK_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}{os.pathsep}{DYLD_FALLBACK_LIBRARY_PATH}", ) write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}{os.pathsep}{LD_LIBRARY_PATH}") - write_env("PATH", f"{CRYPT_SHARED_DIR}{os.pathsep}{PATH}") + write_env("PATH", f"{CRYPT_SHARED_DIR}:$PATH") if is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): if "SUCCESS" not in os.environ: From 20c0bcede08396c8f5717eddbc4cfd6c6db352dd Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 06:57:20 -0600 Subject: [PATCH 103/121] fix path on windows --- .evergreen/scripts/setup-tests.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index b35a4cd539..ea59535c5d 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -244,13 +244,11 @@ def handle_test_env() -> None: if is_set("TEST_CRYPT_SHARED"): CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent.as_posix() LOGGER.info("Using crypt_shared_dir %s", CRYPT_SHARED_DIR) - DYLD_FALLBACK_LIBRARY_PATH = os.environ.get("DYLD_FALLBACK_LIBRARY_PATH", "") - LD_LIBRARY_PATH = os.environ.get("LD_LIBRARY_PATH", "") write_env( "DYLD_FALLBACK_LIBRARY_PATH", - f"{CRYPT_SHARED_DIR}{os.pathsep}{DYLD_FALLBACK_LIBRARY_PATH}", + f"{CRYPT_SHARED_DIR}:$DYLD_FALLBACK_LIBRARY_PATH", ) - write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}{os.pathsep}{LD_LIBRARY_PATH}") + write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:$LD_LIBRARY_PATH") write_env("PATH", f"{CRYPT_SHARED_DIR}:$PATH") if is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): From 75301e9dbbe9033b1c2c613cac756f975065ed4e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 10:12:18 -0600 Subject: [PATCH 104/121] fix paths --- .evergreen/scripts/setup-tests.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index ea59535c5d..87838406d1 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -244,12 +244,14 @@ def handle_test_env() -> None: if is_set("TEST_CRYPT_SHARED"): CRYPT_SHARED_DIR = Path(os.environ["CRYPT_SHARED_LIB_PATH"]).parent.as_posix() LOGGER.info("Using crypt_shared_dir %s", CRYPT_SHARED_DIR) - write_env( - "DYLD_FALLBACK_LIBRARY_PATH", - f"{CRYPT_SHARED_DIR}:$DYLD_FALLBACK_LIBRARY_PATH", - ) - write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:$LD_LIBRARY_PATH") - write_env("PATH", f"{CRYPT_SHARED_DIR}:$PATH") + if os.name == "nt": + write_env("PATH", f"{CRYPT_SHARED_DIR}:$PATH") + else: + write_env( + "DYLD_FALLBACK_LIBRARY_PATH", + f"{CRYPT_SHARED_DIR}:${{DYLD_FALLBACK_LIBRARY_PATH:-}}", + ) + write_env("LD_LIBRARY_PATH", f"{CRYPT_SHARED_DIR}:${{LD_LIBRARY_PATH:-}}") if is_set("TEST_FLE_AZURE_AUTO") or is_set("TEST_FLE_GCP_AUTO"): if "SUCCESS" not in os.environ: From 5ab1348914bf99477924a482ea01cfdecf8ddf64 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 10:28:59 -0600 Subject: [PATCH 105/121] cleanup --- .evergreen/scripts/install-dependencies.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 3210e7b574..bd90457cd2 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -10,8 +10,6 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi -echo "HELLO?" -cat $HERE/env.sh _BIN_DIR=${PYMONGO_BIN_DIR:-} # Helper function to pip install a dependency using a temporary python env. From 072d3b26b4513c13a89ec1ba24c84ca8ef24297b Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 10:35:35 -0600 Subject: [PATCH 106/121] cleanup workflow --- .github/workflows/test-python.yml | 98 +++++++++++-------------------- 1 file changed, 34 insertions(+), 64 deletions(-) diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index 3760e308a5..5f95aa4a5e 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -22,13 +22,13 @@ jobs: - uses: actions/checkout@v4 with: persist-credentials: false - - uses: actions/setup-python@v5 - with: - python-version: "3.9" - cache: 'pip' - cache-dependency-path: 'pyproject.toml' - name: Install just uses: extractions/setup-just@v2 + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + enable-cache: true + python-version: "3.9" - name: Install Python dependencies run: | just install @@ -61,42 +61,21 @@ jobs: - uses: actions/checkout@v4 with: persist-credentials: false - - if: ${{ matrix.python-version == '3.13t' }} - name: Setup free-threaded Python - uses: deadsnakes/action@v3.2.0 - with: - python-version: 3.13 - nogil: true - - if: ${{ matrix.python-version != '3.13t' }} - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python-version }} - cache: 'pip' - cache-dependency-path: 'pyproject.toml' - allow-prereleases: true - name: Install just uses: extractions/setup-just@v2 + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + enable-cache: true + python-version: ${{ matrix.python-version }} - name: Install dependencies - run: | - if [[ "${{ matrix.python-version }}" == "3.13t" ]]; then - # Just can't be installed on 3.13t, use pytest directly. - pip install . - pip install -r requirements/test.txt - else - just install - fi + run: just install - name: Start MongoDB uses: supercharge/mongodb-github-action@1.12.0 with: mongodb-version: 6.0 - name: Run tests - run: | - if [[ "${{ matrix.python-version }}" == "3.13t" ]]; then - pytest -v --durations=5 --maxfail=10 - else - just test - fi + run: just test doctest: runs-on: ubuntu-latest @@ -105,24 +84,21 @@ jobs: - uses: actions/checkout@v4 with: persist-credentials: false - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: "3.9" - cache: 'pip' - cache-dependency-path: 'pyproject.toml' - name: Install just uses: extractions/setup-just@v2 + - name: Install uv + uses: astral-sh/setup-uv@v5 + with: + enable-cache: true + python-version: "3.9" - name: Start MongoDB uses: supercharge/mongodb-github-action@1.12.0 with: mongodb-version: '8.0.0-rc4' - name: Install dependencies - run: | - just install + run: just install - name: Run tests - run: | - just docs-test + run: just docs-test docs: name: Docs Checks @@ -131,20 +107,17 @@ jobs: - uses: actions/checkout@v4 with: persist-credentials: false - - uses: actions/setup-python@v5 + - name: Install uv + uses: astral-sh/setup-uv@v5 with: - cache: 'pip' - cache-dependency-path: 'pyproject.toml' - # Build docs on lowest supported Python for furo - python-version: '3.9' + enable-cache: true + python-version: "3.9" - name: Install just uses: extractions/setup-just@v2 - name: Install dependencies - run: | - just install + run: just install - name: Build docs - run: | - just docs + run: just docs linkcheck: name: Link Check @@ -153,20 +126,17 @@ jobs: - uses: actions/checkout@v4 with: persist-credentials: false - - uses: actions/setup-python@v5 + - name: Install uv + uses: astral-sh/setup-uv@v5 with: - cache: 'pip' - cache-dependency-path: 'pyproject.toml' - # Build docs on lowest supported Python for furo - python-version: '3.9' + enable-cache: true + python-version: "3.9" - name: Install just uses: extractions/setup-just@v2 - name: Install dependencies - run: | - just install + run: just install - name: Build docs - run: | - just docs-linkcheck + run: just docs-linkcheck typing: name: Typing Tests @@ -178,11 +148,11 @@ jobs: - uses: actions/checkout@v4 with: persist-credentials: false - - uses: actions/setup-python@v5 + - name: Install uv + uses: astral-sh/setup-uv@v5 with: + enable-cache: true python-version: "${{matrix.python}}" - cache: 'pip' - cache-dependency-path: 'pyproject.toml' - name: Install just uses: extractions/setup-just@v2 - name: Install dependencies From cc032d5fda52775fb7aa3f00c6b8768f1f79d63a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 12:18:05 -0600 Subject: [PATCH 107/121] install deps unconditionally --- .evergreen/scripts/install-dependencies.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index bd90457cd2..07c10cdeae 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -27,10 +27,6 @@ function _pip_install() { # Ensure just is installed. if ! command -v just 2>/dev/null; then - if [ -z "${_BIN_DIR}" ]; then - echo "Please install just!" - exit 1 - fi # On most systems we can install directly. _TARGET="" if [ "Windows_NT" = "${OS:-}" ]; then @@ -46,10 +42,6 @@ fi # Install uv. if ! command -v uv 2>/dev/null; then - if [ -z "${_BIN_DIR}" ]; then - echo "Please install uv!" - exit 1 - fi echo "Installing uv..." # On most systems we can install directly. curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="$_BIN_DIR" INSTALLER_NO_MODIFY_PATH=1 sh || { From 721c9ff7f8b5b562b64aeb9f322f583278cadada Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 12:25:11 -0600 Subject: [PATCH 108/121] fix vm install --- .evergreen/scripts/install-dependencies.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 07c10cdeae..3d88699a60 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -10,7 +10,7 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi -_BIN_DIR=${PYMONGO_BIN_DIR:-} +_BIN_DIR=${PYMONGO_BIN_DIR:-.} # Helper function to pip install a dependency using a temporary python env. function _pip_install() { From 6b63de006866dbd4e7b500dd4d8ea944366bb760 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 12:30:18 -0600 Subject: [PATCH 109/121] fix vm install --- .evergreen/scripts/install-dependencies.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 3d88699a60..69984fff85 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -3,6 +3,7 @@ set -eu HERE=$(dirname ${BASH_SOURCE:-$0}) +CURRENT=$(pwd) pushd "$(dirname "$(dirname $HERE)")" > /dev/null # Source the env files to pick up common variables. @@ -10,7 +11,7 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi -_BIN_DIR=${PYMONGO_BIN_DIR:-.} +_BIN_DIR=${PYMONGO_BIN_DIR:-$CURRENT} # Helper function to pip install a dependency using a temporary python env. function _pip_install() { From 8c91f2e3dcc4ad59da52f41b4ca45577134d362e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 13:05:16 -0600 Subject: [PATCH 110/121] fix vm install --- .evergreen/scripts/install-dependencies.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 69984fff85..42b3574c4a 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -3,7 +3,6 @@ set -eu HERE=$(dirname ${BASH_SOURCE:-$0}) -CURRENT=$(pwd) pushd "$(dirname "$(dirname $HERE)")" > /dev/null # Source the env files to pick up common variables. @@ -11,7 +10,7 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi -_BIN_DIR=${PYMONGO_BIN_DIR:-$CURRENT} +_BIN_DIR=${PYMONGO_BIN_DIR:-$(pwd)} # Helper function to pip install a dependency using a temporary python env. function _pip_install() { From d7bfb055d5e0549015931e23563ad85e05ed44db Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 13:24:09 -0600 Subject: [PATCH 111/121] debug path --- .evergreen/scripts/install-dependencies.sh | 1 + .evergreen/scripts/setup-dev-env.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 42b3574c4a..3b859c86b8 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -21,6 +21,7 @@ function _pip_install() { createvirtualenv "$(find_python3)" $_VENV_PATH python -m pip install $1 ln -s "$(which $2)" $_BIN_DIR/$2 + echo "Installed to ${_BIN_DIR}" echo "Installing $2 using pip... done." } diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index a0c04e36e7..0e0bdb055e 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -36,6 +36,7 @@ if [ ! -d $BIN_DIR ]; then echo "Using python $UV_PYTHON" fi +echo "HELLO: $(pwd)" uv sync --frozen uv run --frozen --with pip pip install -e . echo "Setting up python environment... done." From 7969c8757ae154634d475fe173615703217e506f Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 14:13:22 -0600 Subject: [PATCH 112/121] debug path --- .evergreen/scripts/setup-dev-env.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 0e0bdb055e..7d5cabbbf9 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -37,6 +37,8 @@ if [ ! -d $BIN_DIR ]; then fi echo "HELLO: $(pwd)" +echo "PATH=$PATH" +ls uv sync --frozen uv run --frozen --with pip pip install -e . echo "Setting up python environment... done." From 0169abf2f57f5b6e5847dd62dcf1d027115eed26 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 14:38:25 -0600 Subject: [PATCH 113/121] debug path --- .evergreen/scripts/install-dependencies.sh | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 3b859c86b8..ed7f18e679 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -10,7 +10,12 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi -_BIN_DIR=${PYMONGO_BIN_DIR:-$(pwd)} +_BIN_DIR=${PYMONGO_BIN_DIR:-} + +# Handle remote containers/VMS. +if [ -z "$BIN_DIR" ] && [ "$(uname -s)" = "Linux" ]; then + _BIN_DIR=/usr/local/bin +fi # Helper function to pip install a dependency using a temporary python env. function _pip_install() { @@ -28,6 +33,10 @@ function _pip_install() { # Ensure just is installed. if ! command -v just 2>/dev/null; then + if [ -z "$BIN_DIR" ]; then + echo "Please install just!" + exit 1 + fi # On most systems we can install directly. _TARGET="" if [ "Windows_NT" = "${OS:-}" ]; then @@ -43,6 +52,10 @@ fi # Install uv. if ! command -v uv 2>/dev/null; then + if [ -z "$BIN_DIR" ]; then + echo "Please install uv!" + exit 1 + fi echo "Installing uv..." # On most systems we can install directly. curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="$_BIN_DIR" INSTALLER_NO_MODIFY_PATH=1 sh || { From 9dbfb256bf31d0e8307b93f574316279fe6d46da Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 16:06:43 -0600 Subject: [PATCH 114/121] debug path --- .evergreen/scripts/install-dependencies.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index ed7f18e679..e40f47780f 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -13,7 +13,7 @@ fi _BIN_DIR=${PYMONGO_BIN_DIR:-} # Handle remote containers/VMS. -if [ -z "$BIN_DIR" ] && [ "$(uname -s)" = "Linux" ]; then +if [ -z "$_BIN_DIR" ] && [ "$(uname -s)" = "Linux" ]; then _BIN_DIR=/usr/local/bin fi @@ -33,7 +33,7 @@ function _pip_install() { # Ensure just is installed. if ! command -v just 2>/dev/null; then - if [ -z "$BIN_DIR" ]; then + if [ -z "$_BIN_DIR" ]; then echo "Please install just!" exit 1 fi @@ -52,7 +52,7 @@ fi # Install uv. if ! command -v uv 2>/dev/null; then - if [ -z "$BIN_DIR" ]; then + if [ -z "$_BIN_DIR" ]; then echo "Please install uv!" exit 1 fi From 5223ccaf9ea3bfcb5bed40a93db732c8c10e9862 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 16:16:01 -0600 Subject: [PATCH 115/121] try with no _BIN_DIR --- .evergreen/scripts/install-dependencies.sh | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index e40f47780f..4343342be1 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -12,11 +12,6 @@ fi _BIN_DIR=${PYMONGO_BIN_DIR:-} -# Handle remote containers/VMS. -if [ -z "$_BIN_DIR" ] && [ "$(uname -s)" = "Linux" ]; then - _BIN_DIR=/usr/local/bin -fi - # Helper function to pip install a dependency using a temporary python env. function _pip_install() { _HERE=$(dirname ${BASH_SOURCE:-$0}) @@ -33,10 +28,6 @@ function _pip_install() { # Ensure just is installed. if ! command -v just 2>/dev/null; then - if [ -z "$_BIN_DIR" ]; then - echo "Please install just!" - exit 1 - fi # On most systems we can install directly. _TARGET="" if [ "Windows_NT" = "${OS:-}" ]; then @@ -52,10 +43,6 @@ fi # Install uv. if ! command -v uv 2>/dev/null; then - if [ -z "$_BIN_DIR" ]; then - echo "Please install uv!" - exit 1 - fi echo "Installing uv..." # On most systems we can install directly. curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR="$_BIN_DIR" INSTALLER_NO_MODIFY_PATH=1 sh || { From 18ae78d740a6556c614dc9a05320eb908fffc1ba Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 16:32:39 -0600 Subject: [PATCH 116/121] handle default uv path --- .evergreen/scripts/setup-dev-env.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 7d5cabbbf9..78de65e069 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -36,9 +36,11 @@ if [ ! -d $BIN_DIR ]; then echo "Using python $UV_PYTHON" fi -echo "HELLO: $(pwd)" -echo "PATH=$PATH" -ls +# Add the default uv install path to the path. +if ! command -v uv 2>/dev/null; then + export PATH="$HOME/.local/bin:$PATH" +fi + uv sync --frozen uv run --frozen --with pip pip install -e . echo "Setting up python environment... done." From 5626e246926e3d1024f1f11253b8d68904b6873a Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 16:43:33 -0600 Subject: [PATCH 117/121] handle default uv path --- .evergreen/scripts/install-dependencies.sh | 2 +- .evergreen/scripts/setup-dev-env.sh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 4343342be1..f8e8882abc 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -10,7 +10,7 @@ if [ -f $HERE/env.sh ]; then . $HERE/env.sh fi -_BIN_DIR=${PYMONGO_BIN_DIR:-} +_BIN_DIR=${PYMONGO_BIN_DIR:-$HOME/.local/bin} # Helper function to pip install a dependency using a temporary python env. function _pip_install() { diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 78de65e069..06a0ae89d2 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -36,9 +36,9 @@ if [ ! -d $BIN_DIR ]; then echo "Using python $UV_PYTHON" fi -# Add the default uv install path to the path. -if ! command -v uv 2>/dev/null; then - export PATH="$HOME/.local/bin:$PATH" +# Add the default install path to the path if needed. +if [ -z "${PYMONGO_BIN_DIR:-}" ] then + export PATH="$PATH:$HOME/.local/bin" fi uv sync --frozen From e5e6dfe9b8303c32ce4ecd7b9d9496c11a296455 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 16:50:00 -0600 Subject: [PATCH 118/121] syntax --- .evergreen/scripts/setup-dev-env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.evergreen/scripts/setup-dev-env.sh b/.evergreen/scripts/setup-dev-env.sh index 06a0ae89d2..0cbf53e19e 100755 --- a/.evergreen/scripts/setup-dev-env.sh +++ b/.evergreen/scripts/setup-dev-env.sh @@ -37,7 +37,7 @@ if [ ! -d $BIN_DIR ]; then fi # Add the default install path to the path if needed. -if [ -z "${PYMONGO_BIN_DIR:-}" ] then +if [ -z "${PYMONGO_BIN_DIR:-}" ]; then export PATH="$PATH:$HOME/.local/bin" fi From f415324651b1b941fb4b234600decf225bc66a03 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Tue, 11 Feb 2025 16:56:51 -0600 Subject: [PATCH 119/121] add bin dir to path --- .evergreen/scripts/install-dependencies.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index f8e8882abc..0510838add 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -11,6 +11,7 @@ if [ -f $HERE/env.sh ]; then fi _BIN_DIR=${PYMONGO_BIN_DIR:-$HOME/.local/bin} +export PATH="$PATH:${_BIN_DIR}" # Helper function to pip install a dependency using a temporary python env. function _pip_install() { From 58dd9a4856e052bd5fe2f1e998f00e8b52ab41d1 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 12 Feb 2025 08:28:18 -0600 Subject: [PATCH 120/121] address review --- .evergreen/scripts/install-dependencies.sh | 2 ++ .evergreen/scripts/setup-tests.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.evergreen/scripts/install-dependencies.sh b/.evergreen/scripts/install-dependencies.sh index 0510838add..e2598edcad 100755 --- a/.evergreen/scripts/install-dependencies.sh +++ b/.evergreen/scripts/install-dependencies.sh @@ -51,3 +51,5 @@ if ! command -v uv 2>/dev/null; then } echo "Installing uv... done." fi + +popd > /dev/null diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 87838406d1..97306e791e 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -127,8 +127,8 @@ def handle_test_env() -> None: if AUTH != "noauth": if is_set("TEST_DATA_LAKE"): - DB_USER = "mhuser" - DB_PASSWORD = "pencil" # noqa: S105 + DB_USER = os.environ["ADL_USERNAME"] + DB_PASSWORD = os.environ["ADL_PASSWORD"] elif is_set("TEST_SERVERLESS"): DB_USER = os.environ("SERVERLESS_ATLAS_USER") DB_PASSWORD = os.environ("SERVERLESS_ATLAS_PASSWORD") From e2d9bb146132131eaf71be748b685df0d4fbfca1 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Wed, 12 Feb 2025 09:47:59 -0600 Subject: [PATCH 121/121] fix adl handling --- .evergreen/scripts/setup-tests.py | 2 +- .evergreen/scripts/setup-tests.sh | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.evergreen/scripts/setup-tests.py b/.evergreen/scripts/setup-tests.py index 97306e791e..4e14ff9830 100644 --- a/.evergreen/scripts/setup-tests.py +++ b/.evergreen/scripts/setup-tests.py @@ -121,7 +121,7 @@ def handle_test_env() -> None: for env_var, suite in TEST_SUITE_MAP.items(): if TEST_SUITES: - continue + break if env_var in os.environ: TEST_SUITES = suite diff --git a/.evergreen/scripts/setup-tests.sh b/.evergreen/scripts/setup-tests.sh index 09a4f1233e..80fc717047 100755 --- a/.evergreen/scripts/setup-tests.sh +++ b/.evergreen/scripts/setup-tests.sh @@ -46,12 +46,16 @@ if [ -n "${TEST_INDEX_MANAGEMENT:-}" ]; then source $DRIVERS_TOOLS/.evergreen/atlas/secrets-export.sh fi +# Source ADL secrets if applicable. +if [ -n "${TEST_DATA_LAKE:-}" ]; then + source ${DRIVERS_TOOLS}/.evergreen/atlas_data_lake/secrets-export.sh +fi + # Source local secrets if applicable. if [ -f "$ROOT_DIR/secrets-export.sh" ]; then source "$ROOT_DIR/secrets-export.sh" fi - . $ROOT_DIR/.evergreen/utils.sh PYTHON=${PYTHON_BINARY:-$(find_python3)} $PYTHON $SCRIPT_DIR/setup-tests.py