Code import - branch release/SIENTIAPDE-1645
This commit is contained in:
108
e2e/test_cleanup_files_workflow.py
Normal file
108
e2e/test_cleanup_files_workflow.py
Normal file
@@ -0,0 +1,108 @@
|
||||
"""
|
||||
End-to-end tests for CleanupFiles workflow.
|
||||
|
||||
Covers scenarios 3.x: cleanup of temporary local directories.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
from temporalio.testing import WorkflowEnvironment
|
||||
from temporalio.worker import Worker
|
||||
|
||||
from e2e.helpers import make_workflow_id, start_and_await_workflow
|
||||
from model_manager.workflows.cleanup_files import CleanupFiles
|
||||
|
||||
# Matches Cleanup.dir_timestamp_pattern: name_YYYYMMDD_HHMMSS_microseconds
|
||||
_STALE_DIR_OLD = 'stale_run_20200102_030405_000001'
|
||||
_STALE_DIR_OLDER = 'stale_run_20191231_235959_999999'
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@pytest.mark.integration
|
||||
async def test_scenario_3_1_1_cleanup_with_no_temp_dirs(
|
||||
temporal_test_env: WorkflowEnvironment,
|
||||
temporal_worker: Worker,
|
||||
tmp_path,
|
||||
):
|
||||
"""Scenario 3.1.1 – Cleanup when the temp directory is empty.
|
||||
|
||||
The cleanup_temp_directories activity should complete without error
|
||||
and the workflow should finish successfully.
|
||||
"""
|
||||
# Use an empty temp directory as the reports path
|
||||
empty_dir = tmp_path / 'reports_temp'
|
||||
empty_dir.mkdir()
|
||||
|
||||
result = await start_and_await_workflow(
|
||||
temporal_test_env.client,
|
||||
CleanupFiles.run,
|
||||
{'temp_path': str(empty_dir)},
|
||||
make_workflow_id('test-s3-1-1'),
|
||||
)
|
||||
|
||||
# Workflow returns None on success
|
||||
assert result is None
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@pytest.mark.integration
|
||||
async def test_scenario_3_1_2_cleanup_removes_old_temp_dirs(
|
||||
temporal_test_env: WorkflowEnvironment,
|
||||
temporal_worker: Worker,
|
||||
tmp_path,
|
||||
):
|
||||
"""Scenario 3.1.2 – Cleanup removes stale subdirectories from the temp dir.
|
||||
|
||||
Creates two subdirectories with timestamp suffixes inside the reports
|
||||
temp directory and verifies the activity removes them.
|
||||
"""
|
||||
reports_dir = tmp_path / 'reports_temp'
|
||||
reports_dir.mkdir()
|
||||
|
||||
# Create two stale run directories (names must match cleanup activity regex)
|
||||
stale1 = reports_dir / _STALE_DIR_OLD
|
||||
stale2 = reports_dir / _STALE_DIR_OLDER
|
||||
stale1.mkdir()
|
||||
stale2.mkdir()
|
||||
(stale1 / 'model.pkl').write_bytes(b'fake-model-data')
|
||||
(stale2 / 'report.json').write_bytes(b'{"status": "old"}')
|
||||
|
||||
result = await start_and_await_workflow(
|
||||
temporal_test_env.client,
|
||||
CleanupFiles.run,
|
||||
{'temp_path': str(reports_dir)},
|
||||
make_workflow_id('test-s3-1-2'),
|
||||
)
|
||||
|
||||
assert result is None
|
||||
|
||||
# The activity should have cleaned up the stale directories
|
||||
remaining = list(reports_dir.iterdir())
|
||||
assert len(remaining) == 0, (
|
||||
f'Expected all stale dirs to be removed, but found: {remaining}'
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@pytest.mark.integration
|
||||
async def test_scenario_3_1_3_cleanup_nonexistent_temp_path(
|
||||
temporal_test_env: WorkflowEnvironment,
|
||||
temporal_worker: Worker,
|
||||
tmp_path,
|
||||
):
|
||||
"""Scenario 3.1.3 – Cleanup with a temp_path that does not exist.
|
||||
|
||||
The activity must handle a missing directory gracefully without
|
||||
raising an unhandled exception, since the directory may have already
|
||||
been cleaned by a previous run.
|
||||
"""
|
||||
nonexistent = str(tmp_path / 'does_not_exist' / 'reports')
|
||||
|
||||
# Should not raise — the activity is expected to handle a missing path
|
||||
result = await start_and_await_workflow(
|
||||
temporal_test_env.client,
|
||||
CleanupFiles.run,
|
||||
{'temp_path': nonexistent},
|
||||
make_workflow_id('test-s3-1-3'),
|
||||
)
|
||||
|
||||
assert result is None
|
||||
Reference in New Issue
Block a user