98 lines
2.2 KiB
C
98 lines
2.2 KiB
C
#include <criterion/criterion.h>
|
|
#include <arpa/inet.h>
|
|
#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);
|
|
}
|