Files
my-os-project2/kernel/picotcp/test/unit/modunit_pico_ipv6_nd.c
2025-10-29 14:29:06 +01:00

290 lines
11 KiB
C

#include "pico_config.h"
#include "pico_tree.h"
#include "pico_ipv6_nd.h"
#include "pico_icmp6.h"
#include "pico_ipv6.h"
#include "pico_stack.h"
#include "pico_device.h"
#include "pico_eth.h"
#include "pico_addressing.h"
#include "modules/pico_ipv6_nd.c"
#include "check.h"
#ifdef PICO_SUPPORT_IPV6
#undef PICO_TIME
#undef PICO_TIME_MS
#define PICO_TIME_MS (0)
#define PICO_TIME (0)
Suite *pico_suite(void);
START_TEST(tc_pico_nd_new_expire_time)
{
struct pico_ipv6_neighbor n = {
0
};
struct pico_device d = { {0} };
/* TODO: how to test these time values */
n.dev = &d;
d.hostvars.retranstime = 666;
n.state = PICO_ND_STATE_INCOMPLETE;
pico_nd_new_expire_time(&n);
n.state = PICO_ND_STATE_REACHABLE;
pico_nd_new_expire_time(&n);
n.state = PICO_ND_STATE_STALE;
pico_nd_new_expire_time(&n);
n.state = PICO_ND_STATE_PROBE;
pico_nd_new_expire_time(&n);
}
END_TEST
START_TEST(tc_pico_nd_queue)
{
struct pico_ip6 addr = {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9 }};
int i;
struct pico_frame *f = pico_frame_alloc(sizeof(struct pico_ipv6_hdr));
struct pico_ipv6_hdr *h = (struct pico_ipv6_hdr *) f->buffer;
f->net_hdr = (uint8_t*) h;
f->buffer[0] = 0x60; /* Ipv6 */
memcpy(h->dst.addr, addr.addr, PICO_SIZE_IP6);
fail_if(!f);
for (i = 0; i < PICO_ND_MAX_FRAMES_QUEUED; i++) {
fail_if(frames_queued_v6[i] != NULL);
}
pico_ipv6_nd_unreachable(&addr);
for (i = 0; i < PICO_ND_MAX_FRAMES_QUEUED; i++) {
fail_if(frames_queued_v6[i] != NULL);
}
pico_ipv6_nd_postpone(f);
fail_if(frames_queued_v6[0]->buffer != f->buffer);
pico_ipv6_nd_unreachable(&addr);
for (i = 0; i < PICO_ND_MAX_FRAMES_QUEUED; i++) {
fail_if(frames_queued_v6[i] != NULL);
}
}
END_TEST
START_TEST(tc_pico_nd_discover)
{
/* TODO: test this: static void pico_nd_discover(struct pico_ipv6_neighbor *n) */
}
END_TEST
START_TEST(tc_neigh_options)
{
/* TODO: test this: static int neigh_options(struct pico_frame *f, struct pico_icmp6_opt_lladdr *opt, uint8_t expected_opt) */
}
END_TEST
START_TEST(tc_neigh_adv_complete)
{
/* TODO: test this: static int neigh_adv_complete(struct pico_ipv6_neighbor *n, struct pico_icmp6_opt_lladdr *opt) */
}
END_TEST
START_TEST(tc_neigh_adv_reconfirm_router_option)
{
/* TODO: test this: static void neigh_adv_reconfirm_router_option(struct pico_ipv6_neighbor *n, unsigned int isRouter) */
}
END_TEST
START_TEST(tc_neigh_adv_reconfirm)
{
/* TODO: test this: static int neigh_adv_reconfirm(struct pico_ipv6_neighbor *n, struct pico_icmp6_opt_lladdr *opt, struct pico_icmp6_hdr *hdr) */
}
END_TEST
START_TEST(tc_neigh_adv_check_solicited)
{
/* TODO: test this: static void neigh_adv_check_solicited(struct pico_icmp6_hdr *ic6, struct pico_ipv6_neighbor *n) */
}
END_TEST
START_TEST(tc_neigh_adv_process)
{
/* TODO: test this: static int neigh_adv_process(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_pico_ipv6_neighbor)
{
/* TODO: test this: static struct pico_ipv6_neighbor *neighbor_from_sol_new(struct pico_ip6 *ip, struct pico_icmp6_opt_lladdr *opt, struct pico_device *dev) */
}
END_TEST
START_TEST(tc_neighbor_from_sol)
{
/* TODO: test this: static void neighbor_from_sol(struct pico_ip6 *ip, struct pico_icmp6_opt_lladdr *opt, struct pico_device *dev) */
}
END_TEST
START_TEST(tc_neigh_sol_process)
{
/* TODO: test this: static int neigh_sol_process(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_icmp6_initial_checks)
{
/* TODO: test this: static int icmp6_initial_checks(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_neigh_adv_mcast_validity_checks)
{
/* TODO: test this: static int neigh_adv_mcast_validity_check(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_neigh_sol_mcast_validity_checks)
{
/* TODO: test this: static int neigh_sol_mcast_validity_check(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_neigh_adv_validity_checks)
{
/* TODO: test this: static int neigh_adv_validity_checks(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_neigh_sol_validity_checks)
{
/* TODO: test this: static int neigh_sol_validity_checks(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_neigh_adv_checks)
{
/* TODO: test this: static int neigh_adv_checks(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_pico_nd_router_sol_recv)
{
/* TODO: test this: static int pico_nd_router_sol_recv(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_pico_nd_router_adv_recv)
{
/* TODO: test this: static int pico_nd_router_adv_recv(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_pico_nd_neigh_sol_recv)
{
/* TODO: test this: static int pico_nd_neigh_sol_recv(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_pico_nd_neigh_adv_recv)
{
/* TODO: test this: static int pico_nd_neigh_adv_recv(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_pico_nd_redirect_recv)
{
/* TODO: test this: static int pico_nd_redirect_recv(struct pico_frame *f) */
}
END_TEST
START_TEST(tc_pico_ipv6_nd_timer_callback)
{
/* TODO: test this: static void pico_ipv6_nd_timer_callback(pico_time now, void *arg) */
}
END_TEST
Suite *pico_suite(void)
{
Suite *s = suite_create("PicoTCP");
TCase *TCase_pico_nd_new_expire_time = tcase_create("Unit test for pico_nd_new_expire_time");
TCase *TCase_pico_nd_discover = tcase_create("Unit test for pico_nd_discover");
TCase *TCase_neigh_options = tcase_create("Unit test for neigh_options");
TCase *TCase_neigh_adv_complete = tcase_create("Unit test for neigh_adv_complete");
TCase *TCase_neigh_adv_reconfirm_router_option = tcase_create("Unit test for neigh_adv_reconfirm_router_option");
TCase *TCase_neigh_adv_reconfirm = tcase_create("Unit test for neigh_adv_reconfirm");
TCase *TCase_neigh_adv_check_solicited = tcase_create("Unit test for neigh_adv_check_solicited");
TCase *TCase_neigh_adv_process = tcase_create("Unit test for neigh_adv_process");
TCase *TCase_pico_ipv6_neighbor = tcase_create("Unit test for pico_ipv6_neighbor");
TCase *TCase_neighbor_from_sol = tcase_create("Unit test for neighbor_from_sol");
TCase *TCase_neigh_sol_process = tcase_create("Unit test for neigh_sol_process");
TCase *TCase_icmp6_initial_checks = tcase_create("Unit test for icmp6_initial_checks");
TCase *TCase_neigh_sol_mcast_validity_checks = tcase_create("Unit test for neigh_sol_mcast_validity_checks");
TCase *TCase_neigh_sol_validity_checks = tcase_create("Unit test for neigh_sol_validity_checks");
TCase *TCase_neigh_adv_checks = tcase_create("Unit test for neigh_adv_checks");
TCase *TCase_neigh_adv_validity_checks = tcase_create("Unit test for neigh_adv_validity_checks");
TCase *TCase_neigh_adv_mcast_validity_checks = tcase_create("Unit test for neigh_adv_mcast_validity_checks");
TCase *TCase_pico_nd_router_sol_recv = tcase_create("Unit test for pico_nd_router_sol_recv");
TCase *TCase_pico_nd_router_adv_recv = tcase_create("Unit test for pico_nd_router_adv_recv");
TCase *TCase_pico_nd_neigh_sol_recv = tcase_create("Unit test for pico_nd_neigh_sol_recv");
TCase *TCase_pico_nd_neigh_adv_recv = tcase_create("Unit test for pico_nd_neigh_adv_recv");
TCase *TCase_pico_nd_redirect_recv = tcase_create("Unit test for pico_nd_redirect_recv");
TCase *TCase_pico_ipv6_nd_timer_callback = tcase_create("Unit test for pico_ipv6_nd_timer_callback");
TCase *TCase_pico_nd_queue = tcase_create("Unit test for pico_ipv6_nd: queue for pending frames");
tcase_add_test(TCase_pico_nd_new_expire_time, tc_pico_nd_new_expire_time);
suite_add_tcase(s, TCase_pico_nd_new_expire_time);
tcase_add_test(TCase_pico_nd_discover, tc_pico_nd_discover);
suite_add_tcase(s, TCase_pico_nd_discover);
tcase_add_test(TCase_neigh_options, tc_neigh_options);
suite_add_tcase(s, TCase_neigh_options);
tcase_add_test(TCase_neigh_adv_complete, tc_neigh_adv_complete);
suite_add_tcase(s, TCase_neigh_adv_complete);
tcase_add_test(TCase_neigh_adv_reconfirm_router_option, tc_neigh_adv_reconfirm_router_option);
suite_add_tcase(s, TCase_neigh_adv_reconfirm_router_option);
tcase_add_test(TCase_neigh_adv_reconfirm, tc_neigh_adv_reconfirm);
suite_add_tcase(s, TCase_neigh_adv_reconfirm);
tcase_add_test(TCase_neigh_adv_check_solicited, tc_neigh_adv_check_solicited);
suite_add_tcase(s, TCase_neigh_adv_check_solicited);
tcase_add_test(TCase_neigh_adv_process, tc_neigh_adv_process);
suite_add_tcase(s, TCase_neigh_adv_process);
tcase_add_test(TCase_pico_ipv6_neighbor, tc_pico_ipv6_neighbor);
suite_add_tcase(s, TCase_pico_ipv6_neighbor);
tcase_add_test(TCase_neighbor_from_sol, tc_neighbor_from_sol);
suite_add_tcase(s, TCase_neighbor_from_sol);
tcase_add_test(TCase_neigh_sol_process, tc_neigh_sol_process);
suite_add_tcase(s, TCase_neigh_sol_process);
tcase_add_test(TCase_icmp6_initial_checks, tc_icmp6_initial_checks);
suite_add_tcase(s, TCase_icmp6_initial_checks);
tcase_add_test(TCase_neigh_adv_mcast_validity_checks, tc_neigh_adv_mcast_validity_checks);
suite_add_tcase(s, TCase_neigh_adv_mcast_validity_checks);
tcase_add_test(TCase_neigh_sol_mcast_validity_checks, tc_neigh_sol_mcast_validity_checks);
suite_add_tcase(s, TCase_neigh_sol_mcast_validity_checks);
tcase_add_test(TCase_neigh_adv_validity_checks, tc_neigh_adv_validity_checks);
suite_add_tcase(s, TCase_neigh_adv_validity_checks);
tcase_add_test(TCase_neigh_sol_validity_checks, tc_neigh_sol_validity_checks);
suite_add_tcase(s, TCase_neigh_sol_validity_checks);
tcase_add_test(TCase_neigh_adv_checks, tc_neigh_adv_checks);
suite_add_tcase(s, TCase_neigh_adv_checks);
tcase_add_test(TCase_pico_nd_router_sol_recv, tc_pico_nd_router_sol_recv);
suite_add_tcase(s, TCase_pico_nd_router_sol_recv);
tcase_add_test(TCase_pico_nd_router_adv_recv, tc_pico_nd_router_adv_recv);
suite_add_tcase(s, TCase_pico_nd_router_adv_recv);
tcase_add_test(TCase_pico_nd_neigh_sol_recv, tc_pico_nd_neigh_sol_recv);
suite_add_tcase(s, TCase_pico_nd_neigh_sol_recv);
tcase_add_test(TCase_pico_nd_neigh_adv_recv, tc_pico_nd_neigh_adv_recv);
suite_add_tcase(s, TCase_pico_nd_neigh_adv_recv);
tcase_add_test(TCase_pico_nd_redirect_recv, tc_pico_nd_redirect_recv);
suite_add_tcase(s, TCase_pico_nd_redirect_recv);
tcase_add_test(TCase_pico_ipv6_nd_timer_callback, tc_pico_ipv6_nd_timer_callback);
suite_add_tcase(s, TCase_pico_ipv6_nd_timer_callback);
tcase_add_test(TCase_pico_nd_queue, tc_pico_nd_queue);
suite_add_tcase(s, TCase_pico_nd_queue);
return s;
}
int main(void)
{
int fails;
Suite *s = pico_suite();
SRunner *sr = srunner_create(s);
srunner_run_all(sr, CK_NORMAL);
fails = srunner_ntests_failed(sr);
srunner_free(sr);
return fails;
}
#else
int main(void)
{
return 0;
}
#endif