熟悉一下如何测试,并且查看一些测试配置。文章参照Ansible Playbooks for Testing SONiC。
物理拓扑
上图中的各个硬件介绍
- testbed servers是用来跑测试用例的。
- root fanout switch是根交换机。
- leaf fanout switches是用来连接被测试交换机。
- DUTs是指被测试的交换机。
- DUT端口和leaf是一一对应的。
- 每个leaf都有一个唯一的VLAN tag
- root fanout交换机使用802.1Q trunks
- 这就意味着任何testbed server能通过发送带有vlan的报文到达任意DUT端口。
testbed setup
这块就略过了,详细请查看Testbed Setup。
主要是拓扑部署命令:
- 部署拓扑,比如T1拓扑:
./testbed-cli.sh add-topo vms-t1 ~/.password
,password文件为空就可以。 - 删除拓扑,
./testbed-cli.sh remove-topo vms-t1 ~/.password
- 拓扑配置存在于文件
sonic-mgmt/ansible/testbed.csv
testbed.csv
文件配置解释:
- conf-name是拓扑的名字,标识拓扑关键字
- group-name是internal name,表示用vm还是ptf还是啥
- topo是指定部署的拓扑
- ptf_image_name指定ptf docker类型
- ptf_ip指定容器的管理IP
- server指定服务器名称,与ansible/veos中定义的服务器名称匹配
- vm_base指定vm编号
- dut指定连接到测试品台的DUT名称
- comment注释字段
逻辑拓扑
- testbed拓扑的配置定义可见testbed.csv。
- 一键运行所有testbeds的脚本可见testbed-cli.sh。
- 灵活的拓扑允许使用VM_SET和PTF container作为实体。
- 所有的VM管理IP都放在一个地方veos。
- PTF container是通用的,并且每个拓扑都会使用。
- 能自动配置fanout switch
补充
VMs
VM使用Arista vEOS。用于建立协议测试,比如BGP、LACP、LLDP,使用testbed-cli.sh start-vms
创建。每个VM使用2G RAM并具有10个网络接口
PTF
PTF container用于向可用的DUT数据平面收发报文。
PTF with direct port
DUT前面板端口直接连接一个PTF container端口。通常是PTF container的eth0口连接DUT的Ethernet0,PTF container的eth1口连接DUT的Ethernet4端口等等。
PTF with injected port
DUT前面板端口直接连接一个VM的端口。报文从屋里端口发送到VM和PTF docker;报文从VM和PTF docker发送到屋里端口。
t1
- 需要32个VMs
- 所有的DUT端口都连接到VMs
t1-lag
- 需要24个VMs
- 所有的DUT端口都连接到VMs
ptf32
- 不需要VM
- 所有的DUT端口都直连PTF container
ptf64
- 不需要VM
- 所有的DUT端口都直连PTF container
t0
- 需要4个VM
- 4个DUT端口连接到VM
- PTF container 连接到DUT 28个端口
生成和部署minigraph
根据创建的拓扑,运行playbook为SONiC DUT生成minigraph.xml,已匹配新拓扑。使用命令如下:
ansible-playbook -i lab config_sonic_basedon_testbed.yml -l sonic_dut_name -e vm_base=VM0300 -e topo=t0 [-e deploy=true -e save=true]
-l str-msn2700-01 - 指定DUT的名字,与上面testbed.csv对应
-e vm_base=VM0300 - VM的起始名称,也是与testbed.csv对应
-e topo=t0 - 拓扑名称,对应testbed.csv
-e deploy=True - 不指定默认是false
-e save=True - 是否保存为开机启动,不指定默认是false
运行测试用例
所有的测试用例名称和调用变量以及应用拓扑都定义在ansible/roles/test/vars/testcases.yml
运行测试用例的时候,根据testbed_name,能获取与testbed相关的信息(比如pf_host testbed_type, VMs info)。testbed_name继承了ansible/testbed.csv
文件。每行的第一列是测试平台的唯一名称,在运行测试用例的时候使用。
ansible-playbook -i lab -l str-sonic-1 test_sonic.yml -e testbed_name={TESTBED_NAME} -e testcase_name={TESTCASE_NAME}