test: update imitate_tcp_packet test case
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user