aact
Architecture As Code Tests
Код и примеры покрытия тестами микросервисной архитектуры, описанной в plantuml
PullRequest'ы и Issues'ы приветствуются.
Обсудить можно, например, в чате канала
Запись доклада
https://www.youtube.com/watch?v=tZ-FQeObSjY
Что это, какую боль решает, и с чего начать?
Раз архитектура — «as Code», почему бы её не покрыть тестами?!
Тема идеи и данный открытый репозиторий вызвал неожиданную волну позитивных отзывов о попадании в яблочко болей и о применимости и полезности решения :)
Подход помогает решить проблемы неактуальности, декларативности и отсутствия контроля ИТ-архитектур и инфраструктуры (ограничение и требование — архитектура и инфраструктура должны быть "as code").
Тесты проверяют 2 больших блока:
- актуальность архитектуры реальному работающему в продакшне решению
- соответствие "нарисованной" архитектуры выбранным принципам и паттернам проектирования
Подробнее о подходе, решаемых проблемах, схеме работы представленного в репозитории примера и проверяемых в тестах репозитория принципах — на слайдах.
Схема работы
Визуализация примера автоматически проверяемого принципа (отсутствие бизнес-логики в CRUD-сервисах)
Пример архитектуры, которую покроем тестами
Пример тестов
- Finds diff in configs and uml containers — проверяет актуальность списка микросервисов на архитектуре и в конфигурации инфраструктуры
- Finds diff in configs and uml dependencies — проверяет актуальность зависимостей (связей) микросервисов на архитектуре и в конфигурации инфраструктуры
- Check that urls and topics from relations exists in config — проверяет соответствие между параметрами связей микросервисов (REST-урлы, топики kafka) на архитектуре и в конфигурации инфраструктуры
- Only acl can depence from external systems — проверяет, что не нарушен выбранный принцип построения интеграций с внешними системами только через ACL (Anti Corruption Layer). Проверяет, что только acl-микросервисы имеют зависимости от внешних систем.
- Connect to external systems only by API Gateway or kafka — проверяет, что все внешние интеграции идут через API Gateway или через kafka
Генерация архитектуры из описанной «as Code» инфраструктуры
Добавил код, который полностью с нуля генерирует архитектуру в plantuml по данным из IaC.
Сравнение белковой составленной вручную архитектуры и сгенерированной.
Ручная:
Сгенерированная:
Тестирование модульного монолита
Тестами можно покрывать не только архитектуру микросервисов, но архитектуру монолитов, особенно, если они модульные.