diff options
| -rw-r--r-- | .gitlab-ci.yml | 7 | ||||
| -rw-r--r-- | CMakeLists.txt | 3 | ||||
| -rw-r--r-- | src/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/version.map | 1 | ||||
| -rw-r--r-- | test/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | test/http_decoder_gtest.cpp | 7 | ||||
| -rw-r--r-- | test/test_env/sapp4.el8.x86_64.rpm | bin | 1052968 -> 0 bytes | |||
| -rw-r--r-- | test/test_env/tsg_l7_protocol.conf | 57 | ||||
| -rw-r--r-- | test_based_on_stellar/CMakeLists.txt | 157 | ||||
| -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.cpp | 140 |
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 Binary files differdeleted file mode 100644 index e43fe2f..0000000 --- a/test/test_env/sapp4.el8.x86_64.rpm +++ /dev/null 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; +} |
