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