Код и примеры покрытия тестами микросервисной архитектуры, описанной в plantuml
Раз архитектура — «as Code», почему бы её не покрыть тестами?!
Тема идеи и данный открытый репозиторий вызвал неожиданную волну позитивных отзывов о попадании в яблочко болей и о применимости и полезности решения :)
Подход помогает решить проблемы неактуальности, декларативности и отсутствия контроля ИТ-архитектур и инфраструктуры (ограничение и требование — архитектура и инфраструктура должны быть "as code").
Тесты проверяют 2 больших блока:
- актуальность архитектуры реальному работающему в продакшне решению
- соответствие "нарисованной" архитектуры выбранным принципам и паттернам проектирования
Подробнее о подходе, решаемых проблемах, схеме работы представленного в репозитории примера и проверяемых в тестах репозитория принципах — на слайдах.
![](https://private-user-images.githubusercontent.com/1096954/279061429-9b0ad909-b789-4395-a580-9fb44397afa0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4MTQ2ODQsIm5iZiI6MTcyMzgxNDM4NCwicGF0aCI6Ii8xMDk2OTU0LzI3OTA2MTQyOS05YjBhZDkwOS1iNzg5LTQzOTUtYTU4MC05ZmI0NDM5N2FmYTAucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDgxNiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA4MTZUMTMxOTQ0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9MzliZGExYTAyNDljMTYwZjY4ZTk1OGRmZjc5ZDBkYjAwYzhjNjg1MjhmNmVlM2Y2YWQ3MzUyYjU3NjQ5ODU4MCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.568z7pPQlin_DTvrjHo_UkPDdeHo1P2y8-SCU1ajd5M)
![](https://private-user-images.githubusercontent.com/1096954/279061830-292b1bbd-0f18-40be-9560-65385a1d4df9.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjM4MTQ2ODQsIm5iZiI6MTcyMzgxNDM4NCwicGF0aCI6Ii8xMDk2OTU0LzI3OTA2MTgzMC0yOTJiMWJiZC0wZjE4LTQwYmUtOTU2MC02NTM4NWExZDRkZjkucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDgxNiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA4MTZUMTMxOTQ0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Njk0NzRmNjYxYmI1ZmE5MDJmZWZmMThjZDFmZjA5ZWMwNjVkMmVkOWM4MmUzMWM0NTdjODEzZmYyZjM2OTYyZiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.0CCzihFvmtsDrdvK-MPxnxs_ciFfXsxAnvyEl0jGEkI)
- 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