#include #include "icmp.h" #include "internal/icmp_internal.h" #include "internal/icmp_send.h" #include "test_helpers.h" /* Test 1: Set TTL successfully */ Test(send_set_socket_ttl, success) { if (0 == has_net_raw_capability()) { cr_skip("Test requires CAP_NET_RAW or root privileges"); } icmp_handle_t *h = icmp_create(); cr_assert_not_null(h); struct icmp_handle *handle = (struct icmp_handle *)h; int ret = send_set_socket_ttl(handle, 64); cr_assert_eq(ret, 0, "Expected success (0)"); icmp_destroy(h); } /* Test 2: Invalid FD returns -1 */ Test(send_set_socket_ttl, invalid_fd) { struct icmp_handle h = {0}; h.fd = -1; h.last_error = ICMP_OK; h.error_msg[0] = '\0'; int ret = send_set_socket_ttl(&h, 64); cr_assert_eq(ret, -1, "Expected -1 for invalid FD"); cr_assert_eq(h.last_error, ICMP_ERR_SOCKET, "Error code should be ICMP_ERR_SOCKET"); } /* Test 3: Different TTL values */ Test(send_set_socket_ttl, different_values) { if (0 == has_net_raw_capability()) { cr_skip("Test requires CAP_NET_RAW or root privileges"); } icmp_handle_t *h = icmp_create(); cr_assert_not_null(h); struct icmp_handle *handle = (struct icmp_handle *)h; /* TTL=1 */ int ret = send_set_socket_ttl(handle, 1); cr_assert_eq(ret, 0, "Expected success with TTL=1"); /* TTL=255 */ ret = send_set_socket_ttl(handle, 255); cr_assert_eq(ret, 0, "Expected success with TTL=255"); icmp_destroy(h); }