51 lines
1.3 KiB
C
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");
|
|
}
|