Расписать примеры unit-тестов на следующую функцию:
import aiohttp
async def logs(container: str, name: str) -> None:
connection = aiohttp.UnixConnector(path="/var/run/docker.sock")
async with aiohttp.ClientSession(connector=connection) as session:
path = f"http://xx/containers/{container}/logs"
query = {"follow": 1, "stdout": 1}
async with session.get(url=path, params=query) as response:
async for line in response.content:
print(name, line)
NOTE: Все тесты запускаются из корневого каталога проекта.
Сборка проекта:
git clone https://github.com/SciBourne/test-task--docker-logs-unit-tests.git
cd test-task--docker-logs-unit-tests
poetry env use python3.11
poetry install
Полный набор:
poetry run pytest
Только рекомендуемый набор:
poetry run pytest -m logs
Только aiohttp-специфичные тесты:
poetry run pytest -m logs_aiohttp_specific
Для рекомендуемого набора тестов, объединённых под классом TestLogs
, не принципиально, какой в функции logs
используется http-клиент. Изолируясь stub-сервером и mock-объектами, проверяется, действительно ли функция устанавливает соединение средствами HTTP поверх Unix Domain Socket, в частности, подразумевается получение доступа к Docker API, принимает поток данных журнала в виде строк и выводит их на печать в stdout
.
Функция должна быть относительно эквивалентна запросу:
curl --unix-socket /var/run/docker.sock http://xx/containers/9c0aae524a78/logs
В этом наборе производится подмена методов aiohttp-клиента, используемого в функции. При изменении кода как самой aiohttp, так и тела функции (пусть и при условии сохранения прежней функциональности), скорее всего приведёт к неработоспособности этого набора.