diff options
| author | “pengxuanzheng” <[email protected]> | 2022-07-05 08:41:09 +0000 |
|---|---|---|
| committer | “pengxuanzheng” <[email protected]> | 2022-07-05 09:02:52 +0000 |
| commit | e075fb586aa9e72226be6888ded7a2eba72b8cd4 (patch) | |
| tree | fee7238e7f4dcb7a3a6b3d36051e89dacd5659fa /gtest | |
| parent | 226e79434842626346ae378f408531d2d19059c7 (diff) | |
✨ feat(TSG-11123): 增加单元测试,并修改单元测试中发现的错误
Diffstat (limited to 'gtest')
| -rw-r--r-- | gtest/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | gtest/gtest_tsg_lua_exec_with_context.cpp | 180 | ||||
| -rw-r--r-- | gtest/gtest_tsg_lua_register_function.cpp | 88 | ||||
| -rw-r--r-- | gtest/script/exec_with_context.lua | 19 | ||||
| -rw-r--r-- | gtest/script/get_header.lua | 25 | ||||
| -rw-r--r-- | gtest/script/get_other.lua | 14 |
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 |
