OVS测试

3 篇文章 0 订阅
本文详述了如何使用OVS内置工具和第三方工具进行测试,包括单元测试、覆盖率检查、Valgrind、OFTest、Ryu以及数据面测试等。测试涵盖不同场景,如静态代码分析和持续集成,旨在确保OVS的功能正确性和性能。
摘要由CSDN通过智能技术生成

Testing

        使用open vswitch和各种第三方提供的工具来测试open vswitch。

内置工具

        open vswitch提供各种不同的测试套件和其他测试工具来验证ovs的基础功能。执行测试前必须要参照官方文档编译、配置和启动open vswitch。执行测试用例时不需要安装open vswitch或加载、编译内核模块,也不需要root权限。

单元测试

        Open vswitch包含了一套内部测试。提交patch之前,建议执行这些内部测试用例并保证用例通过。如果增加了新特性,则需要针对新特性增加测试用例,保证新增特性不会影响到其他开发者。

        执行所有的单元测试(5分总左右):

make check

多线程并行执行:

#结合cpu数量调整线程数量:
make check TESTSUITEFLAGS=-j8

查看支持的测试用例:

make check TESTSUITEFLAGS=-list

只执行一部分测试用例(测试用例之间没有依赖):

#执行第123个公里和第477到第484个测试用例
make check TESTSUITEFLAGS='123 477-484'

更多使用方法及测试参照:

make check TESTSUITEFLAGS=-help

测试结果参照测试报告:tests/testsuite.log

继续执行失败的测试用例:

make check TESTSUITEFLAGS=-j8 RECHECK=yes

调试性单元测试

        通过设置环境变量OVS_PAUSE_TEST为1来启动调试性单元测试:

#执行第139个单元测试,遇到错误时停下来:
OVS_PAUSE_TEST=1 make check TESTSUITEFLAGS='-v 139'

覆盖率

        安装了lcov并且编译时候开启--enable-coverage选项后,可以执行测试用例并且生成代码覆盖率报告通过执行如下命令:

make check-lcov

同样可以配置选项使用,通过设置TESTSUITEFLAGS.

make check-lcov TESTSUITEFLAGS='-j8 -k ovsdb'

Valgrind

安装了valgrind的情况下,可以使用check-valgrind选项执行内存问题检查:

#用户空间模块:
make check-valgrind
检查结果:tests/testsuite.dir/<N>/valgrind.*

#内核空间模块
make check-kernel-valgrind
检查结果:tests/system/kmod-testsuite.dir/.

OFTest

        OF Test是一个openflow协议的测试套件。open vswitch包含了一个makefile选项去执行OF Test(openvswitch在虚拟模式中)。在这种测试模式下,没有报文通过物理或者虚拟网络。unix域套接字代替模拟网络。这个模拟是不完美的,但是设置起来简单很多,不需要额外的物理或者虚拟硬件,也不需要root权限。

        基于open vswitch前,必须获得OF Test的拷贝(必须包含commit 406614846c5 ,这个commit包含了ovs-dummy平台)并且安装完依赖项。

        OFTest相关的安装使用可参照:SDN交换机功能测试工具OFTest安装与使用总结 - SDNLAB,专注软件定义网络(SDN) - OSCHINA - 中文开源技术交流社区

        Note:oftest仅支持到python2.7

执行OFTest测试:

make check-oftest OFT=<oft-bianry>

Ryu

        Ryu是一个基于python实现的openflow控制器,包含了大量的openflow测试套件。open vswitch包含了一个makefile选项来运行ryu在模拟模式。

        运行Ryu测试前,首先阅读和遵循如上描述。其次获取Ryu代码并安装依赖编译。不需要安装。

        执行Ryu测试:

make check-ryu RYUDIR=<ryu-source-dir>

        Ryu源码下载:https://github.com/faucetsdn/ryu/archive/refs/tags/v4.34.tar.gz

        Ryu入门教程:​​​​​​RYU入门教程 | SDNLAB | 专注网络创新技术

        Ryu官方文档:Welcome to RYU the Network Operating System(NOS) — Ryu 4.34 documentation        

Datapath testing

        open vswitch包含一套针对数据面接口的测试用例,可以测试用户空间和内核空间的数据面。如果新增或者修改了数据面特性,推荐你构建这些测试用例来验证修改。

        数据面的测试基于指定的环境变量。测试用例在linux环境上必须使用root权限并且支持namespace。为方便使用,ovs源码中包含了一个Vagrant盒子来支撑这些测试。Vagrant相关的测试运行时支持内核隔离,保护开发环境不会出现内核挂掉或者与测试用例中的配置冲突。

Vagrant(版本1.7.0及以后)

安装:sudo apt-get install vagrant

参考文章:超详细的 Vagrant 上手指南 - 知乎

Native

        以上vagrant调用的数据面测试用例在linux下也可以使用root权限手动执行。需要确保没有其他open vswitch在执行这些测试用例。这些测试用例将花费几分钟执行完成,不能并行执行。

Userspcae datapath

执行用户空间的数据面测试用例:

make check-system-userspace
#测试结果输出 tests/system-userspace-testsuite.dir

Userspace datapath with DPDK

        测试open vswitch使用dpdk的情况(需保证编译ovs时包含了--with-dpdk选项,并且dpdk已经安装了)。使用root权限执行测试:

sudo -E make check-dpdk
#查看其它支持的选项:
make check-dpdk TESTSUITEFLAGS=--list

DPDK支持的网卡,这些测试用例都支持。如果没有配置大页内存,所有的测试用例都会被跳过。如果没有物理网卡,则物理网卡相关的用例也会被跳过。

kernel datapath

        支持对linux内核数据模块测试。测试过程会对插入内核的模块操作,因此ovs内核模块有bug或者upstream内核部分有bug都会导致内核挂掉。

执行测试用例:

#内核模块已经安装:
make check-kernel

#内核模块未安装:
make check-kmod

测试结果:

tests/system-kmod-testsuite.dir

Notes:  

测试依赖工具iproute2,特别是ip命令。如果有很多不可解释的错误,请升级iproute2工具。

 

Static Code Analysis

        静态代码分析是一种检查代码的工具。scan-build组件使用clang或者gcc去编译代码并且调用代码分析。编译完成时即生成分析报告。

执行静态代码分析:

$ ./boot.sh
$ ./configure CC=clang  # clang
# or
$ ./configure CC=gcc CFLAGS="-std=gnu99"  # gcc
$ make clang-analyze

查看分析结果:

使用Travis CI持续迭代

......

vsperf

        vsperf项目目的在于开发一个虚拟交换机测试框架,可以用来全面的验证不同的虚拟交换机。

详细参考:VSperf Home - VSPerf - OPNFV Wiki

POC(proof of concepts)

        POC是vagrant基于virtualbox或libvirt环境编制的自动化运维文档。允许开发者创建最小的虚拟化环境来验证open vswitch特性是否正常工作。poc在集成第三方软件时是非常有用的,因为标准的单元测试和make check比较有局限性。

        vagrant默认使用virtualbox。如果期望使用libvirt,可以安装libvirt插件:

vagrant plugin install vagrant-libvirt
#使用vagrant时,后面跟上--provider=libvirt选项即可

        这个特殊的poc演示了使用debain和rom包工具的集成:

cd poc/builders
vagrant up

        上面命令执行完成后,生成包(rpm或者deb)在/var/www/html下。 

        修改ovs代码后rebuild:

git commit -a 
vagrant rsync && vagrant provision

参考链接:Testing — Open vSwitch 2.16.90 documentation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值