summaryrefslogtreecommitdiff
path: root/gtest
diff options
context:
space:
mode:
author“pengxuanzheng” <[email protected]>2022-07-05 08:41:09 +0000
committer“pengxuanzheng” <[email protected]>2022-07-05 09:02:52 +0000
commite075fb586aa9e72226be6888ded7a2eba72b8cd4 (patch)
treefee7238e7f4dcb7a3a6b3d36051e89dacd5659fa /gtest
parent226e79434842626346ae378f408531d2d19059c7 (diff)
✨ feat(TSG-11123): 增加单元测试,并修改单元测试中发现的错误
Diffstat (limited to 'gtest')
-rw-r--r--gtest/CMakeLists.txt2
-rw-r--r--gtest/gtest_tsg_lua_exec_with_context.cpp180
-rw-r--r--gtest/gtest_tsg_lua_register_function.cpp88
-rw-r--r--gtest/script/exec_with_context.lua19
-rw-r--r--gtest/script/get_header.lua25
-rw-r--r--gtest/script/get_other.lua14
6 files changed, 327 insertions, 1 deletions
diff --git a/gtest/CMakeLists.txt b/gtest/CMakeLists.txt
index 69b9d3f..fda6e7d 100644
--- a/gtest/CMakeLists.txt
+++ b/gtest/CMakeLists.txt
@@ -11,7 +11,7 @@ link_libraries(tsglua gtest gtest_main pthread)
add_definitions(-g -W -Wall)
add_executable(gtest_tsg_lua ${SRCS})
-#add_executable(gtest_tsg_lua_cache_script ./gtest_tsg_lua_cache_script.cpp)
+#add_executable(gtest_tsg_lua_exec_with_context ./gtest_tsg_lua_exec_with_context.cpp)
add_dependencies(gtest_tsg_lua ${lib_name}_shared gtest)
#target_link_libraries(gtest_tsg_lua tsglua gtest gtest_main pthread)
diff --git a/gtest/gtest_tsg_lua_exec_with_context.cpp b/gtest/gtest_tsg_lua_exec_with_context.cpp
new file mode 100644
index 0000000..095bc25
--- /dev/null
+++ b/gtest/gtest_tsg_lua_exec_with_context.cpp
@@ -0,0 +1,180 @@
+#include <gtest/gtest.h>
+#include "tsg_lua_interface.h"
+
+static char buffer[4096];
+static char *get_script_buffer(const char *script)
+{
+ FILE *fp = fopen(script, "r");
+ if (fp)
+ {
+ int num = fread(buffer, 1, 4096, fp);
+ if (num != 0)
+ {
+ buffer[num] = 0;
+ fclose(fp);
+ return buffer;
+ }
+ fclose(fp);
+ }
+ return NULL;
+}
+
+int get_userdata(tsg_lua_handle L)
+{
+ void *ud = lua_get_userdata(L);
+ c_push_string_into_lua(L, (const char *)ud, strlen((const char *)ud));
+ return 1;
+}
+
+TEST(lua_exec_file_with_context, normal)
+{
+ tsg_lua_handle L = tsg_lua_vm_create_with_name("TEST");
+
+ const char *ud = "hello world.";
+ const char *script = "./script/exec_with_context.lua";
+ lua_data_t in;
+ in.data = (char *)"This is a test";
+ in.len = strlen(in.data);
+ lua_arg_t out;
+ out.type = STRING;
+ out.len = 1024;
+ out.str = (char *)calloc(1, 1024);
+
+ lua_register_function(L, "get", "get_userdata", get_userdata);
+ lua_script_context context = NULL;
+ lua_set_script_context(L, &context);
+ int ret = lua_exec_file_with_context(L, script, in, (void *)ud, context, &out);
+ const char *str = "userdata:hello world., context.count:1, context.message:This is first called";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(str), out.len);
+ EXPECT_EQ(STRING, out.type);
+ EXPECT_STREQ(str, out.str);
+ bzero(out.str, 1024);
+
+ ud = "hello lua.";
+ ret = lua_exec_file_with_context(L, script, in, (void *)ud, context, &out);
+ str = "userdata:hello lua., context.count:2, context.message:This is not first called";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(str), out.len);
+ EXPECT_EQ(STRING, out.type);
+ EXPECT_STREQ(str, out.str);
+ bzero(out.str, 1024);
+
+ lua_script_context context2 = NULL;
+ lua_set_script_context(L, &context2);
+ ret = lua_exec_file_with_context(L, script, in, (void *)ud, context2, &out);
+ str = "userdata:hello lua., context.count:1, context.message:This is first called";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(str), out.len);
+ EXPECT_EQ(STRING, out.type);
+ EXPECT_STREQ(str, out.str);
+ bzero(out.str, 1024);
+
+ lua_unset_script_context(L, context);
+ lua_unset_script_context(L, context2);
+ tsg_destory_lua(L);
+ free(out.str);
+}
+
+TEST(lua_exec_with_context, normal)
+{
+ tsg_lua_handle L = tsg_lua_vm_create_with_name("TEST");
+
+ const char *ud = "hello world.";
+ lua_data_t in;
+ in.data = (char *)"This is a test";
+ in.len = strlen(in.data);
+ lua_arg_t out;
+ out.type = STRING;
+ out.len = 1024;
+ out.str = (char *)calloc(1, 1024);
+ lua_data_t script;
+ script.data = get_script_buffer("./script/exec_with_context.lua");
+ script.len = strlen(script.data);
+
+ lua_register_function(L, "get", "get_userdata", get_userdata);
+ lua_script_context context = NULL;
+ lua_set_script_context(L, &context);
+ int ret = lua_exec_with_context(L, script, in, (void *)ud, context, &out);
+ const char *str = "userdata:hello world., context.count:1, context.message:This is first called";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(str), out.len);
+ EXPECT_EQ(STRING, out.type);
+ EXPECT_STREQ(str, out.str);
+ bzero(out.str, 1024);
+
+ ud = "hello lua.";
+ ret = lua_exec_with_context(L, script, in, (void *)ud, context, &out);
+ str = "userdata:hello lua., context.count:2, context.message:This is not first called";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(str), out.len);
+ EXPECT_EQ(STRING, out.type);
+ EXPECT_STREQ(str, out.str);
+ bzero(out.str, 1024);
+
+ lua_script_context context2 = NULL;
+ lua_set_script_context(L, &context2);
+ ret = lua_exec_with_context(L, script, in, (void *)ud, context2, &out);
+ str = "userdata:hello lua., context.count:1, context.message:This is first called";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(str), out.len);
+ EXPECT_EQ(STRING, out.type);
+ EXPECT_STREQ(str, out.str);
+ bzero(out.str, 1024);
+
+ lua_unset_script_context(L, context);
+ lua_unset_script_context(L, context2);
+ tsg_destory_lua(L);
+ free(out.str);
+}
+
+TEST(lua_cache_exec_with_context, normal)
+{
+ tsg_lua_handle L = tsg_lua_vm_create_with_name("TEST");
+
+ const char *ud = "hello world.";
+ lua_data_t in;
+ in.data = (char *)"This is a test";
+ in.len = strlen(in.data);
+ lua_arg_t out;
+ out.type = STRING;
+ out.len = 1024;
+ out.str = (char *)calloc(1, 1024);
+ const char *script = get_script_buffer("./script/exec_with_context.lua");
+ int script_id = tsg_lua_cache_script(L, script, strlen(script));
+
+ lua_register_function(L, "get", "get_userdata", get_userdata);
+ lua_script_context context = NULL;
+ lua_set_script_context(L, &context);
+ int ret = lua_cache_exec_with_context(L, script_id, in, (void *)ud, context, &out);
+ const char *str = "userdata:hello world., context.count:1, context.message:This is first called";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(str), out.len);
+ EXPECT_EQ(STRING, out.type);
+ EXPECT_STREQ(str, out.str);
+ bzero(out.str, 1024);
+
+ ud = "hello lua.";
+ ret = lua_cache_exec_with_context(L, script_id, in, (void *)ud, context, &out);
+ str = "userdata:hello lua., context.count:2, context.message:This is not first called";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(str), out.len);
+ EXPECT_EQ(STRING, out.type);
+ EXPECT_STREQ(str, out.str);
+ bzero(out.str, 1024);
+
+ lua_script_context context2 = NULL;
+ lua_set_script_context(L, &context2);
+ ret = lua_cache_exec_with_context(L, script_id, in, (void *)ud, context2, &out);
+ str = "userdata:hello lua., context.count:1, context.message:This is first called";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(str), out.len);
+ EXPECT_EQ(STRING, out.type);
+ EXPECT_STREQ(str, out.str);
+ bzero(out.str, 1024);
+
+ lua_unset_script_context(L, context);
+ lua_unset_script_context(L, context2);
+ tsg_destory_lua(L);
+ free(out.str);
+}
diff --git a/gtest/gtest_tsg_lua_register_function.cpp b/gtest/gtest_tsg_lua_register_function.cpp
index c783448..9612dd1 100644
--- a/gtest/gtest_tsg_lua_register_function.cpp
+++ b/gtest/gtest_tsg_lua_register_function.cpp
@@ -33,6 +33,44 @@ int set_world(tsg_lua_handle L)
return 1;
}
+int get_req_header(tsg_lua_handle L)
+{
+ const char *key[] = {"token", "User-Agent", "Accept", "Host", "Accept-Encoding",
+ "Connection", "Content-Length", "Content-Type"};
+ const char *value[] = {"c21f969b5f03d33d43e04f8f136e7682", " PostmanRuntime/7.26.8","*/*", "192.168.40.223:9098",
+ "gzip, deflate, br", "keep-alive", "7020", "text/markdown"};
+ c_push_table_into_lua(L, key, value, 8);
+
+ return 1;
+}
+
+int get_rsp_header(tsg_lua_handle L)
+{
+ const char *key[] = {"Content-Type", "Content-Length", "Data"};
+ const char *value[] = {"application/xml;charset=UTF-8", "0", "Wed, 16 Dec 2020 08:45:55 GMT"};
+ c_push_table_into_lua(L, key, value, 3);
+
+ return 1;
+}
+
+int get_result(tsg_lua_handle L)
+{
+ c_push_bool_into_lua(L, false);
+ return 1;
+}
+
+int get_nil(tsg_lua_handle L)
+{
+ c_push_nil_into_lua(L);
+ return 1;
+}
+
+int get_time(tsg_lua_handle L)
+{
+ c_push_num_into_lua(L, 0x12345678);
+ return 1;
+}
+
TEST(lua_register_function, normal)
{
tsg_lua_handle L = NULL;
@@ -53,4 +91,54 @@ TEST(lua_register_function, normal)
EXPECT_EQ(12, out_len);
EXPECT_EQ(STRING, out_type);
EXPECT_STREQ("hello world.", out);
+ tsg_destory_lua(L);
+}
+
+TEST(lua_register_function, get_header)
+{
+ tsg_lua_handle L = NULL;
+ char out[1024];
+ size_t out_len = 0;
+ size_t out_type = STRING;
+
+ L = tsg_lua_vm_create();
+ EXPECT_NE((void *)NULL, L);
+ lua_register_function(L, "req", "get_header", get_req_header);
+ lua_register_function(L, "rsp", "get_header", get_rsp_header);
+
+ const char *script = "./script/get_header.lua";
+ memset(out, 0, 1024);
+ int ret = tsg_lua_exec_file(L, script, "hello", strlen("hello"), out, &out_len, &out_type);
+
+ const char *result = "req_header:Host:192.168.40.223:9098,Content-Type:text/markdown,Content-Length:7020,Connection:keep-alive,Accept:*/*,User-Agent: PostmanRuntime/7.26.8,token:c21f969b5f03d33d43e04f8f136e7682,Accept-Encoding:gzip, deflate, br; rsp_header:nil,Content-Length:0,Content-Type:application/xml;charset=UTF-8,Data:Wed, 16 Dec 2020 08:45:55 GMT";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(result), out_len);
+ EXPECT_EQ(STRING, out_type);
+ EXPECT_STREQ(result, out);
+ tsg_destory_lua(L);
+}
+
+TEST(lua_register_function, other)
+{
+ tsg_lua_handle L = NULL;
+ char out[1024];
+ size_t out_len = 0;
+ size_t out_type = STRING;
+
+ L = tsg_lua_vm_create();
+ EXPECT_NE((void *)NULL, L);
+ lua_register_function(L, "get", "get_result", get_result);
+ lua_register_function(L, "get", "get_nil", get_nil);
+ lua_register_function(L, "get", "get_time", get_time);
+
+ const char *script = "./script/get_other.lua";
+ memset(out, 0, 1024);
+ int ret = tsg_lua_exec_file(L, script, "hello", strlen("hello"), out, &out_len, &out_type);
+
+ const char *result = "result:false, time:305419896, is nil";
+ EXPECT_EQ(0, ret);
+ EXPECT_EQ(strlen(result), out_len);
+ EXPECT_EQ(STRING, out_type);
+ EXPECT_STREQ(result, out);
+ tsg_destory_lua(L);
}
diff --git a/gtest/script/exec_with_context.lua b/gtest/script/exec_with_context.lua
new file mode 100644
index 0000000..f7464ba
--- /dev/null
+++ b/gtest/script/exec_with_context.lua
@@ -0,0 +1,19 @@
+local data = TEST.data
+local context = TEST.context
+
+if not context.count then
+ context.count = 1
+else
+ context.count = context.count + 1
+end
+
+if not context.message then
+ context.message = "This is first called"
+else
+ context.message = "This is not first called"
+end
+
+local ud = TEST.get.get_userdata()
+local str = string.format("userdata:%s, context.count:%d, context.message:%s", ud, context.count, context.message)
+
+return string.len( str ), str
diff --git a/gtest/script/get_header.lua b/gtest/script/get_header.lua
new file mode 100644
index 0000000..104ddd0
--- /dev/null
+++ b/gtest/script/get_header.lua
@@ -0,0 +1,25 @@
+local data = TSG.data
+
+local req_header = nil
+local header = TSG.req.get_header()
+for k, v in pairs(header) do
+ if not req_header then
+ req_header = string.format( "%s:%s", k, v)
+ else
+ req_header = string.format( "%s,%s:%s",req_header, k, v)
+ end
+end
+
+local rsp_header = nil
+header = TSG.rsp.get_header()
+for k, v in pairs(header) do
+ if not req_header then
+ rsp_header = string.format("%s:%s", k, v)
+ else
+ rsp_header = string.format("%s,%s:%s", rsp_header, k, v)
+ end
+end
+
+local ret = string.format( "req_header:%s; rsp_header:%s", req_header, rsp_header)
+-- print(ret)
+return string.len(ret), ret \ No newline at end of file
diff --git a/gtest/script/get_other.lua b/gtest/script/get_other.lua
new file mode 100644
index 0000000..02c1fa7
--- /dev/null
+++ b/gtest/script/get_other.lua
@@ -0,0 +1,14 @@
+local data = TSG.data
+local result = "true"
+if not TSG.get.get_result() then
+ result = "false"
+end
+
+local flag = "not nil"
+if not TSG.get.get_nil() then
+ flag = "is nil"
+end
+
+local str = string.format("result:%s, time:%d, %s", result, TSG.get.get_time(), flag)
+
+return string.len(str), str \ No newline at end of file