Подключили обратный поток в RabbitMQ (JMS). Проверяли задачу вдвоем, так как протестировать надо было шустро:
- Я смотрела на то, что «оно работает» — как только подняла билд, сразу настроила параметры отправки в JMS и стала пулять туда события.
- Коллега (назовем ее Лена) — смотрела туром ленивой Ж: что с системой будет после обновления, но ДО настройки? Ведь не факт, что заказчик сразу все подключит, так что в регрессе сначала ленимся, потом настраиваем.
Так вот, я смотрю — у меня все здорово, все работает. Лена смотрит — жалуется. Она обновила стенд, ничего не настраивала, продолжает работать: ой! В логах ошибка
ERROR EventXmlPublisher - Error publishing JMS event to 'jmsEventSender.rabbitmq' org.springframework.jms.UncategorizedJmsException: Uncategorized exception occurred during JMS processing; nested exception is com.rabbitmq.jms.util.RMQJMSException: rabbitmq-host: Name or service not known
Да, ip нет такого → еще не настраивались параметры подключения. Но jms.events.rabbitmq.enabled = false же, почему система вообще проверяет хост и порт? Не должна.
Получается довольно важный баг, так как система срет в логи об ошибке, которая ошибкой не является. А за ошибками в логах мы следим → получим ложноположительное срабатывание. Нехорошо.
Самое ужасное, что я могла до регресса прозевать этот баг. Настолько сосредоточилась на позитивных сценариях и том, что все работает... Так что в негативе я проверила лишь то, что при неправильном хосте сообщение в логе есть (когда отправка событий включена).
А ведь это типичный класс «ноль-не ноль».
Настройка:
- выключена (ноль);
- включена (не ноль);
Параметры:
- не настроены (ноль);
- настроены (не ноль).
Совмещаем, получаем типичную матрицу 2 на 2, но я ее в виде пунктов распишу, пожалуй:
- Настройка включена, параметры настроены — все работает.
- Настройка включена, параметры не настроены — в лог падает ошибка.
- Настройка выключена, параметры настроены — сообщения НЕ уходят, настройка то выключена.
- Настройка выключена, параметры не настроены — сообщения не уходят, проверки на корректность параметров нет (ошибки не валятся).
Казалось бы, пункты 3 и 4 можно объединить в один класс, «настройка выключена», но, как видно выше из примера — не стоит, пропустим баг.
Именно поэтому перед тем, как мчаться сразу тестировать, лучше сесть и подумать: «А что именно я буду проверять?». И выписать в блокнот, это помогает увидеть пропущенные моменты, по крайней мере мне.
См также:
Класс эквивалентности «Ноль-не ноль» — использовался в статье, очень полезный класс!
См также:
Класс эквивалентности «Ноль-не ноль» — использовался в статье, очень полезный класс!
Комментариев нет:
Отправить комментарий