Покрытие после перехода на выборы через Lease просело до 48.9%: без тестов остались конфигурация, инициализация глобальных сервисов, оба сервера msrc и часть веток выбора лидера.
Восстановлен функциональный тест библиотеки целиком (msrc.MultiService) и добавлены модульные тесты на разбор окружения, валидацию настроек, ошибки создания клиента и инициализации client-go, троттлинг жалоб в лог, сервер участия в выборах и сервис-заглушку.
Три точки подмены в продовом коде понадобились, потому что соответствующие ветки вне кластера иначе не воспроизводятся:
- namespaceFilePath стал переменной - файла ServiceAccount вне пода нет;
- hostnameResolver - os.Hostname на практике не возвращает ошибку;
- inClusterConfig - rest.InClusterConfig читает файлы по захардкоженным в client-go путям.
Проверка на тестовый запуск вынесена из init в initializeGlobalsOnStart: в init её ветка недостижима для тестов по определению.