test(v2): define secure control-plane contracts
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import importlib
|
||||
from collections.abc import AsyncIterator
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import pytest_asyncio
|
||||
from alembic import command
|
||||
from httpx import ASGITransport, AsyncClient
|
||||
|
||||
cli = importlib.import_module("backup_tool.cli")
|
||||
config = importlib.import_module("backup_tool.config")
|
||||
Settings = config.Settings
|
||||
|
||||
|
||||
def make_settings(tmp_path: Path) -> Any:
|
||||
key = tmp_path / "master.key"
|
||||
key.write_bytes(b"m2-test-master-key-material-32-bytes-minimum")
|
||||
key.chmod(0o600)
|
||||
data = tmp_path / "data"
|
||||
repositories = tmp_path / "repositories"
|
||||
sources = tmp_path / "sources"
|
||||
restores = tmp_path / "restores"
|
||||
for path in (data, repositories, sources, restores):
|
||||
path.mkdir()
|
||||
return Settings(
|
||||
data_dir=data,
|
||||
database_url=f"sqlite+aiosqlite:///{data / 'metadata.db'}",
|
||||
repository_roots=(repositories,),
|
||||
local_source_roots=(sources,),
|
||||
restore_roots=(restores,),
|
||||
master_key_file=key,
|
||||
public_base_url="https://testserver",
|
||||
)
|
||||
|
||||
|
||||
@pytest_asyncio.fixture
|
||||
async def app_client(tmp_path: Path) -> AsyncIterator[tuple[AsyncClient, Any]]:
|
||||
settings = make_settings(tmp_path)
|
||||
command.upgrade(cli.build_alembic_config(settings), "head")
|
||||
app_module = importlib.import_module("backup_tool.api.app")
|
||||
app = app_module.create_app(settings)
|
||||
async with AsyncClient(
|
||||
transport=ASGITransport(app=app), base_url="https://testserver"
|
||||
) as client:
|
||||
yield client, settings
|
||||
await app.state.engine.dispose()
|
||||
Reference in New Issue
Block a user