gtest_inject_tcp_rst creates a working directory under the current path

This commit is contained in:
luwenpeng
2024-05-17 19:50:51 +08:00
parent 31a4267e23
commit 5678cf645e
4 changed files with 46 additions and 22 deletions

View File

@@ -19,6 +19,7 @@
struct dumpfile_io struct dumpfile_io
{ {
uint16_t nr_threads; uint16_t nr_threads;
char work_dir[256];
char directory[256]; char directory[256];
pcap_t *pcap; pcap_t *pcap;
@@ -68,7 +69,7 @@ struct pcap_file_hdr DEFAULT_PCAP_FILE_HDR =
* Private API * Private API
******************************************************************************/ ******************************************************************************/
static void save_packet(struct packet *pkt, uint64_t idx) static void save_packet(const char *work_dir, struct packet *pkt, uint64_t idx)
{ {
int len = 0; int len = 0;
FILE *fp = NULL; FILE *fp = NULL;
@@ -94,7 +95,7 @@ static void save_packet(struct packet *pkt, uint64_t idx)
inet_ntop(AF_INET6, &tuple.src_addr.v6, src_addr, INET6_ADDRSTRLEN); inet_ntop(AF_INET6, &tuple.src_addr.v6, src_addr, INET6_ADDRSTRLEN);
inet_ntop(AF_INET6, &tuple.dst_addr.v6, dst_addr, INET6_ADDRSTRLEN); inet_ntop(AF_INET6, &tuple.dst_addr.v6, dst_addr, INET6_ADDRSTRLEN);
} }
snprintf(file, sizeof(file), "/tmp/inject-%s:%u-%s:%u-%lu.pcap", src_addr, ntohs(tuple.src_port), dst_addr, ntohs(tuple.dst_port), idx); snprintf(file, sizeof(file), "%s/inject-%s:%u-%s:%u-%lu.pcap", work_dir, src_addr, ntohs(tuple.src_port), dst_addr, ntohs(tuple.dst_port), idx);
fp = fopen(file, "w+"); fp = fopen(file, "w+");
if (fp) if (fp)
@@ -297,6 +298,11 @@ struct dumpfile_io *dumpfile_io_new(const char *directory, uint16_t nr_threads)
PACKET_IO_LOG_ERROR("unable to allocate memory for dumpfile_io"); PACKET_IO_LOG_ERROR("unable to allocate memory for dumpfile_io");
return NULL; return NULL;
} }
if (getcwd(handle->work_dir, sizeof(handle->work_dir)) == NULL)
{
PACKET_IO_LOG_ERROR("unable to get current work directory");
goto error_out;
}
handle->nr_threads = nr_threads; handle->nr_threads = nr_threads;
strncpy(handle->directory, directory, MIN(strlen(directory), sizeof(handle->directory))); strncpy(handle->directory, directory, MIN(strlen(directory), sizeof(handle->directory)));
@@ -468,7 +474,7 @@ int dumpfile_io_inject(struct dumpfile_io *handle, uint16_t thr_idx, struct pack
stat->dev_tx_pkts++; stat->dev_tx_pkts++;
stat->dev_tx_bytes += len; stat->dev_tx_bytes += len;
save_packet(pkt, stat->inject_pkts); save_packet(handle->work_dir, pkt, stat->inject_pkts);
packet_free(pkt); packet_free(pkt);
} }

View File

@@ -2,18 +2,24 @@
#include "packet_injector_test_frame.h" #include "packet_injector_test_frame.h"
static char current_dir[1024] = {0};
#if 1 #if 1
TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_SYN_ACK) TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_SYN_ACK)
{ {
char work_dir[2048] = {0};
char input_dir[2048] = {0};
snprintf(work_dir, sizeof(work_dir), "%s/%s", current_dir, "inject_ipv4_based_tcp_rst_after_recv_syn_ack");
snprintf(input_dir, sizeof(input_dir), "%s/%s", current_dir, "pcap/inject_ipv4_based_tcp_rst_after_recv_syn_ack/test/");
struct packet_injector_case test = { struct packet_injector_case test = {
// descriptor // descriptor
.finish_clean_work_dir = 1, .finish_clean_work_dir = 0,
.descriptor = "Inject IPv4 based TCP RST after receiving SYN-ACK packet.", .descriptor = "Inject IPv4 based TCP RST after receiving SYN-ACK packet.",
.work_dir = "/tmp/inject_ipv4_based_tcp_rst_after_recv_syn_ack/", // user defined work directory .work_dir = work_dir,
// prefix // prefix
.input_prefix = "pcap/inject_ipv4_based_tcp_rst_after_recv_syn_ack/test/", .input_prefix = input_dir,
.output_prefix = "/tmp/",
// input pcap // input pcap
.input_pcap = "input.pcap", .input_pcap = "input.pcap",
@@ -37,15 +43,19 @@ TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_SYN_ACK)
#if 1 #if 1
TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_SUB_ACK) TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_SUB_ACK)
{ {
char work_dir[2048] = {0};
char input_dir[2048] = {0};
snprintf(work_dir, sizeof(work_dir), "%s/%s", current_dir, "inject_ipv4_based_tcp_rst_after_recv_sub_ack");
snprintf(input_dir, sizeof(input_dir), "%s/%s", current_dir, "pcap/inject_ipv4_based_tcp_rst_after_recv_sub_ack/test/");
struct packet_injector_case test = { struct packet_injector_case test = {
// descriptor // descriptor
.finish_clean_work_dir = 1, .finish_clean_work_dir = 0,
.descriptor = "Inject IPv4 based TCP RST after receiving SUB-ACK packet.", .descriptor = "Inject IPv4 based TCP RST after receiving SUB-ACK packet.",
.work_dir = "/tmp/inject_ipv4_based_tcp_rst_after_recv_sub_ack/", // user defined work directory .work_dir = work_dir,
// prefix // prefix
.input_prefix = "pcap/inject_ipv4_based_tcp_rst_after_recv_sub_ack/test/", .input_prefix = input_dir,
.output_prefix = "/tmp/",
// input pcap // input pcap
.input_pcap = "input.pcap", .input_pcap = "input.pcap",
@@ -69,15 +79,19 @@ TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_SUB_ACK)
#if 1 #if 1
TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_C2S_FIRST_PAYLOAD) TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_C2S_FIRST_PAYLOAD)
{ {
char work_dir[2048] = {0};
char input_dir[2048] = {0};
snprintf(work_dir, sizeof(work_dir), "%s/%s", current_dir, "inject_ipv4_based_tcp_rst_after_recv_c2s_first_payload");
snprintf(input_dir, sizeof(input_dir), "%s/%s", current_dir, "pcap/inject_ipv4_based_tcp_rst_after_recv_c2s_first_payload/test/");
struct packet_injector_case test = { struct packet_injector_case test = {
// descriptor // descriptor
.finish_clean_work_dir = 1, .finish_clean_work_dir = 0,
.descriptor = "Inject IPv4 based TCP RST after receiving C2S first payload packet.", .descriptor = "Inject IPv4 based TCP RST after receiving C2S first payload packet.",
.work_dir = "/tmp/inject_ipv4_based_tcp_rst_after_recv_c2s_first_payload/", // user defined work directory .work_dir = work_dir,
// prefix // prefix
.input_prefix = "pcap/inject_ipv4_based_tcp_rst_after_recv_c2s_first_payload/test/", .input_prefix = input_dir,
.output_prefix = "/tmp/",
// input pcap // input pcap
.input_pcap = "input.pcap", .input_pcap = "input.pcap",
@@ -101,15 +115,19 @@ TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_C2S_FIRST_PAYLOAD)
#if 1 #if 1
TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_S2C_FIRST_PAYLOAD) TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_S2C_FIRST_PAYLOAD)
{ {
char work_dir[2048] = {0};
char input_dir[2048] = {0};
snprintf(work_dir, sizeof(work_dir), "%s/%s", current_dir, "inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload");
snprintf(input_dir, sizeof(input_dir), "%s/%s", current_dir, "pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/test/");
struct packet_injector_case test = { struct packet_injector_case test = {
// descriptor // descriptor
.finish_clean_work_dir = 1, .finish_clean_work_dir = 0,
.descriptor = "Inject IPv4 based TCP RST after receiving S2C first payload packet.", .descriptor = "Inject IPv4 based TCP RST after receiving S2C first payload packet.",
.work_dir = "/tmp/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/", // user defined work directory .work_dir = work_dir,
// prefix // prefix
.input_prefix = "pcap/inject_ipv4_based_tcp_rst_after_recv_s2c_first_payload/test/", .input_prefix = input_dir,
.output_prefix = "/tmp/",
// input pcap // input pcap
.input_pcap = "input.pcap", .input_pcap = "input.pcap",
@@ -132,6 +150,7 @@ TEST(INJECT_IPV4_BASED_TCP_RST, AFTER_RECV_S2C_FIRST_PAYLOAD)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
getcwd(current_dir, sizeof(current_dir));
::testing::InitGoogleTest(&argc, argv); ::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS(); return RUN_ALL_TESTS();
} }

View File

@@ -181,7 +181,7 @@ void packet_injector_test_frame_run(struct packet_injector_case *test)
// compare pcap // compare pcap
if (test->c2s_output_pcap && test->c2s_expect_pcap) if (test->c2s_output_pcap && test->c2s_expect_pcap)
{ {
system_cmd("mv %s/%s %s", test->output_prefix, test->c2s_output_pcap, output_dir_abs_path); system_cmd("mv %s/%s %s", test->work_dir, test->c2s_output_pcap, output_dir_abs_path);
expect_cmp_inject(test->work_dir, expect_cmp_inject(test->work_dir,
expect_dir_abs_path, test->c2s_expect_pcap, expect_dir_abs_path, test->c2s_expect_pcap,
output_dir_abs_path, test->c2s_output_pcap, output_dir_abs_path, test->c2s_output_pcap,
@@ -189,7 +189,7 @@ void packet_injector_test_frame_run(struct packet_injector_case *test)
} }
if (test->s2c_output_pcap && test->s2c_expect_pcap) if (test->s2c_output_pcap && test->s2c_expect_pcap)
{ {
system_cmd("mv %s/%s %s", test->output_prefix, test->s2c_output_pcap, output_dir_abs_path); system_cmd("mv %s/%s %s", test->work_dir, test->s2c_output_pcap, output_dir_abs_path);
expect_cmp_inject(test->work_dir, expect_cmp_inject(test->work_dir,
expect_dir_abs_path, test->s2c_expect_pcap, expect_dir_abs_path, test->s2c_expect_pcap,
output_dir_abs_path, test->s2c_output_pcap, output_dir_abs_path, test->s2c_output_pcap,

View File

@@ -15,7 +15,6 @@ struct packet_injector_case
// prefix // prefix
const char *input_prefix; const char *input_prefix;
const char *output_prefix;
// input pcap // input pcap
const char *input_pcap; const char *input_pcap;