Skip to content

Commit 849ed79

Browse files
authored
PYTHON-4888 Use shrub.py for versioned api tests (mongodb#1949)
1 parent a1ade45 commit 849ed79

File tree

2 files changed

+111
-42
lines changed

2 files changed

+111
-42
lines changed

.evergreen/config.yml

Lines changed: 68 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2305,28 +2305,6 @@ axes:
23052305
variables:
23062306
COVERAGE: "coverage"
23072307

2308-
- id: versionedApi
2309-
display_name: "versionedApi"
2310-
values:
2311-
# Test against a cluster with requireApiVersion=1.
2312-
- id: "requireApiVersion1"
2313-
display_name: "requireApiVersion1"
2314-
tags: [ "versionedApi_tag" ]
2315-
variables:
2316-
# REQUIRE_API_VERSION is set to make drivers-evergreen-tools
2317-
# start a cluster with the requireApiVersion parameter.
2318-
REQUIRE_API_VERSION: "1"
2319-
# MONGODB_API_VERSION is the apiVersion to use in the test suite.
2320-
MONGODB_API_VERSION: "1"
2321-
# Test against a cluster with acceptApiVersion2 but without
2322-
# requireApiVersion, and don't automatically add apiVersion to
2323-
# clients created in the test suite.
2324-
- id: "acceptApiVersion2"
2325-
display_name: "acceptApiVersion2"
2326-
tags: [ "versionedApi_tag" ]
2327-
variables:
2328-
ORCHESTRATION_FILE: "versioned-api-testing.json"
2329-
23302308
- id: serverless
23312309
display_name: "Serverless"
23322310
values:
@@ -3366,6 +3344,74 @@ buildvariants:
33663344
SSL: ssl
33673345
PYTHON_BINARY: /opt/python/pypy3.10/bin/python3
33683346

3347+
# Versioned API tests.
3348+
- name: versioned-api-require-v1-rhel8-py3.9-auth
3349+
tasks:
3350+
- name: .standalone .5.0
3351+
- name: .standalone .6.0
3352+
- name: .standalone .7.0
3353+
- name: .standalone .8.0
3354+
- name: .standalone .rapid
3355+
- name: .standalone .latest
3356+
display_name: Versioned API require v1 RHEL8 py3.9 Auth
3357+
run_on:
3358+
- rhel87-small
3359+
expansions:
3360+
AUTH: auth
3361+
REQUIRE_API_VERSION: "1"
3362+
MONGODB_API_VERSION: "1"
3363+
PYTHON_BINARY: /opt/python/3.9/bin/python3
3364+
tags: [versionedApi_tag]
3365+
- name: versioned-api-accept-v2-rhel8-py3.9-auth
3366+
tasks:
3367+
- name: .standalone .5.0
3368+
- name: .standalone .6.0
3369+
- name: .standalone .7.0
3370+
- name: .standalone .8.0
3371+
- name: .standalone .rapid
3372+
- name: .standalone .latest
3373+
display_name: Versioned API accept v2 RHEL8 py3.9 Auth
3374+
run_on:
3375+
- rhel87-small
3376+
expansions:
3377+
AUTH: auth
3378+
ORCHESTRATION_FILE: versioned-api-testing.json
3379+
PYTHON_BINARY: /opt/python/3.9/bin/python3
3380+
tags: [versionedApi_tag]
3381+
- name: versioned-api-require-v1-rhel8-py3.13-auth
3382+
tasks:
3383+
- name: .standalone .5.0
3384+
- name: .standalone .6.0
3385+
- name: .standalone .7.0
3386+
- name: .standalone .8.0
3387+
- name: .standalone .rapid
3388+
- name: .standalone .latest
3389+
display_name: Versioned API require v1 RHEL8 py3.13 Auth
3390+
run_on:
3391+
- rhel87-small
3392+
expansions:
3393+
AUTH: auth
3394+
REQUIRE_API_VERSION: "1"
3395+
MONGODB_API_VERSION: "1"
3396+
PYTHON_BINARY: /opt/python/3.13/bin/python3
3397+
tags: [versionedApi_tag]
3398+
- name: versioned-api-accept-v2-rhel8-py3.13-auth
3399+
tasks:
3400+
- name: .standalone .5.0
3401+
- name: .standalone .6.0
3402+
- name: .standalone .7.0
3403+
- name: .standalone .8.0
3404+
- name: .standalone .rapid
3405+
- name: .standalone .latest
3406+
display_name: Versioned API accept v2 RHEL8 py3.13 Auth
3407+
run_on:
3408+
- rhel87-small
3409+
expansions:
3410+
AUTH: auth
3411+
ORCHESTRATION_FILE: versioned-api-testing.json
3412+
PYTHON_BINARY: /opt/python/3.13/bin/python3
3413+
tags: [versionedApi_tag]
3414+
33693415
- matrix_name: "tests-fips"
33703416
matrix_spec:
33713417
platform:
@@ -3559,22 +3605,6 @@ buildvariants:
35593605
tasks:
35603606
- name: atlas-data-lake-tests
35613607

3562-
- matrix_name: "stable-api-tests"
3563-
matrix_spec:
3564-
platform: rhel8
3565-
python-version: ["3.9", "3.10"]
3566-
auth: "auth"
3567-
versionedApi: "*"
3568-
display_name: "Versioned API ${versionedApi} ${python-version}"
3569-
batchtime: 10080 # 7 days
3570-
tasks:
3571-
# Versioned API was introduced in MongoDB 4.7
3572-
- "test-latest-standalone"
3573-
- "test-8.0-standalone"
3574-
- "test-7.0-standalone"
3575-
- "test-6.0-standalone"
3576-
- "test-5.0-standalone"
3577-
35783608
# OCSP test matrix.
35793609
- name: ocsp-test-rhel8-v4.4-py3.9
35803610
tasks:

.evergreen/scripts/generate_config.py

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
##############
2424

2525
ALL_VERSIONS = ["4.0", "4.4", "5.0", "6.0", "7.0", "8.0", "rapid", "latest"]
26-
VERSIONS_6_0_PLUS = ["6.0", "7.0", "8.0", "rapid", "latest"]
2726
CPYTHONS = ["3.9", "3.10", "3.11", "3.12", "3.13"]
2827
PYPYS = ["pypy3.9", "pypy3.10"]
2928
ALL_PYTHONS = CPYTHONS + PYPYS
@@ -112,6 +111,14 @@ def get_python_binary(python: str, host: str) -> str:
112111
raise ValueError(f"no match found for python {python} on {host}")
113112

114113

114+
def get_pythons_from(min_version: str) -> list[str]:
115+
"""Get all pythons starting from a minimum version."""
116+
min_version_float = float(min_version)
117+
rapid_latest = ["rapid", "latest"]
118+
versions = [v for v in ALL_VERSIONS if v not in rapid_latest]
119+
return [v for v in versions if float(v) >= min_version_float] + rapid_latest
120+
121+
115122
def get_display_name(base: str, host: str, **kwargs) -> str:
116123
"""Get the display name of a variant."""
117124
display_name = f"{base} {HOSTS[host].display_name}"
@@ -243,7 +250,7 @@ def create_server_variants() -> list[BuildVariant]:
243250
tasks = [f".{topology}"]
244251
# MacOS arm64 only works on server versions 6.0+
245252
if host == "macos-arm64":
246-
tasks = [f".{topology} .{version}" for version in VERSIONS_6_0_PLUS]
253+
tasks = [f".{topology} .{version}" for version in get_pythons_from("6.0")]
247254
expansions = dict(AUTH=auth, SSL=ssl, TEST_SUITES=test_suite, SKIP_CSOT_TESTS="true")
248255
display_name = get_display_name("Test", host, python=python, **expansions)
249256
variant = create_variant(
@@ -330,7 +337,7 @@ def create_load_balancer_variants():
330337
task_names = ["load-balancer-test"]
331338
batchtime = BATCHTIME_WEEK
332339
expansions_base = dict(test_loadbalancer="true")
333-
versions = ["6.0", "7.0", "8.0", "latest", "rapid"]
340+
versions = get_pythons_from("6.0")
334341
variants = []
335342
pythons = CPYTHONS + PYPYS
336343
for ind, (version, (auth, ssl)) in enumerate(product(versions, AUTH_SSLS)):
@@ -442,10 +449,42 @@ def create_pyopenssl_variants():
442449
return variants
443450

444451

452+
def create_versioned_api_tests():
453+
host = "rhel8"
454+
tags = ["versionedApi_tag"]
455+
tasks = [f".standalone .{v}" for v in get_pythons_from("5.0")]
456+
variants = []
457+
types = ["require v1", "accept v2"]
458+
459+
# All python versions across platforms.
460+
for python, test_type in product(MIN_MAX_PYTHON, types):
461+
expansions = dict(AUTH="auth")
462+
# Test against a cluster with requireApiVersion=1.
463+
if test_type == types[0]:
464+
# REQUIRE_API_VERSION is set to make drivers-evergreen-tools
465+
# start a cluster with the requireApiVersion parameter.
466+
expansions["REQUIRE_API_VERSION"] = "1"
467+
# MONGODB_API_VERSION is the apiVersion to use in the test suite.
468+
expansions["MONGODB_API_VERSION"] = "1"
469+
else:
470+
# Test against a cluster with acceptApiVersion2 but without
471+
# requireApiVersion, and don't automatically add apiVersion to
472+
# clients created in the test suite.
473+
expansions["ORCHESTRATION_FILE"] = "versioned-api-testing.json"
474+
base_display_name = f"Versioned API {test_type}"
475+
display_name = get_display_name(base_display_name, host, python=python, **expansions)
476+
variant = create_variant(
477+
tasks, display_name, host=host, python=python, tags=tags, expansions=expansions
478+
)
479+
variants.append(variant)
480+
481+
return variants
482+
483+
445484
##################
446485
# Generate Config
447486
##################
448487

449-
variants = create_pyopenssl_variants()
488+
variants = create_versioned_api_tests()
450489
# print(len(variants))
451490
generate_yaml(variants=variants)

0 commit comments

Comments
 (0)