我有几个在本地主机上运行的分布式应用程序实例;每个实例都通过某些端口与其他实例通信,所有实例一起构成一个整体。
(我实际上是在谈论动物园管理员 http://hadoop.apache.org/zookeeper/,在 Linux 上运行)
现在我想编写单元测试来模拟集成分区。
例如。我有 5 个实例,我想将它们分成两组,每组 3 个和 2 个,以便一组中的实例无法与另一组中的实例进行通信。它将模拟现实世界的情况,即一个数据中心有 3 台机器,另一个数据中心有 2 台机器,并且数据中心被分区。
问题本质上是让套接字有选择地工作:与一个套接字通信,但不与另一个套接字通信。我想到的一个解决方案是抽象通信层并向其中注入测试规则(形式为“如果我是一个组中的实例,则不允许与另一组中的实例进行对话 - 关闭套接字”)或忽略数据或其他什么”)。
但也许有一些工具可以实现这一点,也许有一些测试框架?
一般来说,您如何在分布式应用程序中测试此类情况?
附:虽然问题被标记为“java”(因为 ZooKeeper 是用 Java 编写的),但很高兴听到任何其他语言或独立于语言的解决方案——也许是一些 Linux 大师的技巧。
也许这个答案会为某人节省几个小时的谷歌搜索时间。
Linux有一个非常好的防火墙实用程序,iptables
。它允许您阻止进程之间的通信,如下所示:
iptables -A INPUT -p tcp --sport <source port> --dport <dest port> -j DROP
虽然从任何角度来看都不是一个成熟的单元测试框架,但这对我的情况下的手动测试有一点帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)