Page 97 - 《软件学报》2020年第9期
P. 97
2718 Journal of Software 软件学报 Vol.31, No.9, September 2020
为测试用例进行说明.其中,ipv4_lpm 指定了该命令是向 ipv4_lpm 这张表插入表项,ipv4_forward 指定了表项匹
配成功时执行的动作为 ipv4_forward,0xffffffff/32 指定了匹配字段是 16 进制的 ffffffff,⇒是命令的格式需要所定
义的箭头形状,⇒后的 0x0 0x0 指定了 ipv4_forward 动作的两个参数均为 0,命令中的动作需要几个参数,⇒符号
后就应当给出几个参数.命令中/后的数字如 0/32 表示的是该数长度为 32 位.
• table_delete 表项删除命令
合法的删除表项的命令格式如下:
table_delete〈table name〉〈entry handle〉.
删除一个表项需要确定表项所在表的表名以及该表项在表中的编号,在这里被称为 entry handle.以命令
“table_delete ipv4_lpm 0”为测试用例进行说明.其中,ipv4_lpm 指定了该命令删除的表项在表 ipv4_lpm 中,0 说
明了该命令会删除表中编号为 0 的表项.
• table_dump 表项查询命令
合法的查询表项的命令格式如下:
table_dump〈table name〉.
查询表项需要确定需要查询的表项所在表的表名.以命令“table_dump ipv4_lpm”为测试用例进行说明.其
中,ipv4_lpm 指定了该命令查询的是名为 ipv4_lpm 这张表中的所有表项.
• table_modify 表项修改命令
合法的修改表项的命令格式如下:
table_modify〈table name〉〈action name〉〈entry handle〉[action parameters].
修改表项需要确定表项所在表的表名、表项中的动作名、表项的编号、动作的参数.以命令“table_modify
ipv4_lpm ipv4_forward 0 0x123456654321 1”为测试用例进行说明.其中,ipv4_lpm 指定了该命令修改的是表
ipv4_lpm 中的表项,ipv4_forward 说明了该命令修改的表项中的动作为 ipv4_forward,0 指定了该命令修改的是
表 ipv4_lpm 中编号为 0 的表项,0x123456654321 1 指定了该命令是将 ipv4_forward 的两个参数改成
0x123456654321 1.命令要修改的表项中的动作有几个参数,就要给出几个参数.
4.3 生成测试用例集
如图 12 所示为测试用例生成的算法映射图,以测试用例类型命令合法、表名不合法、动作不合法、匹配
域不合法、参数不合法为组织单位,以一个个命令信息实体为信息体,构造对应类型的 TABLE_NAME,
ACTION_NAME,MATCH_KEY,PARAMETERS 字段,生成 table_add,table_delete,table_dump,table_modify 命令.
如图 13 所示,本节以增删改查命令类型的测试用例生成过程为例进行说明.在完成了对 P4 信息文件
(.p4info 文件)的解析后,以测试用例类型为组织单位,构造符合测试用例类型的字段,依据命令信息实体的命令
格式,生成测试用例.表项的增加和修改动作需要用到表名、匹配字段、动作名和动作参数,而表项的查询和删
除命令需要用到表名.本节实现的 SDN 数据平面软件一致性测试用例生成工具不直接依赖于 P4 程序,而是直
接依赖于编译后的 P4 信息文件(.p4info 文件).
• 参数默认值的设定原则
命令中,用户需要自行填写的参数有匹配字段(match_field)和动作参数(action_params),这两个参数不能
由.p4info 确定,需要用户根据从.p4info 文件中提取出参数的位数自行填入.程序可以识别十进制数并转换成十
六进制,但是交换机中记录的是十六进制的格式,目前的 IP 地址格式是 32 位二进制数.为了方便也分成了 4 段,
每段 8 位.考虑到以十进制数表示 IP 地址不直观也非当今主流,所以需要根据参数的位数给出一个默认的参数,
以确定一个参数的格式.匹配字段中的参数往往是目的地址或者是源地址之类的 IP 地址.匹配字段的长度必须
是 8bits 的整数倍.参考参数见表 1.