summaryrefslogtreecommitdiffstats
path: root/tools/ocft/README.zh_CN.in
blob: 5138cf1ad018d23fa1683ffe2e8fcf3781e75c0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
1 介绍和设计
ocft是一个测试resource agents的工具。它并不关注HA的策略,而是关注resource agents
是否正常运行在本机。他能对resource agents设计各种复杂环境,来考验resource agnets
是否能正常应对,也就是看resouce agents是否能返回正确的或者说我们所期望的值。
这个工具给我们带来的好处就是我们可以集中的批量的来设计环境,而且这种环境是可被我们
记录、重现的,对Debug人员来说是很有用的。

1.1 组成
1.1.1 解释器 (@sbindir@/ocft)
将test case配置文件转换成可执行的测试脚本。

1.1.2 配置文件 (@datadir@/@PACKAGE_NAME@/ocft/configs/)
每一个configuration file只针对一个resouce agent,配置文件名与resouce agent名相同,
但是它可以容纳很多test case。

1.1.3 测试脚本 (/var/lib/@PACKAGE_NAME@/ocft/cases/)
由generator读取configuration file生成测试脚本,直接运行此脚本就可以开始测试了。

1.2 如何定制环境
ocft 通过两种手段来设计resouce agents的运行环境,一是更改resouce agents的环境变量,
当然这是ocf本身就留给我们的接口。二是更改resource agents所处的系统环境,
比如更改某个关键文件的权限,更改本机ip地址等等...

1.3 如何进行测试
首先你需要针对某个resource agent在脑中勾画各种复杂且异常的环境,并且你能清楚预知
这些异常环境会给resource agent带来什么结果,然后将这些设计好的环境和你预知的结果
都写入配置文件,然后运行generator,将你刚写的test case转换成可执行的脚本。最后运行
这些脚本,观察它们的输出,你可以清楚看到每个test case运行状况,他会比较你的预知结
果和resource agent的实际结果,如果不一样,说明你找到resource agent的bug了。
所有的测试输出都会被记录到日志文件中,你可以在 /var/lib/@PACKAGE_NAME@/ocft/cases/logs
中找到他们.

2 配置
只有6个top level option,它们是由大写字母和'-'构成的,每个top level option都有若干sub-option,
它们是首字母大写。

2.1 'CONFIG' 选项
语法:CONFIG
此option中的设计是全局的,对每个test case都有所影响。

2.1.1 'Agent' 选项
语法:Agent AGENT_NAME
你要测试的Agent的名字。

2.1.2 'AgentRoot' 选项
语法:AgentRoot /usr/lib/ocf/resource.d/xxx
一些agent将会被移到 "pacemaker" 或 "linbit" 目录,如果你定义了这个选项,ocft将会用它来
替代默认的目录"heartbeat"。

2.1.3 'InstallPackage' 选项
语法:InstallPackage package [package2 [...]]
他会检测系统是否安装了此resource agent的service,如果没有安装,会自动从网络进行安装。
package_name是某个resouce agent在操作系统中必须安装的包。

2.1.4 'HangTimeout' 选项
语法:HangTimeout secs 
如果你更改了一些很关键的东西,有些resouce agent会不知所措,停在那里不动,那么就会影响
到后面test case的运行,所以你需要设定超时,如果一旦resouce agent停在那超时了,脚本会
杀死这个resouce agent。

2.2 'VARIABLE' 选项
语法:
VARIABLE
	VAR1=value1
	VAR2=value2
        ...
在此定义全局变量,这些变量可以用于配置文件中的任何地方,引用时在变量名前加上$。请注意,这些
变量不同于Env定义的变量,Env是定义环境变量,可以改变agent的行为,而这些变量只是用于配置文件中
共享。

2.3 'SETUP-AGENT' 选项
语法:
SETUP-AGENT
	bash scripts...
	...
一些Agent在测试前可能需要初始化,你可以用bash脚本在这初始化。

2.4 'CLEANUP-AGENT' 选项
语法:
CLEANUP-AGENT
	bash scripts...
	...
如果之前定义了SETUP-AGENT, 你可能还需要此选项在测试完后来作一些清除。

2.5 'CASE' & 'CASE-BLOCK' 选项
语法:CASE "description" & CASE-BLOCK macro_name
通常你设计的环境不止一个,那么配置文件中应该会出现许多 'CASE "..."',值得注意的是,以下子
选项每个都有两种写法,一是普通写法,产生的shell代码对本地产生作用,二是特殊写法,就是在每
个选项后加上 "@ipaddr",他可以远程执行shell代码,也就是控制远程机器执行你给的shell代码,
这对需要两台机器以上的resouce agent很有用的,这个远程shell并非简单的用ssh去远程执行,而是在
test case生存期内,后台运行一个远程shell,他始终在后台运行并且保存你的中间结果,也就是说你
可以交替执行本地shell代码段和远程shell代码段。
'CASE-BLOCK'选项是一个宏定义器,它定义的内容将会被插入到"CASE"内容中。

2.5.1 'Env' 选项
语法:Env VARIABLE=value
这是设置resouce agent的环境变量,他们通常是OCF_RESKEY_xxx,注意=号两边不要有空格。

2.5.2 'Unenv' 选项
语法:Unenv VARIABLE
此选项用于删除环境变量。

2.5.3 'Include' 选项
语法:Include macro_name
此选项将会被宏"macro_name"的内容所替代,当然,你得预先用"CASE-BLOCK"来定义宏"macro_name"
的内容。

2.5.4 'Bash' 选项
语法:Bash bash_codes
此选项是用来设置os的环境,你可以嵌入bash代码来对系统作任意设置,不过要注意不要对系统造成
不可恢复的后果就行了。

2.5.5 'BashAtExit' 选项
语法:BashAtExit bash_codes
此选项是用来恢复os的环境,以便另一个test case能正常运行,当然你也可以直接用'Bash'选项来
恢复,但是如果脚本在执行过程中产生某些错误,那么脚本会直接退出,而不会去执行你的恢复代码,
那么你就要用到BashAtExit,他能在你退出前去恢复系统环境。

2.5.6 'AgentRun' 选项
语法:AgentRun cmd [ret_value]
此option会去运行resouce agent,'cmd' 就是resouce agent的参数,如 start,status,stop ...
第二个参数是可选的,它是你对系统环境作出特殊设定以后,你预计resouce agent会返回的值,
如果给出此参数,那么脚本会在运行resouce agent后,会比较此时的返回值和你预期的返回值,
如果不一致,那么说明找到bug了。