Skip to content

Commit

Permalink
new(test): add sendto and sendmg udp connection tests
Browse files Browse the repository at this point in the history
Signed-off-by: Gianmatteo Palmieri <mail@gian.im>
  • Loading branch information
mrgian authored and poiana committed Feb 14, 2024
1 parent fee3c50 commit f7437f1
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 0 deletions.
74 changes: 74 additions & 0 deletions test/drivers/test_suites/syscall_enter_suite/sendmsg_e.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,78 @@ TEST(SyscallEnter, sendmsgE)

evt_test->assert_num_params_pushed(3);
}

TEST(SyscallEnter, sendmsgE_udp)
{
auto evt_test = get_syscall_event_test(__NR_sendmsg, ENTER_EVENT);

evt_test->enable_capture();

/*=============================== TRIGGER SYSCALL ===========================*/

int32_t client_socket_fd = 0;
int32_t server_socket_fd = 0;
sockaddr_in client_addr = {0};
sockaddr_in server_addr = {0};
evt_test->connect_ipv4_udp_client_to_server(&client_socket_fd, &client_addr, &server_socket_fd, &server_addr);

/* Send a message to the server */
struct msghdr send_msg;
struct iovec iov[3];
memset(&send_msg, 0, sizeof(send_msg));
memset(iov, 0, sizeof(iov));
send_msg.msg_name = (sockaddr*)&server_addr;
send_msg.msg_namelen = sizeof(server_addr);
char sent_data_1[FIRST_MESSAGE_LEN] = "hey! there is a first message here.";
char sent_data_2[SECOND_MESSAGE_LEN] = "hey! there is a second message here.";
char sent_data_3[THIRD_MESSAGE_LEN] = "hey! there is a third message here.";
iov[0].iov_base = sent_data_1;
iov[0].iov_len = sizeof(sent_data_1);
iov[1].iov_base = sent_data_2;
iov[1].iov_len = sizeof(sent_data_2);
iov[2].iov_base = sent_data_3;
iov[2].iov_len = sizeof(sent_data_3);
send_msg.msg_iov = iov;
send_msg.msg_iovlen = 3;
uint32_t sendmsg_flags = 0;

assert_syscall_state(SYSCALL_SUCCESS, "sendmsg (client)", syscall(__NR_sendmsg, client_socket_fd, &send_msg, sendmsg_flags), NOT_EQUAL, -1);

/* Cleaning phase */
syscall(__NR_shutdown, server_socket_fd, 2);
syscall(__NR_shutdown, client_socket_fd, 2);
syscall(__NR_close, server_socket_fd);
syscall(__NR_close, client_socket_fd);

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->disable_capture();

evt_test->assert_event_presence();

if(HasFatalFailure())
{
return;
}

evt_test->parse_event();

evt_test->assert_header();

/*=============================== ASSERT PARAMETERS ===========================*/

/* Parameter 1: fd (type: PT_FD) */
evt_test->assert_numeric_param(1, (int64_t)client_socket_fd);

/* Parameter 2: size (type: PT_UINT32)*/
evt_test->assert_numeric_param(2, (uint32_t)FULL_MESSAGE_LEN);

/* Parameter 3: addr (type: PT_SOCKADDR)*/
/* The client performs a `sendmsg` to the server so the src_ipv4 is the client one. */
evt_test->assert_tuple_inet_param(3, PPM_AF_INET, IPV4_CLIENT, IPV4_SERVER, IPV4_PORT_CLIENT_STRING, IPV4_PORT_SERVER_STRING);

/*=============================== ASSERT PARAMETERS ===========================*/

evt_test->assert_num_params_pushed(3);
}
#endif
57 changes: 57 additions & 0 deletions test/drivers/test_suites/syscall_enter_suite/sendto_e.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,61 @@ TEST(SyscallEnter, sendtoE)

evt_test->assert_num_params_pushed(3);
}

TEST(SyscallEnter, sendtoE_udp)
{
auto evt_test = get_syscall_event_test(__NR_sendto, ENTER_EVENT);

evt_test->enable_capture();

/*=============================== TRIGGER SYSCALL ===========================*/

int32_t client_socket_fd = 0;
int32_t server_socket_fd = 0;
sockaddr_in client_addr = {0};
sockaddr_in server_addr = {0};
evt_test->connect_ipv4_udp_client_to_server(&client_socket_fd, &client_addr, &server_socket_fd, &server_addr);

/* Send a message to the server */
char sent_data[FULL_MESSAGE_LEN] = FULL_MESSAGE;
uint32_t sendto_flags = 0;
assert_syscall_state(SYSCALL_SUCCESS, "sendto (client)", syscall(__NR_sendto, client_socket_fd, sent_data, sizeof(sent_data), sendto_flags, (sockaddr*)&server_addr, sizeof(server_addr)), NOT_EQUAL, -1);

/* Cleaning phase */
syscall(__NR_shutdown, server_socket_fd, 2);
syscall(__NR_shutdown, client_socket_fd, 2);
syscall(__NR_close, server_socket_fd);
syscall(__NR_close, client_socket_fd);

/*=============================== TRIGGER SYSCALL ===========================*/

evt_test->disable_capture();

evt_test->assert_event_presence();

if(HasFatalFailure())
{
return;
}

evt_test->parse_event();

evt_test->assert_header();

/*=============================== ASSERT PARAMETERS ===========================*/

/* Parameter 1: fd (type: PT_FD) */
evt_test->assert_numeric_param(1, (int64_t)client_socket_fd);

/* Parameter 2: size (type: PT_UINT32)*/
evt_test->assert_numeric_param(2, (uint32_t)FULL_MESSAGE_LEN);

/* Parameter 3: addr (type: PT_SOCKADDR)*/
/* The client performs a `sendto` to the server so the src_ipv4 is the client one. */
evt_test->assert_tuple_inet_param(3, PPM_AF_INET, IPV4_CLIENT, IPV4_SERVER, IPV4_PORT_CLIENT_STRING, IPV4_PORT_SERVER_STRING);

/*=============================== ASSERT PARAMETERS ===========================*/

evt_test->assert_num_params_pushed(3);
}
#endif

0 comments on commit f7437f1

Please sign in to comment.