Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
022b5f85
T
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1191
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
022b5f85
编写于
1月 24, 2022
作者:
S
Shengliang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add test cases
上级
3928668b
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
639 addition
and
2 deletion
+639
-2
include/util/taoserror.h
include/util/taoserror.h
+1
-0
include/util/tdef.h
include/util/tdef.h
+1
-0
source/dnode/mgmt/impl/test/sut/inc/sut.h
source/dnode/mgmt/impl/test/sut/inc/sut.h
+9
-0
source/dnode/mnode/impl/src/mndFunc.c
source/dnode/mnode/impl/src/mndFunc.c
+8
-2
source/dnode/mnode/impl/test/CMakeLists.txt
source/dnode/mnode/impl/test/CMakeLists.txt
+1
-0
source/dnode/mnode/impl/test/func/CMakeLists.txt
source/dnode/mnode/impl/test/func/CMakeLists.txt
+11
-0
source/dnode/mnode/impl/test/func/func.cpp
source/dnode/mnode/impl/test/func/func.cpp
+607
-0
source/util/src/terror.c
source/util/src/terror.c
+1
-0
未找到文件。
include/util/taoserror.h
浏览文件 @
022b5f85
...
...
@@ -239,6 +239,7 @@ int32_t* taosGetErrno();
#define TSDB_CODE_MND_INVALID_FUNC_COMMENT TAOS_DEF_ERROR_CODE(0, 0x03C4)
#define TSDB_CODE_MND_INVALID_FUNC_CODE TAOS_DEF_ERROR_CODE(0, 0x03C5)
#define TSDB_CODE_MND_INVALID_FUNC_BUFSIZE TAOS_DEF_ERROR_CODE(0, 0x03C6)
#define TSDB_CODE_MND_INVALID_FUNC_RETRIEVE TAOS_DEF_ERROR_CODE(0, 0x03C7)
// mnode-trans
#define TSDB_CODE_MND_TRANS_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x03D0)
...
...
include/util/tdef.h
浏览文件 @
022b5f85
...
...
@@ -173,6 +173,7 @@ do { \
#define TSDB_FUNC_BUF_SIZE 512
#define TSDB_FUNC_TYPE_SCALAR 1
#define TSDB_FUNC_TYPE_AGGREGATE 2
#define TSDB_FUNC_MAX_RETRIEVE 1024
#define TSDB_TYPE_STR_MAX_LEN 32
#define TSDB_TABLE_FNAME_LEN (TSDB_DB_FNAME_LEN + TSDB_TABLE_NAME_LEN + TSDB_NAME_DELIMITER_LEN)
...
...
source/dnode/mgmt/impl/test/sut/inc/sut.h
浏览文件 @
022b5f85
...
...
@@ -96,6 +96,15 @@ class Testbase {
#define CheckBinary(val, len) \
{ EXPECT_STREQ(test.GetShowBinary(len), val); }
#define CheckBinaryByte(b, len) \
{ \
char* bytes = (char*)calloc(1, len); \
for (int32_t i = 0; i < len - 1; ++i) { \
bytes[i] = b; \
} \
EXPECT_STREQ(test.GetShowBinary(len), bytes); \
}
#define CheckInt8(val) \
{ EXPECT_EQ(test.GetShowInt8(), val); }
...
...
source/dnode/mnode/impl/src/mndFunc.c
浏览文件 @
022b5f85
...
...
@@ -152,6 +152,8 @@ static int32_t mndFuncActionInsert(SSdb *pSdb, SFuncObj *pFunc) {
static
int32_t
mndFuncActionDelete
(
SSdb
*
pSdb
,
SFuncObj
*
pFunc
)
{
mTrace
(
"func:%s, perform delete action, row:%p"
,
pFunc
->
name
,
pFunc
);
tfree
(
pFunc
->
pCode
);
tfree
(
pFunc
->
pComment
);
return
0
;
}
...
...
@@ -278,7 +280,7 @@ static int32_t mndProcessCreateFuncReq(SMnodeMsg *pReq) {
mError
(
"func:%s, failed to create since %s"
,
pCreate
->
name
,
terrstr
());
return
-
1
;
}
}
else
if
(
terrno
!
=
TSDB_CODE_MND_FUNC_ALREADY_EXIST
)
{
}
else
if
(
terrno
=
=
TSDB_CODE_MND_FUNC_ALREADY_EXIST
)
{
mError
(
"stb:%s, failed to create since %s"
,
pCreate
->
name
,
terrstr
());
return
-
1
;
}
...
...
@@ -307,7 +309,7 @@ static int32_t mndProcessCreateFuncReq(SMnodeMsg *pReq) {
return
-
1
;
}
if
(
pCreate
->
bufSize
<
0
||
pCreate
->
bufSize
>
TSDB_FUNC_BUF_SIZE
)
{
if
(
pCreate
->
bufSize
<
=
0
||
pCreate
->
bufSize
>
TSDB_FUNC_BUF_SIZE
)
{
terrno
=
TSDB_CODE_MND_INVALID_FUNC_BUFSIZE
;
mError
(
"func:%s, failed to create since %s"
,
pCreate
->
name
,
terrstr
());
return
-
1
;
...
...
@@ -363,6 +365,10 @@ static int32_t mndProcessRetrieveFuncReq(SMnodeMsg *pReq) {
SRetrieveFuncReq
*
pRetrieve
=
pReq
->
rpcMsg
.
pCont
;
pRetrieve
->
numOfFuncs
=
htonl
(
pRetrieve
->
numOfFuncs
);
if
(
pRetrieve
->
numOfFuncs
<=
0
||
pRetrieve
->
numOfFuncs
>
TSDB_FUNC_MAX_RETRIEVE
)
{
terrno
=
TSDB_CODE_MND_INVALID_FUNC_RETRIEVE
;
return
-
1
;
}
int32_t
fsize
=
sizeof
(
SFuncInfo
)
+
TSDB_FUNC_CODE_LEN
+
TSDB_FUNC_COMMENT_LEN
;
int32_t
size
=
sizeof
(
SRetrieveFuncRsp
)
+
fsize
*
pRetrieve
->
numOfFuncs
;
...
...
source/dnode/mnode/impl/test/CMakeLists.txt
浏览文件 @
022b5f85
...
...
@@ -12,3 +12,4 @@ add_subdirectory(dnode)
add_subdirectory
(
mnode
)
add_subdirectory
(
db
)
add_subdirectory
(
stb
)
add_subdirectory
(
func
)
source/dnode/mnode/impl/test/func/CMakeLists.txt
0 → 100644
浏览文件 @
022b5f85
aux_source_directory
(
. FUNC_SRC
)
add_executable
(
mnode_test_func
${
FUNC_SRC
}
)
target_link_libraries
(
mnode_test_func
PUBLIC sut
)
add_test
(
NAME mnode_test_func
COMMAND mnode_test_func
)
source/dnode/mnode/impl/test/func/func.cpp
0 → 100644
浏览文件 @
022b5f85
/**
* @file func.cpp
* @author slguan (slguan@taosdata.com)
* @brief MNODE module func tests
* @version 1.0
* @date 2022-01-24
*
* @copyright Copyright (c) 2022
*
*/
#include "sut.h"
class
MndTestFunc
:
public
::
testing
::
Test
{
protected:
static
void
SetUpTestSuite
()
{
test
.
Init
(
"/tmp/mnode_test_func"
,
9038
);
}
static
void
TearDownTestSuite
()
{
test
.
Cleanup
();
}
static
Testbase
test
;
public:
void
SetUp
()
override
{}
void
TearDown
()
override
{}
};
Testbase
MndTestFunc
::
test
;
TEST_F
(
MndTestFunc
,
01
_Show_Func
)
{
test
.
SendShowMetaReq
(
TSDB_MGMT_TABLE_FUNC
,
""
);
CHECK_META
(
"show functions"
,
7
);
CHECK_SCHEMA
(
0
,
TSDB_DATA_TYPE_BINARY
,
TSDB_FUNC_NAME_LEN
+
VARSTR_HEADER_SIZE
,
"name"
);
CHECK_SCHEMA
(
1
,
TSDB_DATA_TYPE_BINARY
,
PATH_MAX
+
VARSTR_HEADER_SIZE
,
"comment"
);
CHECK_SCHEMA
(
2
,
TSDB_DATA_TYPE_INT
,
4
,
"aggregate"
);
CHECK_SCHEMA
(
3
,
TSDB_DATA_TYPE_BINARY
,
TSDB_TYPE_STR_MAX_LEN
+
VARSTR_HEADER_SIZE
,
"outputtype"
);
CHECK_SCHEMA
(
4
,
TSDB_DATA_TYPE_TIMESTAMP
,
8
,
"create_time"
);
CHECK_SCHEMA
(
5
,
TSDB_DATA_TYPE_INT
,
4
,
"code_len"
);
CHECK_SCHEMA
(
6
,
TSDB_DATA_TYPE_INT
,
4
,
"bufsize"
);
test
.
SendShowRetrieveReq
();
EXPECT_EQ
(
test
.
GetShowRows
(),
0
);
}
TEST_F
(
MndTestFunc
,
02
_Create_Func
)
{
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
""
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_NAME
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_COMMENT
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
+
1
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_COMMENT
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_CODE
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
);
pReq
->
codeSize
=
htonl
(
TSDB_FUNC_CODE_LEN
-
1
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_CODE
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
)
+
24
;
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
);
pReq
->
codeSize
=
htonl
(
TSDB_FUNC_CODE_LEN
);
pReq
->
pCont
[
0
]
=
0
;
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_CODE
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
)
+
24
;
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
);
pReq
->
codeSize
=
htonl
(
TSDB_FUNC_CODE_LEN
);
pReq
->
pCont
[
0
]
=
'a'
;
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_BUFSIZE
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
)
+
24
;
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
commentSize
=
htonl
(
TSDB_FUNC_COMMENT_LEN
);
pReq
->
codeSize
=
htonl
(
TSDB_FUNC_CODE_LEN
);
pReq
->
pCont
[
0
]
=
'a'
;
pReq
->
bufSize
=
htonl
(
TSDB_FUNC_BUF_SIZE
+
1
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_BUFSIZE
);
}
for
(
int32_t
i
=
0
;
i
<
3
;
++
i
)
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
int32_t
commentSize
=
TSDB_FUNC_COMMENT_LEN
;
int32_t
codeSize
=
TSDB_FUNC_CODE_LEN
;
contLen
=
(
contLen
+
codeSize
+
commentSize
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f1"
);
pReq
->
igExists
=
0
;
if
(
i
==
2
)
pReq
->
igExists
=
1
;
pReq
->
funcType
=
1
;
pReq
->
scriptType
=
2
;
pReq
->
outputType
=
TSDB_DATA_TYPE_SMALLINT
;
pReq
->
outputLen
=
htonl
(
12
);
pReq
->
bufSize
=
htonl
(
4
);
pReq
->
signature
=
htobe64
(
5
);
pReq
->
commentSize
=
htonl
(
commentSize
);
pReq
->
codeSize
=
htonl
(
codeSize
);
for
(
int32_t
i
=
0
;
i
<
commentSize
-
1
;
++
i
)
{
pReq
->
pCont
[
i
]
=
'm'
;
}
for
(
int32_t
i
=
commentSize
;
i
<
commentSize
+
codeSize
-
1
;
++
i
)
{
pReq
->
pCont
[
i
]
=
'd'
;
}
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
if
(
i
==
0
||
i
==
2
)
{
ASSERT_EQ
(
pRsp
->
code
,
0
);
}
else
{
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_FUNC_ALREADY_EXIST
);
}
}
test
.
SendShowMetaReq
(
TSDB_MGMT_TABLE_FUNC
,
""
);
CHECK_META
(
"show functions"
,
7
);
test
.
SendShowRetrieveReq
();
EXPECT_EQ
(
test
.
GetShowRows
(),
1
);
CheckBinary
(
"f1"
,
TSDB_FUNC_NAME_LEN
);
CheckBinaryByte
(
'm'
,
TSDB_FUNC_COMMENT_LEN
);
CheckInt32
(
0
);
CheckBinary
(
"SMALLINT"
,
TSDB_TYPE_STR_MAX_LEN
);
CheckTimestamp
();
CheckInt32
(
TSDB_FUNC_CODE_LEN
);
CheckInt32
(
4
);
}
TEST_F
(
MndTestFunc
,
03
_Retrieve_Func
)
{
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
1
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
1
);
strcpy
(
pReq
->
pFuncNames
,
"f1"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
0
);
SRetrieveFuncRsp
*
pRetrieveRsp
=
(
SRetrieveFuncRsp
*
)
pRsp
->
pCont
;
pRetrieveRsp
->
numOfFuncs
=
htonl
(
pRetrieveRsp
->
numOfFuncs
);
SFuncInfo
*
pFuncInfo
=
(
SFuncInfo
*
)(
pRetrieveRsp
->
pFuncInfos
);
pFuncInfo
->
outputLen
=
htonl
(
pFuncInfo
->
outputLen
);
pFuncInfo
->
bufSize
=
htonl
(
pFuncInfo
->
bufSize
);
pFuncInfo
->
signature
=
htobe64
(
pFuncInfo
->
signature
);
pFuncInfo
->
commentSize
=
htonl
(
pFuncInfo
->
commentSize
);
pFuncInfo
->
codeSize
=
htonl
(
pFuncInfo
->
codeSize
);
EXPECT_STREQ
(
pFuncInfo
->
name
,
"f1"
);
EXPECT_EQ
(
pFuncInfo
->
funcType
,
1
);
EXPECT_EQ
(
pFuncInfo
->
scriptType
,
2
);
EXPECT_EQ
(
pFuncInfo
->
outputType
,
TSDB_DATA_TYPE_SMALLINT
);
EXPECT_EQ
(
pFuncInfo
->
outputLen
,
12
);
EXPECT_EQ
(
pFuncInfo
->
bufSize
,
4
);
EXPECT_EQ
(
pFuncInfo
->
signature
,
5
);
EXPECT_EQ
(
pFuncInfo
->
commentSize
,
TSDB_FUNC_COMMENT_LEN
);
EXPECT_EQ
(
pFuncInfo
->
codeSize
,
TSDB_FUNC_CODE_LEN
);
char
*
pComment
=
pFuncInfo
->
pCont
;
char
*
pCode
=
pFuncInfo
->
pCont
+
pFuncInfo
->
commentSize
;
char
comments
[
TSDB_FUNC_COMMENT_LEN
]
=
{
0
};
for
(
int32_t
i
=
0
;
i
<
TSDB_FUNC_COMMENT_LEN
-
1
;
++
i
)
{
comments
[
i
]
=
'm'
;
}
char
codes
[
TSDB_FUNC_CODE_LEN
]
=
{
0
};
for
(
int32_t
i
=
0
;
i
<
TSDB_FUNC_CODE_LEN
-
1
;
++
i
)
{
codes
[
i
]
=
'd'
;
}
EXPECT_STREQ
(
pComment
,
comments
);
EXPECT_STREQ
(
pCode
,
codes
);
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
0
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
numOfFuncs
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_RETRIEVE
);
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
TSDB_FUNC_MAX_RETRIEVE
+
1
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
numOfFuncs
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC_RETRIEVE
);
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
1
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
numOfFuncs
);
strcpy
(
pReq
->
pFuncNames
,
"f2"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
TSDB_CODE_MND_INVALID_FUNC
);
}
{
int32_t
contLen
=
sizeof
(
SCreateFuncReq
);
int32_t
commentSize
=
1024
;
int32_t
codeSize
=
9527
;
contLen
=
(
contLen
+
codeSize
+
commentSize
);
SCreateFuncReq
*
pReq
=
(
SCreateFuncReq
*
)
rpcMallocCont
(
contLen
);
strcpy
(
pReq
->
name
,
"f2"
);
pReq
->
igExists
=
1
;
pReq
->
funcType
=
2
;
pReq
->
scriptType
=
3
;
pReq
->
outputType
=
TSDB_DATA_TYPE_BINARY
;
pReq
->
outputLen
=
htonl
(
24
);
pReq
->
bufSize
=
htonl
(
6
);
pReq
->
signature
=
htobe64
(
18
);
pReq
->
commentSize
=
htonl
(
commentSize
);
pReq
->
codeSize
=
htonl
(
codeSize
);
for
(
int32_t
i
=
0
;
i
<
commentSize
-
1
;
++
i
)
{
pReq
->
pCont
[
i
]
=
'p'
;
}
for
(
int32_t
i
=
commentSize
;
i
<
commentSize
+
codeSize
-
1
;
++
i
)
{
pReq
->
pCont
[
i
]
=
'q'
;
}
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_CREATE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
0
);
test
.
SendShowMetaReq
(
TSDB_MGMT_TABLE_FUNC
,
""
);
CHECK_META
(
"show functions"
,
7
);
test
.
SendShowRetrieveReq
();
EXPECT_EQ
(
test
.
GetShowRows
(),
2
);
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
1
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
1
);
strcpy
(
pReq
->
pFuncNames
,
"f2"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
0
);
SRetrieveFuncRsp
*
pRetrieveRsp
=
(
SRetrieveFuncRsp
*
)
pRsp
->
pCont
;
pRetrieveRsp
->
numOfFuncs
=
htonl
(
pRetrieveRsp
->
numOfFuncs
);
SFuncInfo
*
pFuncInfo
=
(
SFuncInfo
*
)(
pRetrieveRsp
->
pFuncInfos
);
pFuncInfo
->
outputLen
=
htonl
(
pFuncInfo
->
outputLen
);
pFuncInfo
->
bufSize
=
htonl
(
pFuncInfo
->
bufSize
);
pFuncInfo
->
signature
=
htobe64
(
pFuncInfo
->
signature
);
pFuncInfo
->
commentSize
=
htonl
(
pFuncInfo
->
commentSize
);
pFuncInfo
->
codeSize
=
htonl
(
pFuncInfo
->
codeSize
);
EXPECT_STREQ
(
pFuncInfo
->
name
,
"f2"
);
EXPECT_EQ
(
pFuncInfo
->
funcType
,
2
);
EXPECT_EQ
(
pFuncInfo
->
scriptType
,
3
);
EXPECT_EQ
(
pFuncInfo
->
outputType
,
TSDB_DATA_TYPE_BINARY
);
EXPECT_EQ
(
pFuncInfo
->
outputLen
,
24
);
EXPECT_EQ
(
pFuncInfo
->
bufSize
,
6
);
EXPECT_EQ
(
pFuncInfo
->
signature
,
18
);
EXPECT_EQ
(
pFuncInfo
->
commentSize
,
1024
);
EXPECT_EQ
(
pFuncInfo
->
codeSize
,
9527
);
char
*
pComment
=
pFuncInfo
->
pCont
;
char
*
pCode
=
pFuncInfo
->
pCont
+
pFuncInfo
->
commentSize
;
char
*
comments
=
(
char
*
)
calloc
(
1
,
1024
);
for
(
int32_t
i
=
0
;
i
<
1024
-
1
;
++
i
)
{
comments
[
i
]
=
'p'
;
}
char
*
codes
=
(
char
*
)
calloc
(
1
,
9527
);
for
(
int32_t
i
=
0
;
i
<
9527
-
1
;
++
i
)
{
codes
[
i
]
=
'q'
;
}
EXPECT_STREQ
(
pComment
,
comments
);
EXPECT_STREQ
(
pCode
,
codes
);
free
(
comments
);
free
(
codes
);
}
{
int32_t
contLen
=
sizeof
(
SRetrieveFuncReq
);
int32_t
numOfFuncs
=
2
;
contLen
=
(
contLen
+
numOfFuncs
*
TSDB_FUNC_NAME_LEN
);
SRetrieveFuncReq
*
pReq
=
(
SRetrieveFuncReq
*
)
rpcMallocCont
(
contLen
);
pReq
->
numOfFuncs
=
htonl
(
1
);
strcpy
(
pReq
->
pFuncNames
,
"f2"
);
strcpy
((
char
*
)
pReq
->
pFuncNames
+
TSDB_FUNC_NAME_LEN
,
"f1"
);
SRpcMsg
*
pRsp
=
test
.
SendReq
(
TDMT_MND_RETRIEVE_FUNC
,
pReq
,
contLen
);
ASSERT_NE
(
pRsp
,
nullptr
);
ASSERT_EQ
(
pRsp
->
code
,
0
);
SRetrieveFuncRsp
*
pRetrieveRsp
=
(
SRetrieveFuncRsp
*
)
pRsp
->
pCont
;
pRetrieveRsp
->
numOfFuncs
=
htonl
(
pRetrieveRsp
->
numOfFuncs
);
{
SFuncInfo
*
pFuncInfo
=
(
SFuncInfo
*
)(
pRetrieveRsp
->
pFuncInfos
);
pFuncInfo
->
outputLen
=
htonl
(
pFuncInfo
->
outputLen
);
pFuncInfo
->
bufSize
=
htonl
(
pFuncInfo
->
bufSize
);
pFuncInfo
->
signature
=
htobe64
(
pFuncInfo
->
signature
);
pFuncInfo
->
commentSize
=
htonl
(
pFuncInfo
->
commentSize
);
pFuncInfo
->
codeSize
=
htonl
(
pFuncInfo
->
codeSize
);
EXPECT_STREQ
(
pFuncInfo
->
name
,
"f2"
);
EXPECT_EQ
(
pFuncInfo
->
funcType
,
2
);
EXPECT_EQ
(
pFuncInfo
->
scriptType
,
3
);
EXPECT_EQ
(
pFuncInfo
->
outputType
,
TSDB_DATA_TYPE_BINARY
);
EXPECT_EQ
(
pFuncInfo
->
outputLen
,
24
);
EXPECT_EQ
(
pFuncInfo
->
bufSize
,
6
);
EXPECT_EQ
(
pFuncInfo
->
signature
,
18
);
EXPECT_EQ
(
pFuncInfo
->
commentSize
,
1024
);
EXPECT_EQ
(
pFuncInfo
->
codeSize
,
9527
);
char
*
pComment
=
pFuncInfo
->
pCont
;
char
*
pCode
=
pFuncInfo
->
pCont
+
pFuncInfo
->
commentSize
;
char
*
comments
=
(
char
*
)
calloc
(
1
,
1024
);
for
(
int32_t
i
=
0
;
i
<
1024
-
1
;
++
i
)
{
comments
[
i
]
=
'p'
;
}
char
*
codes
=
(
char
*
)
calloc
(
1
,
9527
);
for
(
int32_t
i
=
0
;
i
<
9527
-
1
;
++
i
)
{
codes
[
i
]
=
'q'
;
}
EXPECT_STREQ
(
pComment
,
comments
);
EXPECT_STREQ
(
pCode
,
codes
);
free
(
comments
);
free
(
codes
);
}
{
SFuncInfo
*
pFuncInfo
=
(
SFuncInfo
*
)(
pRetrieveRsp
->
pFuncInfos
+
sizeof
(
SFuncInfo
)
+
1024
+
9527
);
pFuncInfo
->
outputLen
=
htonl
(
pFuncInfo
->
outputLen
);
pFuncInfo
->
bufSize
=
htonl
(
pFuncInfo
->
bufSize
);
pFuncInfo
->
signature
=
htobe64
(
pFuncInfo
->
signature
);
pFuncInfo
->
commentSize
=
htonl
(
pFuncInfo
->
commentSize
);
pFuncInfo
->
codeSize
=
htonl
(
pFuncInfo
->
codeSize
);
EXPECT_STREQ
(
pFuncInfo
->
name
,
"f1"
);
EXPECT_EQ
(
pFuncInfo
->
funcType
,
1
);
EXPECT_EQ
(
pFuncInfo
->
scriptType
,
2
);
EXPECT_EQ
(
pFuncInfo
->
outputType
,
TSDB_DATA_TYPE_SMALLINT
);
EXPECT_EQ
(
pFuncInfo
->
outputLen
,
12
);
EXPECT_EQ
(
pFuncInfo
->
bufSize
,
4
);
EXPECT_EQ
(
pFuncInfo
->
signature
,
5
);
EXPECT_EQ
(
pFuncInfo
->
commentSize
,
TSDB_FUNC_COMMENT_LEN
);
EXPECT_EQ
(
pFuncInfo
->
codeSize
,
TSDB_FUNC_CODE_LEN
);
// char* pComment = pFuncInfo->pCont;
// char* pCode = pFuncInfo->pCont + pFuncInfo->commentSize;
// char comments[TSDB_FUNC_COMMENT_LEN] = {0};
// for (int32_t i = 0; i < TSDB_FUNC_COMMENT_LEN - 1; ++i) {
// comments[i] = 'm';
// }
// char codes[TSDB_FUNC_CODE_LEN] = {0};
// for (int32_t i = 0; i < TSDB_FUNC_CODE_LEN - 1; ++i) {
// codes[i] = 'd';
// }
// EXPECT_STREQ(pComment, comments);
// EXPECT_STREQ(pCode, codes);
}
}
}
#if 0
TEST_F(MndTestFunc, 04_Drop_Func) {
{
int32_t contLen = sizeof(SDropFuncReq);
SDropFuncReq* pReq = (SDropFuncReq*)rpcMallocCont(contLen);
strcpy(pReq->user, "");
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_FUNC, pReq, contLen);
ASSERT_NE(pRsp, nullptr);
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_INVALID_FUNC_FORMAT);
}
{
int32_t contLen = sizeof(SDropFuncReq);
SDropFuncReq* pReq = (SDropFuncReq*)rpcMallocCont(contLen);
strcpy(pReq->user, "u4");
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_FUNC, pReq, contLen);
ASSERT_NE(pRsp, nullptr);
ASSERT_EQ(pRsp->code, TSDB_CODE_MND_FUNC_NOT_EXIST);
}
{
int32_t contLen = sizeof(SDropFuncReq);
SDropFuncReq* pReq = (SDropFuncReq*)rpcMallocCont(contLen);
strcpy(pReq->user, "u1");
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_FUNC, pReq, contLen);
ASSERT_NE(pRsp, nullptr);
ASSERT_EQ(pRsp->code, 0);
}
test.SendShowMetaReq(TSDB_MGMT_TABLE_FUNC, "");
CHECK_META("show functions", 4);
test.SendShowRetrieveReq();
EXPECT_EQ(test.GetShowRows(), 1);
}
TEST_F(MndTestFunc, 05_Create_Drop_Alter_Func) {
{
int32_t contLen = sizeof(SCreateFuncReq);
SCreateFuncReq* pReq = (SCreateFuncReq*)rpcMallocCont(contLen);
strcpy(pReq->user, "u1");
strcpy(pReq->pass, "p1");
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_FUNC, pReq, contLen);
ASSERT_NE(pRsp, nullptr);
ASSERT_EQ(pRsp->code, 0);
}
{
int32_t contLen = sizeof(SCreateFuncReq);
SCreateFuncReq* pReq = (SCreateFuncReq*)rpcMallocCont(contLen);
strcpy(pReq->user, "u2");
strcpy(pReq->pass, "p2");
SRpcMsg* pRsp = test.SendReq(TDMT_MND_CREATE_FUNC, pReq, contLen);
ASSERT_NE(pRsp, nullptr);
ASSERT_EQ(pRsp->code, 0);
}
test.SendShowMetaReq(TSDB_MGMT_TABLE_FUNC, "");
CHECK_META("show functions", 4);
test.SendShowRetrieveReq();
EXPECT_EQ(test.GetShowRows(), 3);
CheckBinary("u1", TSDB_FUNC_LEN);
CheckBinary("root", TSDB_FUNC_LEN);
CheckBinary("u2", TSDB_FUNC_LEN);
CheckBinary("normal", 10);
CheckBinary("super", 10);
CheckBinary("normal", 10);
CheckTimestamp();
CheckTimestamp();
CheckTimestamp();
CheckBinary("root", TSDB_FUNC_LEN);
CheckBinary("root", TSDB_FUNC_LEN);
CheckBinary("root", TSDB_FUNC_LEN);
{
int32_t contLen = sizeof(SAlterFuncReq);
SAlterFuncReq* pReq = (SAlterFuncReq*)rpcMallocCont(contLen);
strcpy(pReq->user, "u1");
strcpy(pReq->pass, "p2");
SRpcMsg* pRsp = test.SendReq(TDMT_MND_ALTER_FUNC, pReq, contLen);
ASSERT_NE(pRsp, nullptr);
ASSERT_EQ(pRsp->code, 0);
}
test.SendShowMetaReq(TSDB_MGMT_TABLE_FUNC, "");
CHECK_META("show functions", 4);
test.SendShowRetrieveReq();
EXPECT_EQ(test.GetShowRows(), 3);
CheckBinary("u1", TSDB_FUNC_LEN);
CheckBinary("root", TSDB_FUNC_LEN);
CheckBinary("u2", TSDB_FUNC_LEN);
CheckBinary("normal", 10);
CheckBinary("super", 10);
CheckBinary("normal", 10);
CheckTimestamp();
CheckTimestamp();
CheckTimestamp();
CheckBinary("root", TSDB_FUNC_LEN);
CheckBinary("root", TSDB_FUNC_LEN);
CheckBinary("root", TSDB_FUNC_LEN);
{
int32_t contLen = sizeof(SDropFuncReq);
SDropFuncReq* pReq = (SDropFuncReq*)rpcMallocCont(contLen);
strcpy(pReq->user, "u1");
SRpcMsg* pRsp = test.SendReq(TDMT_MND_DROP_FUNC, pReq, contLen);
ASSERT_NE(pRsp, nullptr);
ASSERT_EQ(pRsp->code, 0);
}
test.SendShowMetaReq(TSDB_MGMT_TABLE_FUNC, "");
CHECK_META("show functions", 4);
test.SendShowRetrieveReq();
EXPECT_EQ(test.GetShowRows(), 2);
CheckBinary("root", TSDB_FUNC_LEN);
CheckBinary("u2", TSDB_FUNC_LEN);
CheckBinary("super", 10);
CheckBinary("normal", 10);
CheckTimestamp();
CheckTimestamp();
CheckBinary("root", TSDB_FUNC_LEN);
CheckBinary("root", TSDB_FUNC_LEN);
// restart
test.Restart();
test.SendShowMetaReq(TSDB_MGMT_TABLE_FUNC, "");
CHECK_META("show functions", 4);
test.SendShowRetrieveReq();
EXPECT_EQ(test.GetShowRows(), 2);
CheckBinary("root", TSDB_FUNC_LEN);
CheckBinary("u2", TSDB_FUNC_LEN);
CheckBinary("super", 10);
CheckBinary("normal", 10);
CheckTimestamp();
CheckTimestamp();
CheckBinary("root", TSDB_FUNC_LEN);
CheckBinary("root", TSDB_FUNC_LEN);
}
#endif
\ No newline at end of file
source/util/src/terror.c
浏览文件 @
022b5f85
...
...
@@ -248,6 +248,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_FUNC_NAME, "Invalid func name")
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_COMMENT
,
"Invalid func comment"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_CODE
,
"Invalid func code"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_BUFSIZE
,
"Invalid func bufSize"
)
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_INVALID_FUNC_RETRIEVE
,
"Invalid func retrieve msg"
)
// mnode-trans
TAOS_DEFINE_ERROR
(
TSDB_CODE_MND_TRANS_ALREADY_EXIST
,
"Transaction already exists"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录