From 5eadb794ad963c71947ec5c51ca020e9b2b6a880 Mon Sep 17 00:00:00 2001 From: Stepan Blyshchak <38952541+stepanblyschak@users.noreply.github.com> Date: Fri, 19 Apr 2024 00:04:55 +0300 Subject: [PATCH] [202311][portsorch] Handle TRANSCEIVER_INFO table on warm boot (#3107) Signed-off-by: Stepan Blyschak --- orchagent/portsorch.cpp | 1 + tests/mock_tests/Makefile.am | 1 + .../mock_tests/mock_subscriberstatetable.cpp | 30 +++++++++++++++++++ tests/mock_tests/portsorch_ut.cpp | 21 +++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 tests/mock_tests/mock_subscriberstatetable.cpp diff --git a/orchagent/portsorch.cpp b/orchagent/portsorch.cpp index fb37a0978c..3d5306c3ac 100755 --- a/orchagent/portsorch.cpp +++ b/orchagent/portsorch.cpp @@ -3367,6 +3367,7 @@ bool PortsOrch::bake() addExistingData(APP_LAG_MEMBER_TABLE_NAME); addExistingData(APP_VLAN_TABLE_NAME); addExistingData(APP_VLAN_MEMBER_TABLE_NAME); + addExistingData(STATE_TRANSCEIVER_INFO_TABLE_NAME); return true; } diff --git a/tests/mock_tests/Makefile.am b/tests/mock_tests/Makefile.am index 1676ffb0ad..18e913f7e2 100644 --- a/tests/mock_tests/Makefile.am +++ b/tests/mock_tests/Makefile.am @@ -40,6 +40,7 @@ tests_SOURCES = aclorch_ut.cpp \ mock_orchagent_main.cpp \ mock_dbconnector.cpp \ mock_consumerstatetable.cpp \ + mock_subscriberstatetable.cpp \ common/mock_shell_command.cpp \ mock_table.cpp \ mock_hiredis.cpp \ diff --git a/tests/mock_tests/mock_subscriberstatetable.cpp b/tests/mock_tests/mock_subscriberstatetable.cpp new file mode 100644 index 0000000000..5548191940 --- /dev/null +++ b/tests/mock_tests/mock_subscriberstatetable.cpp @@ -0,0 +1,30 @@ +#include "subscriberstatetable.h" + +namespace swss +{ + SubscriberStateTable::SubscriberStateTable(DBConnector *db, const std::string &tableName, int popBatchSize, int pri) : + ConsumerTableBase(db, tableName, popBatchSize, pri), + m_table(db, tableName) + { + } + + void SubscriberStateTable::pops(std::deque &vkco, const std::string& /*prefix*/) + { + std::vector keys; + m_table.getKeys(keys); + for (const auto &key: keys) + { + KeyOpFieldsValuesTuple kco; + + kfvKey(kco) = key; + kfvOp(kco) = SET_COMMAND; + + if (!m_table.get(key, kfvFieldsValues(kco))) + { + continue; + } + m_table.del(key); + vkco.push_back(kco); + } + } +} diff --git a/tests/mock_tests/portsorch_ut.cpp b/tests/mock_tests/portsorch_ut.cpp index 340adb3296..f5484567ed 100644 --- a/tests/mock_tests/portsorch_ut.cpp +++ b/tests/mock_tests/portsorch_ut.cpp @@ -1411,6 +1411,7 @@ namespace portsorch_test Table pgTable = Table(m_app_db.get(), APP_BUFFER_PG_TABLE_NAME); Table profileTable = Table(m_app_db.get(), APP_BUFFER_PROFILE_TABLE_NAME); Table poolTable = Table(m_app_db.get(), APP_BUFFER_POOL_TABLE_NAME); + Table transceieverInfoTable = Table(m_state_db.get(), STATE_TRANSCEIVER_INFO_TABLE_NAME); // Get SAI default ports to populate DB @@ -1444,6 +1445,7 @@ namespace portsorch_test for (const auto &it : ports) { portTable.set(it.first, it.second); + transceieverInfoTable.set(it.first, {}); } // Set PortConfigDone, PortInitDone @@ -1491,6 +1493,25 @@ namespace portsorch_test gBufferOrch->dumpPendingTasks(ts); ASSERT_TRUE(ts.empty()); + + // Verify port configuration + vector port_list; + port_list.resize(ports.size()); + sai_attribute_t attr; + sai_status_t status; + attr.id = SAI_SWITCH_ATTR_PORT_LIST; + attr.value.objlist.count = static_cast(port_list.size()); + attr.value.objlist.list = port_list.data(); + status = sai_switch_api->get_switch_attribute(gSwitchId, 1, &attr); + ASSERT_EQ(status, SAI_STATUS_SUCCESS); + + for (uint32_t i = 0; i < port_list.size(); i++) + { + attr.id = SAI_PORT_ATTR_HOST_TX_SIGNAL_ENABLE; + status = sai_port_api->get_port_attribute(port_list[i], 1, &attr); + ASSERT_EQ(status, SAI_STATUS_SUCCESS); + ASSERT_TRUE(attr.value.booldata); + } } TEST_F(PortsOrchTest, PfcDlrHandlerCallingDlrInitAttribute)