From afbce56daf1ddd7cf5adddd69f273db02b6c6b76 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 13 Mar 2025 07:09:35 -0500 Subject: [PATCH 1/6] PYTHON-5206 Convert Atlas Connect and Enterprise Auth tests to use new test scripts --- .evergreen/config.yml | 35 ------------------- .evergreen/scripts/generate_config.py | 28 +++++++++++---- .evergreen/scripts/run-atlas-tests.sh | 8 ----- .evergreen/scripts/run-direct-tests.sh | 10 ------ .../scripts/run-enterprise-auth-tests.sh | 9 ----- .evergreen/scripts/setup_tests.py | 10 ++++++ .evergreen/scripts/utils.py | 2 +- test/atlas/test_connection.py | 2 +- 8 files changed, 34 insertions(+), 70 deletions(-) delete mode 100755 .evergreen/scripts/run-atlas-tests.sh delete mode 100755 .evergreen/scripts/run-direct-tests.sh delete mode 100755 .evergreen/scripts/run-enterprise-auth-tests.sh diff --git a/.evergreen/config.yml b/.evergreen/config.yml index 25ea2c4b90..df83777741 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -267,28 +267,6 @@ functions: binary: bash args: [.evergreen/just.sh, run-tests] - "run enterprise auth tests": - - command: subprocess.exec - type: test - params: - binary: bash - working_dir: "src" - include_expansions_in_env: ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN", "PYTHON_BINARY"] - args: - - .evergreen/scripts/run-with-env.sh - - .evergreen/scripts/run-enterprise-auth-tests.sh - - "run atlas tests": - - command: subprocess.exec - type: test - params: - binary: bash - include_expansions_in_env: ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_SESSION_TOKEN", "PYTHON_BINARY"] - working_dir: "src" - args: - - .evergreen/scripts/run-with-env.sh - - .evergreen/scripts/run-atlas-tests.sh - "cleanup": - command: subprocess.exec params: @@ -452,13 +430,6 @@ tasks: vars: TEST_NAME: serverless - - name: "test-enterprise-auth" - tags: ["enterprise-auth"] - commands: - - func: "run server" - - func: "assume ec2 role" - - func: "run enterprise auth tests" - - name: "test-search-index-helpers" commands: - func: "run server" @@ -518,12 +489,6 @@ tasks: TOPOLOGY: "replica_set" - func: "run tests" - - name: "atlas-connect" - tags: ["atlas-connect"] - commands: - - func: "assume ec2 role" - - func: "run atlas tests" - - name: atlas-data-lake-tests commands: - func: "bootstrap data lake" diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 14f30fed91..f89aee2418 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -464,7 +464,6 @@ def create_compression_variants(): def create_enterprise_auth_variants(): - expansions = dict(AUTH="auth") variants = [] # All python versions across platforms. @@ -475,10 +474,8 @@ def create_enterprise_auth_variants(): host = HOSTS["win64"] else: host = DEFAULT_HOST - display_name = get_display_name("Auth Enterprise", host, python=python, **expansions) - variant = create_variant( - ["test-enterprise-auth"], display_name, host=host, python=python, expansions=expansions - ) + display_name = get_display_name("Auth Enterprise", host, python=python) + variant = create_variant([".enterprise_auth"], display_name, host=host, python=python) variants.append(variant) return variants @@ -723,7 +720,7 @@ def create_atlas_connect_variants(): host = DEFAULT_HOST return [ create_variant( - ["atlas-connect"], + [".atlas_connect"], get_display_name("Atlas connect", host, python=python), python=python, host=host, @@ -915,6 +912,25 @@ def _create_ocsp_task(algo, variant, server_type, base_task_name): return EvgTask(name=task_name, tags=tags, commands=commands) +def create_atlas_connect_tasks(): + vars = dict(TEST_NAME="atlas_connect") + assume_func = FunctionCall(func="assume ec2 role") + test_func = FunctionCall(func="run tests", vars=vars) + task_name = "test-atlas-connect" + tags = ["atlas_connect"] + return [EvgTask(name=task_name, tags=tags, commands=[assume_func, test_func])] + + +def create_enterprise_auth_tasks(): + vars = dict(TEST_NAME="enterprise_auth", AUTH="auth") + server_func = FunctionCall(func="run server", vars=vars) + assume_func = FunctionCall(func="assume ec2 role") + test_func = FunctionCall(func="run tests", vars=vars) + task_name = "test-enterprise-ath" + tags = ["enterprise_auth"] + return [EvgTask(name=task_name, tags=tags, commands=[server_func, assume_func, test_func])] + + def create_ocsp_tasks(): tasks = [] tests = [ diff --git a/.evergreen/scripts/run-atlas-tests.sh b/.evergreen/scripts/run-atlas-tests.sh deleted file mode 100755 index 99968063bd..0000000000 --- a/.evergreen/scripts/run-atlas-tests.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -# Disable xtrace for security reasons (just in case it was accidentally set). -set +x -set -o errexit -bash "${DRIVERS_TOOLS}"/.evergreen/auth_aws/setup_secrets.sh drivers/atlas_connect -bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh setup-tests atlas -bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh run-tests diff --git a/.evergreen/scripts/run-direct-tests.sh b/.evergreen/scripts/run-direct-tests.sh deleted file mode 100755 index a00235311c..0000000000 --- a/.evergreen/scripts/run-direct-tests.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -x -. .evergreen/utils.sh - -. .evergreen/scripts/env.sh -createvirtualenv "$PYTHON_BINARY" .venv - -export PYMONGO_C_EXT_MUST_BUILD=1 -pip install -e ".[test]" -pytest -v diff --git a/.evergreen/scripts/run-enterprise-auth-tests.sh b/.evergreen/scripts/run-enterprise-auth-tests.sh deleted file mode 100755 index 65aafde2df..0000000000 --- a/.evergreen/scripts/run-enterprise-auth-tests.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -eu - -# Disable xtrace for security reasons (just in case it was accidentally set). -set +x -# Use the default python to bootstrap secrets. -bash "${DRIVERS_TOOLS}"/.evergreen/secrets_handling/setup-secrets.sh drivers/enterprise_auth -bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh setup-tests enterprise_auth -bash "${PROJECT_DIRECTORY}"/.evergreen/just.sh run-tests diff --git a/.evergreen/scripts/setup_tests.py b/.evergreen/scripts/setup_tests.py index 8432eacd5a..4154ca6ddd 100644 --- a/.evergreen/scripts/setup_tests.py +++ b/.evergreen/scripts/setup_tests.py @@ -112,6 +112,10 @@ def setup_libmongocrypt(): run_command("chmod +x libmongocrypt/nocrypto/bin/mongocrypt.dll") +def get_secrets(name: str) -> None: + run_command(f"bash {DRIVERS_TOOLS}/.evergreen/secrets_handling/setup-secrets.sh {name}") + + def handle_test_env() -> None: opts, _ = get_test_options("Set up the test environment and services.") test_name = opts.test_name @@ -345,6 +349,12 @@ def handle_test_env() -> None: else: run_command(f"bash {auth_aws_dir}/setup-secrets.sh") + if test_name == "atlas_connect": + get_secrets("drivers/atlas_connect") + + if test_name == "enterprise_auth": + get_secrets("drivers/enterprise_auth") + if test_name == "perf": # PYTHON-4769 Run perf_test.py directly otherwise pytest's test collection negatively # affects the benchmark results. diff --git a/.evergreen/scripts/utils.py b/.evergreen/scripts/utils.py index 70a527028b..80344f6aa4 100644 --- a/.evergreen/scripts/utils.py +++ b/.evergreen/scripts/utils.py @@ -30,7 +30,7 @@ class Distro: # Map the test name to a test suite. TEST_SUITE_MAP = { - "atlas": "atlas", + "atlas_connect": "atlas_connect", "auth_aws": "auth_aws", "auth_oidc": "auth_oidc", "data_lake": "data_lake", diff --git a/test/atlas/test_connection.py b/test/atlas/test_connection.py index 4dcbba6d11..3d34ff326e 100644 --- a/test/atlas/test_connection.py +++ b/test/atlas/test_connection.py @@ -28,7 +28,7 @@ import pymongo from pymongo.ssl_support import HAS_SNI -pytestmark = pytest.mark.atlas +pytestmark = pytest.mark.atlas_connect URIS = { From 8c4e27e7f92b1eff3d862610b0721160ca57d903 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 13 Mar 2025 07:10:05 -0500 Subject: [PATCH 2/6] generate config --- .evergreen/generated_configs/tasks.yml | 23 ++++++++++++ .evergreen/generated_configs/variants.yml | 46 ++++++++++------------- 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index 9d52cf957d..33c7c9a094 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -1,4 +1,13 @@ tasks: + # Atlas connect tests + - name: test-atlas-connect + commands: + - func: assume ec2 role + - func: run tests + vars: + TEST_NAME: atlas_connect + tags: [atlas_connect] + # Aws tests - name: test-auth-aws-4.4-regular commands: @@ -680,6 +689,20 @@ tasks: AWS_ROLE_SESSION_NAME: test tags: [auth-aws, auth-aws-web-identity] + # Enterprise auth tests + - name: test-enterprise-ath + commands: + - func: run server + vars: + TEST_NAME: enterprise_auth + AUTH: auth + - func: assume ec2 role + - func: run tests + vars: + TEST_NAME: enterprise_auth + AUTH: auth + tags: [enterprise_auth] + # Kms tests - name: test-gcpkms commands: diff --git a/.evergreen/generated_configs/variants.yml b/.evergreen/generated_configs/variants.yml index cf3e0cc903..697708f1f9 100644 --- a/.evergreen/generated_configs/variants.yml +++ b/.evergreen/generated_configs/variants.yml @@ -49,7 +49,7 @@ buildvariants: # Atlas connect tests - name: atlas-connect-rhel8-python3.9 tasks: - - name: atlas-connect + - name: .atlas_connect display_name: Atlas connect RHEL8 Python3.9 run_on: - rhel87-small @@ -57,7 +57,7 @@ buildvariants: PYTHON_BINARY: /opt/python/3.9/bin/python3 - name: atlas-connect-rhel8-python3.13 tasks: - - name: atlas-connect + - name: .atlas_connect display_name: Atlas connect RHEL8 Python3.13 run_on: - rhel87-small @@ -510,59 +510,53 @@ buildvariants: tags: [encryption_tag] # Enterprise auth tests - - name: auth-enterprise-macos-python3.9-auth + - name: auth-enterprise-macos-python3.9 tasks: - - name: test-enterprise-auth - display_name: Auth Enterprise macOS Python3.9 Auth + - name: .enterprise_auth + display_name: Auth Enterprise macOS Python3.9 run_on: - macos-14 expansions: - AUTH: auth PYTHON_BINARY: /Library/Frameworks/Python.Framework/Versions/3.9/bin/python3 - - name: auth-enterprise-rhel8-python3.10-auth + - name: auth-enterprise-rhel8-python3.10 tasks: - - name: test-enterprise-auth - display_name: Auth Enterprise RHEL8 Python3.10 Auth + - name: .enterprise_auth + display_name: Auth Enterprise RHEL8 Python3.10 run_on: - rhel87-small expansions: - AUTH: auth PYTHON_BINARY: /opt/python/3.10/bin/python3 - - name: auth-enterprise-rhel8-python3.11-auth + - name: auth-enterprise-rhel8-python3.11 tasks: - - name: test-enterprise-auth - display_name: Auth Enterprise RHEL8 Python3.11 Auth + - name: .enterprise_auth + display_name: Auth Enterprise RHEL8 Python3.11 run_on: - rhel87-small expansions: - AUTH: auth PYTHON_BINARY: /opt/python/3.11/bin/python3 - - name: auth-enterprise-rhel8-python3.12-auth + - name: auth-enterprise-rhel8-python3.12 tasks: - - name: test-enterprise-auth - display_name: Auth Enterprise RHEL8 Python3.12 Auth + - name: .enterprise_auth + display_name: Auth Enterprise RHEL8 Python3.12 run_on: - rhel87-small expansions: - AUTH: auth PYTHON_BINARY: /opt/python/3.12/bin/python3 - - name: auth-enterprise-win64-python3.13-auth + - name: auth-enterprise-win64-python3.13 tasks: - - name: test-enterprise-auth - display_name: Auth Enterprise Win64 Python3.13 Auth + - name: .enterprise_auth + display_name: Auth Enterprise Win64 Python3.13 run_on: - windows-64-vsMulti-small expansions: - AUTH: auth PYTHON_BINARY: C:/python/Python313/python.exe - - name: auth-enterprise-rhel8-pypy3.10-auth + - name: auth-enterprise-rhel8-pypy3.10 tasks: - - name: test-enterprise-auth - display_name: Auth Enterprise RHEL8 PyPy3.10 Auth + - name: .enterprise_auth + display_name: Auth Enterprise RHEL8 PyPy3.10 run_on: - rhel87-small expansions: - AUTH: auth PYTHON_BINARY: /opt/python/pypy3.10/bin/python3 # Free threaded tests From 5baa2de5df5e3a7cedaac9df79966a3fe3183b8b Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 13 Mar 2025 09:48:48 -0500 Subject: [PATCH 3/6] cleanup --- .evergreen/scripts/setup_tests.py | 6 +++--- CONTRIBUTING.md | 8 ++++++++ pyproject.toml | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.evergreen/scripts/setup_tests.py b/.evergreen/scripts/setup_tests.py index 3971a1b5ae..868ac419b5 100644 --- a/.evergreen/scripts/setup_tests.py +++ b/.evergreen/scripts/setup_tests.py @@ -207,6 +207,7 @@ def handle_test_env() -> None: write_env("PYMONGO_DISABLE_TEST_COMMANDS", "1") if test_name == "enterprise_auth": + get_secrets("drivers/enterprise_auth") config = read_env(f"{ROOT}/secrets-export.sh") if PLATFORM == "windows": LOGGER.info("Setting GSSAPI_PASS") @@ -352,9 +353,8 @@ def handle_test_env() -> None: if test_name == "atlas_connect": get_secrets("drivers/atlas_connect") - - if test_name == "enterprise_auth": - get_secrets("drivers/enterprise_auth") + # We do not want the default client_context to be initialized. + write_env("DISABLE_CONTEXT") if test_name == "perf": # PYTHON-4769 Run perf_test.py directly otherwise pytest's test collection negatively diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7e70c025ed..4a7c6bf4ed 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -262,6 +262,14 @@ For KMS tests that run remotely and are expected to pass, in this case using `gc - Run `just setup-tests kms gcp`. - Run `just run-tests`. +#### Enterprise Auth tests + +Note: these tests can only be run from an Evergreen host. + +- Run `just run-server enterprise_auth`. +- Run `just setup-tests enterprise_auth`. +- Run `just test` + ### OCSP tests - Export the orchestration file, e.g. `export ORCHESTRATION_FILE=rsa-basic-tls-ocsp-disableStapling.json`. diff --git a/pyproject.toml b/pyproject.toml index ca76cfa2c0..993b3e5aee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -125,7 +125,7 @@ markers = [ "auth_oidc: tests that rely on oidc auth", "auth: tests that rely on authentication", "ocsp: tests that rely on ocsp", - "atlas: tests that rely on atlas", + "atlas_connect: tests that rely on an atlas connection", "data_lake: tests that rely on atlas data lake", "perf: benchmark tests", "index_management: index management tests", From 32a267c393cbb9efb0e1254ead2ae7074c2910b4 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 13 Mar 2025 09:49:33 -0500 Subject: [PATCH 4/6] fix task name --- .evergreen/generated_configs/tasks.yml | 2 +- .evergreen/scripts/generate_config.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.evergreen/generated_configs/tasks.yml b/.evergreen/generated_configs/tasks.yml index 712037035c..0b0f09329a 100644 --- a/.evergreen/generated_configs/tasks.yml +++ b/.evergreen/generated_configs/tasks.yml @@ -690,7 +690,7 @@ tasks: tags: [auth-aws, auth-aws-web-identity] # Enterprise auth tests - - name: test-enterprise-ath + - name: test-enterprise-auth commands: - func: run server vars: diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index 0de7cbf35f..d91e0e6ded 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -924,7 +924,7 @@ def create_enterprise_auth_tasks(): server_func = FunctionCall(func="run server", vars=vars) assume_func = FunctionCall(func="assume ec2 role") test_func = FunctionCall(func="run tests", vars=vars) - task_name = "test-enterprise-ath" + task_name = "test-enterprise-auth" tags = ["enterprise_auth"] return [EvgTask(name=task_name, tags=tags, commands=[server_func, assume_func, test_func])] From 1e5bcd6a767b7e55d2825ebb27a1df218f15a1e7 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 13 Mar 2025 09:52:10 -0500 Subject: [PATCH 5/6] update docs --- CONTRIBUTING.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4a7c6bf4ed..876780ba1e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -262,13 +262,18 @@ For KMS tests that run remotely and are expected to pass, in this case using `gc - Run `just setup-tests kms gcp`. - Run `just run-tests`. -#### Enterprise Auth tests +### Enterprise Auth tests Note: these tests can only be run from an Evergreen host. - Run `just run-server enterprise_auth`. - Run `just setup-tests enterprise_auth`. -- Run `just test` +- Run `just run-tests`. + +#### Atlas Connect tests + +- Run `just setup-tests atlas_connect`. +- Run `just run-tests`. ### OCSP tests From 60e6cb10d2b703dfef8cb37af719577aa63f0fc7 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Thu, 13 Mar 2025 11:00:31 -0500 Subject: [PATCH 6/6] Update CONTRIBUTING.md Co-authored-by: Noah Stapp --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 876780ba1e..8844565d31 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -270,7 +270,7 @@ Note: these tests can only be run from an Evergreen host. - Run `just setup-tests enterprise_auth`. - Run `just run-tests`. -#### Atlas Connect tests +### Atlas Connect tests - Run `just setup-tests atlas_connect`. - Run `just run-tests`.