Source code for bec_lib.tests.fixtures

from __future__ import annotations

import copy
import os
import threading
import uuid
from unittest import mock

import pytest
import yaml

from bec_lib.service_config import ServiceConfig
from bec_lib.tests.utils import ClientMock, ConnectorMock, DMClientMock


[docs] @pytest.fixture def threads_check(): threads_at_start = set(th for th in threading.enumerate() if th is not threading.main_thread()) yield threads_after = set(th for th in threading.enumerate() if th is not threading.main_thread()) additional_threads = threads_after - threads_at_start assert ( len(additional_threads) == 0 ), f"Test creates {len(additional_threads)} threads that are not cleaned: {additional_threads}"
[docs] @pytest.fixture(scope="session") def test_config_yaml_file_path(): return os.path.join(os.path.dirname(__file__), "test_config.yaml")
[docs] @pytest.fixture(scope="session") def test_config_yaml(test_config_yaml_file_path): with open(test_config_yaml_file_path, "r") as config_yaml_file: return yaml.safe_load(config_yaml_file)
[docs] @pytest.fixture(scope="session") def session_from_test_config(test_config_yaml): device_configs = [] session_id = str(uuid.uuid4()) for name, conf in test_config_yaml.items(): dev_conf = { "id": str(uuid.uuid4()), "accessGroups": "customer", "name": name, "sessionId": session_id, "enabled": conf["enabled"], "read_only": conf["readOnly"], } dev_conf.update(conf) device_configs.append(dev_conf) session = {"accessGroups": "customer", "devices": device_configs} return session
[docs] @pytest.fixture def device_manager_class(): return DMClientMock
[docs] @pytest.fixture def device_manager(device_manager_class): service_mock = mock.MagicMock() service_mock.connector = ConnectorMock("", store_data=False) dev_manager = device_manager_class(service_mock) dev_manager.config_update_handler = mock.MagicMock() yield dev_manager dev_manager.shutdown()
[docs] @pytest.fixture def dm_with_devices(session_from_test_config, device_manager): device_manager._session = copy.deepcopy(session_from_test_config) device_manager._load_session() yield device_manager
[docs] @pytest.fixture() def bec_client_mock(dm_with_devices): client = ClientMock( ServiceConfig(redis={"host": "host", "port": 123}, scibec={"host": "host", "port": 123}), ConnectorMock, wait_for_server=False, ) client.start() device_manager = dm_with_devices for name, dev in device_manager.devices.items(): dev._info["hints"] = {"fields": [name]} client.device_manager = device_manager try: yield client finally: client.shutdown() client._reset_singleton() device_manager.devices.flush()