From 495d9a47314f8b9311745df9d887ef58fe0d903b Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Fri, 18 Oct 2024 19:42:32 -0500 Subject: [PATCH] PYTHON-4890 Use shrub.py for storage engine tests --- .evergreen/config.yml | 73 ++++++++++----------------- .evergreen/scripts/generate_config.py | 43 ++++++++++++++-- 2 files changed, 66 insertions(+), 50 deletions(-) diff --git a/.evergreen/config.yml b/.evergreen/config.yml index cf43d7c246..526e7aed5a 100644 --- a/.evergreen/config.yml +++ b/.evergreen/config.yml @@ -2273,19 +2273,6 @@ axes: variables: NO_EXT: "" - # Choice of MongoDB storage engine - - id: storage-engine - display_name: Storage - values: - - id: mmapv1 - display_name: MMAPv1 - variables: - STORAGE_ENGINE: "mmapv1" - - id: inmemory - display_name: InMemory - variables: - STORAGE_ENGINE: "inmemory" - # Run with test commands disabled on server? - id: disableTestCommands display_name: Disable test commands @@ -3344,6 +3331,34 @@ buildvariants: SSL: ssl PYTHON_BINARY: /opt/python/pypy3.10/bin/python3 +# Storage Engine tests. +- name: storage-inmemory-rhel8-py3.9 + tasks: + - name: .standalone .4.0 + - name: .standalone .4.4 + - name: .standalone .5.0 + - name: .standalone .6.0 + - name: .standalone .7.0 + - name: .standalone .8.0 + - name: .standalone .rapid + - name: .standalone .latest + display_name: Storage InMemory RHEL8 py3.9 + run_on: + - rhel87-small + expansions: + STORAGE_ENGINE: inmemory + PYTHON_BINARY: /opt/python/3.9/bin/python3 +- name: storage-mmapv1-rhel8-py3.9 + tasks: + - name: .standalone .4.0 + - name: .replica_set .4.0 + display_name: Storage MMAPv1 RHEL8 py3.9 + run_on: + - rhel87-small + expansions: + STORAGE_ENGINE: mmapv1 + PYTHON_BINARY: /opt/python/3.9/bin/python3 + # Versioned API tests. - name: versioned-api-require-v1-rhel8-py3.9-auth tasks: @@ -3485,38 +3500,6 @@ buildvariants: tasks: - ".5.0" -# Storage engine tests on RHEL 8.4 (x86_64) with Python 3.9. -- matrix_name: "tests-storage-engines" - matrix_spec: - platform: rhel8 - storage-engine: "*" - python-version: "3.9" - display_name: "Storage ${storage-engine} ${python-version} ${platform}" - rules: - - if: - platform: rhel8 - storage-engine: ["inmemory"] - python-version: "*" - then: - add_tasks: - - "test-latest-standalone" - - "test-8.0-standalone" - - "test-7.0-standalone" - - "test-6.0-standalone" - - "test-5.0-standalone" - - "test-4.4-standalone" - - "test-4.2-standalone" - - "test-4.0-standalone" - - if: - # MongoDB 4.2 drops support for MMAPv1 - platform: rhel8 - storage-engine: ["mmapv1"] - python-version: "*" - then: - add_tasks: - - "test-4.0-standalone" - - "test-4.0-replica_set" - # enableTestCommands=0 tests on RHEL 8.4 (x86_64) with Python 3.9. - matrix_name: "test-disableTestCommands" matrix_spec: diff --git a/.evergreen/scripts/generate_config.py b/.evergreen/scripts/generate_config.py index dafcd4ff4f..55d1165de6 100644 --- a/.evergreen/scripts/generate_config.py +++ b/.evergreen/scripts/generate_config.py @@ -111,14 +111,24 @@ def get_python_binary(python: str, host: str) -> str: raise ValueError(f"no match found for python {python} on {host}") -def get_pythons_from(min_version: str) -> list[str]: - """Get all pythons starting from a minimum version.""" +def get_versions_from(min_version: str) -> list[str]: + """Get all server versions starting from a minimum version.""" min_version_float = float(min_version) rapid_latest = ["rapid", "latest"] versions = [v for v in ALL_VERSIONS if v not in rapid_latest] return [v for v in versions if float(v) >= min_version_float] + rapid_latest +def get_versions_until(max_version: str) -> list[str]: + """Get all server version up to a max version.""" + max_version_float = float(max_version) + versions = [v for v in ALL_VERSIONS if v not in ["rapid", "latest"]] + versions = [v for v in versions if float(v) <= max_version_float] + if not len(versions): + raise ValueError(f"No server versions found less <= {max_version}") + return versions + + def get_display_name(base: str, host: str, **kwargs) -> str: """Get the display name of a variant.""" display_name = f"{base} {HOSTS[host].display_name}" @@ -250,7 +260,7 @@ def create_server_variants() -> list[BuildVariant]: tasks = [f".{topology}"] # MacOS arm64 only works on server versions 6.0+ if host == "macos-arm64": - tasks = [f".{topology} .{version}" for version in get_pythons_from("6.0")] + tasks = [f".{topology} .{version}" for version in get_versions_from("6.0")] expansions = dict(AUTH=auth, SSL=ssl, TEST_SUITES=test_suite, SKIP_CSOT_TESTS="true") display_name = get_display_name("Test", host, python=python, **expansions) variant = create_variant( @@ -337,7 +347,7 @@ def create_load_balancer_variants(): task_names = ["load-balancer-test"] batchtime = BATCHTIME_WEEK expansions_base = dict(test_loadbalancer="true") - versions = get_pythons_from("6.0") + versions = get_versions_from("6.0") variants = [] pythons = CPYTHONS + PYPYS for ind, (version, (auth, ssl)) in enumerate(product(versions, AUTH_SSLS)): @@ -449,10 +459,33 @@ def create_pyopenssl_variants(): return variants +def create_storage_engine_tests(): + host = "rhel8" + engines = ["InMemory", "MMAPv1"] + variants = [] + for engine in engines: + python = CPYTHONS[0] + expansions = dict(STORAGE_ENGINE=engine.lower()) + if engine == engines[0]: + tasks = [f".standalone .{v}" for v in ALL_VERSIONS] + else: + # MongoDB 4.2 drops support for MMAPv1 + versions = get_versions_until("4.0") + tasks = [f".standalone .{v}" for v in versions] + [ + f".replica_set .{v}" for v in versions + ] + display_name = get_display_name(f"Storage {engine}", host, python=python) + variant = create_variant( + tasks, display_name, host=host, python=python, expansions=expansions + ) + variants.append(variant) + return variants + + def create_versioned_api_tests(): host = "rhel8" tags = ["versionedApi_tag"] - tasks = [f".standalone .{v}" for v in get_pythons_from("5.0")] + tasks = [f".standalone .{v}" for v in get_versions_from("5.0")] variants = [] types = ["require v1", "accept v2"]