среда, 7 марта 2018 г.

Применение класса «ноль-не ноль» при подключении к JMS

Подключили обратный поток в 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, но я ее в виде пунктов распишу, пожалуй:
  1. Настройка включена, параметры настроены — все работает.
  2. Настройка включена, параметры не настроены — в лог падает ошибка.
  3. Настройка выключена, параметры настроены — сообщения НЕ уходят, настройка то выключена.
  4. Настройка выключена, параметры не настроены — сообщения не уходят, проверки на корректность параметров нет (ошибки не валятся).
Казалось бы, пункты 3 и 4 можно объединить в один класс, «настройка выключена», но, как видно выше из примера — не стоит, пропустим баг.

Именно поэтому перед тем, как мчаться сразу тестировать, лучше сесть и подумать: «А что именно я буду проверять?». И выписать в блокнот, это помогает увидеть пропущенные моменты, по крайней мере мне.

См также:
Класс эквивалентности «Ноль-не ноль» — использовался в статье, очень полезный класс!

Комментариев нет:

Отправить комментарий