libicmp/tests/recv/test_build_reply.c
2026-01-26 20:14:24 +01:00

51 lines
1.3 KiB
C

#include <criterion/criterion.h>
#include "icmp.h"
#include "internal/icmp_recv.h"
#include <arpa/inet.h>
#include <string.h>
Test(build_reply, basic_reply)
{
icmp_reply_t reply;
uint8_t buffer[64];
struct in_addr src;
const char *payload_data = "test";
memset(buffer, 0, sizeof(buffer));
inet_pton(AF_INET, "192.168.1.1", &src);
recv_build_reply(&reply, 0, 0, 64, src, payload_data, 4, buffer, 20);
cr_assert_eq(reply.type, 0);
cr_assert_eq(reply.code, 0);
cr_assert_eq(reply.ttl, 64);
cr_assert_eq(reply.from.s_addr, src.s_addr);
cr_assert_eq(reply.payload, payload_data);
cr_assert_eq(reply.payload_len, 4);
cr_assert_not_null(reply.ip_payload);
}
Test(build_reply, different_types)
{
icmp_reply_t reply;
uint8_t buffer[64];
struct in_addr src;
inet_pton(AF_INET, "8.8.8.8", &src);
recv_build_reply(&reply, 3, 1, 128, src, NULL, 0, buffer, 20);
cr_assert_eq(reply.type, 3);
cr_assert_eq(reply.code, 1);
cr_assert_eq(reply.ttl, 128);
cr_assert_null(reply.payload);
cr_assert_eq(reply.payload_len, 0);
}
Test(build_reply, timestamp_set)
{
icmp_reply_t reply;
uint8_t buffer[64];
struct in_addr src;
inet_pton(AF_INET, "127.0.0.1", &src);
recv_build_reply(&reply, 0, 0, 64, src, NULL, 0, buffer, 20);
cr_assert(reply.timestamp.tv_sec > 0 || reply.timestamp.tv_nsec > 0,
"Timestamp should be set");
}