summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author李佳 <[email protected]>2024-04-11 11:44:16 +0000
committer李佳 <[email protected]>2024-04-11 11:44:16 +0000
commit94ed075dda28fc975d9061f20de0dc594a35653c (patch)
tree5d397a7adf6d46be96dd4a50c25318f052ad53d4
parent8be661adc385b843ca36769f71d43549848e4c7d (diff)
Test case based on stellar
-rw-r--r--.gitlab-ci.yml7
-rw-r--r--CMakeLists.txt3
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/version.map1
-rw-r--r--test/CMakeLists.txt7
-rw-r--r--test/http_decoder_gtest.cpp7
-rw-r--r--test/test_env/sapp4.el8.x86_64.rpmbin1052968 -> 0 bytes
-rw-r--r--test/test_env/tsg_l7_protocol.conf57
-rw-r--r--test_based_on_stellar/CMakeLists.txt157
-rw-r--r--test_based_on_stellar/env/conflist.inf (renamed from test/test_env/conflist.inf)3
-rw-r--r--test_based_on_stellar/env/spec.toml (renamed from test/test_env/spec.toml)4
-rw-r--r--test_based_on_stellar/env/start_loader.inf (renamed from test/test_env/start_loader.inf)16
-rw-r--r--test_based_on_stellar/plugin_test_main.cpp140
13 files changed, 327 insertions, 76 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3f0d647..c84bfaa 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,11 +3,11 @@ variables:
BUILD_PADDING_PREFIX: /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX/
BUILD_IMAGE_CENTOS7: "git.mesalab.cn:7443/mesa_platform/build-env:master"
BUILD_IMAGE_CENTOS8: "git.mesalab.cn:7443/mesa_platform/build-env:rockylinux"
- INSTALL_DEPENDENCY_LIBRARY: sapp-devel framework_env libMESA_prof_load-devel libasan
+ INSTALL_DEPENDENCY_LIBRARY: sapp sapp-devel framework_env libMESA_prof_load-devel libasan
libMESA_htable-devel libMESA_jump_layer libMESA_jump_layer-devel
libMESA_handle_logger-devel libMESA_field_stat2-devel
libfieldstat3-devel libfieldstat4-devel libbreakpad_mini-devel
- zlib-devel brotli brotli-devel stellar-c-devel
+ zlib-devel brotli brotli-devel stellar-c-devel stellar-c systemd-devel
SYMBOL_TARGET: http_decoder
TEST_NAME: gtest_http_decoder
INSTALL_PREFIX: "/opt/tsg/"
@@ -26,6 +26,9 @@ stages:
- yum makecache #--disablerepo="*" --enablerepo="framework,platform,protocol,stellar"
- yum install -y $INSTALL_DEPENDENCY_LIBRARY
- source /etc/profile.d/framework.sh
+ - export LIBRARY_PATH=/home/mesasoft/sapp_run/lib/:$LIBRARY_PATH
+ - export LD_LIBRARY_PATH=/home/mesasoft/sapp_run/lib/:$LD_LIBRARY_PATH
+ - ldconfig
###############################################################################
# cppcheck
###############################################################################
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f95c00a..b31dc88 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -84,6 +84,7 @@ add_subdirectory(src)
enable_testing()
add_subdirectory(test)
+add_subdirectory(test_based_on_stellar)
set(CPACK_RPM_LIBRARIES_USER_FILELIST "%config(noreplace) ${CMAKE_INSTALL_PREFIX}/sapp/etc/http/http_decoder.toml")
@@ -93,4 +94,4 @@ install(FILES include/http_decoder.h DESTINATION ${CMAKE_INSTALL_PREFIX}/framewo
SET(CPACK_RPM_LIBRARIES_PRE_INSTALL_SCRIPT_FILE "${PROJECT_SOURCE_DIR}/cmake/PreInstall.sh")
SET(CPACK_RPM_LIBRARIES_PRE_UNINSTALL_SCRIPT_FILE "${PROJECT_SOURCE_DIR}/cmake/PreUninstall.sh")
SET(CPACK_RPM_LIBRARIES_POST_INSTALL_SCRIPT_FILE "${PROJECT_SOURCE_DIR}/cmake/PostInstall.sh")
-include(Package) \ No newline at end of file
+include(Package)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7703601..533eea8 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,6 +1,7 @@
add_definitions(-fPIC)
include_directories(/opt/MESA/include/)
+include_directories(/opt/tsg/framework/include/)
include_directories(${PROJECT_SOURCE_DIR}/deps/)
aux_source_directory(${PROJECT_SOURCE_DIR}/deps/mempool DEPS_SRC)
diff --git a/src/version.map b/src/version.map
index d26b83a..4b8c6d0 100644
--- a/src/version.map
+++ b/src/version.map
@@ -4,6 +4,7 @@ global:
http_message_*;
http_decoder_init;
http_decoder_entry;
+ http_decoder_exit;
};
local: *;
}; \ No newline at end of file
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index e7aa83e..7388239 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,15 +1,16 @@
set(DECODER_NAME http_decoder)
-add_library(${DECODER_NAME}_test SHARED http_decoder_gtest.cpp)
+add_library(${DECODER_NAME}_test SHARED http_decoder_gtest.cpp md5.c)
add_dependencies(${DECODER_NAME}_test ${DECODER_NAME})
-target_link_libraries(${DECODER_NAME}_test MESA_prof_load)
-set_target_properties(${DECODER_NAME}_test PROPERTIES PREFIX "")
+target_link_libraries(${DECODER_NAME}_test MESA_prof_load cjson-static)
+set_target_properties(${DECODER_NAME}_test PROPERTIES PREFIX "")
set(TEST_RUN_DIR ${CMAKE_BINARY_DIR}/testing)
include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(/usr/local/include/cjson)
include_directories(/opt/tsg/framework/include/stellar)
+include_directories(/opt/tsg/framework/include/)
include_directories(/opt/MESA/include/MESA)
add_executable(gtest_http_decoder http_decoder_driver.cpp http_decoder_stub.cpp http_decoder_gtest.cpp md5.c base64.c)
diff --git a/test/http_decoder_gtest.cpp b/test/http_decoder_gtest.cpp
index 4f21955..cabba75 100644
--- a/test/http_decoder_gtest.cpp
+++ b/test/http_decoder_gtest.cpp
@@ -268,9 +268,14 @@ static void http_decoder_test_update_session_tuple4(struct session *sess, struct
{
if (gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION] == NULL)
{
+ const char *human_addr_cstr = session_get0_readable_addr(sess);
+ if(NULL == human_addr_cstr){
+ fprintf(stderr, "can't get readable_addr, to use session_get0_readable_addr() the sapp_log.conf level must <= INFO\n");
+ return;
+ }
char result_name[MAX_KEY_STR_LEN] = {0};
gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION] = cJSON_CreateObject();
- cJSON_AddStringToObject(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION], GTEST_HTTP_TUPLE4_NAME, session_get0_readable_addr(sess));
+ cJSON_AddStringToObject(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION], GTEST_HTTP_TUPLE4_NAME, human_addr_cstr);
sprintf(result_name, "%d", g_result_count++);
commit_test_result_json(gtest_plug_exdata->result_jnode[HTTP_TRANSACTION_SESSION], result_name);
}
diff --git a/test/test_env/sapp4.el8.x86_64.rpm b/test/test_env/sapp4.el8.x86_64.rpm
deleted file mode 100644
index e43fe2f..0000000
--- a/test/test_env/sapp4.el8.x86_64.rpm
+++ /dev/null
Binary files differ
diff --git a/test/test_env/tsg_l7_protocol.conf b/test/test_env/tsg_l7_protocol.conf
deleted file mode 100644
index 1075a8f..0000000
--- a/test/test_env/tsg_l7_protocol.conf
+++ /dev/null
@@ -1,57 +0,0 @@
-#TYPE:1:UCHAR,2:USHORT,3:USTRING,4:ULOG,5:USTRING,6:FILE,7:UBASE64,8:PACKET
-#TYPE FIELD VALUE
-STRING UNCATEGORIZED 8000
-#STRING UNCATEGORIZED 8001
-#STRING UNKNOWN_OTHER 8002
-STRING DNS 32
-STRING FTP 45
-STRING FTPS 751
-STRING HTTP 67
-STRING HTTPS 68
-STRING ICMP 70
-STRING IKE 8003
-STRING MAIL 8004
-STRING IMAP 75
-STRING IMAPS 76
-STRING IPSEC 85
-STRING XMPP 94
-STRING L2TP 98
-STRING NTP 137
-STRING POP3 147
-STRING POP3S 148
-STRING PPTP 153
-STRING QUIC 2521
-STRING SIP 182
-STRING SMB 185
-STRING SMTP 186
-STRING SMTPS 187
-STRING SPDY 1469
-STRING SSH 198
-STRING SSL 199
-STRING SOCKS 8005
-STRING TELNET 209
-STRING DHCP 29
-STRING RADIUS 158
-STRING OPENVPN 336
-STRING STUN 201
-STRING TEREDO 555
-STRING DTLS 1291
-STRING DoH 8006
-STRING ISAKMP 92
-STRING MDNS 3835
-STRING NETBIOS 129
-STRING NETFLOW 130
-STRING RDP 150
-STRING RTCP 174
-STRING RTP 175
-STRING SLP 8007
-STRING SNMP 190
-STRING SSDP 197
-STRING TFTP 211
-STRING BJNP 2481
-STRING LDAP 100
-STRING RTMP 337
-STRING RTSP 176
-STRING ESNI 8008
-STRING QQ 156
-STRING WeChat 1296
diff --git a/test_based_on_stellar/CMakeLists.txt b/test_based_on_stellar/CMakeLists.txt
new file mode 100644
index 0000000..70663bf
--- /dev/null
+++ b/test_based_on_stellar/CMakeLists.txt
@@ -0,0 +1,157 @@
+set(DECODER_NAME http_decoder)
+
+set(TEST_RUN_DIR /home/mesasoft/sapp_run)
+set(SAPP_DEVEL_DIR /home/mesasoft/sapp_run/lib)
+set(STELLAR_ON_SAPP_LIB_DIR /opt/tsg/sapp/plug/stellar_on_sapp)
+set(TEST_MAIN plugin_test_main)
+
+include_directories(${CMAKE_SOURCE_DIR}/include)
+include_directories(${CMAKE_SOURCE_DIR}/test)
+include_directories(/usr/local/include/cjson)
+include_directories(/opt/tsg/framework/include/stellar)
+include_directories(/opt/MESA/include/MESA)
+
+#various ways to add -rdynamic for centos7, centos8, and different cmake version
+add_definitions(-rdynamic)
+add_executable(plugin_test_main plugin_test_main.cpp)
+set_target_properties(plugin_test_main
+ PROPERTIES
+ LINK_OPTIONS
+ "-rdynamic"
+ )
+set_target_properties(plugin_test_main
+ PROPERTIES
+ LINK_FLAGS
+ "-rdynamic"
+ )
+set(LINK_FLAGS "-rdynamic")
+link_directories(${SAPP_DEVEL_DIR}/lib)
+target_link_libraries(plugin_test_main gtest cjson-static sapp_devel pthread pcap MESA_htable MESA_field_stat2 MESA_htable MESA_prof_load MESA_handle_logger MESA_jump_layer breakpad_mini fieldstat3 fieldstat4 systemd )
+
+# assemble test env
+add_test(NAME STELLAR_INSTALL_TEST_MAIN COMMAND sh -c "cp ${CMAKE_CURRENT_BINARY_DIR}/${TEST_MAIN} ${TEST_RUN_DIR}/${TEST_MAIN}")
+add_test(NAME STELLAR_COPY_SPEC COMMAND sh -c "mkdir -p ${TEST_RUN_DIR}/stellar_plugin/ && cp ${CMAKE_CURRENT_SOURCE_DIR}/env/spec.toml ${TEST_RUN_DIR}/stellar_plugin/spec.toml")
+add_test(NAME STELLAR_COPY_CONFLIST COMMAND sh -c "mkdir -p ${TEST_RUN_DIR}/plug/ && cp ${CMAKE_CURRENT_SOURCE_DIR}/env/conflist.inf ${TEST_RUN_DIR}/plug/conflist.inf")
+add_test(NAME STELLAR_COPY_LOADER_INF COMMAND sh -c "mkdir -p ${TEST_RUN_DIR}/plug/stellar_on_sapp && cp ${CMAKE_CURRENT_SOURCE_DIR}/env/start_loader.inf ${TEST_RUN_DIR}/plug/stellar_on_sapp/start_loader.inf")
+add_test(NAME STELLAR_COPY_HTTP_DECODER_CONF COMMAND sh -c "mkdir -p ${TEST_RUN_DIR}/etc/http && cp ${PROJECT_SOURCE_DIR}/conf/http_decoder.toml ${TEST_RUN_DIR}/etc/http/")
+
+# update config files
+add_test(NAME STELLAR_UPDATE_SAPP_LOG_LEVEL COMMAND bash -c "sed -i 's/sapp_log.fatal/sapp_log.info/' ${TEST_RUN_DIR}/etc/sapp_log.conf")
+add_test(NAME STELLAR_UPDATE_SAPP_SYN_MODE COMMAND bash -c "sed -i 's/syn_mandatory=1/syn_mandatory=0/' ${TEST_RUN_DIR}/etc/sapp.toml")
+# add_test(NAME UPDATE_SAPP_REORDER COMMAND bash -c "sed -i 's/reorder_pkt_max=32/reorder_pkt_max=5/' ${TEST_RUN_DIR}/etc/sapp.toml")
+
+# update plugin to be tested
+add_test(NAME STELLAR_ON_SAPP_SO COMMAND sh -c "cp ${STELLAR_ON_SAPP_LIB_DIR}/stellar_on_sapp.so ${TEST_RUN_DIR}/plug/stellar_on_sapp/stellar_on_sapp.so")
+add_test(NAME STELLAR_HTTP_DECODER_SO COMMAND sh -c "cp ${CMAKE_BINARY_DIR}/src/${DECODER_NAME}.so ${TEST_RUN_DIR}/stellar_plugin/${DECODER_NAME}.so")
+add_test(NAME STELLAR_HTTP_DECODER_GTEST_SO COMMAND sh -c "cp ${CMAKE_BINARY_DIR}/test/${DECODER_NAME}_test.so ${TEST_RUN_DIR}/stellar_plugin/${DECODER_NAME}_test.so")
+
+set_tests_properties(STELLAR_INSTALL_TEST_MAIN STELLAR_COPY_SPEC STELLAR_COPY_CONFLIST STELLAR_COPY_LOADER_INF
+ STELLAR_ON_SAPP_SO STELLAR_HTTP_DECODER_SO STELLAR_HTTP_DECODER_GTEST_SO STELLAR_UPDATE_SAPP_LOG_LEVEL
+ PROPERTIES FIXTURES_SETUP TestFixture)
+
+
+set(TEST_JSON_DIR ${PROJECT_SOURCE_DIR}/test/test_result_json)
+set(TEST_PCAP_DIR ${PROJECT_SOURCE_DIR}/test/http_pcap)
+
+# run tests
+add_test(NAME STELLAR_HTTP_GET_SINGLE_TRANS_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_single_trans.json
+ -r ${TEST_PCAP_DIR}/http_get_single_trans.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_GET_MULTI_TRANS_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_multi_trans.json
+ -r ${TEST_PCAP_DIR}/http_get_multi_trans.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_GET_LONG_COOKIE_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_long_cookie.json
+ -r ${TEST_PCAP_DIR}/http_get_long_cookie.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_GET_ENCODED_URI_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_encoded_uri.json
+ -r ${TEST_PCAP_DIR}/http_get_encoded_uri.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_RES_GZIP_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_res_gzip.json
+ -r ${TEST_PCAP_DIR}/http_res_gzip.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_CHUNKED_RES_GZIP_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_chunked_res_gzip.json
+ -r ${TEST_PCAP_DIR}/http_chunked_res_gzip.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_OVER_TCP_KEEPALIVE_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_over_tcp_keepalive.json
+ -r ${TEST_PCAP_DIR}/http_over_tcp_keepalive.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_TUNNEL_FOR_POP3_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_tunnel_for_pop3.json
+ -r ${TEST_PCAP_DIR}/http_tunnel_for_pop3.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_OVER_PPPOE_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_over_pppoe.json
+ -r ${TEST_PCAP_DIR}/http_over_pppoe.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_OVER_TLS_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_over_tls.json
+ -r ${TEST_PCAP_DIR}/http_over_tls.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_NON_HTTP_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/non_http.json
+ -r ${TEST_PCAP_DIR}/non_http.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_REQ_1BYTE_SLIDING_WINDOW_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_req_1byte_sliding_window.json
+ -r ${TEST_PCAP_DIR}/http_req_1byte_sliding_window.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_RES_1BYTE_SLIDING_WINDOW_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_res_1byte_sliding_window.json
+ -r ${TEST_PCAP_DIR}/http_res_1byte_sliding_window.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_NO_CONTENT_LENGTH_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_no_content_length.json
+ -r ${TEST_PCAP_DIR}/http_no_content_length.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_POST_MULTIPART_FORM_DATA_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_post_multipart_form_data.json
+ -r ${TEST_PCAP_DIR}/http_post_multipart_form_data.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_HEADERS_EXCEED_MAXIMUM_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_hdrs_exceed_maximum.json
+ -r ${TEST_PCAP_DIR}/http_hdrs_exceed_maximum.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_GET_MALFORMED_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_malformed.json
+ -r ${TEST_PCAP_DIR}/http_get_malformed.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_HEADER_VALUE_EMPTY_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_hdr_value_empty.json
+ -r ${TEST_PCAP_DIR}/http_hdr_value_empty.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_UPGRADE_WEBSOCKET_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_upgrade_websocket.json
+ -r ${TEST_PCAP_DIR}/http_upgrade_websocket.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_UPGRADE_HTTP2_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_upgrade_http2.json
+ -r ${TEST_PCAP_DIR}/http_upgrade_http2.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_MULTI_PARSE_ERROR_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_multi_parse_error.json
+ -r ${TEST_PCAP_DIR}/http_multi_parse_error.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_GET_REQ_PIPELINE_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_get_req_pipeline.json
+ -r ${TEST_PCAP_DIR}/http_get_req_pipeline.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_TRANS_PIPELINE_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_trans_pipeline.json
+ -r ${TEST_PCAP_DIR}/http_trans_pipeline.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_HEADER_TRUNCATED_IN_KV_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_hdr_truncated_in_kv.json
+ -r ${TEST_PCAP_DIR}/http_hdr_truncated_in_kv.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+add_test(NAME STELLAR_HTTP_HEADER_TRUNCATED_AFTER_KV_TEST COMMAND ./${TEST_MAIN} ${TEST_JSON_DIR}/http_hdr_truncated_after_kv.json
+ -r ${TEST_PCAP_DIR}/http_hdr_truncated_after_kv.pcap WORKING_DIRECTORY ${TEST_RUN_DIR})
+
+set_tests_properties(STELLAR_HTTP_GET_SINGLE_TRANS_TEST
+ STELLAR_HTTP_GET_MULTI_TRANS_TEST
+ STELLAR_HTTP_GET_LONG_COOKIE_TEST
+ STELLAR_HTTP_GET_ENCODED_URI_TEST
+ STELLAR_HTTP_RES_GZIP_TEST
+ STELLAR_HTTP_CHUNKED_RES_GZIP_TEST
+ STELLAR_HTTP_OVER_TCP_KEEPALIVE_TEST
+ STELLAR_HTTP_TUNNEL_FOR_POP3_TEST
+ STELLAR_HTTP_OVER_PPPOE_TEST
+ STELLAR_HTTP_OVER_TLS_TEST
+ STELLAR_NON_HTTP_TEST
+ STELLAR_HTTP_REQ_1BYTE_SLIDING_WINDOW_TEST
+ STELLAR_HTTP_RES_1BYTE_SLIDING_WINDOW_TEST
+ STELLAR_HTTP_NO_CONTENT_LENGTH_TEST
+ STELLAR_HTTP_POST_MULTIPART_FORM_DATA_TEST
+ STELLAR_HTTP_HEADERS_EXCEED_MAXIMUM_TEST
+ STELLAR_HTTP_GET_MALFORMED_TEST
+ STELLAR_HTTP_MULTI_PARSE_ERROR_TEST
+ STELLAR_HTTP_HEADER_VALUE_EMPTY_TEST
+ STELLAR_HTTP_UPGRADE_WEBSOCKET_TEST
+ STELLAR_HTTP_UPGRADE_HTTP2_TEST
+ STELLAR_HTTP_GET_REQ_PIPELINE_TEST
+ STELLAR_HTTP_TRANS_PIPELINE_TEST
+ STELLAR_HTTP_HEADER_TRUNCATED_IN_KV_TEST
+ STELLAR_HTTP_HEADER_TRUNCATED_AFTER_KV_TEST
+ PROPERTIES FIXTURES_REQUIRED TestFixture) \ No newline at end of file
diff --git a/test/test_env/conflist.inf b/test_based_on_stellar/env/conflist.inf
index 2e8144d..1b70e78 100644
--- a/test/test_env/conflist.inf
+++ b/test_based_on_stellar/env/conflist.inf
@@ -1,9 +1,6 @@
[platform]
./plug/stellar_on_sapp/start_loader.inf
-
[protocol]
-
[business]
-#./plug/stellar_on_sapp/defer_loader.inf
diff --git a/test/test_env/spec.toml b/test_based_on_stellar/env/spec.toml
index b8c7eb9..237abc5 100644
--- a/test/test_env/spec.toml
+++ b/test_based_on_stellar/env/spec.toml
@@ -1,5 +1,3 @@
-# stellar_plugin.toml
-#
[[plugin]]
path = "./stellar_plugin/http_decoder.so"
init = "http_decoder_init"
@@ -8,4 +6,4 @@ exit = "http_decoder_exit"
[[plugin]]
path = "./stellar_plugin/http_decoder_test.so"
init = "http_decoder_test_init"
-exit = "http_decoder_test_exit" \ No newline at end of file
+exit = "http_decoder_test_exit"
diff --git a/test/test_env/start_loader.inf b/test_based_on_stellar/env/start_loader.inf
index 89b2f94..545c4f7 100644
--- a/test/test_env/start_loader.inf
+++ b/test_based_on_stellar/env/start_loader.inf
@@ -4,14 +4,18 @@ SO_PATH=./plug/stellar_on_sapp/stellar_on_sapp.so
INIT_FUNC=STELLAR_START_LOADER_INIT
DESTROY_FUNC=STELLAR_START_LOADER_EXIT
-#[TCP_ALL]
+[TCP_ALL]
+FUNC_FLAG=ALL
+FUNC_NAME=stellar_on_sapp_tcpall_entry
+
+#[TCP]
#FUNC_FLAG=ALL
-#FUNC_NAME=stellar_on_sapp_tcpall_entry
+#FUNC_NAME=stellar_on_sapp_tcp_entry
-[TCP]
-FUNC_FLAG=ALL
-FUNC_NAME=stellar_on_sapp_tcp_entry
+#[TCP]
+#FUNC_FLAG=ALL
+#FUNC_NAME=stellar_on_sapp_detach_check_entry
[UDP]
FUNC_FLAG=ALL
-FUNC_NAME=stellar_on_sapp_udp_entry \ No newline at end of file
+FUNC_NAME=stellar_on_sapp_udp_entry
diff --git a/test_based_on_stellar/plugin_test_main.cpp b/test_based_on_stellar/plugin_test_main.cpp
new file mode 100644
index 0000000..8ff6ef7
--- /dev/null
+++ b/test_based_on_stellar/plugin_test_main.cpp
@@ -0,0 +1,140 @@
+#include "stream.h"
+#include "cJSON.h"
+#include <gtest/gtest.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <assert.h>
+#include "http_decoder_gtest.h"
+
+// #define IGNORE_PRINTF
+#ifdef IGNORE_PRINTF
+#define printf(fmt, ...) (0)
+#endif
+
+cJSON *g_test_result_root = NULL;
+cJSON *g_load_result_root = NULL;
+int g_ret = 0;
+
+
+extern "C" int libsapp_setup_env(int argc, char *argv[]);
+
+extern "C" int commit_test_result_json(cJSON *node, const char *name)
+{
+ if (g_test_result_root)
+ {
+ // cJSON_AddItemToObject(g_test_result_root, name, node);
+ // cJSON_AddStringToObject(node, "name", name);
+ cJSON_AddItemToArray(g_test_result_root, node);
+ return 0;
+ }
+ return -1;
+}
+
+static void hdgt_prune_non_result_item(cJSON *benchmark_json_root)
+{
+ int array_size = cJSON_GetArraySize(benchmark_json_root);
+
+ for (int i = 0; i < array_size; i++)
+ {
+ cJSON *object_root = cJSON_GetArrayItem(benchmark_json_root, i);
+ cJSON_DeleteItemFromObject(object_root, GTEST_HTTP_PAYLOAD_NAME);
+ }
+}
+
+static cJSON *load_result_from_jsonfile(const char *json_path)
+{
+ if (json_path == NULL)
+ return NULL;
+
+ long file_len = 0;
+ char *file_content = NULL;
+ FILE *fp = NULL;
+
+ fp = fopen(json_path, "r+");
+ if (NULL == fp)
+ {
+ return NULL;
+ }
+ fseek(fp, 0, SEEK_END);
+ file_len = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+ if (file_len == 0)
+ {
+ fclose(fp);
+ return NULL;
+ }
+ file_content = (char *)malloc(file_len + 1);
+ fread(file_content, file_len, 1, fp);
+ file_content[file_len] = '\0';
+ cJSON *load = cJSON_Parse(file_content);
+ free(file_content);
+ fclose(fp);
+
+ hdgt_prune_non_result_item(load);
+
+ return load;
+}
+
+TEST(PROTOCOL, compare_result_json)
+{
+ EXPECT_EQ(cJSON_GetArraySize(g_test_result_root), cJSON_GetArraySize(g_load_result_root));
+ int ret = cJSON_Compare(g_test_result_root, g_load_result_root, 0);
+ EXPECT_EQ(1, ret);
+
+ if (ret != 1)
+ {
+ char *load_json_str = cJSON_Print(g_load_result_root);
+ printf("LOAD Raw:\n%s\n", load_json_str);
+ free(load_json_str);
+ char *result_json_str = cJSON_Print(g_test_result_root);
+ printf("TEST Raw:\n%s\n", result_json_str);
+ free(result_json_str);
+
+ cJSON *t_load = g_load_result_root->child, *t_test = g_test_result_root->child;
+ while (t_load != NULL)
+ {
+ ret = cJSON_Compare(t_load, t_test, 0);
+ if (ret != 1)
+ {
+ load_json_str = cJSON_Print(t_load);
+ printf("LOAD Diff:\n%s\n", load_json_str);
+ free(load_json_str);
+ result_json_str = cJSON_Print(t_test);
+ printf("TEST Diff:\n%s\n", result_json_str);
+ free(result_json_str);
+ ASSERT_EQ(1, ret);
+ }
+ t_load = t_load->next;
+ t_test = t_test->next;
+ }
+ }
+}
+
+void run_gtest_main()
+{
+ g_ret = RUN_ALL_TESTS();
+ exit(g_ret);
+}
+
+int main(int argc, char *argv[])
+{
+ if (argc < 3)
+ {
+ printf("Invalid Argument!!!\n Usage: ./test_protocol_plug_main [/path/to/result_json] [sapp_args...]\n");
+ return -1;
+ }
+ const char *result_json_path = argv[1];
+ g_test_result_root = cJSON_CreateArray();
+ g_load_result_root = load_result_from_jsonfile(result_json_path);
+ assert(g_load_result_root != NULL && g_test_result_root != NULL);
+ ::testing::InitGoogleTest(&argc, argv);
+
+ if (libsapp_setup_env(argc - 1, argv + 1) < 0)
+ {
+ return -1;
+ }
+ atexit(run_gtest_main);
+ while (1)
+ pause();
+ return 0;
+}