为单元测试创​​建TCP网络错误

时间:2010-06-18 06:19:09

标签: c++ unit-testing sockets tcp mocking

我想在测试期间创建各种网络错误。我在Linux上直接在C ++中使用Berkely套接字API。我正在Boost.Test内的另一个线程中运行一个模拟服务器,它监听localhost。

例如,我想在连接期间创建超时。到目前为止,我已经尝试不在我的模拟服务器中调用accept并将backlog设置为1,然后建立多个连接,但似乎都成功连接。我认为,如果积压队列中没有空间,如果没有超时,我至少会得到连接拒绝错误。

如果可能的话,我想以编程方式执行此操作,但我会考虑使用像IPchains这样的外部程序在测试期间故意将某些数据包丢弃到某些端口,但我需要自动创建和删除规则以便我可以从我的Boost.Test单元测试中做到。

我想我可以模拟所涉及的各种系统调用,但如果可能的话,我宁愿经历真正的TCP堆栈。

想法?

2 个答案:

答案 0 :(得分:1)

最近我做了一些密集的协议测试,我使用了click modular router。它的优点是功能强大且易于访问。如果您在Linux计算机上安装click kernel module,则可以轻松访问网络元素参数以进行设置和读取。因此,您可以将drop元素的丢失率从0更改为100%。虽然开始使用起来有点困难,但您可以用它来模拟非常复杂的事情。我个人用它(例如)来模拟不同的带宽和丢包情况来测试RTP视频流。

答案 1 :(得分:0)

还有一个类似的问题。我的建议是使用像IXIA这样的网络流量生成器。它允许您以可重复的方式执行许多可能的协议测试组合。