Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
TDengine
提交
d6f527d8
T
TDengine
项目概览
慢慢CG
/
TDengine
与 Fork 源项目一致
Fork自
taosdata / TDengine
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d6f527d8
编写于
11月 08, 2020
作者:
S
Shengliang Guan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[TD-1952]<fix>: tsim crash while run background scripts
上级
855ecf59
变更
6
显示空白变更内容
内联
并排
Showing
6 changed file
with
292 addition
and
287 deletion
+292
-287
tests/tsim/inc/sim.h
tests/tsim/inc/sim.h
+43
-46
tests/tsim/inc/simParse.h
tests/tsim/inc/simParse.h
+1
-1
tests/tsim/src/simExe.c
tests/tsim/src/simExe.c
+114
-113
tests/tsim/src/simMain.c
tests/tsim/src/simMain.c
+5
-5
tests/tsim/src/simParse.c
tests/tsim/src/simParse.c
+102
-102
tests/tsim/src/simSystem.c
tests/tsim/src/simSystem.c
+27
-20
未找到文件。
tests/tsim/inc/sim.h
浏览文件 @
d6f527d8
...
...
@@ -100,7 +100,7 @@ typedef struct _cmd_t {
int16_t
cmdno
;
int16_t
nlen
;
char
name
[
MAX_SIM_CMD_NAME_LEN
];
bool
(
*
parseCmd
)(
char
*
,
struct
_cmd_t
*
,
int
);
bool
(
*
parseCmd
)(
char
*
,
struct
_cmd_t
*
,
int
32_t
);
bool
(
*
executeCmd
)(
struct
_script_t
*
script
,
char
*
option
);
struct
_cmd_t
*
next
;
}
SCommand
;
...
...
@@ -111,7 +111,7 @@ typedef struct {
int16_t
errorJump
;
// sql jump flag, while '-x' exist in sql cmd, this flag
// will be SQL_JUMP_TRUE, otherwise is SQL_JUMP_FALSE */
int16_t
lineNum
;
// correspodning line number in original file
int
optionOffset
;
// relative option offset
int
32_t
optionOffset
;
// relative option offset
}
SCmdLine
;
typedef
struct
_var_t
{
...
...
@@ -121,45 +121,42 @@ typedef struct _var_t {
}
SVariable
;
typedef
struct
_script_t
{
int
type
;
int
32_t
type
;
bool
killed
;
void
*
taos
;
void
*
taos
;
char
rows
[
12
];
// number of rows data retrieved
char
data
[
MAX_QUERY_ROW_NUM
][
MAX_QUERY_COL_NUM
]
[
MAX_QUERY_VALUE_LEN
];
// query results
char
data
[
MAX_QUERY_ROW_NUM
][
MAX_QUERY_COL_NUM
][
MAX_QUERY_VALUE_LEN
];
// query results
char
system_exit_code
[
12
];
char
system_ret_content
[
MAX_SYSTEM_RESULT_LEN
];
int
varLen
;
int
linePos
;
// current cmd position
int
numOfLines
;
// number of lines in the script
int
bgScriptLen
;
int32_t
varLen
;
int32_t
linePos
;
// current cmd position
int32_t
numOfLines
;
// number of lines in the script
int32_t
bgScriptLen
;
char
fileName
[
MAX_FILE_NAME_LEN
];
// script file name
char
error
[
MAX_ERROR_LEN
];
char
*
optionBuffer
;
char
*
optionBuffer
;
SCmdLine
*
lines
;
// command list
SVariable
variables
[
MAX_VAR_LEN
];
struct
_script_t
*
bgScripts
[
MAX_BACKGROUND_SCRIPT_NUM
]
;
pthread_t
bgPid
;
char
auth
[
128
];
struct
_script_t
*
bgScripts
[
MAX_BACKGROUND_SCRIPT_NUM
];
}
SScript
;
extern
SScript
*
simScriptList
[
MAX_MAIN_SCRIPT_NUM
];
extern
SCommand
simCmdList
[];
extern
int
simScriptPos
;
extern
int
simScriptSucced
;
extern
int
simDebugFlag
;
extern
int
32_t
simScriptPos
;
extern
int
32_t
simScriptSucced
;
extern
int
32_t
simDebugFlag
;
extern
char
tsScriptDir
[];
extern
bool
simAsyncQuery
;
SScript
*
simParseScript
(
char
*
fileName
);
SScript
*
simProcessCallOver
(
SScript
*
script
);
void
*
simExecuteScript
(
void
*
script
);
void
*
simExecuteScript
(
void
*
script
);
void
simInitsimCmdList
();
bool
simSystemInit
();
void
simSystemCleanUp
();
char
*
simGetVariable
(
SScript
*
script
,
char
*
varName
,
in
t
varLen
);
char
*
simGetVariable
(
SScript
*
script
,
char
*
varName
,
int32_
t
varLen
);
bool
simExecuteExpCmd
(
SScript
*
script
,
char
*
option
);
bool
simExecuteTestCmd
(
SScript
*
script
,
char
*
option
);
bool
simExecuteGotoCmd
(
SScript
*
script
,
char
*
option
);
...
...
tests/tsim/inc/simParse.h
浏览文件 @
d6f527d8
...
...
@@ -50,6 +50,6 @@ typedef struct {
char
sexpLen
[
MAX_NUM_BLOCK
];
/*switch expression length */
}
SBlock
;
bool
simParseExpression
(
char
*
token
,
int
lineNum
);
bool
simParseExpression
(
char
*
token
,
int
32_t
lineNum
);
#endif
\ No newline at end of file
tests/tsim/src/simExe.c
浏览文件 @
d6f527d8
...
...
@@ -13,6 +13,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "os.h"
#include "sim.h"
#include "taos.h"
...
...
@@ -44,7 +45,7 @@ void simLogSql(char *sql, bool useSharp) {
char
*
simParseArbitratorName
(
char
*
varName
);
char
*
simParseHostName
(
char
*
varName
);
char
*
simGetVariable
(
SScript
*
script
,
char
*
varName
,
int
varLen
)
{
char
*
simGetVariable
(
SScript
*
script
,
char
*
varName
,
int
32_t
varLen
)
{
if
(
strncmp
(
varName
,
"hostname"
,
8
)
==
0
)
{
return
simParseHostName
(
varName
);
}
...
...
@@ -57,11 +58,9 @@ char *simGetVariable(SScript *script, char *varName, int varLen) {
if
(
strncmp
(
varName
,
"rows"
,
varLen
)
==
0
)
return
script
->
rows
;
if
(
strncmp
(
varName
,
"system_exit"
,
varLen
)
==
0
)
return
script
->
system_exit_code
;
if
(
strncmp
(
varName
,
"system_exit"
,
varLen
)
==
0
)
return
script
->
system_exit_code
;
if
(
strncmp
(
varName
,
"system_content"
,
varLen
)
==
0
)
return
script
->
system_ret_content
;
if
(
strncmp
(
varName
,
"system_content"
,
varLen
)
==
0
)
return
script
->
system_ret_content
;
// variable like data2_192.168.0.1
if
(
strncmp
(
varName
,
"data"
,
4
)
==
0
)
{
...
...
@@ -70,16 +69,16 @@ char *simGetVariable(SScript *script, char *varName, int varLen) {
}
if
(
varName
[
5
]
==
'_'
)
{
int
col
=
varName
[
4
]
-
'0'
;
int
32_t
col
=
varName
[
4
]
-
'0'
;
if
(
col
<
0
||
col
>=
MAX_QUERY_COL_NUM
)
{
return
"null"
;
}
char
*
keyName
;
int
keyLen
;
char
*
keyName
;
int
32_t
keyLen
;
paGetToken
(
varName
+
6
,
&
keyName
,
&
keyLen
);
for
(
int
i
=
0
;
i
<
MAX_QUERY_ROW_NUM
;
++
i
)
{
for
(
int
32_t
i
=
0
;
i
<
MAX_QUERY_ROW_NUM
;
++
i
)
{
if
(
strncmp
(
keyName
,
script
->
data
[
i
][
0
],
keyLen
)
==
0
)
{
simDebug
(
"script:%s, keyName:%s, keyValue:%s"
,
script
->
fileName
,
script
->
data
[
i
][
0
],
script
->
data
[
i
][
col
]);
return
script
->
data
[
i
][
col
];
...
...
@@ -87,16 +86,16 @@ char *simGetVariable(SScript *script, char *varName, int varLen) {
}
return
"null"
;
}
else
if
(
varName
[
6
]
==
'_'
)
{
int
col
=
(
varName
[
4
]
-
'0'
)
*
10
+
(
varName
[
5
]
-
'0'
);
int
32_t
col
=
(
varName
[
4
]
-
'0'
)
*
10
+
(
varName
[
5
]
-
'0'
);
if
(
col
<
0
||
col
>=
MAX_QUERY_COL_NUM
)
{
return
"null"
;
}
char
*
keyName
;
int
keyLen
;
char
*
keyName
;
int
32_t
keyLen
;
paGetToken
(
varName
+
7
,
&
keyName
,
&
keyLen
);
for
(
int
i
=
0
;
i
<
MAX_QUERY_ROW_NUM
;
++
i
)
{
for
(
int
32_t
i
=
0
;
i
<
MAX_QUERY_ROW_NUM
;
++
i
)
{
if
(
strncmp
(
keyName
,
script
->
data
[
i
][
0
],
keyLen
)
==
0
)
{
simTrace
(
"script:%s, keyName:%s, keyValue:%s"
,
script
->
fileName
,
script
->
data
[
i
][
0
],
script
->
data
[
i
][
col
]);
return
script
->
data
[
i
][
col
];
...
...
@@ -104,8 +103,8 @@ char *simGetVariable(SScript *script, char *varName, int varLen) {
}
return
"null"
;
}
else
{
int
row
=
varName
[
4
]
-
'0'
;
int
col
=
varName
[
5
]
-
'0'
;
int
32_t
row
=
varName
[
4
]
-
'0'
;
int
32_t
col
=
varName
[
5
]
-
'0'
;
if
(
row
<
0
||
row
>=
MAX_QUERY_ROW_NUM
)
{
return
"null"
;
}
...
...
@@ -118,7 +117,7 @@ char *simGetVariable(SScript *script, char *varName, int varLen) {
}
}
for
(
int
i
=
0
;
i
<
script
->
varLen
;
++
i
)
{
for
(
int
32_t
i
=
0
;
i
<
script
->
varLen
;
++
i
)
{
SVariable
*
var
=
&
script
->
variables
[
i
];
if
(
var
->
varNameLen
!=
varLen
)
{
continue
;
...
...
@@ -144,11 +143,11 @@ char *simGetVariable(SScript *script, char *varName, int varLen) {
return
var
->
varValue
;
}
int
simExecuteExpression
(
SScript
*
script
,
char
*
exp
)
{
char
*
op1
,
*
op2
,
*
var1
,
*
var2
,
*
var3
,
*
rest
;
int
op1Len
,
op2Len
,
var1Len
,
var2Len
,
var3Len
,
val0
,
val1
;
int
32_t
simExecuteExpression
(
SScript
*
script
,
char
*
exp
)
{
char
*
op1
,
*
op2
,
*
var1
,
*
var2
,
*
var3
,
*
rest
;
int
32_t
op1Len
,
op2Len
,
var1Len
,
var2Len
,
var3Len
,
val0
,
val1
;
char
t0
[
512
],
t1
[
512
],
t2
[
512
],
t3
[
1024
];
int
result
;
int
32_t
result
;
rest
=
paGetToken
(
exp
,
&
var1
,
&
var1Len
);
rest
=
paGetToken
(
rest
,
&
op1
,
&
op1Len
);
...
...
@@ -234,7 +233,7 @@ bool simExecuteExpCmd(SScript *script, char *option) {
}
bool
simExecuteTestCmd
(
SScript
*
script
,
char
*
option
)
{
int
result
;
int
32_t
result
;
result
=
simExecuteExpression
(
script
,
option
);
if
(
result
>=
0
)
...
...
@@ -285,13 +284,12 @@ bool simExecuteRunBackCmd(SScript *script, char *option) {
sprintf
(
script
->
error
,
"lineNum:%d. parse file:%s error"
,
script
->
lines
[
script
->
linePos
].
lineNum
,
fileName
);
return
false
;
}
simInfo
(
"script:%s, start to execute in background"
,
newScript
->
fileName
);
newScript
->
type
=
SIM_SCRIPT_TYPE_BACKGROUND
;
script
->
bgScripts
[
script
->
bgScriptLen
++
]
=
newScript
;
simInfo
(
"script:%s, start to execute in background,"
,
newScript
->
fileName
);
pthread_t
pid
;
if
(
pthread_create
(
&
pid
,
NULL
,
simExecuteScript
,
(
void
*
)
newScript
)
!=
0
)
{
if
(
pthread_create
(
&
newScript
->
bgPid
,
NULL
,
simExecuteScript
,
(
void
*
)
newScript
)
!=
0
)
{
sprintf
(
script
->
error
,
"lineNum:%d. create background thread failed"
,
script
->
lines
[
script
->
linePos
].
lineNum
);
return
false
;
}
...
...
@@ -307,11 +305,11 @@ bool simExecuteSystemCmd(SScript *script, char *option) {
simVisuallizeOption
(
script
,
option
,
buf
+
strlen
(
buf
));
simLogSql
(
buf
,
true
);
int
code
=
system
(
buf
);
int
repeatTimes
=
0
;
int
32_t
code
=
system
(
buf
);
int
32_t
repeatTimes
=
0
;
while
(
code
<
0
)
{
simError
(
"script:%s, failed to execute %s , code %d, errno:%d %s, repeatTimes:%d"
,
script
->
fileName
,
buf
,
code
,
errno
,
strerror
(
errno
),
repeatTimes
);
simError
(
"script:%s, failed to execute %s , code %d, errno:%d %s, repeatTimes:%d"
,
script
->
fileName
,
buf
,
code
,
errno
,
strerror
(
errno
),
repeatTimes
);
taosMsleep
(
1000
);
#ifdef LINUX
signal
(
SIGCHLD
,
SIG_DFL
);
...
...
@@ -368,7 +366,7 @@ bool simExecutePrintCmd(SScript *script, char *rest) {
}
bool
simExecuteSleepCmd
(
SScript
*
script
,
char
*
option
)
{
int
delta
;
int
32_t
delta
;
char
buf
[
1024
];
simVisuallizeOption
(
script
,
option
,
buf
);
...
...
@@ -395,7 +393,7 @@ bool simExecuteReturnCmd(SScript *script, char *option) {
simVisuallizeOption
(
script
,
option
,
buf
);
option
=
buf
;
int
ret
=
1
;
int
32_t
ret
=
1
;
if
(
option
&&
option
[
0
]
!=
0
)
ret
=
atoi
(
option
);
if
(
ret
<
0
)
{
...
...
@@ -411,8 +409,8 @@ bool simExecuteReturnCmd(SScript *script, char *option) {
}
void
simVisuallizeOption
(
SScript
*
script
,
char
*
src
,
char
*
dst
)
{
char
*
var
,
*
token
,
*
value
;
int
dstLen
,
srcLen
,
tokenLen
;
char
*
var
,
*
token
,
*
value
;
int
32_t
dstLen
,
srcLen
,
tokenLen
;
dst
[
0
]
=
0
,
dstLen
=
0
;
...
...
@@ -420,14 +418,14 @@ void simVisuallizeOption(SScript *script, char *src, char *dst) {
var
=
strchr
(
src
,
'$'
);
if
(
var
==
NULL
)
break
;
if
(
var
&&
((
var
-
src
-
1
)
>
0
)
&&
*
(
var
-
1
)
==
'\\'
)
{
srcLen
=
(
int
)(
var
-
src
-
1
);
srcLen
=
(
int
32_t
)(
var
-
src
-
1
);
memcpy
(
dst
+
dstLen
,
src
,
srcLen
);
dstLen
+=
srcLen
;
src
=
var
;
break
;
}
srcLen
=
(
int
)(
var
-
src
);
srcLen
=
(
int
32_t
)(
var
-
src
);
memcpy
(
dst
+
dstLen
,
src
,
srcLen
);
dstLen
+=
srcLen
;
...
...
@@ -435,7 +433,7 @@ void simVisuallizeOption(SScript *script, char *src, char *dst) {
value
=
simGetVariable
(
script
,
token
,
tokenLen
);
strcpy
(
dst
+
dstLen
,
value
);
dstLen
+=
(
int
)
strlen
(
value
);
dstLen
+=
(
int
32_t
)
strlen
(
value
);
}
strcpy
(
dst
+
dstLen
,
src
);
...
...
@@ -465,7 +463,7 @@ void simCloseTaosdConnect(SScript *script) {
// {"status":"succ","code":0,"desc":"/KfeAzX/f9na8qdtNZmtONryp201ma04bEl8LcvLUd7a8qdtNZmtONryp201ma04"}
// {"status":"succ","head":["affected_rows"],"data":[[1]],"rows":1}
// {"status":"succ","head":["ts","i"],"data":[["2017-12-25 21:28:41.022",1],["2017-12-25 21:28:42.022",2],["2017-12-25 21:28:43.022",3],["2017-12-25 21:28:44.022",4],["2017-12-25 21:28:45.022",5],["2017-12-25 21:28:46.022",6],["2017-12-25 21:28:47.022",7],["2017-12-25 21:28:48.022",8],["2017-12-25 21:28:49.022",9],["2017-12-25 21:28:50.022",10]],"rows":10}
int
simParseHttpCommandResult
(
SScript
*
script
,
char
*
command
)
{
int
32_t
simParseHttpCommandResult
(
SScript
*
script
,
char
*
command
)
{
cJSON
*
root
=
cJSON_Parse
(
command
);
if
(
root
==
NULL
)
{
simError
(
"script:%s, failed to parse json, response:%s"
,
script
->
fileName
,
command
);
...
...
@@ -492,9 +490,10 @@ int simParseHttpCommandResult(SScript *script, char *command) {
cJSON_Delete
(
root
);
return
-
1
;
}
int
retcode
=
(
in
t
)
code
->
valueint
;
int
32_t
retcode
=
(
int32_
t
)
code
->
valueint
;
if
(
retcode
!=
1017
)
{
simError
(
"script:%s, json:status:%s not equal to succ, response:%s"
,
script
->
fileName
,
status
->
valuestring
,
command
);
simError
(
"script:%s, json:status:%s not equal to succ, response:%s"
,
script
->
fileName
,
status
->
valuestring
,
command
);
cJSON_Delete
(
root
);
return
retcode
;
}
else
{
...
...
@@ -524,27 +523,27 @@ int simParseHttpCommandResult(SScript *script, char *command) {
return
-
1
;
}
int
rowsize
=
cJSON_GetArraySize
(
data
);
int
32_t
rowsize
=
cJSON_GetArraySize
(
data
);
if
(
rowsize
<
0
)
{
simError
(
"script:%s, failed to parse json:data, data size %d, response:%s"
,
script
->
fileName
,
rowsize
,
command
);
cJSON_Delete
(
root
);
return
-
1
;
}
int
rowIndex
=
0
;
int
32_t
rowIndex
=
0
;
sprintf
(
script
->
rows
,
"%d"
,
rowsize
);
for
(
int
r
=
0
;
r
<
rowsize
;
++
r
)
{
for
(
int
32_t
r
=
0
;
r
<
rowsize
;
++
r
)
{
cJSON
*
row
=
cJSON_GetArrayItem
(
data
,
r
);
if
(
row
==
NULL
)
continue
;
if
(
rowIndex
++
>=
10
)
break
;
int
colsize
=
cJSON_GetArraySize
(
row
);
int
32_t
colsize
=
cJSON_GetArraySize
(
row
);
if
(
colsize
<
0
)
{
break
;
}
colsize
=
MIN
(
10
,
colsize
);
for
(
int
c
=
0
;
c
<
colsize
;
++
c
)
{
for
(
int
32_t
c
=
0
;
c
<
colsize
;
++
c
)
{
cJSON
*
col
=
cJSON_GetArrayItem
(
row
,
c
);
if
(
col
->
valuestring
!=
NULL
)
{
strcpy
(
script
->
data
[
r
][
c
],
col
->
valuestring
);
...
...
@@ -561,7 +560,7 @@ int simParseHttpCommandResult(SScript *script, char *command) {
return
0
;
}
int
simExecuteRestFulCommand
(
SScript
*
script
,
char
*
command
)
{
int
32_t
simExecuteRestFulCommand
(
SScript
*
script
,
char
*
command
)
{
char
buf
[
5000
]
=
{
0
};
sprintf
(
buf
,
"%s 2>/dev/null"
,
command
);
...
...
@@ -571,13 +570,13 @@ int simExecuteRestFulCommand(SScript *script, char *command) {
return
-
1
;
}
int
mallocSize
=
2000
;
int
alreadyReadSize
=
0
;
char
*
content
=
malloc
(
mallocSize
);
int
32_t
mallocSize
=
2000
;
int
32_t
alreadyReadSize
=
0
;
char
*
content
=
malloc
(
mallocSize
);
while
(
!
feof
(
fp
))
{
int
availSize
=
mallocSize
-
alreadyReadSize
;
int
len
=
(
in
t
)
fread
(
content
+
alreadyReadSize
,
1
,
availSize
,
fp
);
int
32_t
availSize
=
mallocSize
-
alreadyReadSize
;
int
32_t
len
=
(
int32_
t
)
fread
(
content
+
alreadyReadSize
,
1
,
availSize
,
fp
);
if
(
len
>=
availSize
)
{
alreadyReadSize
+=
len
;
mallocSize
*=
2
;
...
...
@@ -595,10 +594,11 @@ bool simCreateRestFulConnect(SScript *script, char *user, char *pass) {
sprintf
(
command
,
"curl 127.0.0.1:6041/rest/login/%s/%s"
,
user
,
pass
);
bool
success
=
false
;
for
(
int
attempt
=
0
;
attempt
<
10
;
++
attempt
)
{
for
(
int
32_t
attempt
=
0
;
attempt
<
10
;
++
attempt
)
{
success
=
simExecuteRestFulCommand
(
script
,
command
)
==
0
;
if
(
!
success
)
{
simDebug
(
"script:%s, user:%s connect taosd failed:%s, attempt:%d"
,
script
->
fileName
,
user
,
taos_errstr
(
NULL
),
attempt
);
simDebug
(
"script:%s, user:%s connect taosd failed:%s, attempt:%d"
,
script
->
fileName
,
user
,
taos_errstr
(
NULL
),
attempt
);
taosMsleep
(
1000
);
}
else
{
simDebug
(
"script:%s, user:%s connect taosd successed, attempt:%d"
,
script
->
fileName
,
user
,
attempt
);
...
...
@@ -607,7 +607,8 @@ bool simCreateRestFulConnect(SScript *script, char *user, char *pass) {
}
if
(
!
success
)
{
sprintf
(
script
->
error
,
"lineNum:%d. connect taosd failed:%s"
,
script
->
lines
[
script
->
linePos
].
lineNum
,
taos_errstr
(
NULL
));
sprintf
(
script
->
error
,
"lineNum:%d. connect taosd failed:%s"
,
script
->
lines
[
script
->
linePos
].
lineNum
,
taos_errstr
(
NULL
));
return
false
;
}
...
...
@@ -619,10 +620,11 @@ bool simCreateNativeConnect(SScript *script, char *user, char *pass) {
simCloseTaosdConnect
(
script
);
void
*
taos
=
NULL
;
taosMsleep
(
2000
);
for
(
int
attempt
=
0
;
attempt
<
10
;
++
attempt
)
{
for
(
int
32_t
attempt
=
0
;
attempt
<
10
;
++
attempt
)
{
taos
=
taos_connect
(
NULL
,
user
,
pass
,
NULL
,
tsDnodeShellPort
);
if
(
taos
==
NULL
)
{
simDebug
(
"script:%s, user:%s connect taosd failed:%s, attempt:%d"
,
script
->
fileName
,
user
,
taos_errstr
(
NULL
),
attempt
);
simDebug
(
"script:%s, user:%s connect taosd failed:%s, attempt:%d"
,
script
->
fileName
,
user
,
taos_errstr
(
NULL
),
attempt
);
taosMsleep
(
1000
);
}
else
{
simDebug
(
"script:%s, user:%s connect taosd successed, attempt:%d"
,
script
->
fileName
,
user
,
attempt
);
...
...
@@ -631,7 +633,8 @@ bool simCreateNativeConnect(SScript *script, char *user, char *pass) {
}
if
(
taos
==
NULL
)
{
sprintf
(
script
->
error
,
"lineNum:%d. connect taosd failed:%s"
,
script
->
lines
[
script
->
linePos
].
lineNum
,
taos_errstr
(
NULL
));
sprintf
(
script
->
error
,
"lineNum:%d. connect taosd failed:%s"
,
script
->
lines
[
script
->
linePos
].
lineNum
,
taos_errstr
(
NULL
));
return
false
;
}
...
...
@@ -642,9 +645,9 @@ bool simCreateNativeConnect(SScript *script, char *user, char *pass) {
}
bool
simCreateTaosdConnect
(
SScript
*
script
,
char
*
rest
)
{
char
*
user
=
TSDB_DEFAULT_USER
;
char
*
token
;
int
tokenLen
;
char
*
user
=
TSDB_DEFAULT_USER
;
char
*
token
;
int
32_t
tokenLen
;
rest
=
paGetToken
(
rest
,
&
token
,
&
tokenLen
);
rest
=
paGetToken
(
rest
,
&
token
,
&
tokenLen
);
if
(
tokenLen
!=
0
)
{
...
...
@@ -662,23 +665,24 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) {
char
timeStr
[
30
]
=
{
0
};
time_t
tt
;
struct
tm
*
tp
;
SCmdLine
*
line
=
&
script
->
lines
[
script
->
linePos
];
int
ret
=
-
1
;
SCmdLine
*
line
=
&
script
->
lines
[
script
->
linePos
];
int
32_t
ret
=
-
1
;
TAOS_RES
*
pSql
=
NULL
;
TAOS_RES
*
pSql
=
NULL
;
for
(
int
attempt
=
0
;
attempt
<
10
;
++
attempt
)
{
for
(
int
32_t
attempt
=
0
;
attempt
<
10
;
++
attempt
)
{
simLogSql
(
rest
,
false
);
pSql
=
taos_query
(
script
->
taos
,
rest
);
ret
=
taos_errno
(
pSql
);
if
(
ret
==
TSDB_CODE_MND_TABLE_ALREADY_EXIST
||
ret
==
TSDB_CODE_MND_DB_ALREADY_EXIST
)
{
simDebug
(
"script:%s, taos:%p, %s success, ret:%d:%s"
,
script
->
fileName
,
script
->
taos
,
rest
,
ret
&
0XFFFF
,
tstrerror
(
ret
));
simDebug
(
"script:%s, taos:%p, %s success, ret:%d:%s"
,
script
->
fileName
,
script
->
taos
,
rest
,
ret
&
0XFFFF
,
tstrerror
(
ret
));
ret
=
0
;
break
;
}
else
if
(
ret
!=
0
)
{
simDebug
(
"script:%s, taos:%p, %s failed, ret:%d:%s, error:%s"
,
script
->
fileName
,
script
->
taos
,
rest
,
ret
&
0XFFFF
,
tstrerror
(
ret
),
taos_errstr
(
pSql
));
simDebug
(
"script:%s, taos:%p, %s failed, ret:%d:%s, error:%s"
,
script
->
fileName
,
script
->
taos
,
rest
,
ret
&
0XFFFF
,
tstrerror
(
ret
),
taos_errstr
(
pSql
));
if
(
line
->
errorJump
==
SQL_JUMP_TRUE
)
{
script
->
linePos
=
line
->
jump
;
...
...
@@ -698,8 +702,8 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) {
return
false
;
}
int
numOfRows
=
0
;
int
num_fields
=
taos_field_count
(
pSql
);
int
32_t
numOfRows
=
0
;
int
32_t
num_fields
=
taos_field_count
(
pSql
);
if
(
num_fields
!=
0
)
{
if
(
pSql
==
NULL
)
{
simDebug
(
"script:%s, taos:%p, %s failed, result is null"
,
script
->
fileName
,
script
->
taos
,
rest
);
...
...
@@ -717,9 +721,9 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) {
while
((
row
=
taos_fetch_row
(
pSql
)))
{
if
(
numOfRows
<
MAX_QUERY_ROW_NUM
)
{
TAOS_FIELD
*
fields
=
taos_fetch_fields
(
pSql
);
int
*
length
=
taos_fetch_lengths
(
pSql
);
int
32_t
*
length
=
taos_fetch_lengths
(
pSql
);
for
(
int
i
=
0
;
i
<
num_fields
;
i
++
)
{
for
(
int
32_t
i
=
0
;
i
<
num_fields
;
i
++
)
{
char
*
value
=
NULL
;
if
(
i
<
MAX_QUERY_COL_NUM
)
{
value
=
script
->
data
[
numOfRows
][
i
];
...
...
@@ -735,8 +739,7 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) {
switch
(
fields
[
i
].
type
)
{
case
TSDB_DATA_TYPE_BOOL
:
sprintf
(
value
,
"%s"
,
((((
int
)(
*
((
char
*
)
row
[
i
])))
==
1
)
?
"1"
:
"0"
));
sprintf
(
value
,
"%s"
,
((((
int32_t
)(
*
((
char
*
)
row
[
i
])))
==
1
)
?
"1"
:
"0"
));
break
;
case
TSDB_DATA_TYPE_TINYINT
:
sprintf
(
value
,
"%d"
,
*
((
int8_t
*
)
row
[
i
]));
...
...
@@ -779,8 +782,7 @@ bool simExecuteNativeSqlCommand(SScript *script, char *rest, bool isSlow) {
tp
=
localtime
(
&
tt
);
strftime
(
timeStr
,
64
,
"%y-%m-%d %H:%M:%S"
,
tp
);
sprintf
(
value
,
"%s.%03d"
,
timeStr
,
(
int
)(
*
((
int64_t
*
)
row
[
i
])
%
1000
));
sprintf
(
value
,
"%s.%03d"
,
timeStr
,
(
int32_t
)(
*
((
int64_t
*
)
row
[
i
])
%
1000
));
break
;
default:
...
...
@@ -814,17 +816,16 @@ bool simExecuteRestFulSqlCommand(SScript *script, char *rest) {
char
command
[
4096
];
sprintf
(
command
,
"curl -H 'Authorization: Taosd %s' -d
\"
%s
\"
127.0.0.1:6041/rest/sql"
,
script
->
auth
,
rest
);
int
ret
=
-
1
;
for
(
int
attempt
=
0
;
attempt
<
10
;
++
attempt
)
{
int
32_t
ret
=
-
1
;
for
(
int
32_t
attempt
=
0
;
attempt
<
10
;
++
attempt
)
{
ret
=
simExecuteRestFulCommand
(
script
,
command
);
if
(
ret
==
TSDB_CODE_MND_TABLE_ALREADY_EXIST
||
ret
==
TSDB_CODE_MND_DB_ALREADY_EXIST
)
{
simDebug
(
"script:%s, taos:%p, %s success, ret:%d:%s"
,
script
->
fileName
,
script
->
taos
,
rest
,
ret
&
0XFFFF
,
tstrerror
(
ret
));
if
(
ret
==
TSDB_CODE_MND_TABLE_ALREADY_EXIST
||
ret
==
TSDB_CODE_MND_DB_ALREADY_EXIST
)
{
simDebug
(
"script:%s, taos:%p, %s success, ret:%d:%s"
,
script
->
fileName
,
script
->
taos
,
rest
,
ret
&
0XFFFF
,
tstrerror
(
ret
));
ret
=
0
;
break
;
}
else
if
(
ret
!=
0
)
{
simDebug
(
"script:%s, taos:%p, %s failed, ret:%d"
,
script
->
fileName
,
script
->
taos
,
rest
,
ret
);
simDebug
(
"script:%s, taos:%p, %s failed, ret:%d"
,
script
->
fileName
,
script
->
taos
,
rest
,
ret
);
if
(
line
->
errorJump
==
SQL_JUMP_TRUE
)
{
script
->
linePos
=
line
->
jump
;
...
...
@@ -854,8 +855,8 @@ bool simExecuteSqlImpCmd(SScript *script, char *rest, bool isSlow) {
simDebug
(
"script:%s, exec:%s"
,
script
->
fileName
,
rest
);
strcpy
(
script
->
rows
,
"-1"
);
for
(
int
row
=
0
;
row
<
MAX_QUERY_ROW_NUM
;
++
row
)
{
for
(
int
col
=
0
;
col
<
MAX_QUERY_COL_NUM
;
++
col
)
{
for
(
int
32_t
row
=
0
;
row
<
MAX_QUERY_ROW_NUM
;
++
row
)
{
for
(
int
32_t
col
=
0
;
col
<
MAX_QUERY_COL_NUM
;
++
col
)
{
strcpy
(
script
->
data
[
row
][
col
],
"null"
);
}
}
...
...
@@ -919,7 +920,7 @@ bool simExecuteRestfulCmd(SScript *script, char *rest) {
sscanf
(
rest
,
"%s %s %d %d %s"
,
db
,
tb
,
&
ts
,
&
times
,
gzip
);
fprintf
(
fp
,
"insert into %s.%s values "
,
db
,
tb
);
for
(
int
i
=
0
;
i
<
times
;
++
i
)
{
for
(
int
32_t
i
=
0
;
i
<
times
;
++
i
)
{
fprintf
(
fp
,
"(%d000, %d)"
,
ts
+
i
,
ts
);
}
fprintf
(
fp
,
"
\n
"
);
...
...
@@ -951,8 +952,8 @@ bool simExecuteSqlErrorCmd(SScript *script, char *rest) {
simDebug
(
"script:%s, exec:%s"
,
script
->
fileName
,
rest
);
strcpy
(
script
->
rows
,
"-1"
);
for
(
int
row
=
0
;
row
<
MAX_QUERY_ROW_NUM
;
++
row
)
{
for
(
int
col
=
0
;
col
<
MAX_QUERY_COL_NUM
;
++
col
)
{
for
(
int
32_t
row
=
0
;
row
<
MAX_QUERY_ROW_NUM
;
++
row
)
{
for
(
int
32_t
col
=
0
;
col
<
MAX_QUERY_COL_NUM
;
++
col
)
{
strcpy
(
script
->
data
[
row
][
col
],
"null"
);
}
}
...
...
@@ -981,27 +982,27 @@ bool simExecuteSqlErrorCmd(SScript *script, char *rest) {
return
true
;
}
int
ret
;
TAOS_RES
*
pSql
=
NULL
;
int
32_t
ret
;
TAOS_RES
*
pSql
=
NULL
;
if
(
simAsyncQuery
)
{
char
command
[
4096
];
sprintf
(
command
,
"curl -H 'Authorization: Taosd %s' -d '%s' 127.0.0.1:6041/rest/sql"
,
script
->
auth
,
rest
);
ret
=
simExecuteRestFulCommand
(
script
,
command
);
}
else
{
}
else
{
pSql
=
taos_query
(
script
->
taos
,
rest
);
ret
=
taos_errno
(
pSql
);
taos_free_result
(
pSql
);
}
if
(
ret
!=
TSDB_CODE_SUCCESS
)
{
simDebug
(
"script:%s, taos:%p, %s execute, expect failed, so success, ret:%d:%s"
,
script
->
fileName
,
script
->
taos
,
rest
,
ret
&
0XFFFF
,
tstrerror
(
ret
));
simDebug
(
"script:%s, taos:%p, %s execute, expect failed, so success, ret:%d:%s"
,
script
->
fileName
,
script
->
taos
,
rest
,
ret
&
0XFFFF
,
tstrerror
(
ret
));
script
->
linePos
++
;
return
true
;
}
sprintf
(
script
->
error
,
"lineNum:%d. sql:%s expect failed, but success, ret:%d:%s"
,
line
->
lineNum
,
rest
,
ret
&
0XFFFF
,
tstrerror
(
ret
));
sprintf
(
script
->
error
,
"lineNum:%d. sql:%s expect failed, but success, ret:%d:%s"
,
line
->
lineNum
,
rest
,
ret
&
0XFFFF
,
tstrerror
(
ret
));
return
false
;
}
tests/tsim/src/simMain.c
浏览文件 @
d6f527d8
...
...
@@ -13,6 +13,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "os.h"
#include "tglobal.h"
#include "sim.h"
...
...
@@ -20,15 +21,15 @@
bool
simAsyncQuery
=
false
;
void
simHandleSignal
(
int
signo
)
{
void
simHandleSignal
(
int
32_t
signo
)
{
simSystemCleanUp
();
exit
(
1
);
}
int
main
(
in
t
argc
,
char
*
argv
[])
{
int
32_t
main
(
int32_
t
argc
,
char
*
argv
[])
{
char
scriptFile
[
MAX_FILE_NAME_LEN
]
=
"sim_main_test.sim"
;
for
(
int
i
=
1
;
i
<
argc
;
++
i
)
{
for
(
int
32_t
i
=
1
;
i
<
argc
;
++
i
)
{
if
(
strcmp
(
argv
[
i
],
"-c"
)
==
0
&&
i
<
argc
-
1
)
{
tstrncpy
(
configDir
,
argv
[
++
i
],
MAX_FILE_NAME_LEN
);
}
else
if
(
strcmp
(
argv
[
i
],
"-f"
)
==
0
&&
i
<
argc
-
1
)
{
...
...
@@ -37,8 +38,7 @@ int main(int argc, char *argv[]) {
simAsyncQuery
=
true
;
}
else
{
printf
(
"usage: %s [options]
\n
"
,
argv
[
0
]);
printf
(
" [-c config]: config directory, default is: %s
\n
"
,
configDir
);
printf
(
" [-c config]: config directory, default is: %s
\n
"
,
configDir
);
printf
(
" [-f script]: script filename
\n
"
);
exit
(
0
);
}
...
...
tests/tsim/src/simParse.c
浏览文件 @
d6f527d8
...
...
@@ -57,6 +57,7 @@
*
*/
#define _DEFAULT_SOURCE
#include "os.h"
#include "sim.h"
#include "simParse.h"
...
...
@@ -67,13 +68,13 @@ static SCommand *cmdHashList[MAX_NUM_CMD];
static
SCmdLine
cmdLine
[
MAX_CMD_LINES
];
static
char
parseErr
[
MAX_ERROR_LEN
];
static
char
optionBuffer
[
MAX_OPTION_BUFFER
];
static
int
numOfLines
,
optionOffset
;
static
int
32_t
numOfLines
,
optionOffset
;
static
SLabel
label
,
dest
;
static
SBlock
block
;
int
simHashCmd
(
char
*
token
,
in
t
tokenLen
)
{
int
i
;
int
hash
=
0
;
int
32_t
simHashCmd
(
char
*
token
,
int32_
t
tokenLen
)
{
int
32_t
i
;
int
32_t
hash
=
0
;
for
(
i
=
0
;
i
<
tokenLen
;
++
i
)
hash
+=
token
[
i
];
...
...
@@ -82,8 +83,8 @@ int simHashCmd(char *token, int tokenLen) {
return
hash
;
}
SCommand
*
simCheckCmd
(
char
*
token
,
int
tokenLen
)
{
int
hash
;
SCommand
*
simCheckCmd
(
char
*
token
,
int
32_t
tokenLen
)
{
int
32_t
hash
;
SCommand
*
node
;
hash
=
simHashCmd
(
token
,
tokenLen
);
...
...
@@ -102,10 +103,10 @@ SCommand *simCheckCmd(char *token, int tokenLen) {
}
void
simAddCmdIntoHash
(
SCommand
*
pCmd
)
{
int
hash
;
int
32_t
hash
;
SCommand
*
node
;
hash
=
simHashCmd
(
pCmd
->
name
,
(
int
)
strlen
(
pCmd
->
name
));
hash
=
simHashCmd
(
pCmd
->
name
,
(
int
32_t
)
strlen
(
pCmd
->
name
));
node
=
cmdHashList
[
hash
];
pCmd
->
next
=
node
;
cmdHashList
[
hash
]
=
pCmd
;
...
...
@@ -122,7 +123,7 @@ void simResetParser() {
}
SScript
*
simBuildScriptObj
(
char
*
fileName
)
{
int
i
,
destPos
;
int
32_t
i
,
destPos
;
/* process labels */
...
...
@@ -176,11 +177,11 @@ SScript *simBuildScriptObj(char *fileName) {
}
SScript
*
simParseScript
(
char
*
fileName
)
{
FILE
*
fd
;
int
tokenLen
,
lineNum
=
0
;
FILE
*
fd
;
int
32_t
tokenLen
,
lineNum
=
0
;
char
buffer
[
MAX_LINE_LEN
],
name
[
128
],
*
token
,
*
rest
;
SCommand
*
pCmd
;
SScript
*
script
;
SScript
*
script
;
if
((
fileName
[
0
]
==
'.'
)
||
(
fileName
[
0
]
==
'/'
))
{
strcpy
(
name
,
fileName
);
...
...
@@ -199,12 +200,13 @@ SScript *simParseScript(char *fileName) {
if
(
fgets
(
buffer
,
sizeof
(
buffer
),
fd
)
==
NULL
)
continue
;
lineNum
++
;
int
cmdlen
=
(
in
t
)
strlen
(
buffer
);
if
(
buffer
[
cmdlen
-
1
]
==
'\r'
||
buffer
[
cmdlen
-
1
]
==
'\n'
)
int
32_t
cmdlen
=
(
int32_
t
)
strlen
(
buffer
);
if
(
buffer
[
cmdlen
-
1
]
==
'\r'
||
buffer
[
cmdlen
-
1
]
==
'\n'
)
{
buffer
[
cmdlen
-
1
]
=
0
;
}
rest
=
buffer
;
for
(
int
i
=
0
;
i
<
cmdlen
;
++
i
)
{
for
(
int
32_t
i
=
0
;
i
<
cmdlen
;
++
i
)
{
if
(
buffer
[
i
]
==
'\r'
||
buffer
[
i
]
==
'\n'
)
{
buffer
[
i
]
=
' '
;
}
...
...
@@ -249,9 +251,9 @@ SScript *simParseScript(char *fileName) {
return
script
;
}
int
simCheckExpression
(
char
*
exp
)
{
char
*
op1
,
*
op2
,
*
op
,
*
rest
;
int
op1Len
,
op2Len
,
opLen
;
int
32_t
simCheckExpression
(
char
*
exp
)
{
char
*
op1
,
*
op2
,
*
op
,
*
rest
;
int
32_t
op1Len
,
op2Len
,
opLen
;
rest
=
paGetToken
(
exp
,
&
op1
,
&
op1Len
);
if
(
op1Len
==
0
)
{
...
...
@@ -282,8 +284,7 @@ int simCheckExpression(char *exp) {
return
-
1
;
}
}
else
if
(
opLen
==
2
)
{
if
(
op
[
1
]
!=
'='
||
(
op
[
0
]
!=
'='
&&
op
[
0
]
!=
'<'
&&
op
[
0
]
!=
'>'
&&
op
[
0
]
!=
'!'
))
{
if
(
op
[
1
]
!=
'='
||
(
op
[
0
]
!=
'='
&&
op
[
0
]
!=
'<'
&&
op
[
0
]
!=
'>'
&&
op
[
0
]
!=
'!'
))
{
sprintf
(
parseErr
,
"left side of assignment must be variable"
);
return
-
1
;
}
...
...
@@ -294,10 +295,10 @@ int simCheckExpression(char *exp) {
rest
=
paGetToken
(
rest
,
&
op
,
&
opLen
);
if
(
opLen
==
0
)
return
(
int
)(
rest
-
exp
);
if
(
opLen
==
0
)
return
(
int
32_t
)(
rest
-
exp
);
/* if it is key word "then" */
if
(
strncmp
(
op
,
"then"
,
4
)
==
0
)
return
(
int
)(
op
-
exp
);
if
(
strncmp
(
op
,
"then"
,
4
)
==
0
)
return
(
int
32_t
)(
op
-
exp
);
rest
=
paGetToken
(
rest
,
&
op2
,
&
op2Len
);
if
(
op2Len
==
0
)
{
...
...
@@ -310,16 +311,15 @@ int simCheckExpression(char *exp) {
return
-
1
;
}
if
(
op
[
0
]
==
'+'
||
op
[
0
]
==
'-'
||
op
[
0
]
==
'*'
||
op
[
0
]
==
'/'
||
op
[
0
]
==
'.'
)
{
return
(
int
)(
rest
-
exp
);
if
(
op
[
0
]
==
'+'
||
op
[
0
]
==
'-'
||
op
[
0
]
==
'*'
||
op
[
0
]
==
'/'
||
op
[
0
]
==
'.'
)
{
return
(
int32_t
)(
rest
-
exp
);
}
return
-
1
;
}
bool
simParseExpression
(
char
*
token
,
int
lineNum
)
{
int
expLen
;
bool
simParseExpression
(
char
*
token
,
int
32_t
lineNum
)
{
int
32_t
expLen
;
expLen
=
simCheckExpression
(
token
);
if
(
expLen
<=
0
)
return
-
1
;
...
...
@@ -335,9 +335,9 @@ bool simParseExpression(char *token, int lineNum) {
return
true
;
}
bool
simParseIfCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
char
*
ret
;
int
expLen
;
bool
simParseIfCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
char
*
ret
;
int
32_t
expLen
;
expLen
=
simCheckExpression
(
rest
);
...
...
@@ -364,8 +364,8 @@ bool simParseIfCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseElifCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
int
expLen
;
bool
simParseElifCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
int
32_t
expLen
;
expLen
=
simCheckExpression
(
rest
);
...
...
@@ -382,8 +382,7 @@ bool simParseElifCmd(char *rest, SCommand *pCmd, int lineNum) {
}
cmdLine
[
numOfLines
].
cmdno
=
SIM_CMD_GOTO
;
block
.
jump
[
block
.
top
-
1
][(
uint8_t
)
block
.
numJump
[
block
.
top
-
1
]]
=
&
(
cmdLine
[
numOfLines
].
jump
);
block
.
jump
[
block
.
top
-
1
][(
uint8_t
)
block
.
numJump
[
block
.
top
-
1
]]
=
&
(
cmdLine
[
numOfLines
].
jump
);
block
.
numJump
[
block
.
top
-
1
]
++
;
numOfLines
++
;
...
...
@@ -402,7 +401,7 @@ bool simParseElifCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseElseCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
bool
simParseElseCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
if
(
block
.
top
<
1
)
{
sprintf
(
parseErr
,
"no matching if"
);
return
false
;
...
...
@@ -414,8 +413,7 @@ bool simParseElseCmd(char *rest, SCommand *pCmd, int lineNum) {
}
cmdLine
[
numOfLines
].
cmdno
=
SIM_CMD_GOTO
;
block
.
jump
[
block
.
top
-
1
][(
uint8_t
)
block
.
numJump
[
block
.
top
-
1
]]
=
&
(
cmdLine
[
numOfLines
].
jump
);
block
.
jump
[
block
.
top
-
1
][(
uint8_t
)
block
.
numJump
[
block
.
top
-
1
]]
=
&
(
cmdLine
[
numOfLines
].
jump
);
block
.
numJump
[
block
.
top
-
1
]
++
;
numOfLines
++
;
...
...
@@ -426,8 +424,8 @@ bool simParseElseCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseEndiCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
int
i
;
bool
simParseEndiCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
int
32_t
i
;
if
(
block
.
top
<
1
)
{
sprintf
(
parseErr
,
"no matching if"
);
...
...
@@ -441,8 +439,9 @@ bool simParseEndiCmd(char *rest, SCommand *pCmd, int lineNum) {
if
(
block
.
pos
[
block
.
top
-
1
])
*
(
block
.
pos
[
block
.
top
-
1
])
=
numOfLines
;
for
(
i
=
0
;
i
<
block
.
numJump
[
block
.
top
-
1
];
++
i
)
for
(
i
=
0
;
i
<
block
.
numJump
[
block
.
top
-
1
];
++
i
)
{
*
(
block
.
jump
[
block
.
top
-
1
][
i
])
=
numOfLines
;
}
block
.
numJump
[
block
.
top
-
1
]
=
0
;
block
.
top
--
;
...
...
@@ -450,8 +449,8 @@ bool simParseEndiCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseWhileCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
int
expLen
;
bool
simParseWhileCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
int
32_t
expLen
;
expLen
=
simCheckExpression
(
rest
);
...
...
@@ -473,8 +472,8 @@ bool simParseWhileCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseEndwCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
int
i
;
bool
simParseEndwCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
int
32_t
i
;
if
(
block
.
top
<
1
)
{
sprintf
(
parseErr
,
"no matching while"
);
...
...
@@ -493,17 +492,18 @@ bool simParseEndwCmd(char *rest, SCommand *pCmd, int lineNum) {
*
(
block
.
pos
[
block
.
top
-
1
])
=
numOfLines
;
for
(
i
=
0
;
i
<
block
.
numJump
[
block
.
top
-
1
];
++
i
)
for
(
i
=
0
;
i
<
block
.
numJump
[
block
.
top
-
1
];
++
i
)
{
*
(
block
.
jump
[
block
.
top
-
1
][
i
])
=
numOfLines
;
}
block
.
top
--
;
return
true
;
}
bool
simParseSwitchCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
char
*
token
;
int
tokenLen
;
bool
simParseSwitchCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
char
*
token
;
int
32_t
tokenLen
;
rest
=
paGetToken
(
rest
,
&
token
,
&
tokenLen
);
if
(
tokenLen
==
0
)
{
...
...
@@ -524,9 +524,9 @@ bool simParseSwitchCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseCaseCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
char
*
token
;
int
tokenLen
;
bool
simParseCaseCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
char
*
token
;
int
32_t
tokenLen
;
rest
=
paGetToken
(
rest
,
&
token
,
&
tokenLen
);
if
(
tokenLen
==
0
)
{
...
...
@@ -544,16 +544,16 @@ bool simParseCaseCmd(char *rest, SCommand *pCmd, int lineNum) {
return
false
;
}
if
(
block
.
pos
[
block
.
top
-
1
]
!=
NULL
)
if
(
block
.
pos
[
block
.
top
-
1
]
!=
NULL
)
{
*
(
block
.
pos
[
block
.
top
-
1
])
=
numOfLines
;
}
block
.
pos
[
block
.
top
-
1
]
=
&
(
cmdLine
[
numOfLines
].
jump
);
cmdLine
[
numOfLines
].
cmdno
=
SIM_CMD_TEST
;
cmdLine
[
numOfLines
].
lineNum
=
lineNum
;
cmdLine
[
numOfLines
].
optionOffset
=
optionOffset
;
memcpy
(
optionBuffer
+
optionOffset
,
block
.
sexp
[
block
.
top
-
1
],
block
.
sexpLen
[
block
.
top
-
1
]);
memcpy
(
optionBuffer
+
optionOffset
,
block
.
sexp
[
block
.
top
-
1
],
block
.
sexpLen
[
block
.
top
-
1
]);
optionOffset
+=
block
.
sexpLen
[
block
.
top
-
1
];
*
(
optionBuffer
+
optionOffset
++
)
=
' '
;
*
(
optionBuffer
+
optionOffset
++
)
=
'='
;
...
...
@@ -567,20 +567,18 @@ bool simParseCaseCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseBreakCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
bool
simParseBreakCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
if
(
block
.
top
<
1
)
{
sprintf
(
parseErr
,
"no blcok exists"
);
return
false
;
}
if
(
block
.
type
[
block
.
top
-
1
]
!=
BLOCK_SWITCH
&&
block
.
type
[
block
.
top
-
1
]
!=
BLOCK_WHILE
)
{
if
(
block
.
type
[
block
.
top
-
1
]
!=
BLOCK_SWITCH
&&
block
.
type
[
block
.
top
-
1
]
!=
BLOCK_WHILE
)
{
sprintf
(
parseErr
,
"not in switch or while block"
);
return
false
;
}
block
.
jump
[
block
.
top
-
1
][(
uint8_t
)
block
.
numJump
[
block
.
top
-
1
]]
=
&
(
cmdLine
[
numOfLines
].
jump
);
block
.
jump
[
block
.
top
-
1
][(
uint8_t
)
block
.
numJump
[
block
.
top
-
1
]]
=
&
(
cmdLine
[
numOfLines
].
jump
);
block
.
numJump
[
block
.
top
-
1
]
++
;
cmdLine
[
numOfLines
].
cmdno
=
SIM_CMD_GOTO
;
...
...
@@ -590,7 +588,7 @@ bool simParseBreakCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseDefaultCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
bool
simParseDefaultCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
if
(
block
.
top
<
1
)
{
sprintf
(
parseErr
,
"no matching switch"
);
return
false
;
...
...
@@ -601,14 +599,15 @@ bool simParseDefaultCmd(char *rest, SCommand *pCmd, int lineNum) {
return
false
;
}
if
(
block
.
pos
[
block
.
top
-
1
]
!=
NULL
)
if
(
block
.
pos
[
block
.
top
-
1
]
!=
NULL
)
{
*
(
block
.
pos
[
block
.
top
-
1
])
=
numOfLines
;
}
return
true
;
}
bool
simParseEndsCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
int
i
;
bool
simParseEndsCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
int
32_t
i
;
if
(
block
.
top
<
1
)
{
sprintf
(
parseErr
,
"no matching switch"
);
...
...
@@ -620,8 +619,9 @@ bool simParseEndsCmd(char *rest, SCommand *pCmd, int lineNum) {
return
false
;
}
for
(
i
=
0
;
i
<
block
.
numJump
[
block
.
top
-
1
];
++
i
)
for
(
i
=
0
;
i
<
block
.
numJump
[
block
.
top
-
1
];
++
i
)
{
*
(
block
.
jump
[
block
.
top
-
1
][
i
])
=
numOfLines
;
}
block
.
numJump
[
block
.
top
-
1
]
=
0
;
block
.
top
--
;
...
...
@@ -629,7 +629,7 @@ bool simParseEndsCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseContinueCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
bool
simParseContinueCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
if
(
block
.
top
<
1
)
{
sprintf
(
parseErr
,
"no matching while"
);
return
false
;
...
...
@@ -648,14 +648,14 @@ bool simParseContinueCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParsePrintCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
int
expLen
;
bool
simParsePrintCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
int
32_t
expLen
;
rest
++
;
cmdLine
[
numOfLines
].
cmdno
=
SIM_CMD_PRINT
;
cmdLine
[
numOfLines
].
lineNum
=
lineNum
;
cmdLine
[
numOfLines
].
optionOffset
=
optionOffset
;
expLen
=
(
int
)
strlen
(
rest
);
expLen
=
(
int
32_t
)
strlen
(
rest
);
memcpy
(
optionBuffer
+
optionOffset
,
rest
,
expLen
);
optionOffset
+=
expLen
+
1
;
*
(
optionBuffer
+
optionOffset
-
1
)
=
0
;
...
...
@@ -665,8 +665,8 @@ bool simParsePrintCmd(char *rest, SCommand *pCmd, int lineNum) {
}
void
simCheckSqlOption
(
char
*
rest
)
{
int
valueLen
;
char
*
value
,
*
xpos
;
int
32_t
valueLen
;
char
*
value
,
*
xpos
;
xpos
=
strstr
(
rest
,
" -x"
);
// need a blank
if
(
xpos
)
{
...
...
@@ -682,15 +682,15 @@ void simCheckSqlOption(char *rest) {
}
}
bool
simParseSqlCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
int
expLen
;
bool
simParseSqlCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
int
32_t
expLen
;
rest
++
;
simCheckSqlOption
(
rest
);
cmdLine
[
numOfLines
].
cmdno
=
SIM_CMD_SQL
;
cmdLine
[
numOfLines
].
lineNum
=
lineNum
;
cmdLine
[
numOfLines
].
optionOffset
=
optionOffset
;
expLen
=
(
int
)
strlen
(
rest
);
expLen
=
(
int
32_t
)
strlen
(
rest
);
memcpy
(
optionBuffer
+
optionOffset
,
rest
,
expLen
);
optionOffset
+=
expLen
+
1
;
*
(
optionBuffer
+
optionOffset
-
1
)
=
0
;
...
...
@@ -699,14 +699,14 @@ bool simParseSqlCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseSqlErrorCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
int
expLen
;
bool
simParseSqlErrorCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
int
32_t
expLen
;
rest
++
;
cmdLine
[
numOfLines
].
cmdno
=
SIM_CMD_SQL_ERROR
;
cmdLine
[
numOfLines
].
lineNum
=
lineNum
;
cmdLine
[
numOfLines
].
optionOffset
=
optionOffset
;
expLen
=
(
int
)
strlen
(
rest
);
expLen
=
(
int
32_t
)
strlen
(
rest
);
memcpy
(
optionBuffer
+
optionOffset
,
rest
,
expLen
);
optionOffset
+=
expLen
+
1
;
*
(
optionBuffer
+
optionOffset
-
1
)
=
0
;
...
...
@@ -715,26 +715,26 @@ bool simParseSqlErrorCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseSqlSlowCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
bool
simParseSqlSlowCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
simParseSqlCmd
(
rest
,
pCmd
,
lineNum
);
cmdLine
[
numOfLines
-
1
].
cmdno
=
SIM_CMD_SQL_SLOW
;
return
true
;
}
bool
simParseRestfulCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
bool
simParseRestfulCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
simParseSqlCmd
(
rest
,
pCmd
,
lineNum
);
cmdLine
[
numOfLines
-
1
].
cmdno
=
SIM_CMD_RESTFUL
;
return
true
;
}
bool
simParseSystemCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
int
expLen
;
bool
simParseSystemCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
int
32_t
expLen
;
rest
++
;
cmdLine
[
numOfLines
].
cmdno
=
SIM_CMD_SYSTEM
;
cmdLine
[
numOfLines
].
lineNum
=
lineNum
;
cmdLine
[
numOfLines
].
optionOffset
=
optionOffset
;
expLen
=
(
int
)
strlen
(
rest
);
expLen
=
(
int
32_t
)
strlen
(
rest
);
memcpy
(
optionBuffer
+
optionOffset
,
rest
,
expLen
);
optionOffset
+=
expLen
+
1
;
*
(
optionBuffer
+
optionOffset
-
1
)
=
0
;
...
...
@@ -743,15 +743,15 @@ bool simParseSystemCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseSystemContentCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
bool
simParseSystemContentCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
simParseSystemCmd
(
rest
,
pCmd
,
lineNum
);
cmdLine
[
numOfLines
-
1
].
cmdno
=
SIM_CMD_SYSTEM_CONTENT
;
return
true
;
}
bool
simParseSleepCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
char
*
token
;
int
tokenLen
;
bool
simParseSleepCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
char
*
token
;
int
32_t
tokenLen
;
cmdLine
[
numOfLines
].
cmdno
=
SIM_CMD_SLEEP
;
cmdLine
[
numOfLines
].
lineNum
=
lineNum
;
...
...
@@ -768,9 +768,9 @@ bool simParseSleepCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseReturnCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
char
*
token
;
int
tokenLen
;
bool
simParseReturnCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
char
*
token
;
int
32_t
tokenLen
;
cmdLine
[
numOfLines
].
cmdno
=
SIM_CMD_RETURN
;
cmdLine
[
numOfLines
].
lineNum
=
lineNum
;
...
...
@@ -787,9 +787,9 @@ bool simParseReturnCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseGotoCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
char
*
token
;
int
tokenLen
;
bool
simParseGotoCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
char
*
token
;
int
32_t
tokenLen
;
rest
=
paGetToken
(
rest
,
&
token
,
&
tokenLen
);
...
...
@@ -810,9 +810,9 @@ bool simParseGotoCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseRunCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
char
*
token
;
int
tokenLen
;
bool
simParseRunCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
char
*
token
;
int
32_t
tokenLen
;
rest
=
paGetToken
(
rest
,
&
token
,
&
tokenLen
);
...
...
@@ -832,14 +832,14 @@ bool simParseRunCmd(char *rest, SCommand *pCmd, int lineNum) {
return
true
;
}
bool
simParseRunBackCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
lineNum
)
{
bool
simParseRunBackCmd
(
char
*
rest
,
SCommand
*
pCmd
,
int
32_t
lineNum
)
{
simParseRunCmd
(
rest
,
pCmd
,
lineNum
);
cmdLine
[
numOfLines
-
1
].
cmdno
=
SIM_CMD_RUN_BACK
;
return
true
;
}
void
simInitsimCmdList
()
{
int
cmdno
;
int
32_t
cmdno
;
memset
(
simCmdList
,
0
,
SIM_CMD_END
*
sizeof
(
SCommand
));
/* internal command */
...
...
tests/tsim/src/simSystem.c
浏览文件 @
d6f527d8
...
...
@@ -13,6 +13,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define _DEFAULT_SOURCE
#include "os.h"
#include "sim.h"
#include "taos.h"
...
...
@@ -24,9 +25,9 @@
SScript
*
simScriptList
[
MAX_MAIN_SCRIPT_NUM
];
SCommand
simCmdList
[
SIM_CMD_END
];
int
simScriptPos
=
-
1
;
int
simScriptSucced
=
0
;
int
simDebugFlag
=
135
;
int
32_t
simScriptPos
=
-
1
;
int
32_t
simScriptSucced
=
0
;
int
32_t
simDebugFlag
=
135
;
void
simCloseTaosdConnect
(
SScript
*
script
);
char
simHostName
[
128
];
...
...
@@ -39,8 +40,8 @@ char *simParseArbitratorName(char *varName) {
char
*
simParseHostName
(
char
*
varName
)
{
static
char
hostName
[
140
];
int
index
=
atoi
(
varName
+
8
);
int
port
=
7100
;
int
32_t
index
=
atoi
(
varName
+
8
);
int
32_t
port
=
7100
;
switch
(
index
)
{
case
1
:
port
=
7100
;
...
...
@@ -72,7 +73,7 @@ char *simParseHostName(char *varName) {
}
sprintf
(
hostName
,
"'%s:%d'"
,
simHostName
,
port
);
//simInfo("hostName:%s", hostName);
//
simInfo("hostName:%s", hostName);
return
hostName
;
}
...
...
@@ -88,12 +89,19 @@ void simSystemCleanUp() {}
void
simFreeScript
(
SScript
*
script
)
{
if
(
script
->
type
==
SIM_SCRIPT_TYPE_MAIN
)
{
for
(
int
i
=
0
;
i
<
script
->
bgScriptLen
;
++
i
)
{
simInfo
(
"script:%s, background script num:%d, stop them"
,
script
->
fileName
,
script
->
bgScriptLen
);
for
(
int32_t
i
=
0
;
i
<
script
->
bgScriptLen
;
++
i
)
{
SScript
*
bgScript
=
script
->
bgScripts
[
i
];
simInfo
(
"script:%s, set stop flag"
,
script
->
fileName
);
bgScript
->
killed
=
true
;
if
(
bgScript
->
bgPid
)
{
pthread_join
(
bgScript
->
bgPid
,
NULL
);
}
}
}
simDebug
(
"script:%s, is freed"
,
script
->
fileName
);
taos_close
(
script
->
taos
);
taosTFree
(
script
->
lines
);
taosTFree
(
script
->
optionBuffer
);
...
...
@@ -103,25 +111,24 @@ void simFreeScript(SScript *script) {
SScript
*
simProcessCallOver
(
SScript
*
script
)
{
if
(
script
->
type
==
SIM_SCRIPT_TYPE_MAIN
)
{
if
(
script
->
killed
)
{
simInfo
(
"script:"
FAILED_PREFIX
"%s"
FAILED_POSTFIX
", "
FAILED_PREFIX
"failed"
FAILED_POSTFIX
", error:%s"
,
simInfo
(
"script:"
FAILED_PREFIX
"%s"
FAILED_POSTFIX
", "
FAILED_PREFIX
"failed"
FAILED_POSTFIX
", error:%s"
,
script
->
fileName
,
script
->
error
);
exit
(
-
1
);
}
else
{
simInfo
(
"script:"
SUCCESS_PREFIX
"%s"
SUCCESS_POSTFIX
", "
SUCCESS_PREFIX
"success"
SUCCESS_POSTFIX
,
simInfo
(
"script:"
SUCCESS_PREFIX
"%s"
SUCCESS_POSTFIX
", "
SUCCESS_PREFIX
"success"
SUCCESS_POSTFIX
,
script
->
fileName
);
simCloseTaosdConnect
(
script
);
simScriptSucced
++
;
simScriptPos
--
;
simFreeScript
(
script
);
if
(
simScriptPos
==
-
1
)
{
simInfo
(
"----------------------------------------------------------------------"
);
simInfo
(
"Simulation Test Done, "
SUCCESS_PREFIX
"%d"
SUCCESS_POSTFIX
" Passed:
\n
"
,
simScriptSucced
);
exit
(
0
);
}
simFreeScript
(
script
);
return
simScriptList
[
simScriptPos
];
return
NULL
;
}
}
else
{
simInfo
(
"script:%s, is stopped by main script"
,
script
->
fileName
);
...
...
@@ -143,11 +150,11 @@ void *simExecuteScript(void *inputScript) {
if
(
script
==
NULL
)
break
;
}
else
{
SCmdLine
*
line
=
&
script
->
lines
[
script
->
linePos
];
char
*
option
=
script
->
optionBuffer
+
line
->
optionOffset
;
char
*
option
=
script
->
optionBuffer
+
line
->
optionOffset
;
simDebug
(
"script:%s, line:%d with option
\"
%s
\"
"
,
script
->
fileName
,
line
->
lineNum
,
option
);
SCommand
*
cmd
=
&
simCmdList
[
line
->
cmdno
];
int
ret
=
(
*
(
cmd
->
executeCmd
))(
script
,
option
);
int
32_t
ret
=
(
*
(
cmd
->
executeCmd
))(
script
,
option
);
if
(
!
ret
)
{
script
->
killed
=
true
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录