From e16606a63a7f3db125fac330f0d47aaca1891548 Mon Sep 17 00:00:00 2001 From: kcudnik Date: Mon, 13 Sep 2021 14:16:23 +0200 Subject: [PATCH] Add RedisChannel tests --- lib/RedisChannel.cpp | 29 +----------- unittest/lib/Makefile.am | 3 +- unittest/lib/TestRedisChannel.cpp | 56 +++++++++++++++++++++++ unittest/lib/files/server_config_bad.json | 2 + unittest/lib/files/server_config_ok.json | 4 ++ 5 files changed, 66 insertions(+), 28 deletions(-) create mode 100644 unittest/lib/TestRedisChannel.cpp create mode 100644 unittest/lib/files/server_config_bad.json create mode 100644 unittest/lib/files/server_config_ok.json diff --git a/lib/RedisChannel.cpp b/lib/RedisChannel.cpp index d74ba6c8a..93567f45a 100644 --- a/lib/RedisChannel.cpp +++ b/lib/RedisChannel.cpp @@ -57,31 +57,6 @@ std::shared_ptr RedisChannel::getDbConnector() const return m_db; } -static std::string getSelectResultAsString(int result) -{ - SWSS_LOG_ENTER(); - - std::string res; - - switch (result) - { - case swss::Select::ERROR: - res = "ERROR"; - break; - - case swss::Select::TIMEOUT: - res = "TIMEOUT"; - break; - - default: - SWSS_LOG_WARN("non recognized select result: %d", result); - res = std::to_string(result); - break; - } - - return res; -} - void RedisChannel::notificationThreadFunction() { SWSS_LOG_ENTER(); @@ -119,7 +94,7 @@ void RedisChannel::notificationThreadFunction() } else { - SWSS_LOG_ERROR("select failed: %s", getSelectResultAsString(result).c_str()); + SWSS_LOG_ERROR("select failed: %s", swss::Select::resultToString(result).c_str()); } } } @@ -201,7 +176,7 @@ sai_status_t RedisChannel::wait( return status; } - SWSS_LOG_ERROR("SELECT operation result: %s on %s", getSelectResultAsString(result).c_str(), command.c_str()); + SWSS_LOG_ERROR("SELECT operation result: %s on %s", swss::Select::resultToString(result).c_str(), command.c_str()); break; } diff --git a/unittest/lib/Makefile.am b/unittest/lib/Makefile.am index 2fd6f1d37..52380199c 100644 --- a/unittest/lib/Makefile.am +++ b/unittest/lib/Makefile.am @@ -20,7 +20,8 @@ tests_SOURCES = \ TestSwitchConfigContainer.cpp \ TestSkipRecordAttrContainer.cpp \ TestServerConfig.cpp \ - TestRedisVidIndexGenerator.cpp + TestRedisVidIndexGenerator.cpp \ + TestRedisChannel.cpp tests_CXXFLAGS = $(DBGFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS_COMMON) tests_LDADD = $(LDADD_GTEST) $(top_srcdir)/lib/libSaiRedis.a -lhiredis -lswsscommon -lpthread -L$(top_srcdir)/meta/.libs -lsaimetadata -lsaimeta -lzmq $(CODE_COVERAGE_LIBS) diff --git a/unittest/lib/TestRedisChannel.cpp b/unittest/lib/TestRedisChannel.cpp new file mode 100644 index 000000000..ba92d2577 --- /dev/null +++ b/unittest/lib/TestRedisChannel.cpp @@ -0,0 +1,56 @@ +#include "RedisChannel.h" +#include "sairediscommon.h" + +#include "swss/notificationproducer.h" + +#include + +#include + +using namespace sairedis; + +static std::string g_op; +static std::string g_data; + +static void callback( + _In_ const std::string& op, + _In_ const std::string& data, + _In_ const std::vector& values) +{ + SWSS_LOG_ENTER(); + + g_op = op; + g_data = data; +} + +TEST(RedisChannel, reset) +{ + RedisChannel rc("ASIC_DB", callback); + + EXPECT_NE(nullptr, rc.getDbConnector()); +} + +TEST(RedisChannel, notificationThreadFunction) +{ + RedisChannel rc("ASIC_DB", callback); + + rc.setResponseTimeout(10); + + auto db = std::make_shared("ASIC_DB", 0); + + swss::NotificationProducer p(db.get(), REDIS_TABLE_NOTIFICATIONS); + + std::vector vals; + p.send("foo", "bar", vals); + + usleep(200*1000); + + EXPECT_EQ(g_op, "foo"); +} + +TEST(RedisChannel, flush) +{ + RedisChannel rc("ASIC_DB", callback); + + rc.flush(); +} diff --git a/unittest/lib/files/server_config_bad.json b/unittest/lib/files/server_config_bad.json new file mode 100644 index 000000000..db1a0f9a6 --- /dev/null +++ b/unittest/lib/files/server_config_bad.json @@ -0,0 +1,2 @@ +{ + "zm diff --git a/unittest/lib/files/server_config_ok.json b/unittest/lib/files/server_config_ok.json new file mode 100644 index 000000000..21f45e3cc --- /dev/null +++ b/unittest/lib/files/server_config_ok.json @@ -0,0 +1,4 @@ +{ + "zmq_endpoint": "ipc:///tmp/saiServer", + "zmq_ntf_endpoint": "ipc:///tmp/saiServerNtf" +}