Данное задание состоит из двух частей.
Не забываем про 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/.
Необходимо:
- создать отдельный пакет для интеграционных тестов.
- реализовать интеграционные тесты на языке Go; при желании можно использовать godog / ginkgo, но обязательным требованием это не является.
- создать docker-compose файл, поднимающий все сервисы проекта + контейнер с интеграционными тестами;
- расширить Makefile командой
integration-tests
,make integration-tests
будет запускать интеграционные тесты; не стоит смешивать это сmake test
, иначе CI-пайплайн не пройдёт. - прикрепить в Merge Request вывод команды
make integration-tests
.
Преподаватель может запустить интеграционные тесты с помощью команды make integration-tests
:
- команда должна поднять окружение (
docker-compose
), прогнать тесты и подчистить окружение за собой; - в случае успешного выполнения команда должна возвращать 0, иначе 1.
- Проект полностью запускается и останавливается с помощью
make up
/make down
- 3 балла - Интеграционные тесты запускаются с помощью
make integration-tests
. Команда возвращает верный код ответа - 1 балл - Интеграционные тесты покрывают бизнес сценарии:
- добавление события и обработка бизнес ошибок - 2 балла
- получение листинга событий на день/неделю/месяц - 2 балла
- отправка уведомлений (необходимо доработать sender так, чтобы он информировал куда-то о статусе уведомления (БД/кролик)) - 2 балла