10 测试资源代理
这一章讨论资源代理的自动测试。测试是开发的非常关键的问题,对开发新的资源代理和修改已经有的资源代理都很重要。
10.1 用ocf_tester测试
资源代理仓库(包括所有的资源代理包)都有一个应用程序叫ocf_tester.这个脚本可以方便地用来测试你的资源代理。
ocf_tester 通常以root用户调用,像这样:
ocf-tester -n <name> [-o <param>= <value> ... ] <resource agent>
是任意的资源名字 - 你可以通过 -o 选项设置任何你想设置的参数 =
是你资源代理的完整路径
调用时,ocf-tester执行所有强制的操作(见第五章 资源代理行为)
也可以测试可选的操作。可选操作必须符合其声明的行为,如果没有实现,ocf-tester会标一个错误标记。
重要:ocf-tester不支持操作的“干运行”,也不产生任何的资源仿制品。其运行都是和实际的资源代理一样,不论其是否打开和关闭了数据库,挂载了文件系统,启动或停止了虚拟机等等。所以,一定要小心。
比如,你可以运行对foobar资源代理使用 ocf-tester,如下:
# ocf-tester -n foobartest \ -o superfrobnicate=true \ -o datadir=/tmp \ /home/johndoe/ra-dev/foobar Beginning tests for /home/johndoe/ra-dev/foobar... * Your agent does not support the notify action (optional) * Your agent does not support the reload action (optional) /home/johndoe/ra-dev/foobar passed all tests
10.2 用ocft测试
ocft也是一种资源代理测试工具。和ocf-tester不一样的是,ocft可以自动生成复杂的测试环境,包括包的安装和任意的shell脚本。
10.2.1 ocft 组件
ocft包含如下组件:
10.2.2 定制测试环境
ocft修改资源代理的运行时环境,或则是通过改变环境变量(使用OCF定义的接口)或者运行ad-hoc shell脚本,这种脚本可以改变权限或者卸载一个文件系统。
10.2.3 如何测试
你必须了解你要测试的软件,画一个所有感兴趣的运行场景的草图,标出所有期望和不期望的条件和资源代理应该出现的运行结果。然后,你需要将这些条件和期望运行结果编码成ocft的测试用列。这样运行ocft就简单了:
头一个命令产生测试用例脚本,第二个命令运行产生的脚本并检查输出。
10.2.4 ocf配置文件语法
有4个一级选型,每个一级选项下面有一个或多个子选项
CONFIG(一级选项)
这个选项是全局的,而且影响每一个测试用例;
如果资源代理在测试前需要初始化,可以在这里放置bash代码。初始化只完成一次。如果需要再次执行初始化,可以删除/tmp/.[AGENT_NAME]_set 标记文件。
CASE (一级选项)
也可以不是本地执行而是远程执行。使用的协议是ssh,程序在后台运行。只需要增加在子选项后面加上@就可以了。如下:
NB:这些还需要有多谢说明(这个话是说给编写者的:译者注)
CASE-BLOCK (一级选项)
CASE-BLOCK选项定义可以被包含在CASE中的宏。所有CASE的子选项都可以使用。
ocft也是一种资源代理测试工具。和ocf-tester不一样的是,ocft可以自动生成复杂的测试环境,包括包的安装和任意的shell脚本。
10.2.1 ocft 组件
ocft包含如下组件:
- 一个测试用例产生器(/usr/sbin/ocf) --- 从测试用例配置文件产生shell脚本
- 配置文件(/usr/share/resource-agents/ocft/configs)--- 一个配置文件包含环境变量设置和一个资源代理的配置文件
- 测试脚本保存在/var/lib/resource-agents/ocft/cases/,但是通常不需要去管它们
10.2.2 定制测试环境
ocft修改资源代理的运行时环境,或则是通过改变环境变量(使用OCF定义的接口)或者运行ad-hoc shell脚本,这种脚本可以改变权限或者卸载一个文件系统。
10.2.3 如何测试
你必须了解你要测试的软件,画一个所有感兴趣的运行场景的草图,标出所有期望和不期望的条件和资源代理应该出现的运行结果。然后,你需要将这些条件和期望运行结果编码成ocft的测试用列。这样运行ocft就简单了:
# ocft make <RA> # ocft test <RA>
头一个命令产生测试用例脚本,第二个命令运行产生的脚本并检查输出。
10.2.4 ocf配置文件语法
有4个一级选型,每个一级选项下面有一个或多个子选项
CONFIG(一级选项)
这个选项是全局的,而且影响每一个测试用例;
- AgentRoot (子选项)
AgentRoot /usr/lib/ocf/resource.d/xxx正常情况下,我们假设资源代理脚本存在于heartbeat提供者的目录。使用AgentRoot来测试代理是否分布于另外的目录。
- InstallPackage (子选项)
InstallPackage package [package2 [...]]测试需要用到的包,如果包已经安装了,则不再安装。
- HangTimeout(子选项)
HangTimeout secs运行资源代理操作最大的执行时间,如果超过这个时间,操作视为失效。
SETUP-AGENT(一级选项)
SETUP-AGENT bash commands
如果资源代理在测试前需要初始化,可以在这里放置bash代码。初始化只完成一次。如果需要再次执行初始化,可以删除/tmp/.[AGENT_NAME]_set 标记文件。
CASE (一级选项)
CASE "description"这是测试套件的主要构建块。每个测试用列都可以在一个CASE选项中描述。一个用例由跟着RunAgent子选项的若个子选项组成。
- Var (子选项)
Var VARIABLE=value这是为资源代理设置环境变量。通常显示为 OCF_RESKEY_xxx,注意赋值符号“=”左右都没有空格。
- Unvar (子选项)
Unvar VARIABLE [VARIABLE2 [...]]移除一个环境变量
- Include (子选项)
Include macro_name包含宏 macro_name。参考下文CASE-BLOCK。
- Bash (子选项)
Bash bash_codes这个选项设置操作系统环境变量,你可以插入BASH代码来定制系统环境。注意不要导致一些不可恢复的结果。
- BashAtExit (子选项)
BashAtExit bash_codes这个选项恢复操作系统环境,这样可以正确运行新的测试用例。当然也可以直接使用Bash选项来恢复。然而, 如果进程发生错误,脚本讲不运行恢复的代码直接退出,这种情况下,应该使用BashAtExit,可以在退出前恢复系统环境。
- RunAgent (子选项)
RunAgent cmd [ret_value]这个选项运行资源代理。“cmd” 是资源代理的参数,比如"start,status,stop..."。第二个参数是可选的。可用来比较脚本运行结果的返回值和期望值。如果不同,应该可以找到一些bug。
也可以不是本地执行而是远程执行。使用的协议是ssh,程序在后台运行。只需要增加在子选项后面加上@
Bash@192.168.1.100 date上面的例子会运行date程序。远程命令都是在后台运行的。
NB:这些还需要有多谢说明(这个话是说给编写者的:译者注)
CASE-BLOCK (一级选项)
CASE-BLOCK选项定义可以被包含在CASE中的宏。所有CASE的子选项都可以使用。
没有评论:
发表评论