Данное задание состоит из двух частей.
Не забываем про https://github.com/golang-standards/project-layout.
Необходимо:
- создать Dockerfile для каждого из процессов (Календарь, Рассыльщик, Планировщик);
- собрать образы и проверить их локальный запуск;
- создать docker-compose файл, который запускает PostgreSQL, RabbitMQ и все микросервисы вместе (для "неродных" сервисов использовать официальные образы из Docker Hub);
- при желании доработать конфигурацию так, чтобы она поддерживала переменные окружения (если вы используете библиотеку, то скорее всего она уже это умеет); в противном случае придется "подкладывать" конфиг сервису с помощью Dockerfile / docker-compose - при этом можно "заполнять" конфигурационный файл из переменных окружения, например
$ envsubst < config_template.json > config.json
- если миграции выполняются руками, а не на старте сервиса, то также в docker-compose должен запускаться one-shot скрипт, который делает это (применяет SQL миграции, создавая структуру БД).
- порты серверов, предоставляющих API, пробросить на host.
У преподавателя должна быть возможность запустить весь проект с помощью команды
make up
(внутри docker-compose up
) и погасить с помощью make down
.
HTTP API, например, после запуска должно быть доступно по URL http://localhost:8888/.
Необходимо:
- создать отдельный пакет для интеграционных тестов;
- описать бизнес-сценарии на языке Gherkin в *.feature файлах;
- реализовать все шаги сценариев с использованием библиотеки https://github.com/cucumber/godog: при этом шаги могут рассчитывать на то, что запущены в docker-compose и знают endpoint'ы всех сервисов; сценарии работают с HTTP/GRPC API календаря, при необходимости с БД и очередью сообщений;
- создать docker-compose файл, поднимающий все сервисы проекта + контейнер с интеграционными тестами;
- расширить Makefile командой
bdd
,make bdd
будет запускать интеграционные тесты; не стоит смешивать это сmake test
, иначе CI-пайплайн не пройдёт.
Преподаватель может запустить интеграционные тесты в docker-compose
с помощью команды make bdd
.
В случае успешного выполнения команда должна возвращать 0, иначе 1.
- Проект полностью запускается и останавливается с помощью
make up
/make down
- 3 балла - Интеграционные тесты запускаются с помощью
make bdd
. Команда возвращает верный код ответа - 1 балл - Интеграционные тесты покрывают бизнес сценарии:
- добавление события и обработка бизнес ошибок - 2 балла
- получение листинга событий на день/неделю/месяц - 2 балла
- отправка уведомлений - 2 балла