From d625a067ccd7490ca32de412c522c7e531fe81f2 Mon Sep 17 00:00:00 2001 From: Ari Angelo Date: Tue, 28 Apr 2026 09:33:27 +0200 Subject: [PATCH 1/4] chore(tests): bump staging app versions and drop special-app constant MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - test-app: 0.0.6 → 1.0.0 (new version uses same he-tme input schema) - he-tme: 1.1.0 → 1.1.1 on staging - Remove SPECIAL_APPLICATION_ID/VERSION from staging (no longer needed) Co-Authored-By: Claude Sonnet 4.6 (1M context) --- tests/constants_test.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/constants_test.py b/tests/constants_test.py index 91126febb..6198e0e9f 100644 --- a/tests/constants_test.py +++ b/tests/constants_test.py @@ -94,10 +94,10 @@ case "staging": TEST_APPLICATION_ID = "test-app" - TEST_APPLICATION_VERSION = "0.0.6" + TEST_APPLICATION_VERSION = "1.0.0" HETA_APPLICATION_ID = "he-tme" - HETA_APPLICATION_VERSION = "1.1.0" + HETA_APPLICATION_VERSION = "1.1.1" TEST_APPLICATION_VERSION_USE_LATEST_FALLBACK_SKIP = True PIPELINE_GPU_TYPE = "L4" @@ -108,9 +108,6 @@ PIPELINE_CPU_PROVISIONING_MODE = "SPOT" PIPELINE_NODE_ACQUISITION_TIMEOUT_MINUTES = 30 - SPECIAL_APPLICATION_ID = "test-app" - SPECIAL_APPLICATION_VERSION = "0.99.0" - SPOT_0_EXPECTED_RESULT_FILES = [ ("tissue_qc_segmentation_map_image.tiff", 1642856, 10), ("tissue_qc_geojson_polygons.json", 259955, 10), From 98b65ef46ec03dfdaa85a7a5a02f0435c06bd381 Mon Sep 17 00:00:00 2001 From: Ari Angelo Date: Tue, 28 Apr 2026 15:54:06 +0200 Subject: [PATCH 2/4] chore(tests): fix staging SPECIAL_APPLICATION constants and drop normalization artifact - Re-add SPECIAL_APPLICATION_ID/VERSION to staging pointing to test-app 1.0.0 so e2e_test.py imports resolve on staging - Remove normalization:wsi input artifact from _get_spots_payload_for_special; test-app 1.0.0 only requires whole_slide_image, matching the he-tme schema Co-Authored-By: Claude Sonnet 4.6 (1M context) --- tests/aignostics/platform/e2e_test.py | 12 ------------ tests/constants_test.py | 3 +++ 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/tests/aignostics/platform/e2e_test.py b/tests/aignostics/platform/e2e_test.py index 634e85da0..3696fc675 100644 --- a/tests/aignostics/platform/e2e_test.py +++ b/tests/aignostics/platform/e2e_test.py @@ -224,13 +224,6 @@ def _get_spots_payload_for_special(expires_seconds: int, count: int) -> list[pla "disease": "LUNG_CANCER", }, } - normalization_metadata = { - "checksum_base64_crc32c": SPOT_1_CRC32C, - "width_px": SPOT_1_WIDTH, - "height_px": SPOT_1_HEIGHT, - "resolution_mpp": SPOT_1_RESOLUTION_MPP, - "media_type": "image/tiff", - } return [ platform.InputItem( external_id=f"{SPOT_1_GS_URL}&spot_index={index}", @@ -240,11 +233,6 @@ def _get_spots_payload_for_special(expires_seconds: int, count: int) -> list[pla download_url=signed_url, metadata=wsi_metadata, ), - platform.InputArtifact( - name="normalization:wsi", - download_url=signed_url, - metadata=normalization_metadata, - ), ], ) for index in range(count) diff --git a/tests/constants_test.py b/tests/constants_test.py index 6198e0e9f..fdb396476 100644 --- a/tests/constants_test.py +++ b/tests/constants_test.py @@ -108,6 +108,9 @@ PIPELINE_CPU_PROVISIONING_MODE = "SPOT" PIPELINE_NODE_ACQUISITION_TIMEOUT_MINUTES = 30 + SPECIAL_APPLICATION_ID = "test-app" + SPECIAL_APPLICATION_VERSION = "1.0.0" + SPOT_0_EXPECTED_RESULT_FILES = [ ("tissue_qc_segmentation_map_image.tiff", 1642856, 10), ("tissue_qc_geojson_polygons.json", 259955, 10), From 942d7f0cbbcddc35fd156488549a8b177fc72ee9 Mon Sep 17 00:00:00 2001 From: Ari Angelo Date: Tue, 28 Apr 2026 16:03:49 +0200 Subject: [PATCH 3/4] chore(tests): skip special-app tests on staging; guard import - Remove SPECIAL_APPLICATION_ID/VERSION from staging constants entirely - Guard the import in e2e_test.py with try/except so staging doesn't NameError - Add skipif(SPECIAL_APPLICATION_ID is None) to both special-app tests so they are silently skipped on staging but still run on production (0.99.0) Co-Authored-By: Claude Sonnet 4.6 (1M context) --- tests/aignostics/platform/e2e_test.py | 10 ++++++++-- tests/constants_test.py | 3 --- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/aignostics/platform/e2e_test.py b/tests/aignostics/platform/e2e_test.py index 3696fc675..c620d7a2d 100644 --- a/tests/aignostics/platform/e2e_test.py +++ b/tests/aignostics/platform/e2e_test.py @@ -36,8 +36,6 @@ PIPELINE_GPU_TYPE, PIPELINE_MAX_GPUS_PER_SLIDE, PIPELINE_NODE_ACQUISITION_TIMEOUT_MINUTES, - SPECIAL_APPLICATION_ID, - SPECIAL_APPLICATION_VERSION, SPOT_0_CRC32C, SPOT_0_GS_URL, SPOT_0_HEIGHT, @@ -62,6 +60,12 @@ TEST_APPLICATION_VERSION, ) +try: + from tests.constants_test import SPECIAL_APPLICATION_ID, SPECIAL_APPLICATION_VERSION +except ImportError: + SPECIAL_APPLICATION_ID = None # type: ignore[assignment] + SPECIAL_APPLICATION_VERSION = None # type: ignore[assignment] + TEST_APPLICATION_SUBMIT_AND_WAIT_DEADLINE_SECONDS = 60 * 45 # 45 minutes TEST_APPLICATION_SUBMIT_AND_WAIT_DUE_DATE_SECONDS = 60 * 10 # 10 minutes TEST_APPLICATION_SUBMIT_AND_WAIT_TIMEOUT_SECONDS = ( @@ -610,6 +614,7 @@ def test_platform_heta_app_submit() -> None: @pytest.mark.e2e @pytest.mark.stress_only @pytest.mark.long_running +@pytest.mark.skipif(SPECIAL_APPLICATION_ID is None, reason="Special application not configured for this environment") @pytest.mark.timeout(timeout=SPECIAL_APPLICATION_SUBMIT_AND_FIND_SUBMIT_TIMEOUT_SECONDS) def test_platform_special_app_submit() -> None: """Test application runs with the special application. @@ -678,6 +683,7 @@ def test_platform_special_app_submit() -> None: @pytest.mark.stress_only @pytest.mark.long_running @pytest.mark.scheduled_only +@pytest.mark.skipif(SPECIAL_APPLICATION_ID is None, reason="Special application not configured for this environment") @pytest.mark.timeout(timeout=SPECIAL_APPLICATION_FIND_AND_VALIDATE_TIMEOUT_SECONDS) def test_platform_special_app_find_and_validate() -> None: """Test application runs with the special application. diff --git a/tests/constants_test.py b/tests/constants_test.py index fdb396476..6198e0e9f 100644 --- a/tests/constants_test.py +++ b/tests/constants_test.py @@ -108,9 +108,6 @@ PIPELINE_CPU_PROVISIONING_MODE = "SPOT" PIPELINE_NODE_ACQUISITION_TIMEOUT_MINUTES = 30 - SPECIAL_APPLICATION_ID = "test-app" - SPECIAL_APPLICATION_VERSION = "1.0.0" - SPOT_0_EXPECTED_RESULT_FILES = [ ("tissue_qc_segmentation_map_image.tiff", 1642856, 10), ("tissue_qc_geojson_polygons.json", 259955, 10), From 0d5af5f6752df2b95a1f2ffa0cb2fc59aa8dead0 Mon Sep 17 00:00:00 2001 From: Ari Angelo Date: Tue, 28 Apr 2026 16:24:20 +0200 Subject: [PATCH 4/4] chore(tests): use None sentinel for SPECIAL_APPLICATION on staging Simpler than a try/except guard: staging defines SPECIAL_APPLICATION_ID and SPECIAL_APPLICATION_VERSION as None, the regular import works, and the existing skipif(SPECIAL_APPLICATION_ID is None) handles the rest. Co-Authored-By: Claude Sonnet 4.6 (1M context) --- tests/aignostics/platform/e2e_test.py | 8 ++------ tests/constants_test.py | 3 +++ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/aignostics/platform/e2e_test.py b/tests/aignostics/platform/e2e_test.py index c620d7a2d..26fea08ae 100644 --- a/tests/aignostics/platform/e2e_test.py +++ b/tests/aignostics/platform/e2e_test.py @@ -36,6 +36,8 @@ PIPELINE_GPU_TYPE, PIPELINE_MAX_GPUS_PER_SLIDE, PIPELINE_NODE_ACQUISITION_TIMEOUT_MINUTES, + SPECIAL_APPLICATION_ID, + SPECIAL_APPLICATION_VERSION, SPOT_0_CRC32C, SPOT_0_GS_URL, SPOT_0_HEIGHT, @@ -60,12 +62,6 @@ TEST_APPLICATION_VERSION, ) -try: - from tests.constants_test import SPECIAL_APPLICATION_ID, SPECIAL_APPLICATION_VERSION -except ImportError: - SPECIAL_APPLICATION_ID = None # type: ignore[assignment] - SPECIAL_APPLICATION_VERSION = None # type: ignore[assignment] - TEST_APPLICATION_SUBMIT_AND_WAIT_DEADLINE_SECONDS = 60 * 45 # 45 minutes TEST_APPLICATION_SUBMIT_AND_WAIT_DUE_DATE_SECONDS = 60 * 10 # 10 minutes TEST_APPLICATION_SUBMIT_AND_WAIT_TIMEOUT_SECONDS = ( diff --git a/tests/constants_test.py b/tests/constants_test.py index 6198e0e9f..8318b7e7e 100644 --- a/tests/constants_test.py +++ b/tests/constants_test.py @@ -108,6 +108,9 @@ PIPELINE_CPU_PROVISIONING_MODE = "SPOT" PIPELINE_NODE_ACQUISITION_TIMEOUT_MINUTES = 30 + SPECIAL_APPLICATION_ID = None + SPECIAL_APPLICATION_VERSION = None + SPOT_0_EXPECTED_RESULT_FILES = [ ("tissue_qc_segmentation_map_image.tiff", 1642856, 10), ("tissue_qc_geojson_polygons.json", 259955, 10),