Эмуляция сетевых отключений для локального тестирования распределенных разделов приложений

У меня есть несколько экземпляров распределенного приложения, работающего на локальном хосте; каждый экземпляр взаимодействует с другими через определенные порты, все вместе составляют ансамбль. (Я на самом деле говорю оРаботник зоопаркаработает на Linux)

Теперь я хочу написать модульные тесты для эмуляции разбиения ансамбля.
Например. У меня есть 5 экземпляров, и я хочу разделить их на две группы по 3 и 2, чтобы экземпляр из одной группы не мог связаться с экземпляром из другой группы. Это имитирует реальную ситуацию, когда 3 машины находятся в одном центре обработки данных, 2 машины находятся в другом, а центры обработки данных становятся разделенными.

По сути, проблема заключается в том, чтобы заставить сокет работать выборочно: говорить с одним сокетом, но не говорить с другим. Одно из решений, которое приходит на ум, - абстрагировать коммуникационный уровень и внедрить в него правила тестирования (в форме «если я являюсь экземпляром из одной группы, мне не разрешено говорить с экземпляром из другой группы - закрыть сокет»). или игнорировать данные или что-то еще ").

Но, может быть, существуют какие-то инструменты для этого, может быть, какая-то инфраструктура тестирования? В общем, как вы тестируете такие случаи в своих распределенных приложениях?


Постскриптум Хотя вопрос помечен как «java» (так как ZooKeeper написан на Java), было бы здорово услышать решения для любого другого языка, или не зависящие от языка - может быть, некоторые гуру-хитрости Linux.

Ответы на вопрос(4)

Ваш ответ на вопрос