import logging import time from pathlib import Path import pytest import testcontainers.compose from pyinfra.config import get_config from pyinfra.storage import get_storage_from_config logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) TESTS_DIR = Path(__file__).resolve().parents[0] @pytest.fixture(scope="session", autouse=True) def docker_compose(sleep_seconds=30): """Note: `autouse` can be set to `False` while working on the code to speed up the testing. In that case, run `docker-compose up` in the tests directory manually before running the tests. """ logger.info(f"Starting docker containers with {TESTS_DIR}/docker-compose.yml...") compose = testcontainers.compose.DockerCompose(TESTS_DIR, compose_file_name="docker-compose.yml") compose.start() logger.info(f"Sleeping for {sleep_seconds} seconds to wait for containers to finish startup... ") time.sleep(sleep_seconds) yield compose compose.stop() @pytest.fixture(scope="session") def test_storage_config(storage_backend, bucket_name, monitoring_enabled): config = get_config() config.storage_backend = storage_backend config.storage_bucket = bucket_name config.storage_azureconnectionstring = "DefaultEndpointsProtocol=https;AccountName=iqserdevelopment;AccountKey=4imAbV9PYXaztSOMpIyAClg88bAZCXuXMGJG0GA1eIBpdh2PlnFGoRBnKqLy2YZUSTmZ3wJfC7tzfHtuC6FEhQ==;EndpointSuffix=core.windows.net" config.monitoring_enabled = monitoring_enabled config.prometheus_metric_prefix = "test" config.prometheus_port = 8080 config.prometheus_host = "0.0.0.0" return config @pytest.fixture(scope="session") def test_queue_config(): config = get_config() config.rabbitmq_connection_sleep = 2 config.rabbitmq_heartbeat = 4 return config @pytest.fixture def payload(x_tenant_id): x_tenant_entry = {"X-TENANT-ID": x_tenant_id} if x_tenant_id else {} return { "dossierId": "test", "fileId": "test", "targetFileExtension": "json.gz", "responseFileExtension": "json.gz", **x_tenant_entry, } @pytest.fixture(scope="session") def response_payload(): return { "dossierId": "test", "fileId": "test", } @pytest.fixture(scope="session") def storage(test_storage_config): logger.debug("Setup for storage") storage = get_storage_from_config(test_storage_config) storage.make_bucket(test_storage_config.storage_bucket) storage.clear_bucket(test_storage_config.storage_bucket) yield storage logger.debug("Teardown for storage") try: storage.clear_bucket(test_storage_config.storage_bucket) except: pass