SIENTIAPDE-1350: Add cleanup schedule tests and configure worker with task queues from env vars
This commit is contained in:
@@ -18,6 +18,8 @@ def mock_env_vars():
|
||||
'TEMPORAL_HOST': 'localhost:7233',
|
||||
'TEMPORAL_NAMESPACE': 'test-namespace',
|
||||
'PROJECT_NAME': 'test-project',
|
||||
'TRAIN_TASK_QUEUE': 'train_model-local_queue',
|
||||
'CLEANUP_TASK_QUEUE': 'cleanup-local_queue',
|
||||
}
|
||||
|
||||
with patch.dict(os.environ, env_vars, clear=False):
|
||||
@@ -454,71 +456,76 @@ async def test_main_worker_configuration(
|
||||
|
||||
mock_create_cleanup_schedule.return_value = AsyncMock()
|
||||
|
||||
# Setup mocks
|
||||
mock_get_logger.return_value = mock_logger
|
||||
mock_build_mongodb.return_value = {
|
||||
'connection_string': 'mongodb://test',
|
||||
'database_name': 'test_db',
|
||||
'uri': 'localhost:27018',
|
||||
}
|
||||
mock_build_postgres.return_value = {}
|
||||
mock_build_mlflow.return_value = {}
|
||||
mock_build_minio.return_value = {}
|
||||
# Patch the task queue constants directly
|
||||
with (
|
||||
patch('model_manager.worker.worker.TRAIN_TASK_QUEUE', 'train_model-local_queue'),
|
||||
patch('model_manager.worker.worker.CLEANUP_TASK_QUEUE', 'cleanup-local_queue'),
|
||||
):
|
||||
# Setup mocks
|
||||
mock_get_logger.return_value = mock_logger
|
||||
mock_build_mongodb.return_value = {
|
||||
'connection_string': 'mongodb://test',
|
||||
'database_name': 'test_db',
|
||||
'uri': 'localhost:27018',
|
||||
}
|
||||
mock_build_postgres.return_value = {}
|
||||
mock_build_mlflow.return_value = {}
|
||||
mock_build_minio.return_value = {}
|
||||
|
||||
mock_notification_handler = Mock()
|
||||
mock_notification_handler_class.return_value = mock_notification_handler
|
||||
mock_notification_handler = Mock()
|
||||
mock_notification_handler_class.return_value = mock_notification_handler
|
||||
|
||||
mock_activities = AsyncMock()
|
||||
mock_activities.update_experiment_run = Mock()
|
||||
mock_activities.validate_train_params = Mock()
|
||||
mock_activities.train_model = Mock()
|
||||
mock_activities.cleanup_resources = Mock()
|
||||
mock_activities.shutdown = AsyncMock()
|
||||
mock_activities_class.return_value = mock_activities
|
||||
mock_activities = AsyncMock()
|
||||
mock_activities.update_experiment_run = Mock()
|
||||
mock_activities.validate_train_params = Mock()
|
||||
mock_activities.train_model = Mock()
|
||||
mock_activities.cleanup_resources = Mock()
|
||||
mock_activities.shutdown = AsyncMock()
|
||||
mock_activities_class.return_value = mock_activities
|
||||
|
||||
mock_runtime = Mock()
|
||||
mock_runtime_class.return_value = mock_runtime
|
||||
mock_runtime = Mock()
|
||||
mock_runtime_class.return_value = mock_runtime
|
||||
|
||||
mock_client_instance = AsyncMock()
|
||||
mock_client_class.connect = AsyncMock(return_value=mock_client_instance)
|
||||
mock_client_instance = AsyncMock()
|
||||
mock_client_class.connect = AsyncMock(return_value=mock_client_instance)
|
||||
|
||||
mock_worker_instance = Mock()
|
||||
mock_worker_instance.run = AsyncMock(side_effect=asyncio.CancelledError())
|
||||
mock_worker_class.return_value = mock_worker_instance
|
||||
mock_worker_instance = Mock()
|
||||
mock_worker_instance.run = AsyncMock(side_effect=asyncio.CancelledError())
|
||||
mock_worker_class.return_value = mock_worker_instance
|
||||
|
||||
mock_app_up = Mock()
|
||||
mock_metrics.APP_UP.labels.return_value = mock_app_up
|
||||
mock_app_up = Mock()
|
||||
mock_metrics.APP_UP.labels.return_value = mock_app_up
|
||||
|
||||
# Run main()
|
||||
with pytest.raises(SystemExit):
|
||||
await main()
|
||||
# Run main()
|
||||
with pytest.raises(SystemExit):
|
||||
await main()
|
||||
|
||||
# Verify Worker was created with correct configuration
|
||||
assert mock_worker_class.call_count == 2
|
||||
# Verify Worker was created with correct configuration
|
||||
assert mock_worker_class.call_count == 2
|
||||
|
||||
# Primeira chamada: worker de treinamento (train_model-local_queue)
|
||||
train_call_args = mock_worker_class.call_args_list[0]
|
||||
assert train_call_args[0][0] == mock_client_instance # temporal_client
|
||||
assert train_call_args[1]['task_queue'] == 'train_model-local_queue'
|
||||
assert train_call_args[1]['max_concurrent_workflow_tasks'] == 10
|
||||
assert train_call_args[1]['max_concurrent_activities'] == 10
|
||||
assert train_call_args[1]['max_concurrent_local_activities'] == 10
|
||||
assert train_call_args[1]['max_cached_workflows'] == 100
|
||||
# Primeira chamada: worker de treinamento (train_model-local_queue)
|
||||
train_call_args = mock_worker_class.call_args_list[0]
|
||||
assert train_call_args[0][0] == mock_client_instance # temporal_client
|
||||
assert train_call_args[1]['task_queue'] == 'train_model-local_queue'
|
||||
assert train_call_args[1]['max_concurrent_workflow_tasks'] == 10
|
||||
assert train_call_args[1]['max_concurrent_activities'] == 10
|
||||
assert train_call_args[1]['max_concurrent_local_activities'] == 10
|
||||
assert train_call_args[1]['max_cached_workflows'] == 100
|
||||
|
||||
train_activities_list = train_call_args[1]['activities']
|
||||
assert mock_activities.update_experiment_run in train_activities_list
|
||||
assert mock_activities.validate_train_params in train_activities_list
|
||||
assert mock_activities.train_model in train_activities_list
|
||||
assert mock_activities.cleanup_resources in train_activities_list
|
||||
train_activities_list = train_call_args[1]['activities']
|
||||
assert mock_activities.update_experiment_run in train_activities_list
|
||||
assert mock_activities.validate_train_params in train_activities_list
|
||||
assert mock_activities.train_model in train_activities_list
|
||||
assert mock_activities.cleanup_resources in train_activities_list
|
||||
|
||||
# Segunda chamada: worker de cleanup (cleanup-local_queue)
|
||||
cleanup_call_args = mock_worker_class.call_args_list[1]
|
||||
assert cleanup_call_args[0][0] == mock_client_instance # temporal_client
|
||||
assert cleanup_call_args[1]['task_queue'] == 'cleanup-local_queue'
|
||||
assert cleanup_call_args[1]['max_concurrent_workflow_tasks'] == 20
|
||||
assert cleanup_call_args[1]['max_concurrent_activities'] == 20
|
||||
assert cleanup_call_args[1]['max_concurrent_local_activities'] == 20
|
||||
assert cleanup_call_args[1]['max_cached_workflows'] == 100
|
||||
# Segunda chamada: worker de cleanup (cleanup-local_queue)
|
||||
cleanup_call_args = mock_worker_class.call_args_list[1]
|
||||
assert cleanup_call_args[0][0] == mock_client_instance # temporal_client
|
||||
assert cleanup_call_args[1]['task_queue'] == 'cleanup-local_queue'
|
||||
assert cleanup_call_args[1]['max_concurrent_workflow_tasks'] == 20
|
||||
assert cleanup_call_args[1]['max_concurrent_activities'] == 20
|
||||
assert cleanup_call_args[1]['max_concurrent_local_activities'] == 20
|
||||
assert cleanup_call_args[1]['max_cached_workflows'] == 100
|
||||
|
||||
|
||||
@patch('model_manager.worker.worker.asyncio.run')
|
||||
|
||||
Reference in New Issue
Block a user