unittest/lib/TestClientServerSai.cpp (201 lines of code) (raw):

#include "ClientServerSai.h" #include "sairedis.h" #include "swss/logger.h" #include <gtest/gtest.h> #include <arpa/inet.h> using namespace sairedis; static const char* profile_get_value( _In_ sai_switch_profile_id_t profile_id, _In_ const char* variable) { SWSS_LOG_ENTER(); if (variable == NULL) return NULL; return nullptr; } static int profile_get_next_value( _In_ sai_switch_profile_id_t profile_id, _Out_ const char** variable, _Out_ const char** value) { SWSS_LOG_ENTER(); return 0; } static sai_service_method_table_t test_services = { profile_get_value, profile_get_next_value }; static const char* client_profile_get_value( _In_ sai_switch_profile_id_t profile_id, _In_ const char* variable) { SWSS_LOG_ENTER(); if (variable != NULL && strcmp(variable, SAI_REDIS_KEY_ENABLE_CLIENT) == 0 ) return "true"; else return NULL; return nullptr; } static sai_service_method_table_t test_client_services = { client_profile_get_value, profile_get_next_value }; TEST(ClientServerSai, ctr) { auto css = std::make_shared<ClientServerSai>(); } TEST(ClientServerSai, apiInitialize) { auto css = std::make_shared<ClientServerSai>(); EXPECT_NE(SAI_STATUS_SUCCESS, css->apiInitialize(1, nullptr)); EXPECT_NE(SAI_STATUS_SUCCESS, css->apiInitialize(0, nullptr)); EXPECT_EQ(SAI_STATUS_SUCCESS, css->apiInitialize(0, &test_services)); css = nullptr; // invoke uninitialize in destructor css = std::make_shared<ClientServerSai>(); EXPECT_EQ(SAI_STATUS_SUCCESS, css->apiInitialize(0, &test_services)); EXPECT_NE(SAI_STATUS_SUCCESS, css->apiInitialize(0, &test_services)); } TEST(ClientServerSai, objectTypeQuery) { auto css = std::make_shared<ClientServerSai>(); EXPECT_EQ(SAI_OBJECT_TYPE_NULL, css->objectTypeQuery(0x1111111111111111L)); } TEST(ClientServerSai, switchIdQuery) { auto css = std::make_shared<ClientServerSai>(); EXPECT_EQ(SAI_NULL_OBJECT_ID, css->switchIdQuery(0x1111111111111111L)); } TEST(ClientServerSai, queryStatsCapability) { auto css = std::make_shared<ClientServerSai>(); sai_stat_capability_list_t queue_stats_capability; sai_stat_capability_t stat_initializer; stat_initializer.stat_enum = 0; stat_initializer.stat_modes = 0; std::vector<sai_stat_capability_t> qstat_cap_list(2, stat_initializer); queue_stats_capability.count = 2; queue_stats_capability.list = qstat_cap_list.data(); queue_stats_capability.list[0].stat_enum = SAI_QUEUE_STAT_WRED_ECN_MARKED_PACKETS; queue_stats_capability.list[0].stat_modes = SAI_STATS_MODE_READ; queue_stats_capability.list[1].stat_enum = SAI_QUEUE_STAT_PACKETS; queue_stats_capability.list[1].stat_modes = SAI_STATS_MODE_READ; EXPECT_EQ(SAI_STATUS_FAILURE, css->queryStatsCapability(SAI_NULL_OBJECT_ID, SAI_OBJECT_TYPE_QUEUE, &queue_stats_capability)); } TEST(ClientServerSai, logSet) { auto css = std::make_shared<ClientServerSai>(); EXPECT_NE(SAI_STATUS_SUCCESS, css->logSet(SAI_API_PORT, SAI_LOG_LEVEL_NOTICE)); EXPECT_EQ(SAI_STATUS_SUCCESS, css->apiInitialize(0, &test_services)); EXPECT_EQ(SAI_STATUS_SUCCESS, css->logSet(SAI_API_PORT, SAI_LOG_LEVEL_NOTICE)); } TEST(ClientServerSai, bulkGetClearStats) { auto css = std::make_shared<ClientServerSai>(); EXPECT_EQ(SAI_STATUS_FAILURE, css->bulkGetStats(SAI_NULL_OBJECT_ID, SAI_OBJECT_TYPE_PORT, 0, nullptr, 0, nullptr, SAI_STATS_MODE_BULK_READ, nullptr, nullptr)); EXPECT_EQ(SAI_STATUS_FAILURE, css->bulkClearStats(SAI_NULL_OBJECT_ID, SAI_OBJECT_TYPE_PORT, 0, nullptr, 0, nullptr, SAI_STATS_MODE_BULK_CLEAR, nullptr)); EXPECT_EQ(SAI_STATUS_SUCCESS, css->apiInitialize(0, &test_services)); EXPECT_EQ(SAI_STATUS_NOT_IMPLEMENTED, css->bulkGetStats(SAI_NULL_OBJECT_ID, SAI_OBJECT_TYPE_PORT, 0, nullptr, 0, nullptr, SAI_STATS_MODE_BULK_READ, nullptr, nullptr)); EXPECT_EQ(SAI_STATUS_NOT_IMPLEMENTED, css->bulkClearStats(SAI_NULL_OBJECT_ID, SAI_OBJECT_TYPE_PORT, 0, nullptr, 0, nullptr, SAI_STATS_MODE_BULK_CLEAR, nullptr)); css = std::make_shared<ClientServerSai>(); EXPECT_EQ(SAI_STATUS_SUCCESS, css->apiInitialize(0, &test_client_services)); EXPECT_EQ(SAI_STATUS_NOT_IMPLEMENTED, css->bulkGetStats(SAI_NULL_OBJECT_ID, SAI_OBJECT_TYPE_PORT, 0, nullptr, 0, nullptr, SAI_STATS_MODE_BULK_READ, nullptr, nullptr)); EXPECT_EQ(SAI_STATUS_NOT_IMPLEMENTED, css->bulkClearStats(SAI_NULL_OBJECT_ID, SAI_OBJECT_TYPE_PORT, 0, nullptr, 0, nullptr, SAI_STATS_MODE_BULK_CLEAR, nullptr)); } #define TEST_ENTRY(OT,ot) \ TEST(ClientServerSai, OT) \ { \ auto css = std::make_shared<ClientServerSai>(); \ sai_ ## ot ## _t e = {}; \ EXPECT_EQ(SAI_STATUS_SUCCESS, css->apiInitialize(0, &test_services)); \ EXPECT_NE(SAI_STATUS_SUCCESS, css->create(&e, 0, nullptr)); \ EXPECT_NE(SAI_STATUS_SUCCESS, css->set(&e, nullptr)); \ EXPECT_NE(SAI_STATUS_SUCCESS, css->get(&e, 0, nullptr)); \ EXPECT_NE(SAI_STATUS_SUCCESS, css->remove(&e)); \ \ auto ss = std::make_shared<ClientServerSai>(); \ EXPECT_EQ(SAI_STATUS_SUCCESS, ss->apiInitialize(0, &test_services)); \ EXPECT_NE(SAI_STATUS_SUCCESS, ss->create(&e, 0, nullptr)); \ EXPECT_NE(SAI_STATUS_SUCCESS, ss->set(&e, nullptr)); \ EXPECT_NE(SAI_STATUS_SUCCESS, ss->get(&e, 0, nullptr)); \ EXPECT_NE(SAI_STATUS_SUCCESS, ss->remove(&e)); \ } SAIREDIS_DECLARE_EVERY_ENTRY(TEST_ENTRY) #define TEST_BULK_ENTRY(OT,ot) \ TEST(ClientServerSai, bulk_ ## OT) \ { \ auto css = std::make_shared<ClientServerSai>(); \ sai_ ## ot ## _t e[2] = {}; \ EXPECT_EQ(SAI_STATUS_SUCCESS, css->apiInitialize(0, &test_services)); \ EXPECT_NE(SAI_STATUS_SUCCESS, css->bulkCreate(0, e, nullptr, nullptr, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, nullptr)); \ EXPECT_NE(SAI_STATUS_SUCCESS, css->bulkSet(2, e, nullptr, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, nullptr)); \ EXPECT_NE(SAI_STATUS_SUCCESS, css->bulkRemove(2, e, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, nullptr)); \ \ auto ss = std::make_shared<ClientServerSai>(); \ EXPECT_EQ(SAI_STATUS_SUCCESS, ss->apiInitialize(0, &test_client_services)); \ EXPECT_NE(SAI_STATUS_SUCCESS, ss->bulkCreate(0, e, nullptr, nullptr, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, nullptr)); \ EXPECT_NE(SAI_STATUS_SUCCESS, ss->bulkSet(0, e, nullptr, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, nullptr)); \ EXPECT_NE(SAI_STATUS_SUCCESS, ss->bulkRemove(0, e, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, nullptr)); \ } SAIREDIS_DECLARE_EVERY_BULK_ENTRY(TEST_BULK_ENTRY) TEST(ClientServerSai, bulkGet) { ClientServerSai sai; sai_object_id_t oids[1] = {0}; uint32_t attrcount[1] = {0}; sai_attribute_t* attrs[1] = {0}; sai_status_t statuses[1] = {0}; EXPECT_NE(SAI_STATUS_SUCCESS, sai.bulkGet( SAI_OBJECT_TYPE_PORT, 1, oids, attrcount, attrs, SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR, statuses)); }