SciBourne / test-task--docker-logs-unit-tests

Test task for: logs(cont, name) -> None

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

License: GPL v3

codecov gitlab-ci: build gitlab-ci: type-check gitlab-ci: unit-tests gitlab-ci: aiohttp-specific-tests


Тестовое задание #Webtronics


Расписать примеры 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-клиента, используемого в функции. При изменении кода как самой aiohttp, так и тела функции (пусть и при условии сохранения прежней функциональности), скорее всего приведёт к неработоспособности этого набора.

About

Test task for: logs(cont, name) -> None

License:GNU General Public License v3.0


Languages

Language:Python 100.0%