54 lines
4.7 KiB
Markdown
54 lines
4.7 KiB
Markdown
|
## Домашнее задание №15 «Докеризация и интеграционное тестирование Календаря»
|
|||
|
|
|||
|
Данное задание состоит из двух частей.
|
|||
|
|
|||
|
Не забываем про https://github.com/golang-standards/project-layout.
|
|||
|
|
|||
|
### 1) Докеризация сервиса
|
|||
|
Необходимо:
|
|||
|
* создать Dockerfile для каждого из процессов (Календарь, Рассыльщик, Планировщик);
|
|||
|
* собрать образы и проверить их локальный запуск;
|
|||
|
* создать docker-compose файл, который запускает PostgreSQL, RabbitMQ и все микросервисы вместе
|
|||
|
(для "неродных" сервисов использовать официальные образы из Docker Hub);
|
|||
|
* при желании доработать конфигурацию так, чтобы она поддерживала переменные окружения
|
|||
|
(если вы используете библиотеку, то скорее всего она уже это умеет); в противном случае
|
|||
|
придется "подкладывать" конфиг сервису с помощью Dockerfile / docker-compose -
|
|||
|
при этом можно "заполнять" конфигурационный файл из переменных окружения, например
|
|||
|
```bash
|
|||
|
$ 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/**.
|
|||
|
|
|||
|
### 2) Интеграционное тестирование
|
|||
|
Необходимо:
|
|||
|
* создать отдельный пакет для интеграционных тестов.
|
|||
|
* реализовать интеграционные тесты на языке Go; при желании можно использовать
|
|||
|
[godog](https://github.com/cucumber/godog) / [ginkgo](https://github.com/onsi/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 балла
|
|||
|
|
|||
|
#### Зачёт от 7 баллов
|