unittest/syncd/TestPortStateChangeHandler.cpp (42 lines of code) (raw):
#include "PortStateChangeHandler.h"
#include <gtest/gtest.h>
using namespace syncd;
constexpr size_t portStateChangeQueueSize = 4096;
class PortStateChangeHandlerTest : public ::testing::Test
{
protected:
PortStateChangeHandlerTest()
: m_portStateChangeHandler(std::make_shared<swss::SelectableEvent>())
{
SWSS_LOG_ENTER();
}
~PortStateChangeHandlerTest() override = default;
PortStateChangeHandler m_portStateChangeHandler;
};
TEST_F(PortStateChangeHandlerTest, VerifyGetQueue)
{
auto queue = m_portStateChangeHandler.getQueue();
EXPECT_EQ(queue->size(), 0);
}
TEST_F(PortStateChangeHandlerTest,
HandlePortStateChangeNotificationFailsOnEnqueuingData)
{
auto queue = m_portStateChangeHandler.getQueue();
EXPECT_EQ(queue->size(), 0);
// Insert enough data in the queue so it reaches its capacity.
sai_port_oper_status_notification_t operStatus[portStateChangeQueueSize];
m_portStateChangeHandler.handlePortStateChangeNotification(
portStateChangeQueueSize, &operStatus[0]);
EXPECT_EQ(queue->size(), portStateChangeQueueSize);
// Since queue is at its maximum capacity, adding a new element should cause
// insert failure and new element should not get added.
m_portStateChangeHandler.handlePortStateChangeNotification(/*count=*/1,
&operStatus[0]);
EXPECT_EQ(queue->size(), portStateChangeQueueSize);
}
TEST_F(PortStateChangeHandlerTest, HandlePortStateChangeNotificationSucceeds)
{
auto queue = m_portStateChangeHandler.getQueue();
EXPECT_EQ(queue->size(), 0);
sai_port_oper_status_notification_t operStatus;
m_portStateChangeHandler.handlePortStateChangeNotification(/*count=*/1,
&operStatus);
EXPECT_EQ(queue->size(), 1);
}