-
Notifications
You must be signed in to change notification settings - Fork 1
Description
Контекст
Джобы DJM запускаются асинхронно согласно расписанию из настроек Zookkeeper. Вкл/выкл примерно выглядит так:
- Поменяли в Zk/БД
- В DJM сработал листенер, джоба отключается. При этом мы не можем быть уверены что предыдущий запуск завершился и после выключения джоба может еще работать какое-то время.
Итого имеем примерно следующее: отключили джобу, но понять действительно ли джоба отключена джоба и больше нет активных запусков, мы не можем.
В рамках e2e, интеграционного, компонентного тестирования мы должны проверять функционал, в котором участвует джобы. Как правило тест выглядит следующим образом:
- Подготавливаем данные системы
- Запомнили текущее состояние системы
- Ожидаем выполнения сценария, в начем случае ДЖМ, т.е. должен пройти запуск джобы
- Проверяем изменение состояния системы после запуска джобы
В этом случае, в связи с асинхронной природой ДЖМ и тем что мы однозначно не можем программно получить состояние запуска джоб. Мы не можем быть уверенны что джоба сработает именно в п3. Это можем повлиять на то как будет выполнен сценарий.
Так же зачастую при тестах мы меняем настройки джобы под кадждый конкретный сценарий. И опять же после применения, мы не можем быть уверены, что конкретный запуск джобы проходит именно с теми настройками, которые мы выставили, потому что есть делей на установку настройки и переключение джобы.
На текущий момент, в тестах где требуется применение настроек и вкл/выкл джобы, реализуется следущюий подход:
- Отключаем джобу
- Выставляем настройки
- Включаем джобу
- Ставим примерную задержку, пока настройки не применяться и джоба не включиться
Такой подход не совсем надежный и может приводит что тесты буду хаотично валиться при прогонах.
Как хочется:
- Возможность распознать джоба полностью включена и последняя итерация выполнилась.
- Проводить запуск джобы по требованию. Т.е. вызываем какой-то метод, который запускат джобу по требованию
Для этого предлагается следующее:
Реализовать отдельный модуль в джм который предоставить данный функционал. Вывести данный метод через рест.