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