赞
踩
最近在实验中编写scenario脚本测试自己编写的switch/hub模块时需要间隔一段时间再发送报文,第一时间想到的是用python的time模块中sleep函数实现,但经过测试,sleep函数并不能达到预期效果,而是在执行开始之前就会先进入sleep函数。
查阅switchyard官方文档:找到以下接口函数:
这里PacketInputTimeoutEvent函数是指,调用该模块会使得该模块在timeout时间内尝试接收包但并没有包到达端口,因此正如文档所说,switch需要正确处理该情况。
如果报文的目的地址是自身mac地址的话,switch只需要什么也不做,并且循环接收报文即可。
if eth.dst in mymacs:
log_info("Received a packet intended for me")
(代码写法多样,这里取实验框架的内容)
包的构建可以调用API文档的函数,也可以自己写一个函数,这里就不展示了,只需要将dst调整为switch自身mac地址之一即可。
发送发可以随便指定switch的一个eth接口:
PacketInputEvent("eth0", testpkt, display=Ethernet)
接收的时候PacketInputTimeoutEvent(timeout)中的timeout参数指定为自己想要暂停的时间即可(单位是秒)。
PacketInputTimeoutEvent(15.0)
也可以将上述时间置于expect中进行观察。
这里在虚拟环境下运行测试脚本和switch脚本,观察是否实现预期效果。
switch在接收到发给自己的报文后暂停了15s,再执行接下来的测试,最终执行完成了所有测试!
说实话,按我的理解这其实是一种“伪实现”,因为并不是真正意义上使测试脚本暂停了15s,而是在某个时间节点构造了一个发给switch自身的报文,交由switch处理。但也算是实现了预期效果!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。