async def test_client( minimal_configuration: None, mock_env: None, network_name: str, mocked_engine: AsyncMock, monkeypatch, ) -> AsyncIterable[TestClient]: monkeypatch.setenv("SC_BOOT_MODE", "production") monkeypatch.setenv("DYNAMIC_SIDECAR_EXPOSE_PORT", "true") monkeypatch.setenv("SIMCORE_SERVICES_NETWORK_NAME", network_name) monkeypatch.delenv("DYNAMIC_SIDECAR_MOUNT_PATH_DEV", raising=False) monkeypatch.setenv("DIRECTOR_V2_DYNAMIC_SCHEDULER_ENABLED", "true") monkeypatch.setenv("DIRECTOR_V2_DASK_CLIENT_ENABLED", "false") monkeypatch.setenv("DIRECTOR_V2_DASK_SCHEDULER_ENABLED", "false") monkeypatch.setenv("POSTGRES_HOST", "mocked_host") monkeypatch.setenv("POSTGRES_USER", "mocked_user") monkeypatch.setenv("POSTGRES_PASSWORD", "mocked_password") monkeypatch.setenv("POSTGRES_DB", "mocked_db") monkeypatch.setenv("DIRECTOR_V2_POSTGRES_ENABLED", "false") monkeypatch.setenv("R_CLONE_S3_PROVIDER", "MINIO") # patch host for dynamic-sidecar, not reachable via localhost # the dynamic-sidecar (running inside a container) will use # this address to reach the rabbit service monkeypatch.setenv("RABBIT_HOST", f"{get_localhost_ip()}") settings = AppSettings.create_from_envs() app = init_app(settings) app.state.engine = mocked_engine async with TestClient(app) as client: yield client
async def test_client( minimal_configuration: None, loop: asyncio.BaseEventLoop, mock_env: None, network_name: str, monkeypatch, ) -> TestClient: monkeypatch.setenv("SC_BOOT_MODE", "production") monkeypatch.setenv("DYNAMIC_SIDECAR_EXPOSE_PORT", "true") monkeypatch.setenv("SIMCORE_SERVICES_NETWORK_NAME", network_name) monkeypatch.delenv("DYNAMIC_SIDECAR_MOUNT_PATH_DEV", raising=False) monkeypatch.setenv("DIRECTOR_V2_DYNAMIC_SCHEDULER_ENABLED", "true") monkeypatch.setenv("DIRECTOR_V2_CELERY_SCHEDULER_ENABLED", "false") monkeypatch.setenv("DIRECTOR_V2_DASK_CLIENT_ENABLED", "false") monkeypatch.setenv("DIRECTOR_V2_DASK_SCHEDULER_ENABLED", "false") monkeypatch.setenv("POSTGRES_HOST", "mocked_host") monkeypatch.setenv("POSTGRES_USER", "mocked_user") monkeypatch.setenv("POSTGRES_PASSWORD", "mocked_password") monkeypatch.setenv("POSTGRES_DB", "mocked_db") monkeypatch.setenv("DIRECTOR_V2_POSTGRES_ENABLED", "false") settings = AppSettings.create_from_envs() app = init_app(settings) async with TestClient(app) as client: yield client
def client(mock_env: None) -> Iterable[TestClient]: settings = AppSettings.create_from_envs() app = init_app(settings) print("Application settings\n", pformat(settings)) # NOTE: this way we ensure the events are run in the application # since it starts the app on a test server with TestClient(app, raise_server_exceptions=True) as client: yield client
def client(loop) -> TestClient: settings = AppSettings.create_from_env(boot_mode=BootModeEnum.PRODUCTION) app = init_app(settings) # NOTE: this way we ensure the events are run in the application # since it starts the app on a test server with TestClient(app, raise_server_exceptions=True) as client: yield client
def test_dask_clients_pool_missing_raises_configuration_error( minimal_dask_config: None, monkeypatch: MonkeyPatch): monkeypatch.setenv("DIRECTOR_V2_DASK_CLIENT_ENABLED", "0") settings = AppSettings.create_from_envs() app = init_app(settings) with TestClient(app, raise_server_exceptions=True) as client: with pytest.raises(ConfigurationError): DaskClientsPool.instance(client.app)
def test_dask_clients_pool_properly_setup_and_deleted( minimal_dask_config: None, mocker: MockerFixture): mocked_dask_clients_pool = mocker.patch( "simcore_service_director_v2.modules.dask_clients_pool.DaskClientsPool", autospec=True, ) mocked_dask_clients_pool.create.return_value = mocked_dask_clients_pool settings = AppSettings.create_from_envs() app = init_app(settings) with TestClient(app, raise_server_exceptions=True) as client: mocked_dask_clients_pool.create.assert_called_once() mocked_dask_clients_pool.delete.assert_called_once()
async def initialized_app(monkeypatch: MonkeyPatch) -> Iterator[FastAPI]: monkeypatch.setenv("DYNAMIC_SIDECAR_IMAGE", "itisfoundation/dynamic-sidecar:MOCK") monkeypatch.setenv("SIMCORE_SERVICES_NETWORK_NAME", "test_network_name") monkeypatch.setenv("TRAEFIK_SIMCORE_ZONE", "test_traefik_zone") monkeypatch.setenv("SWARM_STACK_NAME", "test_swarm_name") monkeypatch.setenv("DIRECTOR_V2_DYNAMIC_SCHEDULER_ENABLED", "false") monkeypatch.setenv("SC_BOOT_MODE", "production") settings = AppSettings.create_from_envs() app = init_app(settings) async with LifespanManager(app): yield app
def test_scheduler_raises_exception_for_missing_dependencies( minimal_celery_scheduler_config: None, aiopg_engine: Iterator[aiopg.sa.engine.Engine], # type: ignore monkeypatch: MonkeyPatch, missing_dependency: str, ): # disable the dependency monkeypatch.setenv(missing_dependency, "0") # create the client settings = AppSettings.create_from_envs() app = init_app(settings) with pytest.raises(ConfigurationError): with TestClient(app, raise_server_exceptions=True) as _: pass
async def director_v2_client( minimal_configuration: None, network_name: str, monkeypatch, ) -> AsyncIterable[httpx.AsyncClient]: # Works as below line in docker.compose.yml # ${DOCKER_REGISTRY:-itisfoundation}/dynamic-sidecar:${DOCKER_IMAGE_TAG:-latest} registry = os.environ.get("DOCKER_REGISTRY", "local") image_tag = os.environ.get("DOCKER_IMAGE_TAG", "production") image_name = f"{registry}/dynamic-sidecar:{image_tag}" logger.warning("Patching to: DYNAMIC_SIDECAR_IMAGE=%s", image_name) monkeypatch.setenv("DYNAMIC_SIDECAR_IMAGE", image_name) monkeypatch.setenv("TRAEFIK_SIMCORE_ZONE", "test_traefik_zone") monkeypatch.setenv("SWARM_STACK_NAME", "test_swarm_name") monkeypatch.setenv("SC_BOOT_MODE", "production") monkeypatch.setenv("DYNAMIC_SIDECAR_EXPOSE_PORT", "true") monkeypatch.setenv("PROXY_EXPOSE_PORT", "true") monkeypatch.setenv("SIMCORE_SERVICES_NETWORK_NAME", network_name) monkeypatch.delenv("DYNAMIC_SIDECAR_MOUNT_PATH_DEV", raising=False) monkeypatch.setenv("DIRECTOR_V2_DYNAMIC_SCHEDULER_ENABLED", "true") monkeypatch.setenv("DIRECTOR_V2_DASK_CLIENT_ENABLED", "false") monkeypatch.setenv("DIRECTOR_V2_DASK_SCHEDULER_ENABLED", "false") monkeypatch.setenv("POSTGRES_HOST", "mocked_host") monkeypatch.setenv("POSTGRES_USER", "mocked_user") monkeypatch.setenv("POSTGRES_PASSWORD", "mocked_password") monkeypatch.setenv("POSTGRES_DB", "mocked_db") monkeypatch.setenv("DIRECTOR_V2_POSTGRES_ENABLED", "false") monkeypatch.setenv("R_CLONE_S3_PROVIDER", "MINIO") # patch host for dynamic-sidecar, not reachable via localhost # the dynamic-sidecar (running inside a container) will use # this address to reach the rabbit service monkeypatch.setenv("RABBIT_HOST", f"{get_ip()}") settings = AppSettings.create_from_envs() app = init_app(settings) async with LifespanManager(app): async with httpx.AsyncClient( app=app, base_url="http://testserver/v2" ) as client: yield client
"""Main application to be deployed in for example uvicorn. """ from fastapi import FastAPI from simcore_service_director_v2.core.application import init_app # SINGLETON FastAPI app the_app: FastAPI = init_app()
async def initialized_app(mock_env: None) -> AsyncIterable[FastAPI]: settings = AppSettings.create_from_envs() app = init_app(settings) async with LifespanManager(app): yield app