diff --git a/tests/mock_tests/Makefile.am b/tests/mock_tests/Makefile.am index 5e28c18c7f..05abda539a 100644 --- a/tests/mock_tests/Makefile.am +++ b/tests/mock_tests/Makefile.am @@ -74,6 +74,7 @@ tests_SOURCES = aclorch_ut.cpp \ twamporch_ut.cpp \ stporch_ut.cpp \ flexcounter_ut.cpp \ + counternameupdater_ut.cpp \ mock_orch_test.cpp \ mock_dash_orch_test.cpp \ zmq_orch_ut.cpp \ diff --git a/tests/mock_tests/counternameupdater_ut.cpp b/tests/mock_tests/counternameupdater_ut.cpp new file mode 100644 index 0000000000..f5bff58e67 --- /dev/null +++ b/tests/mock_tests/counternameupdater_ut.cpp @@ -0,0 +1,116 @@ +#include "ut_helper.h" +#include "mock_orchagent_main.h" +#include "mock_table.h" +#include + +#define private public +#include "high_frequency_telemetry/counternameupdater.h" +#undef private + +extern HFTelOrch *gHFTOrch; + +namespace counternameupdater_test +{ + using namespace std; + using namespace swss; + + struct CounterNameMapUpdaterTest : public ::testing::Test + { + shared_ptr m_counters_db; + shared_ptr m_counters_queue_name_map_table; + shared_ptr
m_counters_pg_name_map_table; + + CounterNameMapUpdaterTest() + { + } + + void SetUp() override + { + // Initialize database connectors + // Use the string constructor to get the correct dbId from database_config.json + m_counters_db = make_shared("COUNTERS_DB", 0, true); + m_counters_queue_name_map_table = make_shared
(m_counters_db.get(), "COUNTERS_QUEUE_NAME_MAP"); + m_counters_pg_name_map_table = make_shared
(m_counters_db.get(), "COUNTERS_PG_NAME_MAP"); + + // Clear tables + m_counters_queue_name_map_table->del(""); + m_counters_pg_name_map_table->del(""); + } + + void TearDown() override + { + // Clean up + m_counters_queue_name_map_table->del(""); + m_counters_pg_name_map_table->del(""); + } + }; + + // Test that setCounterNameMap works without HFT support (gHFTOrch == nullptr) + TEST_F(CounterNameMapUpdaterTest, SetCounterNameMapWithoutHFT) + { + // Ensure gHFTOrch is nullptr to simulate platform without HFT support + HFTelOrch *saved_gHFTOrch = gHFTOrch; + gHFTOrch = nullptr; + + cout << "Testing QUEUE counter maps without HFT support (gHFTOrch=" << (void*)gHFTOrch << ")" << endl; + + // Create CounterNameMapUpdater for QUEUE + CounterNameMapUpdater queue_updater("COUNTERS_DB", "COUNTERS_QUEUE_NAME_MAP"); + + // Set counter maps one by one using numeric OIDs + cout << "Calling setCounterNameMap with 3 entries..." << endl; + queue_updater.setCounterNameMap("Ethernet0:0", 0x1500000000001ULL); + queue_updater.setCounterNameMap("Ethernet0:1", 0x1500000000002ULL); + queue_updater.setCounterNameMap("Ethernet0:2", 0x1500000000003ULL); + + cout << "Verifying entries were written to COUNTERS_DB..." << endl; + + // Verify that the counter names were written to COUNTERS_DB + string value; + bool result; + + result = m_counters_queue_name_map_table->hget("", "Ethernet0:0", value); + cout << " Ethernet0:0 -> " << (result ? value : "NOT FOUND") << endl; + ASSERT_TRUE(result); + ASSERT_EQ(value, "oid:0x1500000000001"); + + result = m_counters_queue_name_map_table->hget("", "Ethernet0:1", value); + cout << " Ethernet0:1 -> " << (result ? value : "NOT FOUND") << endl; + ASSERT_TRUE(result); + ASSERT_EQ(value, "oid:0x1500000000002"); + + result = m_counters_queue_name_map_table->hget("", "Ethernet0:2", value); + cout << " Ethernet0:2 -> " << (result ? value : "NOT FOUND") << endl; + ASSERT_TRUE(result); + ASSERT_EQ(value, "oid:0x1500000000003"); + + cout << "All QUEUE counter map entries verified successfully!" << endl; + + // Restore gHFTOrch + gHFTOrch = saved_gHFTOrch; + } + + // Test single counter name map set + TEST_F(CounterNameMapUpdaterTest, SetSingleCounterNameMap) + { + // Ensure gHFTOrch is nullptr + HFTelOrch *saved_gHFTOrch = gHFTOrch; + gHFTOrch = nullptr; + + CounterNameMapUpdater queue_updater("COUNTERS_DB", "COUNTERS_QUEUE_NAME_MAP"); + + // Set single counter name map + sai_object_id_t oid = 0x1500000000001; + queue_updater.setCounterNameMap("Ethernet0:0", oid); + + // Verify + string value; + bool result = m_counters_queue_name_map_table->hget("", "Ethernet0:0", value); + ASSERT_TRUE(result); + ASSERT_EQ(value, "oid:0x1500000000001"); + + // Restore gHFTOrch + gHFTOrch = saved_gHFTOrch; + } +} +