super-test 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGE.txt +9 -0
- data/README.txt +13 -0
- data/bin/idb +19 -0
- data/bin/ii +113 -0
- data/bin/istart_mock +36 -0
- data/bin/istop_mock +16 -0
- data/bin/kk +181 -0
- data/bin/rubyatp +42 -0
- data/bin/start_mock +36 -0
- data/bin/stop_mock +16 -0
- data/bin/xgo +45 -0
- data/conf/conf.rb +11 -0
- data/conf/db03.yml +31 -0
- data/conf/db13.yml +37 -0
- data/conf/db19.yml +33 -0
- data/conf/online.yml +32 -0
- data/conf/super_test.yml +40 -0
- data/conf/system.yml +26 -0
- data/conf/sz00.yml +31 -0
- data/conf/sz06.yml +34 -0
- data/conf/wise00.yml +11 -0
- data/data/case.house +0 -0
- data/data/char.house +0 -0
- data/data/images/Bluehills.jpg +0 -0
- data/data/images/Sunset.jpg +0 -0
- data/data/images/Waterlilies.jpg +0 -0
- data/data/images/Winter.jpg +0 -0
- data/data/query.house +18595 -0
- data/data/user.house +8 -0
- data/lib/action/module/check_action.rb +58 -0
- data/lib/action/module/cnnt_action.rb +161 -0
- data/lib/action/module/datacenter_action.rb +48 -0
- data/lib/action/module/http_pack_helper.rb +163 -0
- data/lib/action/module/httpserver_action.rb +297 -0
- data/lib/action/module/inc.rb +21 -0
- data/lib/action/module/mcpack_action.rb +57 -0
- data/lib/action/module/sql_action.rb +84 -0
- data/lib/action/module/ssh_action.rb +37 -0
- data/lib/action/system/user_action.rb +180 -0
- data/lib/common/appium_helper.rb +217 -0
- data/lib/common/atp_helper.rb +74 -0
- data/lib/common/atp_report.rb +344 -0
- data/lib/common/data_house.rb +405 -0
- data/lib/common/data_model.rb +87 -0
- data/lib/common/http/assert_helper.rb +343 -0
- data/lib/common/http/fix_hpricot.rb +118 -0
- data/lib/common/http/html_helper.rb +362 -0
- data/lib/common/http/http_helper.rb +469 -0
- data/lib/common/http/multipart.rb +81 -0
- data/lib/common/isandbox_helper.rb +195 -0
- data/lib/common/json_helper.rb +43 -0
- data/lib/common/mock_helper.rb +168 -0
- data/lib/common/mtop_helper.rb +141 -0
- data/lib/common/myconf_helper.rb +49 -0
- data/lib/common/mylog_helper.rb +77 -0
- data/lib/common/pairwise.rb +121 -0
- data/lib/common/query_house.rb +89 -0
- data/lib/common/report_helper.rb +97 -0
- data/lib/common/robot_helper.rb +85 -0
- data/lib/common/socket/check.rb +325 -0
- data/lib/common/socket/conf_modifier.rb +149 -0
- data/lib/common/socket/context.rb +55 -0
- data/lib/common/socket/data.rb +392 -0
- data/lib/common/socket/data_helper.rb +41 -0
- data/lib/common/socket/env.rb +317 -0
- data/lib/common/socket/inc.rb +24 -0
- data/lib/common/socket/log.rb +213 -0
- data/lib/common/socket/log4s.rb +58 -0
- data/lib/common/socket/log_helper.rb +332 -0
- data/lib/common/socket/my_sql.rb +77 -0
- data/lib/common/socket/net.rb +74 -0
- data/lib/common/socket/network.rb +115 -0
- data/lib/common/socket/rlib/conf_modifier.rb +130 -0
- data/lib/common/socket/rlib/data_helper.rb +33 -0
- data/lib/common/socket/rlib/log_helper.rb +303 -0
- data/lib/common/socket/rlib/process_helper.rb +91 -0
- data/lib/common/socket/stub.rb +276 -0
- data/lib/common/socket/util.rb +266 -0
- data/lib/patterns/inc.rb +10 -0
- data/lib/patterns/mc_base_pattern.rb +474 -0
- data/lib/patterns/some_pattern.rb +145 -0
- data/lib/super_test.rb +114 -0
- data/log/super_test.log +0 -0
- data/log/super_test.log.wf +0 -0
- data/test/cover_me.rb +6 -0
- data/tool/jenny +0 -0
- data/tool/mcsend/mcsend2 +0 -0
- data/tool/mcsend/mcsend2_shead +0 -0
- data/tool/mcserver/conf/mcserver.conf +77 -0
- data/tool/mcserver/conf/mcserverauthip +17 -0
- data/tool/mcserver/mcserver +0 -0
- data/tool/mcserver/mcserver_trans +0 -0
- data/tool/mysql +0 -0
- data/tool/net/mcsend/mcsend +0 -0
- data/tool/net/mcsend/mcsend_trans +0 -0
- data/tool/net/mcsend/nshead.data +7 -0
- data/tool/net/mcsend/res_nshead.data +7 -0
- data/tool/net/my_client/my_client +0 -0
- data/tool/net/tsclient/client.tcl +205 -0
- data/tool/others/kk +190 -0
- data/tool/others/rubyatp +42 -0
- data/tool/others/supertest_install.sh +34 -0
- data/tool/trip/idb +0 -0
- data/tool/ts-agent/nshead.bft +12 -0
- data/tool/ts-agent/server.conf +10 -0
- data/tool/ts-agent/server.tcl +376 -0
- metadata +275 -0
@@ -0,0 +1,145 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
require 'inc'
|
4
|
+
|
5
|
+
#============================================================
|
6
|
+
# 模块测试中总结的一些测试模式
|
7
|
+
# Author:: liqiang01
|
8
|
+
# Data:: 2009-8-23 17:18:27
|
9
|
+
#============================================================
|
10
|
+
|
11
|
+
CONF_TEST_CASE=[]
|
12
|
+
MCPACK_INTERFACE_TEST_CASE=[]
|
13
|
+
module SomePatternHelper
|
14
|
+
|
15
|
+
# === 功能:
|
16
|
+
# mcpack接口异常测试模式
|
17
|
+
# 自动构造mcpack接口异常测试需要的异常数据
|
18
|
+
# 对mcpack接口的每个字段进行各种边界及特殊数据的测试
|
19
|
+
# 默认采用的用例集:
|
20
|
+
# CaseHouse.get_instance.get_all_number
|
21
|
+
# 超长字符串
|
22
|
+
# 中文,空白
|
23
|
+
# 每个子pack都增加额外的字段
|
24
|
+
# 删除每个待测试的字段
|
25
|
+
#
|
26
|
+
# === 参数解释:
|
27
|
+
# - mctxt 发送接口的命令范例
|
28
|
+
#
|
29
|
+
# === 外部变量:
|
30
|
+
# 用户也可以提供额外需要进行测试的用例集。可以使用下面的变量
|
31
|
+
# MCPACK_INTERFACE_TEST_CASE 数组类型
|
32
|
+
#
|
33
|
+
# === Example:
|
34
|
+
# txt1="..."
|
35
|
+
# MCPACK_INTERFACE_TEST_CASE=[7789, "space_provider"]
|
36
|
+
# mcpack_test_pattern(txt1).each{ |line|
|
37
|
+
# mcpack_send line
|
38
|
+
# }
|
39
|
+
# core_check
|
40
|
+
def mcpack_test_pattern(mctxt)
|
41
|
+
tmptxt="#{mctxt}"
|
42
|
+
ret=[]
|
43
|
+
while(tmptxt=~ /"([^"]+)":\(([^\)]+)\)([^ ,}{\[\]]*)/)
|
44
|
+
key=$1
|
45
|
+
type=$2
|
46
|
+
value=$3
|
47
|
+
tmptxt.sub!(/#{key}/,"")
|
48
|
+
CaseHouse.get_instance.get_all_number.each{|line|
|
49
|
+
ret.push mctxt.sub(/"#{key}":\(#{type}\)#{value}/, "\"#{key}\":\(#{type}\)#{line}")
|
50
|
+
}
|
51
|
+
if MCPACK_INTERFACE_TEST_CASE.size > 0
|
52
|
+
MCPACK_INTERFACE_TEST_CASE.each{|line|
|
53
|
+
ret.push mctxt.sub(/"#{key}":\(#{type}\)#{value}/, "\"#{key}\":\(#{type}\)#{line}")
|
54
|
+
}
|
55
|
+
end
|
56
|
+
ret.push mctxt.sub(/"#{key}":\(#{type}\)#{value}/, "")
|
57
|
+
end
|
58
|
+
while(tmptxt=~/"([^"]+)":\"([^ ",}{\[\]]*)\"/)
|
59
|
+
key=$1
|
60
|
+
value=$2
|
61
|
+
tmptxt.sub!(/#{key}/,"")
|
62
|
+
txtbig="x"*10000
|
63
|
+
txteng="xxxxxxxxxx"
|
64
|
+
txtchi="中文测试"
|
65
|
+
txtnull=""
|
66
|
+
ret.push mctxt.sub(/"#{key}":"#{value}"/, "\"#{key}\":\"#{txtbig}\"")
|
67
|
+
ret.push mctxt.sub(/"#{key}":"#{value}"/, "\"#{key}\":\"#{txteng}\"")
|
68
|
+
ret.push mctxt.sub(/"#{key}":"#{value}"/, "\"#{key}\":\"#{txtchi}\"")
|
69
|
+
ret.push mctxt.sub(/"#{key}":"#{value}"/, "\"#{key}\":\"#{txtnull}\"")
|
70
|
+
if MCPACK_INTERFACE_TEST_CASE.size > 0
|
71
|
+
MCPACK_INTERFACE_TEST_CASE.each{|line|
|
72
|
+
ret.push mctxt.sub(/"#{key}":"#{value}"/, "\"#{key}\":\"#{line}\"")
|
73
|
+
}
|
74
|
+
end
|
75
|
+
ret.push mctxt.sub(/"#{key}":\(#{type}\)#{value}/, "")
|
76
|
+
end
|
77
|
+
ret.push mctxt.gsub(/}/,",\"addbyMcpackPatternStr\":\"xxxx\",\"addbyMcpackPatternNum\":(uint32)0}")
|
78
|
+
return ret
|
79
|
+
end
|
80
|
+
|
81
|
+
# === 功能:
|
82
|
+
# 配置文件异常测试模式
|
83
|
+
# 对指定的配置项进行异常测试
|
84
|
+
# 默认的用例集:
|
85
|
+
# CaseHouse.get_instance.get_all_number 所有可能的数字边界
|
86
|
+
# CaseHouse.get_instance.rand_string(10,"aA0$") 随机字符串
|
87
|
+
# CaseHouse.get_instance.rand_string(1,"B") 空白
|
88
|
+
#
|
89
|
+
# === 参数解释:
|
90
|
+
# - host 机器
|
91
|
+
# - user 用户名
|
92
|
+
# - password 密码
|
93
|
+
# - modulename 模块的名字,重启模块需要模块名
|
94
|
+
# - conf_items 需要进行测试的配置项的名字,是个数组
|
95
|
+
#
|
96
|
+
# === 外部变量:
|
97
|
+
# 当用户需要自己定义额外的测试用例集时,可使用下面的变量
|
98
|
+
# CONF_TEST_CASE 数组类型
|
99
|
+
#
|
100
|
+
# === Example:
|
101
|
+
# items=["name1", "name2"]
|
102
|
+
# CONF_TEST_CASE=[123, "mycase"]
|
103
|
+
# conf_test_pattern("frdtransform", items)
|
104
|
+
# core_check
|
105
|
+
def conf_test_pattern(host=HOST, user=USERNAME, password=PASSWORD, modulename, conf_items)
|
106
|
+
bak_conf host, user, password, CONFPATH, "BAK_CONF_BY_CONF_TEST_PATTERN"
|
107
|
+
conf_items.each{|item|
|
108
|
+
CaseHouse.get_instance.get_all_number.each{|item_value|
|
109
|
+
puts "#{item} #{item_value}"
|
110
|
+
modify_conf_single host, user, password, CONFPATH, item, item_value.to_s
|
111
|
+
ssh_cmd host, user, password, "killall -9 #{modulename}"
|
112
|
+
sleep 3
|
113
|
+
}
|
114
|
+
[ CaseHouse.get_instance.rand_string(10,"aA0$") ].each{|item_value|
|
115
|
+
puts "#{item} #{item_value}"
|
116
|
+
modify_conf_single host, user, password, CONFPATH, item, item_value
|
117
|
+
ssh_cmd host, user, password, "killall -9 #{modulename}"
|
118
|
+
sleep 3
|
119
|
+
}
|
120
|
+
[ CaseHouse.get_instance.rand_string(1,"B") ].each{|item_value|
|
121
|
+
puts "#{item} #{item_value}"
|
122
|
+
modify_conf_single host, user, password, CONFPATH, item, item_value
|
123
|
+
ssh_cmd host, user, password, "killall -9 #{modulename}"
|
124
|
+
sleep 3
|
125
|
+
}
|
126
|
+
if (CONF_TEST_CASE.size>0)
|
127
|
+
CONF_TEST_CASE.each{|item_value|
|
128
|
+
puts "#{item} #{item_value}"
|
129
|
+
modify_conf_single host, user, password, CONFPATH, item, item_value
|
130
|
+
ssh_cmd host, user, password, "killall -9 #{modulename}"
|
131
|
+
sleep 3
|
132
|
+
}
|
133
|
+
end
|
134
|
+
}
|
135
|
+
recover_conf host, user, password, CONFPATH, "BAK_CONF_BY_CONF_TEST_PATTERN"
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
|
140
|
+
if __FILE__ == $0
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
|
145
|
+
|
data/lib/super_test.rb
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
#
|
4
|
+
# Author:: liqiang01
|
5
|
+
# Date:: 2009-8-19 21:31:34
|
6
|
+
|
7
|
+
|
8
|
+
#############################
|
9
|
+
# 初始化相关路径
|
10
|
+
$SUPER_ROOT = "#{File.dirname(File.dirname(File.expand_path(__FILE__)))}"
|
11
|
+
$SUPER_ROOT_LIB = "#{$SUPER_ROOT}/lib"
|
12
|
+
$SUPER_ROOT_DATA = "#{$SUPER_ROOT}/data"
|
13
|
+
$: << $SUPER_ROOT_LIB
|
14
|
+
$WORK_ROOT ||= ENV["WORK_ROOT"] if ENV.has_key?("WORK_ROOT")
|
15
|
+
# 如果没有定义work_root,就把super_root当成work_root
|
16
|
+
$WORK_ROOT ||= $SUPER_ROOT
|
17
|
+
$WORK_ROOT_LIB = "#{$WORK_ROOT}/lib"
|
18
|
+
# 将CASE_ROOT变为绝对路径,因为一些第三方工具需要使用绝对路径
|
19
|
+
$CASE_PATH = File.expand_path($CASE_PATH) unless $CASE_PATH.nil?
|
20
|
+
$CASE_ROOT ||= File.dirname($CASE_PATH) unless $CASE_PATH.nil?
|
21
|
+
$CASE_ROOT = File.expand_path($CASE_ROOT) unless $CASE_ROOT.nil?
|
22
|
+
|
23
|
+
|
24
|
+
#############################
|
25
|
+
# 加载需要的库,注意命名空间
|
26
|
+
require 'test/unit'
|
27
|
+
require 'common/atp_helper'
|
28
|
+
require 'common/mylog_helper'
|
29
|
+
require 'common/myconf_helper'
|
30
|
+
require 'common/http/http_helper'
|
31
|
+
require 'common/http/html_helper'
|
32
|
+
require 'common/http/assert_helper'
|
33
|
+
require 'common/data_house'
|
34
|
+
require 'common/data_model'
|
35
|
+
require 'common/robot_helper'
|
36
|
+
require 'common/json_helper'
|
37
|
+
require 'common/pairwise'
|
38
|
+
require 'common/query_house'
|
39
|
+
require 'common/mtop_helper'
|
40
|
+
require 'common/appium_helper'
|
41
|
+
require 'common/isandbox_helper'
|
42
|
+
require 'common/mock_helper'
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
#############################
|
47
|
+
# 加载action,包括用户产品目录下的action,包括系统和模块
|
48
|
+
Dir.glob("#{$SUPER_ROOT_LIB}/action/**/*_action.rb").each {|file| require "#{file}"}
|
49
|
+
Dir.glob("#{$WORK_ROOT_LIB}/action/**/*_action.rb").each {|file| require "#{file}"}
|
50
|
+
Dir.glob("#{$WORK_ROOT_LIB}/common/**/*_helper.rb").each {|file| require "#{file}"}
|
51
|
+
|
52
|
+
|
53
|
+
#############################
|
54
|
+
# 加载init_dir
|
55
|
+
require "#{$CASE_ROOT}/init_dir" if !$CASE_ROOT.nil? and File.exist?("#{$CASE_ROOT}/init_dir.rb")
|
56
|
+
|
57
|
+
|
58
|
+
#############################
|
59
|
+
# 将tool路径加入到 PATH 环境变量当中,只在当前shell中有效
|
60
|
+
ENV['PATH'] = "#{$WORK_ROOT}/tool:#{$SUPER_ROOT}/tool:#{ENV['PATH']}"
|
61
|
+
|
62
|
+
|
63
|
+
#############################
|
64
|
+
# 定义基类
|
65
|
+
class SuperTest < Test::Unit::TestCase
|
66
|
+
include MylogHelper
|
67
|
+
include ConfigHelper
|
68
|
+
include HtmlHelper
|
69
|
+
include HttpHelper
|
70
|
+
include AssertHelper
|
71
|
+
include RobotHelper
|
72
|
+
include JsonHelper
|
73
|
+
include MtopHelper
|
74
|
+
|
75
|
+
# 将系统的和用户自定义的以 Helper|Pattern|Action 结尾的Module,全都include进来
|
76
|
+
def initialize(*params)
|
77
|
+
Object.constants.each do |k|
|
78
|
+
if k.to_s =~ /^.+(Helper|Action)$/
|
79
|
+
m = Object.const_get(k)
|
80
|
+
self.extend(m) if m.instance_of? Module
|
81
|
+
end
|
82
|
+
end
|
83
|
+
super(*params)
|
84
|
+
end
|
85
|
+
|
86
|
+
def setup
|
87
|
+
super
|
88
|
+
# 用户仓库
|
89
|
+
@user_house = UserHouse.get_instance
|
90
|
+
# 字符仓库
|
91
|
+
@char_house = CharHouse.get_instance
|
92
|
+
# 初始化cookie池
|
93
|
+
@cookies = {}
|
94
|
+
# 初始化referer为空
|
95
|
+
@referer = ""
|
96
|
+
# 初始化用户为空
|
97
|
+
@user = nil
|
98
|
+
# 是否做压力,压力的情况下会屏蔽掉所有assert
|
99
|
+
@is_press = false
|
100
|
+
# 默认是要进行转码的
|
101
|
+
@dont_encode = false
|
102
|
+
start_appium if CONF["appium"]
|
103
|
+
end
|
104
|
+
|
105
|
+
def teardown
|
106
|
+
super
|
107
|
+
stop_appium if CONF["appium"]
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
if __FILE__ == $0
|
113
|
+
|
114
|
+
end
|
data/log/super_test.log
ADDED
File without changes
|
File without changes
|
data/test/cover_me.rb
ADDED
data/tool/jenny
ADDED
Binary file
|
data/tool/mcsend/mcsend2
ADDED
Binary file
|
Binary file
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#日志目录
|
2
|
+
log_dir : ./log
|
3
|
+
#日志文件名
|
4
|
+
log_file : mcserver.
|
5
|
+
#日志文件刷新大小(M)
|
6
|
+
log_size : 1500
|
7
|
+
#日志级别
|
8
|
+
log_level : 16
|
9
|
+
|
10
|
+
|
11
|
+
#mcserver服务
|
12
|
+
|
13
|
+
#服务名
|
14
|
+
_svr_regression_mcserver_name : mcserver
|
15
|
+
#启动服务的端口
|
16
|
+
_svr_regression_mcserver_port : 9916
|
17
|
+
#服务的读超时(单位:ms)
|
18
|
+
_svr_regression_mcserver_readtimeout : 1000
|
19
|
+
#服务的写超时(单位:ms)
|
20
|
+
_svr_regression_mcserver_writetimeout : 1000
|
21
|
+
#服务启动的线程数
|
22
|
+
_svr_regression_mcserver_threadnum : 2
|
23
|
+
#服务连接的类型(0:短连接, 1:长连接)example: 0 (use short connect)
|
24
|
+
_svr_regression_mcserver_connecttype : 0
|
25
|
+
#服务使用的pool类型(0:XPOOL, 1:CPOOL)
|
26
|
+
_svr_regression_mcserver_servertype : 0
|
27
|
+
#CPOOL的socksize当使用CPOOL时设置有效
|
28
|
+
#[默认配置(uint), _svr_regression_mcserver_quenesize : 0]
|
29
|
+
_svr_regression_mcserver_quenesize : 0
|
30
|
+
#CPOOL的socksize当使用CPOOL时设置有效
|
31
|
+
#[默认配置(uint), _svr_regression_mcserver_socksize : 0]
|
32
|
+
_svr_regression_mcserver_socksize : 0
|
33
|
+
|
34
|
+
#client服务器
|
35
|
+
|
36
|
+
#请求服务名
|
37
|
+
_reqsvr_regression_client_name : client
|
38
|
+
#请求服务的IP地址,可以设置多个IP
|
39
|
+
_reqsvr_regression_client_ip : 127.0.0.1
|
40
|
+
#请求服务的端口
|
41
|
+
_reqsvr_regression_client_port : 6000
|
42
|
+
#请求服务的读超时(单位:ms)
|
43
|
+
_reqsvr_regression_client_readtimemout : 1000
|
44
|
+
#请求服务的写超时(单位:ms)
|
45
|
+
_reqsvr_regression_client_writetimeout : 1000
|
46
|
+
#请求服务的连接超时(单位:ms)
|
47
|
+
_reqsvr_regression_client_connecttimeout : 1000
|
48
|
+
#请求服务时最大连接数
|
49
|
+
_reqsvr_regression_client_maxconnect : 10
|
50
|
+
#请求服务的重试次数
|
51
|
+
_reqsvr_regression_client_retry : 3
|
52
|
+
#服务连接的类型(0:短连接, 1:长连接)
|
53
|
+
_reqsvr_regression_client_connecttype : 0
|
54
|
+
|
55
|
+
|
56
|
+
#数据文件目录
|
57
|
+
data_dir : ./data
|
58
|
+
|
59
|
+
#认证IP文件路径
|
60
|
+
auth_file : ./conf/mcserverauthip
|
61
|
+
|
62
|
+
#作为桩时mcpack数据文件的名字
|
63
|
+
mcdata : stubdata
|
64
|
+
#是否作为桩
|
65
|
+
as_stub : 0
|
66
|
+
|
67
|
+
#含有全部字段的日志文件的名字
|
68
|
+
fulltextfile : foo.log
|
69
|
+
|
70
|
+
#每个线程usleep的时间-微秒
|
71
|
+
usleep_time_thread : 0
|
72
|
+
#线程usleep的概率 范围:[0-1] 每个线程都sleep请填 1, 不sleep请填 0
|
73
|
+
usleep_percent : 0.8
|
74
|
+
#按指定概率usleep的时间-微秒
|
75
|
+
usleep_time_percent : 10
|
76
|
+
|
77
|
+
|
Binary file
|
Binary file
|
data/tool/mysql
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,205 @@
|
|
1
|
+
load bft.so
|
2
|
+
load cnnt.so
|
3
|
+
|
4
|
+
set ip ""
|
5
|
+
set port ""
|
6
|
+
set module_name ""
|
7
|
+
set is_gen "0"
|
8
|
+
set debug "0"
|
9
|
+
|
10
|
+
proc print_log {info} {
|
11
|
+
global debug
|
12
|
+
if {$debug == 1} {
|
13
|
+
puts $info
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
proc print_usage {} {
|
18
|
+
global argv0
|
19
|
+
puts "Usage:\tts-agent -f $argv0 -d -i ip -p port -m module_name"
|
20
|
+
puts " \tts-agent -f $argv0 -g -m module_name"
|
21
|
+
puts "Options:"
|
22
|
+
puts "\t-g gen template"
|
23
|
+
puts "\t-d debug mode"
|
24
|
+
puts "\t-i server ip"
|
25
|
+
puts "\t-p server port"
|
26
|
+
puts "\t-m module name, corresponding to other files, such as <module_name>_<req|res>.<bft|data>"
|
27
|
+
puts "\t-c case name"
|
28
|
+
puts "\t-r receive name"
|
29
|
+
puts "\t-h print this help"
|
30
|
+
puts "\t-v print version"
|
31
|
+
}
|
32
|
+
|
33
|
+
proc print_version {} {
|
34
|
+
puts "Version:"
|
35
|
+
puts "\t 1.0.0.0"
|
36
|
+
puts "written by wangkaihua."
|
37
|
+
}
|
38
|
+
|
39
|
+
proc gen_template {} {
|
40
|
+
global module_name
|
41
|
+
set tmp_req_bft [format "%s_req.bft" $module_name]
|
42
|
+
if {[catch {bft gen $tmp_req_bft} tmp_req]} {puts "error: failed to read file <$tmp_req_bft>";exit}
|
43
|
+
if {[catch {puts [bft export_json $tmp_req]}]} {puts "error: failed to gen template.";exit}
|
44
|
+
}
|
45
|
+
|
46
|
+
proc parse_option {} {
|
47
|
+
global argc
|
48
|
+
global argv
|
49
|
+
global ip
|
50
|
+
global port
|
51
|
+
global bft_path
|
52
|
+
global module_name
|
53
|
+
global case_name
|
54
|
+
global receive_name
|
55
|
+
global is_gen
|
56
|
+
global debug
|
57
|
+
set index 0
|
58
|
+
while {$index < $argc} {
|
59
|
+
set option [lindex $argv $index]
|
60
|
+
switch -exact $option {
|
61
|
+
-h {print_usage;exit}
|
62
|
+
-i {
|
63
|
+
incr index 1
|
64
|
+
if {$index <$argc} {set ip [lindex $argv $index]
|
65
|
+
} else {puts "error : param should be input after option -h "}
|
66
|
+
}
|
67
|
+
-p {
|
68
|
+
incr index 1
|
69
|
+
if {$index <$argc} {set port [lindex $argv $index]
|
70
|
+
} else {puts "error : param should be input after option -p "}
|
71
|
+
}
|
72
|
+
-b {
|
73
|
+
incr index 1
|
74
|
+
if {$index <$argc} {set bft_path [lindex $argv $index]
|
75
|
+
} else {puts "error : param should be input after option -b "}
|
76
|
+
}
|
77
|
+
-m {
|
78
|
+
incr index 1
|
79
|
+
if {$index <$argc} {set module_name [lindex $argv $index]
|
80
|
+
} else {puts "error : param should be input after option -m "}
|
81
|
+
}
|
82
|
+
-c {
|
83
|
+
incr index 1
|
84
|
+
if {$index <$argc} {set case_name [lindex $argv $index]
|
85
|
+
} else {puts "error : param should be input after option -c "}
|
86
|
+
}
|
87
|
+
-r {
|
88
|
+
incr index 1
|
89
|
+
if {$index <$argc} {set receive_name [lindex $argv $index]
|
90
|
+
} else {puts "error : param should be input after option -r "}
|
91
|
+
}
|
92
|
+
-v {print_version;exit}
|
93
|
+
-g {set is_gen 1}
|
94
|
+
-d {set debug 1}
|
95
|
+
default {puts "deault"}
|
96
|
+
}
|
97
|
+
incr index 1
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
parse_option
|
102
|
+
if {$is_gen == 1} {
|
103
|
+
gen_template
|
104
|
+
exit
|
105
|
+
}
|
106
|
+
|
107
|
+
#set serverip "10.241.14.54"
|
108
|
+
set serverip $ip
|
109
|
+
#set serverport "21040"
|
110
|
+
set serverport $port
|
111
|
+
|
112
|
+
set req_bft [format "%s/%s_req.bft" $bft_path $module_name]
|
113
|
+
puts "$req_bft."
|
114
|
+
#set req_data [format "%s_req.data" $module_name]
|
115
|
+
set req_data [format "%s" $case_name]
|
116
|
+
set res_bft [format "%s/%s_res.bft" $bft_path $module_name]
|
117
|
+
puts "$res_bft."
|
118
|
+
#set res_data [format "%s_req.recv" $module_name]
|
119
|
+
set res_data [format "%s" $receive_name]
|
120
|
+
|
121
|
+
if {![file exists $req_bft]} {
|
122
|
+
puts "ERROR: $req_bft does not exist."
|
123
|
+
exit
|
124
|
+
}
|
125
|
+
|
126
|
+
if {[catch {bft gen $req_bft} req]} {
|
127
|
+
puts "ERROR: failed to load template $req_bft"
|
128
|
+
exit
|
129
|
+
} else {
|
130
|
+
if {[catch {open $req_data "r"} send_fd]} {
|
131
|
+
puts "ERROR: failed to open $req_data"
|
132
|
+
exit
|
133
|
+
}
|
134
|
+
gets $send_fd line
|
135
|
+
if {[catch {bft import_json $req $line}]} {
|
136
|
+
puts "ERROR: failed to import req_data."
|
137
|
+
exit
|
138
|
+
}
|
139
|
+
close $send_fd
|
140
|
+
}
|
141
|
+
|
142
|
+
if {![file exists $res_bft]} {
|
143
|
+
puts "NOTICE: $res_bft does not exist. then recv data will not be parsed."
|
144
|
+
} else {
|
145
|
+
if {[catch {bft gen $res_bft} res]} {
|
146
|
+
puts "ERROR: failed to load template $res_bft"
|
147
|
+
puts $res
|
148
|
+
unset res
|
149
|
+
}
|
150
|
+
}
|
151
|
+
|
152
|
+
set clt "client"
|
153
|
+
cnnt new $clt
|
154
|
+
cnnt config $clt "client;ip-server:$serverip;port-server:$serverport;type-data:raw"
|
155
|
+
cnnt onrecv $clt CltOnRecv -id -name
|
156
|
+
cnnt start $clt
|
157
|
+
|
158
|
+
proc clear {name id} {
|
159
|
+
cnnt delete $name -id $id
|
160
|
+
}
|
161
|
+
|
162
|
+
proc CltOnRecv {data id name} {
|
163
|
+
global res
|
164
|
+
global res_data
|
165
|
+
|
166
|
+
if {[info exists res]} {
|
167
|
+
if {[catch {open $res_data "w"} recv_fd]} {
|
168
|
+
print_log "error:failed to open $req_data"
|
169
|
+
clear $name $id
|
170
|
+
return
|
171
|
+
}
|
172
|
+
|
173
|
+
print_log "NOTICE: $name ===>> recved from server:"
|
174
|
+
if {[catch {bft import $res $data}]} {
|
175
|
+
print_log "error: failed to import recv_data to res_bft"
|
176
|
+
clear $name $id
|
177
|
+
return
|
178
|
+
}
|
179
|
+
print_log [bft export_json $res]
|
180
|
+
if {[catch {puts $recv_fd [bft export_json $res]}]} {
|
181
|
+
print_log "error: failed to export res_data to json"
|
182
|
+
clear $name $id
|
183
|
+
return
|
184
|
+
}
|
185
|
+
|
186
|
+
close $recv_fd
|
187
|
+
} else {
|
188
|
+
print_log "NOTICE: $name ===>recved from server. data does not be parsed, for no res_bft file exists."
|
189
|
+
}
|
190
|
+
|
191
|
+
clear $name $id
|
192
|
+
|
193
|
+
}
|
194
|
+
|
195
|
+
print_log " ===>> sending to server: $module_name"
|
196
|
+
print_log [bft export_json $req]
|
197
|
+
set buf [bft export $req]
|
198
|
+
cnnt send $clt $buf
|
199
|
+
|
200
|
+
proc AsynWait {time} {
|
201
|
+
after $time [list set done ""]
|
202
|
+
vwait done
|
203
|
+
}
|
204
|
+
AsynWait 2000
|
205
|
+
#vwait forever
|