test: update imitate_tcp_packet test case

This commit is contained in:
luwenpeng
2024-07-04 17:37:54 +08:00
parent 5a540d542d
commit b435ec2ea1

View File

@@ -1,10 +1,14 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include "tcp_utils.h"
#include "ipv4_utils.h"
#include "ipv6_utils.h"
#include "packet_def.h" #include "packet_def.h"
#include "packet_dump.h"
#include "packet_layer.h"
#include "packet_parse.h" #include "packet_parse.h"
#include "packet_build.h" #include "packet_build.h"
#include "packet_dump.h"
#define PRINT_GREEN(fmt, ...) printf("\033[0;32m" fmt "\033[0m\n", ##__VA_ARGS__) #define PRINT_GREEN(fmt, ...) printf("\033[0;32m" fmt "\033[0m\n", ##__VA_ARGS__)
#define PRINT_RED(fmt, ...) printf("\033[0;31m" fmt "\033[0m\n", ##__VA_ARGS__) #define PRINT_RED(fmt, ...) printf("\033[0;31m" fmt "\033[0m\n", ##__VA_ARGS__)
@@ -120,7 +124,7 @@ unsigned char data1[] = {
* -> with TCP payload * -> with TCP payload
*/ */
#if 1 #if 1
TEST(PACKET_BUILD, ETH_IP4_TCP) TEST(PACKET_BUILD_TCP, ETH_IP4_TCP)
{ {
struct packet orig_pkt; struct packet orig_pkt;
memset(&orig_pkt, 0, sizeof(orig_pkt)); memset(&orig_pkt, 0, sizeof(orig_pkt));
@@ -142,22 +146,42 @@ TEST(PACKET_BUILD, ETH_IP4_TCP)
const char *new_pkt_data = packet_get_raw_data(new_pkt); const char *new_pkt_data = packet_get_raw_data(new_pkt);
uint16_t new_pkt_len = packet_get_raw_len(new_pkt); uint16_t new_pkt_len = packet_get_raw_len(new_pkt);
EXPECT_TRUE(orig_pkt_len - 6 == // trim Eth padding: 000000000000 EXPECT_TRUE(orig_pkt_len - 6 == // trim Eth padding: 000000000000
new_pkt_len - 12 - 5 // trim TCP options, TCP payload new_pkt_len - 12 - 5); // trim TCP options, TCP payload
); struct layer layer;
PACKET_FOREACH_LAYER_INORDER(new_pkt, layer)
{
if (layer.proto == LAYER_PROTO_IPV4)
{
const struct ip *ip = (struct ip *)layer.hdr.raw;
EXPECT_TRUE(ipv4_hdr_get_total_len(ip) == 57);
break;
}
if (layer.proto == LAYER_PROTO_TCP)
{
const struct tcphdr *tcp = (struct tcphdr *)layer.hdr.raw;
EXPECT_TRUE(tcp_hdr_get_seq(tcp) == 1);
EXPECT_TRUE(tcp_hdr_get_ack(tcp) == 2);
EXPECT_TRUE(tcp_hdr_get_flags(tcp) == TH_ACK);
EXPECT_TRUE(tcp_hdr_get_hdr_len(tcp) == 32);
break;
}
}
for (uint16_t i = 0; i < new_pkt_len - 12 - 5; i++) for (uint16_t i = 0; i < new_pkt_len - 12 - 5; i++)
{ {
if ((16 <= i && i <= 17) || // skip IPv4 total length if ((16 <= i && i <= 17) || // skip IPv4 total length
(18 <= i && i <= 19) || // skip IPv4 identification (18 <= i && i <= 19) || // skip IPv4 identification
i == 22 || // skip IPv4 TTL i == 22 || // skip IPv4 TTL
(24 <= i && i <= 25) || // skip IPv4 checksum (24 <= i && i <= 25)) // skip IPv4 checksum
(38 <= i && i <= 41) || // skip TCP seq {
continue;
}
if ((38 <= i && i <= 41) || // skip TCP seq
(42 <= i && i <= 45) || // skip TCP ack (42 <= i && i <= 45) || // skip TCP ack
i == 46 || // skip TCP data offset i == 46 || // skip TCP data offset
i == 47 || // skip TCP flags i == 47 || // skip TCP flags
(48 <= i && i <= 49) || // skip TCP window (48 <= i && i <= 49) || // skip TCP window
(50 <= i && i <= 51) // skip TCP checksum (50 <= i && i <= 51)) // skip TCP checksum
)
{ {
continue; continue;
} }
@@ -236,7 +260,7 @@ unsigned char data2[] = {
* -> with TCP payload * -> with TCP payload
*/ */
#if 1 #if 1
TEST(PACKET_BUILD, ETH_IP4_IP6_TCP) TEST(PACKET_BUILD_TCP, ETH_IP4_IP6_TCP)
{ {
struct packet orig_pkt; struct packet orig_pkt;
memset(&orig_pkt, 0, sizeof(orig_pkt)); memset(&orig_pkt, 0, sizeof(orig_pkt));
@@ -259,23 +283,52 @@ TEST(PACKET_BUILD, ETH_IP4_IP6_TCP)
uint16_t new_pkt_len = packet_get_raw_len(new_pkt); uint16_t new_pkt_len = packet_get_raw_len(new_pkt);
EXPECT_TRUE(orig_pkt_len - 12 == // trim TCP options EXPECT_TRUE(orig_pkt_len - 12 == // trim TCP options
new_pkt_len - 5 // trim TCP payload new_pkt_len - 5); // trim TCP payload
); struct layer layer;
PACKET_FOREACH_LAYER_INORDER(new_pkt, layer)
{
if (layer.proto == LAYER_PROTO_IPV4)
{
const struct ip *ip = (struct ip *)layer.hdr.raw;
EXPECT_TRUE(ipv4_hdr_get_total_len(ip) == 85);
break;
}
if (layer.proto == LAYER_PROTO_IPV6)
{
const struct ip6_hdr *ip6 = (struct ip6_hdr *)layer.hdr.raw;
EXPECT_TRUE(ipv6_hdr_get_payload_len(ip6) == 25);
break;
}
if (layer.proto == LAYER_PROTO_TCP)
{
const struct tcphdr *tcp = (struct tcphdr *)layer.hdr.raw;
EXPECT_TRUE(tcp_hdr_get_seq(tcp) == 1234);
EXPECT_TRUE(tcp_hdr_get_ack(tcp) == 2345);
EXPECT_TRUE(tcp_hdr_get_flags(tcp) == TH_ACK);
EXPECT_TRUE(tcp_hdr_get_hdr_len(tcp) == 20);
break;
}
}
for (uint16_t i = 0; i < new_pkt_len - 5; i++) for (uint16_t i = 0; i < new_pkt_len - 5; i++)
{ {
if ((16 <= i && i <= 17) || // skip IPv4 total length if ((16 <= i && i <= 17) || // skip IPv4 total length
(18 <= i && i <= 19) || // skip IPv4 identification (18 <= i && i <= 19) || // skip IPv4 identification
i == 22 || // skip IPv4 TTL i == 22 || // skip IPv4 TTL
(24 <= i && i <= 25) || // skip IPv4 checksum (24 <= i && i <= 25)) // skip IPv4 checksum
(38 <= i && i <= 39) || // skip IPv6 payload length {
i == 41 || // skip IPv6 hop limit continue;
(78 <= i && i <= 81) || // skip TCP seq }
if ((38 <= i && i <= 39) || // skip IPv6 payload length
i == 41) // skip IPv6 hop limit
{
continue;
}
if ((78 <= i && i <= 81) || // skip TCP seq
(82 <= i && i <= 85) || // skip TCP ack (82 <= i && i <= 85) || // skip TCP ack
i == 86 || // skip TCP data offset i == 86 || // skip TCP data offset
i == 87 || // skip TCP flags i == 87 || // skip TCP flags
(88 <= i && i <= 89) || // skip TCP window (88 <= i && i <= 89) || // skip TCP window
(90 <= i && i <= 91) // skip TCP checksum (90 <= i && i <= 91)) // skip TCP checksum
)
{ {
continue; continue;
} }