У меня есть несколько экземпляров распределенного приложения, работающего на локальном хосте; каждый экземпляр взаимодействует с другими через определенные порты, все вместе составляют ансамбль.
(Я на самом деле говорю о ZooKeeper , работающем в Linux)
Теперь я хочу написать модульные тесты для эмуляции разбиения ансамбля.
Например. У меня есть 5 экземпляров, и я хочу разделить их на две группы по 3 и 2, чтобы экземпляр из одной группы не мог связаться с экземпляром из другой группы. Это имитирует реальную ситуацию, когда 3 машины находятся в одном центре обработки данных, 2 машины находятся в другой, а центры обработки данных становятся разделенными.
Проблема заключается в том, чтобы заставить сокет работать выборочно: говорить с одним сокетом, но не говорить с другим. Одно из решений, которое приходит на ум, - абстрагировать коммуникационный уровень и внедрить в него правила тестирования (в форме «если я являюсь экземпляром из одной группы, мне не разрешено говорить с экземпляром из другой группы - закрыть сокет»). или игнорировать данные или что-то еще ").
Но, может быть, существуют какие-то инструменты для этого, может быть, какая-то инфраструктура тестирования?
В общем, как вы тестируете такие случаи в своих распределенных приложениях?
Постскриптум Хотя вопрос помечен как «java» (поскольку ZooKeeper написан на Java), было бы здорово услышать решения для любого другого языка, или не зависящие от языка - возможно, некоторые гуру-трюки с Linux.