unittest/vslib/TestSai.cpp (64 lines of code) (raw):
#include "Sai.h"
#include "saivs.h"
#include <gtest/gtest.h>
#include <memory>
using namespace saivs;
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;
if (strcmp(variable, SAI_KEY_VS_SWITCH_TYPE) == 0)
return SAI_VALUE_VS_SWITCH_TYPE_BCM56850;
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
};
TEST(Sai, bulkGet)
{
Sai sai;
sai.apiInitialize(0, &test_services);
sai_attribute_t attr;
sai_object_id_t switch_id;
attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
attr.value.booldata = true;
EXPECT_EQ(sai.create(SAI_OBJECT_TYPE_SWITCH, &switch_id, SAI_NULL_OBJECT_ID, 1, &attr), SAI_STATUS_SUCCESS);
attr.id = SAI_SWITCH_ATTR_PORT_NUMBER;
EXPECT_EQ(sai.get(SAI_OBJECT_TYPE_SWITCH, switch_id, 1, &attr), SAI_STATUS_SUCCESS);
auto portNum = attr.value.u32;
std::vector<sai_object_id_t> oids(portNum);
attr.id = SAI_SWITCH_ATTR_PORT_LIST;
attr.value.objlist.count = portNum;
attr.value.objlist.list = oids.data();
EXPECT_EQ(sai.get(SAI_OBJECT_TYPE_SWITCH, switch_id, 1, &attr), SAI_STATUS_SUCCESS);
std::vector<sai_attribute_t> attrs(portNum);
std::vector<uint32_t> attrCounts(portNum, 1);
std::vector<sai_status_t> statuses(portNum);
std::vector<sai_attribute_t*> pattrs(portNum);
for (size_t i = 0; i < portNum; i++)
{
attrs[i].id = SAI_PORT_ATTR_ADMIN_STATE;
pattrs[i] = &attrs[i];
}
EXPECT_EQ(SAI_STATUS_SUCCESS,
sai.bulkGet(
SAI_OBJECT_TYPE_PORT,
portNum,
oids.data(),
attrCounts.data(),
pattrs.data(),
SAI_BULK_OP_ERROR_MODE_STOP_ON_ERROR,
statuses.data()));
}