using testcontainers module

This commit is contained in:
Matthias Bisping 2022-03-22 14:37:47 +01:00
parent 6ecd3a326b
commit f667bc72dd
3 changed files with 21 additions and 2 deletions

View File

@ -12,3 +12,5 @@ TEST_DIR = MODULE_DIR / "test"
CONFIG_FILE = PACKAGE_ROOT_DIR / "config.yaml" CONFIG_FILE = PACKAGE_ROOT_DIR / "config.yaml"
TEST_CONFIG_FILE = TEST_DIR / "config.yaml" TEST_CONFIG_FILE = TEST_DIR / "config.yaml"
COMPOSE_PATH = PACKAGE_ROOT_DIR

View File

@ -1,11 +1,14 @@
import json import json
import logging import logging
import time
from unittest.mock import Mock from unittest.mock import Mock
import pika
import pytest import pytest
import testcontainers.compose
from pyinfra.exceptions import UnknownClient from pyinfra.exceptions import UnknownClient
from pyinfra.locations import TEST_DIR from pyinfra.locations import TEST_DIR, COMPOSE_PATH
from pyinfra.queue.queue_manager.pika_queue_manager import PikaQueueManager, get_connection_params from pyinfra.queue.queue_manager.pika_queue_manager import PikaQueueManager, get_connection_params
from pyinfra.queue.queue_manager.queue_manager import QueueManager from pyinfra.queue.queue_manager.queue_manager import QueueManager
from pyinfra.storage.adapters.azure import AzureStorageAdapter from pyinfra.storage.adapters.azure import AzureStorageAdapter
@ -67,6 +70,17 @@ def storage(client_name, bucket_name, request):
storage.clear_bucket(bucket_name) storage.clear_bucket(bucket_name)
@pytest.fixture(scope="session", autouse=True)
def docker_compose(sleep_seconds=30):
logger.info(f"Starting docker containers with {COMPOSE_PATH}/docker-compose.yml...")
compose = testcontainers.compose.DockerCompose(COMPOSE_PATH)
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()
def get_endpoint_from_running_container(container_name, config): def get_endpoint_from_running_container(container_name, config):
port = config.endpoint.split(":")[-1] port = config.endpoint.split(":")[-1]
endpoint = f"{docker.get_ip_address(container_name)}:{port}" endpoint = f"{docker.get_ip_address(container_name)}:{port}"
@ -112,7 +126,10 @@ def queue_manager(queue_manager_name):
queue_manager = get_queue_manager(queue_manager_name) queue_manager = get_queue_manager(queue_manager_name)
yield queue_manager yield queue_manager
if queue_manager_name == "pika": if queue_manager_name == "pika":
try:
queue_manager.connection.close() queue_manager.connection.close()
except (pika.exceptions.StreamLostError, ConnectionResetError):
pass
@pytest.fixture(scope="session") @pytest.fixture(scope="session")