#include #include #include "icmp.h" #include "internal/icmp_internal.h" #include "test_helpers.h" /* Test 1: Send echo request successfully */ Test(send_echo, simple_echo) { 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 in_addr dest; dest.s_addr = inet_addr("127.0.0.1"); int ret = icmp_send_echo(h, dest, 0x1234, 1, 64, NULL, 0); cr_assert_eq(ret, 0, "Expected success (0)"); cr_assert_str_eq(icmp_strerror(h), "No error"); icmp_destroy(h); } /* Test 2: NULL handle returns -1 */ Test(send_echo, null_handle) { struct in_addr dest; dest.s_addr = inet_addr("127.0.0.1"); int ret = icmp_send_echo(NULL, dest, 1, 1, 64, NULL, 0); cr_assert_eq(ret, -1, "Expected -1 for NULL handle"); } /* Test 3: Invalid FD returns -1 */ Test(send_echo, invalid_fd) { struct icmp_handle h = {0}; h.fd = -1; struct in_addr dest; dest.s_addr = inet_addr("127.0.0.1"); int ret = icmp_send_echo((icmp_handle_t *)&h, dest, 1, 1, 64, NULL, 0); cr_assert_eq(ret, -1, "Expected -1 for invalid fd"); } /* Test 4: Different TTL values */ Test(send_echo, different_ttl) { 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 in_addr dest; dest.s_addr = inet_addr("127.0.0.1"); int ret1 = icmp_send_echo(h, dest, 1, 1, 1, NULL, 0); cr_assert_eq(ret1, 0, "Expected success with TTL=1"); int ret2 = icmp_send_echo(h, dest, 1, 2, 255, NULL, 0); cr_assert_eq(ret2, 0, "Expected success with TTL=255"); icmp_destroy(h); } /* Test 5: Different id and seq values */ Test(send_echo, different_id_seq) { 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 in_addr dest; dest.s_addr = inet_addr("127.0.0.1"); int ret1 = icmp_send_echo(h, dest, 0xABCD, 42, 64, NULL, 0); cr_assert_eq(ret1, 0, "Expected success with id=0xABCD, seq=42"); int ret2 = icmp_send_echo(h, dest, 0, 0, 64, NULL, 0); cr_assert_eq(ret2, 0, "Expected success with id=0, seq=0"); icmp_destroy(h); }