#include #include "icmp.h" #include "test_helpers.h" #include #include #include static void dummy_callback(const icmp_reply_t *reply, void *userdata) { (void)reply; (void)userdata; } static void counter_callback(const icmp_reply_t *reply, void *userdata) { int *count; (void)reply; count = (int *)userdata; (*count)++; } Test(process, null_handle) { int ret; ret = icmp_process(NULL, dummy_callback, NULL, 0); cr_assert_eq(ret, -1); } Test(process, null_callback) { icmp_handle_t *h; int ret; if (0 == has_net_raw_capability()) cr_skip("Test requires CAP_NET_RAW or root privileges"); h = icmp_create(); cr_assert_not_null(h); ret = icmp_process(h, NULL, NULL, 0); cr_assert_eq(ret, -1); cr_assert_str_eq(icmp_strerror(h), "Callback cannot be NULL"); icmp_destroy(h); } Test(process, no_packets_available) { icmp_handle_t *h; int ret; if (0 == has_net_raw_capability()) cr_skip("Test requires CAP_NET_RAW or root privileges"); h = icmp_create(); cr_assert_not_null(h); ret = icmp_process(h, dummy_callback, NULL, 0); cr_assert_eq(ret, 0); icmp_destroy(h); } Test(process, echo_loopback, .disabled = true) { icmp_handle_t *h; struct in_addr dest; int ret; int count; if (0 == has_net_raw_capability()) cr_skip("Test requires CAP_NET_RAW or root privileges"); h = icmp_create(); cr_assert_not_null(h); inet_pton(AF_INET, "127.0.0.1", &dest); ret = icmp_send_echo(h, dest, 1234, 1, 64); cr_assert_eq(ret, 0); sleep(1); count = 0; ret = icmp_process(h, counter_callback, &count, 0); cr_assert_geq(ret, 0); cr_assert_geq(count, 1, "Should receive at least one packet"); icmp_destroy(h); }