赵占旭的博客

SONiC testbed

熟悉一下如何测试,并且查看一些测试配置。文章参照Ansible Playbooks for Testing SONiC

物理拓扑

avatar

  • 上图中的各个硬件介绍
    • 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

avatar

DUT前面板端口直接连接一个PTF container端口。通常是PTF container的eth0口连接DUT的Ethernet0,PTF container的eth1口连接DUT的Ethernet4端口等等。

PTF with injected port

avatar

DUT前面板端口直接连接一个VM的端口。报文从屋里端口发送到VM和PTF docker;报文从VM和PTF docker发送到屋里端口。

t1

avatar

  • 需要32个VMs
  • 所有的DUT端口都连接到VMs

t1-lag

avatar

  • 需要24个VMs
  • 所有的DUT端口都连接到VMs

ptf32

avatar

  • 不需要VM
  • 所有的DUT端口都直连PTF container

ptf64

avatar

  • 不需要VM
  • 所有的DUT端口都直连PTF container

t0

avatar

  • 需要4个VM
  • 4个DUT端口连接到VM
  • PTF container 连接到DUT 28个端口

生成和部署minigraph

根据创建的拓扑,运行playbook为SONiC DUT生成minigraph.xml,已匹配新拓扑。使用命令如下:

1
2
3
4
5
6
7
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}

注意:所有文章非特别说明皆为原创。为保证信息与源同步,转载时请务必注明文章出处!谢谢合作 :-)

原始链接:http://zhaozhanxu.com/2018/08/08/SONiC/2018-08-08-SONiC-testbed/

许可协议: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。