blob: 2c0f60ccc353842d5d4ee9e7aae91e06fa1d886f [file] [log] [blame]
/* main.c - Application main entry point */
/*
* Copyright (c) 2016 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <errno.h>
#include <zephyr/types.h>
#include <stddef.h>
#include <string.h>
#include <misc/printk.h>
#include <linker/sections.h>
#include <tc_util.h>
#include <net/buf.h>
#include "icmpv6.h"
#include <ztest.h>
static int handler_called;
static int handler_status;
#define TEST_MSG "foobar devnull"
NET_PKT_TX_SLAB_DEFINE(pkts_slab, 2);
NET_BUF_POOL_DEFINE(data_pool, 2, 128, 0, NULL);
static enum net_verdict handle_test_msg(struct net_pkt *pkt)
{
struct net_buf *last = net_buf_frag_last(pkt->frags);
if (last->len != (strlen(TEST_MSG) + 1)) {
handler_status = -EINVAL;
} else {
handler_status = 0;
}
handler_called++;
return 0;
}
static struct net_icmpv6_handler test_handler1 = {
.type = NET_ICMPV6_ECHO_REPLY,
.code = 0,
.handler = handle_test_msg,
};
static struct net_icmpv6_handler test_handler2 = {
.type = NET_ICMPV6_ECHO_REQUEST,
.code = 0,
.handler = handle_test_msg,
};
void run_tests(void)
{
k_thread_priority_set(k_current_get(), K_PRIO_COOP(7));
struct net_pkt *pkt;
struct net_buf *frag;
int ret;
net_icmpv6_register_handler(&test_handler1);
net_icmpv6_register_handler(&test_handler2);
pkt = net_pkt_get_reserve(&pkts_slab, 0, K_FOREVER);
frag = net_buf_alloc(&data_pool, K_FOREVER);
net_pkt_frag_add(pkt, frag);
memcpy(net_buf_add(frag, sizeof(TEST_MSG)),
TEST_MSG, sizeof(TEST_MSG));
ret = net_icmpv6_input(pkt, 0, 0);
/**TESTPOINT: Check input*/
zassert_true(ret, "Callback not called properly");
handler_status = -1;
ret = net_icmpv6_input(pkt, NET_ICMPV6_ECHO_REPLY, 0);
/**TESTPOINT: Check input*/
zassert_true(!(ret < 0 || handler_status != 0),
"Callback not called properly");
ret = net_icmpv6_input(pkt, 1, 0);
/**TESTPOINT: Check input*/
zassert_true(ret, "Callback not called properly");
handler_status = -1;
ret = net_icmpv6_input(pkt, NET_ICMPV6_ECHO_REQUEST, 0);
/**TESTPOINT: Check input*/
zassert_true(!(ret < 0 || handler_status != 0),
"Callback not called properly");
/**TESTPOINT: Check input*/
zassert_true(!(handler_called != 2), "Callbacks not called properly");
}
/**test case main entry*/
void test_main(void)
{
ztest_test_suite(test_icmpv6_fn,
ztest_unit_test(run_tests));
ztest_run_test_suite(test_icmpv6_fn);
}