250 lines
9.7 KiB
C++
250 lines
9.7 KiB
C++
/*********************************************************************
|
|
* _ _ _
|
|
* _ __ | |_ _ | | __ _ | |__ ___
|
|
* | '__|| __|(_)| | / _` || '_ \ / __|
|
|
* | | | |_ _ | || (_| || |_) |\__ \
|
|
* |_| \__|(_)|_| \__,_||_.__/ |___/
|
|
*
|
|
* www.rt-labs.com
|
|
* Copyright 2020 rt-labs AB, Sweden.
|
|
*
|
|
* This software is dual-licensed under GPLv3 and a commercial
|
|
* license. See the file LICENSE.md distributed with this software for
|
|
* full license information.
|
|
********************************************************************/
|
|
|
|
#include "utils_for_testing.h"
|
|
#include "mocks.h"
|
|
|
|
#include "pf_includes.h"
|
|
|
|
#include <gtest/gtest.h>
|
|
|
|
class PortTest : public PnetIntegrationTest
|
|
{
|
|
};
|
|
|
|
class PortUnitTest : public PnetUnitTest
|
|
{
|
|
protected:
|
|
pnet_t dummystack = {};
|
|
};
|
|
|
|
TEST_F (PortUnitTest, PortGetPortList)
|
|
{
|
|
pf_lldp_port_list_t port_list;
|
|
|
|
memset (&port_list, 0xff, sizeof (port_list));
|
|
|
|
dummystack.fspm_cfg.num_physical_ports = 1;
|
|
pf_port_get_list_of_ports (&dummystack, &port_list);
|
|
EXPECT_EQ (port_list.ports[0], 0x80);
|
|
EXPECT_EQ (port_list.ports[1], 0x00);
|
|
|
|
dummystack.fspm_cfg.num_physical_ports = 2;
|
|
pf_port_get_list_of_ports (&dummystack, &port_list);
|
|
EXPECT_EQ (port_list.ports[0], 0xC0);
|
|
EXPECT_EQ (port_list.ports[1], 0x00);
|
|
|
|
dummystack.fspm_cfg.num_physical_ports = 4;
|
|
pf_port_get_list_of_ports (&dummystack, &port_list);
|
|
EXPECT_EQ (port_list.ports[0], 0xF0);
|
|
EXPECT_EQ (port_list.ports[1], 0x00);
|
|
|
|
dummystack.fspm_cfg.num_physical_ports = 8;
|
|
pf_port_get_list_of_ports (&dummystack, &port_list);
|
|
EXPECT_EQ (port_list.ports[0], 0xFF);
|
|
EXPECT_EQ (port_list.ports[1], 0x00);
|
|
|
|
dummystack.fspm_cfg.num_physical_ports = 9;
|
|
pf_port_get_list_of_ports (&dummystack, &port_list);
|
|
EXPECT_EQ (port_list.ports[0], 0xFF);
|
|
EXPECT_EQ (port_list.ports[1], 0x80);
|
|
|
|
dummystack.fspm_cfg.num_physical_ports = 12;
|
|
pf_port_get_list_of_ports (&dummystack, &port_list);
|
|
EXPECT_EQ (port_list.ports[0], 0xFF);
|
|
EXPECT_EQ (port_list.ports[1], 0xF0);
|
|
|
|
dummystack.fspm_cfg.num_physical_ports = 16;
|
|
pf_port_get_list_of_ports (&dummystack, &port_list);
|
|
EXPECT_EQ (port_list.ports[0], 0xFF);
|
|
EXPECT_EQ (port_list.ports[1], 0xFF);
|
|
}
|
|
|
|
TEST_F (PortUnitTest, PortCheckIterator)
|
|
{
|
|
pf_port_iterator_t port_iterator;
|
|
|
|
dummystack.fspm_cfg.num_physical_ports = 6;
|
|
|
|
pf_port_init_iterator_over_ports (&dummystack, &port_iterator);
|
|
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 2);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 3);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 4);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 5);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 6);
|
|
|
|
/* Verify that we return 0 when we are done, and no auto restart */
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 0);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 0);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 0);
|
|
|
|
/* Verify behaviour if the iterator for unknown reason has
|
|
* value that is out of port range */
|
|
port_iterator.next_port = 10;
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 0);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 0);
|
|
|
|
/* Restart the iterator */
|
|
pf_port_init_iterator_over_ports (&dummystack, &port_iterator);
|
|
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 2);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 3);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 4);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 5);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 6);
|
|
|
|
/* Different number of ports */
|
|
dummystack.fspm_cfg.num_physical_ports = 1;
|
|
pf_port_init_iterator_over_ports (&dummystack, &port_iterator);
|
|
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 0);
|
|
EXPECT_EQ (pf_port_get_next (&port_iterator), 0);
|
|
}
|
|
|
|
TEST_F (PortUnitTest, PortCheckIteratorRepeatCyclic)
|
|
{
|
|
pf_port_iterator_t port_iterator;
|
|
|
|
dummystack.fspm_cfg.num_physical_ports = 6;
|
|
|
|
pf_port_init_iterator_over_ports (&dummystack, &port_iterator);
|
|
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 2);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 3);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 4);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 5);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 6);
|
|
|
|
/* Verify auto restart */
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 2);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 3);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 4);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 5);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 6);
|
|
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 2);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 3);
|
|
|
|
/* Verify behaviour if the iterator for unknown reason has
|
|
* value that is out of port range */
|
|
port_iterator.next_port = 10;
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 2);
|
|
|
|
/* Restart the iterator from first port */
|
|
pf_port_init_iterator_over_ports (&dummystack, &port_iterator);
|
|
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 2);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 3);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 4);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 5);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 6);
|
|
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 2);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 3);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 4);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 5);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 6);
|
|
|
|
/* Different number of ports */
|
|
dummystack.fspm_cfg.num_physical_ports = 1;
|
|
pf_port_init_iterator_over_ports (&dummystack, &port_iterator);
|
|
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 1);
|
|
EXPECT_EQ (pf_port_get_next_repeat_cyclic (&port_iterator), 1);
|
|
}
|
|
|
|
TEST_F (PortUnitTest, PortNumToSubslot)
|
|
{
|
|
dummystack.fspm_cfg.num_physical_ports = 16;
|
|
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 1), 0x8001);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 2), 0x8002);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 3), 0x8003);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 4), 0x8004);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 5), 0x8005);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 6), 0x8006);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 7), 0x8007);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 8), 0x8008);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 9), 0x8009);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 10), 0x800A);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 11), 0x800B);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 12), 0x800C);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 13), 0x800D);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 14), 0x800E);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 15), 0x800F);
|
|
EXPECT_EQ (pf_port_loc_port_num_to_dap_subslot (&dummystack, 16), 0x8010);
|
|
}
|
|
|
|
TEST_F (PortUnitTest, PortSubslotToLocalPort)
|
|
{
|
|
dummystack.fspm_cfg.num_physical_ports = 4;
|
|
|
|
EXPECT_EQ (pf_port_dap_subslot_to_local_port (&dummystack, 0x8001), 1);
|
|
EXPECT_EQ (pf_port_dap_subslot_to_local_port (&dummystack, 0x8002), 2);
|
|
EXPECT_EQ (pf_port_dap_subslot_to_local_port (&dummystack, 0x8003), 3);
|
|
EXPECT_EQ (pf_port_dap_subslot_to_local_port (&dummystack, 0x8004), 4);
|
|
|
|
/* Out of range */
|
|
EXPECT_EQ (pf_port_dap_subslot_to_local_port (&dummystack, 0x8000), 0);
|
|
EXPECT_EQ (pf_port_dap_subslot_to_local_port (&dummystack, 0x8005), 0);
|
|
}
|
|
|
|
TEST_F (PortUnitTest, PortIsSubslotDap)
|
|
{
|
|
dummystack.fspm_cfg.num_physical_ports = 4;
|
|
|
|
EXPECT_EQ (pf_port_subslot_is_dap_port_id (&dummystack, 0x8001), true);
|
|
EXPECT_EQ (pf_port_subslot_is_dap_port_id (&dummystack, 0x8002), true);
|
|
EXPECT_EQ (pf_port_subslot_is_dap_port_id (&dummystack, 0x8003), true);
|
|
EXPECT_EQ (pf_port_subslot_is_dap_port_id (&dummystack, 0x8004), true);
|
|
|
|
/* Out of range */
|
|
EXPECT_EQ (pf_port_subslot_is_dap_port_id (&dummystack, 0x8000), false);
|
|
EXPECT_EQ (pf_port_subslot_is_dap_port_id (&dummystack, 0x8005), false);
|
|
}
|
|
|
|
TEST_F (PortUnitTest, PortIsValid)
|
|
{
|
|
dummystack.fspm_cfg.num_physical_ports = 4;
|
|
|
|
EXPECT_EQ (pf_port_is_valid (&dummystack, 1), true);
|
|
EXPECT_EQ (pf_port_is_valid (&dummystack, 2), true);
|
|
EXPECT_EQ (pf_port_is_valid (&dummystack, 3), true);
|
|
EXPECT_EQ (pf_port_is_valid (&dummystack, 4), true);
|
|
|
|
/* Out of range */
|
|
EXPECT_EQ (pf_port_is_valid (&dummystack, 0), false);
|
|
EXPECT_EQ (pf_port_is_valid (&dummystack, 5), false);
|
|
}
|
|
|
|
TEST_F (PortUnitTest, PortGetNumberOfPorts)
|
|
{
|
|
dummystack.fspm_cfg.num_physical_ports = 4;
|
|
|
|
EXPECT_EQ (pf_port_get_number_of_ports (&dummystack), 4);
|
|
}
|