diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 31e53c4..2401cf6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,7 +4,7 @@ variables: BUILD_IMAGE_CENTOS8: "git.mesalab.cn:7443/mesa_platform/build-env:rockylinux" BUILD_PADDING_PREFIX: /tmp/padding_for_CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX_PREFIX/ INSTALL_PREFIX: "/home/mesasoft/sapp_run/" - INSTALL_DEPENDENCY_LIBRARY: systemd-devel libbreakpad_mini numactl-devel zlib-devel vim-common libMESA_handle_logger-devel libcjson-devel libMESA_field_stat2-devel sapp sapp-devel framework_env libMESA_prof_load-devel http-devel dns-devel ftp-devel mail-devel ssl-devel librdkafka-devel libmaat4-devel quic-devel mesa_sip-devel gtp-devel libMESA_htable-devel libasan mrzcpd rapidjson-devel libMESA_jump_layer-devel stratum-devel rdp-devel dtls-devel libfieldstat3-devel + INSTALL_DEPENDENCY_LIBRARY: systemd-devel libbreakpad_mini numactl-devel zlib-devel vim-common libMESA_handle_logger-devel-2.0.9.b677bb6 libcjson-devel libMESA_field_stat2-devel sapp sapp-devel framework_env libMESA_prof_load-devel http-devel dns-devel ftp-devel mail-devel ssl-devel librdkafka-devel libmaat4-devel quic-devel mesa_sip-devel gtp-devel libMESA_htable-devel libasan mrzcpd rapidjson-devel libMESA_jump_layer-devel stratum-devel rdp-devel dtls-devel libfieldstat3-devel stages: - analysis diff --git a/src/tsg_sync_state.cpp b/src/tsg_sync_state.cpp index 14e038f..da8174b 100644 --- a/src/tsg_sync_state.cpp +++ b/src/tsg_sync_state.cpp @@ -114,61 +114,41 @@ static void mpack_append_string(mpack_writer_t *writer, char *str) static void mpack_append_fqdn_cat_ids(mpack_writer_t *writer, struct fqdn_cat_id_val *array) { - if (array->num > 0) - { - int num = MIN(array->num, FQDN_CAT_ID_VALS); - mpack_build_array(writer); - for (int i = 0; i < num; i++) - { - mpack_write_u32(writer, array->value[i]); - } - mpack_complete_array(writer); - } - else + int num = MIN(array->num, FQDN_CAT_ID_VALS); + mpack_build_array(writer); + for (int i = 0; i < num; i++) { - mpack_write_nil(writer); + mpack_write_u32(writer, array->value[i]); } + mpack_complete_array(writer); return; } static void mpack_append_tcp_sids(mpack_writer_t *writer, struct tcp_sids *array) { - if (array->num > 0) - { - int num = MIN(array->num, TCP_XXX_SIDS); - mpack_build_array(writer); - for (int i = 0; i < num; i++) - { - mpack_write_u16(writer, array->value[i]); - } - mpack_complete_array(writer); - } - else + int num = MIN(array->num, TCP_XXX_SIDS); + mpack_build_array(writer); + for (int i = 0; i < num; i++) { - mpack_write_nil(writer); + mpack_write_u16(writer, array->value[i]); } - + mpack_complete_array(writer); + return; } static void mpack_append_route_ctx(mpack_writer_t *writer, struct tcp_route_ctx *array) { - if (array->num > 0) - { - int num = MIN(array->num, TCP_XXX_ROUTE_CTX); - mpack_build_array(writer); - for (int i = 0; i < num; i++) - { - mpack_write_u8(writer, array->value[i]); - } - mpack_complete_array(writer); - } - else + + int num = MIN(array->num, TCP_XXX_ROUTE_CTX); + mpack_build_array(writer); + for (int i = 0; i < num; i++) { - mpack_write_nil(writer); + mpack_write_u8(writer, array->value[i]); } - + mpack_complete_array(writer); + return; } @@ -194,8 +174,8 @@ static void mpack_append_cmsg_value(mpack_writer_t *writer, struct proxy_cmsg *c } else { - mpack_write_nil(writer); - mpack_write_nil(writer); + mpack_write_u8(writer, 0); + mpack_write_u8(writer, 0); } mpack_write_u8(writer, cmsg->tcp_sack_client); mpack_write_u8(writer, cmsg->tcp_sack_server); diff --git a/test/src/gtest_sync_state.cpp b/test/src/gtest_sync_state.cpp index f7827f8..d75c344 100644 --- a/test/src/gtest_sync_state.cpp +++ b/test/src/gtest_sync_state.cpp @@ -565,6 +565,167 @@ TEST(POLICY_UPDATE, Proxy) gtest_cmsg_destroy(&cmsg); } + +TEST(POLICY_UPDATE, ProxyTcpWsacleExist0) +{ + char ctrl_pkt_buf[1024] = {0}; + int ctrl_pkt_len = 0; + struct streaminfo a_stream = {0}; + struct update_policy test; + memset(&test, 0, sizeof(test)); + struct proxy_cmsg cmsg; + test.type = POLICY_UPDATE_INTERCEPT; + test.n_ids = 6; + for (int i = 0; i < test.n_ids; i++) + { + test.ids[i] = 10000 + i; + } + + gtest_cmsg_init(&cmsg); + cmsg.tcp_wsacle_exist = 0; + memcpy(&test.cmsg, &cmsg, sizeof(struct proxy_cmsg)); + tsg_sync_policy_update(&a_stream, &test, 1); + + ctrl_pkt_len = get_ctrl_pkt(ctrl_pkt_buf, sizeof(ctrl_pkt_buf)); + mpack_tree_t tree; + mpack_tree_init_data(&tree, ctrl_pkt_buf, ctrl_pkt_len); + mpack_tree_parse(&tree); + mpack_node_t root = mpack_tree_root(&tree); + mpack_node_t params = mpack_node_map_cstr(root, "params"); + + // proxy + EXPECT_EQ(mpack_type_map, mpack_node_type(mpack_node_map_cstr(params, "proxy"))); + mpack_node_t proxy_map = mpack_node_map_cstr(params, "proxy"); + + mpack_node_t tcp_handshake = mpack_node_map_cstr(proxy_map, "tcp_handshake"); + EXPECT_EQ(1, mpack_node_u32(mpack_node_array_at(tcp_handshake, 0))); + EXPECT_EQ(0, mpack_node_u32(mpack_node_array_at(tcp_handshake, 4))); + EXPECT_EQ(0, mpack_node_u32(mpack_node_array_at(tcp_handshake, 5))); + + EXPECT_EQ(mpack_tree_destroy(&tree), mpack_ok); + gtest_cmsg_destroy(&cmsg); +} + + +TEST(POLICY_UPDATE, ProxyFqdnCatIds0) +{ + char ctrl_pkt_buf[1024] = {0}; + int ctrl_pkt_len = 0; + struct streaminfo a_stream = {0}; + struct update_policy test; + memset(&test, 0, sizeof(test)); + struct proxy_cmsg cmsg; + test.type = POLICY_UPDATE_INTERCEPT; + test.n_ids = 6; + for (int i = 0; i < test.n_ids; i++) + { + test.ids[i] = 10000 + i; + } + + gtest_cmsg_init(&cmsg); + cmsg.fqdn_cat_ids.num = 0; + memcpy(&test.cmsg, &cmsg, sizeof(struct proxy_cmsg)); + tsg_sync_policy_update(&a_stream, &test, 1); + + ctrl_pkt_len = get_ctrl_pkt(ctrl_pkt_buf, sizeof(ctrl_pkt_buf)); + mpack_tree_t tree; + mpack_tree_init_data(&tree, ctrl_pkt_buf, ctrl_pkt_len); + mpack_tree_parse(&tree); + mpack_node_t root = mpack_tree_root(&tree); + mpack_node_t params = mpack_node_map_cstr(root, "params"); + + // proxy + EXPECT_EQ(mpack_type_map, mpack_node_type(mpack_node_map_cstr(params, "proxy"))); + mpack_node_t proxy_map = mpack_node_map_cstr(params, "proxy"); + + mpack_node_t tcp_handshake = mpack_node_map_cstr(proxy_map, "tcp_handshake"); + mpack_node_t fqdn_cat_id_vals = mpack_node_array_at(tcp_handshake, 31); + EXPECT_EQ(0, mpack_node_array_length(fqdn_cat_id_vals)); + + EXPECT_EQ(mpack_tree_destroy(&tree), mpack_ok); + gtest_cmsg_destroy(&cmsg); +} + + +TEST(POLICY_UPDATE, ProxyTcpAckRouteCtxs0) +{ + char ctrl_pkt_buf[1024] = {0}; + int ctrl_pkt_len = 0; + struct streaminfo a_stream = {0}; + struct update_policy test; + memset(&test, 0, sizeof(test)); + struct proxy_cmsg cmsg; + test.type = POLICY_UPDATE_INTERCEPT; + test.n_ids = 6; + for (int i = 0; i < test.n_ids; i++) + { + test.ids[i] = 10000 + i; + } + + gtest_cmsg_init(&cmsg); + cmsg.tcp_ack_route_ctx.num = 0; + memcpy(&test.cmsg, &cmsg, sizeof(struct proxy_cmsg)); + tsg_sync_policy_update(&a_stream, &test, 1); + + ctrl_pkt_len = get_ctrl_pkt(ctrl_pkt_buf, sizeof(ctrl_pkt_buf)); + mpack_tree_t tree; + mpack_tree_init_data(&tree, ctrl_pkt_buf, ctrl_pkt_len); + mpack_tree_parse(&tree); + mpack_node_t root = mpack_tree_root(&tree); + mpack_node_t params = mpack_node_map_cstr(root, "params"); + + // proxy + EXPECT_EQ(mpack_type_map, mpack_node_type(mpack_node_map_cstr(params, "proxy"))); + mpack_node_t proxy_map = mpack_node_map_cstr(params, "proxy"); + + mpack_node_t tcp_handshake = mpack_node_map_cstr(proxy_map, "tcp_handshake"); + mpack_node_t tcp_ack_route_ctxs = mpack_node_array_at(tcp_handshake, 35); + EXPECT_EQ(0, mpack_node_array_length(tcp_ack_route_ctxs)); + + EXPECT_EQ(mpack_tree_destroy(&tree), mpack_ok); + gtest_cmsg_destroy(&cmsg); +} + + +TEST(POLICY_UPDATE, ProxyTcpSeqSids0) +{ + char ctrl_pkt_buf[1024] = {0}; + int ctrl_pkt_len = 0; + struct streaminfo a_stream = {0}; + struct update_policy test; + memset(&test, 0, sizeof(test)); + struct proxy_cmsg cmsg; + test.type = POLICY_UPDATE_INTERCEPT; + test.n_ids = 6; + for (int i = 0; i < test.n_ids; i++) + { + test.ids[i] = 10000 + i; + } + + gtest_cmsg_init(&cmsg); + cmsg.tcp_seq_sids.num = 0; + memcpy(&test.cmsg, &cmsg, sizeof(struct proxy_cmsg)); + tsg_sync_policy_update(&a_stream, &test, 1); + + ctrl_pkt_len = get_ctrl_pkt(ctrl_pkt_buf, sizeof(ctrl_pkt_buf)); + mpack_tree_t tree; + mpack_tree_init_data(&tree, ctrl_pkt_buf, ctrl_pkt_len); + mpack_tree_parse(&tree); + mpack_node_t root = mpack_tree_root(&tree); + mpack_node_t params = mpack_node_map_cstr(root, "params"); + + // proxy + EXPECT_EQ(mpack_type_map, mpack_node_type(mpack_node_map_cstr(params, "proxy"))); + mpack_node_t proxy_map = mpack_node_map_cstr(params, "proxy"); + + mpack_node_t tcp_handshake = mpack_node_map_cstr(proxy_map, "tcp_handshake"); + mpack_node_t tcp_seq_sids = mpack_node_array_at(tcp_handshake, 32); + EXPECT_EQ(0, mpack_node_array_length(tcp_seq_sids)); + + EXPECT_EQ(mpack_tree_destroy(&tree), mpack_ok); + gtest_cmsg_destroy(&cmsg); +} + TEST(POLICY_UPDATE, ProxyOverLimit) { char ctrl_pkt_buf[1024] = {0};