unittest/meta/TestLegacy.cpp (152 lines of code) (raw):
#include "TestLegacy.h"
#include "sai_serialize.h"
#include <gtest/gtest.h>
//using namespace TestLegacy;
using namespace saimeta;
namespace TestLegacy
{
std::shared_ptr<MetaTestSaiInterface> g_sai = std::make_shared<saimeta::MetaTestSaiInterface>();
std::shared_ptr<Meta> g_meta = std::make_shared<saimeta::Meta>(g_sai);
// STATIC HELPER METHODS
void clear_local()
{
SWSS_LOG_ENTER();
g_sai = std::make_shared<MetaTestSaiInterface>();
g_meta = std::make_shared<Meta>(g_sai);
}
sai_object_id_t create_switch()
{
SWSS_LOG_ENTER();
sai_attribute_t attr;
sai_object_id_t switch_id;
attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
attr.value.booldata = true;
auto status = g_meta->create(SAI_OBJECT_TYPE_SWITCH, &switch_id, SAI_NULL_OBJECT_ID, 1, &attr);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);
return switch_id;
}
void remove_switch(
_In_ sai_object_id_t switchId)
{
SWSS_LOG_ENTER();
EXPECT_TRUE(g_meta->isEmpty() == false);
SWSS_LOG_NOTICE("removing: %lX", switchId);
auto status = g_meta->remove(SAI_OBJECT_TYPE_SWITCH, switchId);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);
if (g_meta->isEmpty() == false)
{
g_meta->dump();
}
EXPECT_TRUE(g_meta->isEmpty());
}
sai_object_id_t create_bridge(
_In_ sai_object_id_t switch_id)
{
SWSS_LOG_ENTER();
sai_object_id_t bridge_id;
sai_attribute_t attrs[9] = {};
attrs[0].id = SAI_BRIDGE_ATTR_TYPE;
attrs[0].value.s32 = SAI_BRIDGE_TYPE_1Q;
sai_status_t status = g_meta->create(SAI_OBJECT_TYPE_BRIDGE, &bridge_id, switch_id, 1, attrs);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);
return bridge_id;
}
sai_object_id_t create_port(
_In_ sai_object_id_t switch_id)
{
SWSS_LOG_ENTER();
sai_object_id_t port;
static uint32_t id = 1;
id++;
sai_attribute_t attrs[9] = { };
uint32_t list[1] = { id };
attrs[0].id = SAI_PORT_ATTR_HW_LANE_LIST;
attrs[0].value.u32list.count = 1;
attrs[0].value.u32list.list = list;
attrs[1].id = SAI_PORT_ATTR_SPEED;
attrs[1].value.u32 = 10000;
auto status = g_meta->create(SAI_OBJECT_TYPE_PORT, &port, switch_id, 2, attrs);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);
return port;
}
sai_object_id_t create_bridge_port(
_In_ sai_object_id_t switch_id,
_In_ sai_object_id_t bridge_id)
{
SWSS_LOG_ENTER();
sai_object_id_t bridge_port;
sai_attribute_t attrs[9] = { };
auto port = create_port(switch_id);
attrs[0].id = SAI_BRIDGE_PORT_ATTR_TYPE;
attrs[0].value.s32 = SAI_BRIDGE_PORT_TYPE_PORT;
attrs[1].id = SAI_BRIDGE_PORT_ATTR_PORT_ID;
attrs[1].value.oid = port;
auto status = g_meta->create(SAI_OBJECT_TYPE_BRIDGE_PORT, &bridge_port, switch_id, 2, attrs);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);
return bridge_port;
}
sai_object_id_t create_dummy_object_id(
_In_ sai_object_type_t object_type,
_In_ sai_object_id_t switch_id)
{
SWSS_LOG_ENTER();
sai_object_id_t oid;
auto status = g_sai->create(object_type, &oid, switch_id, 0, NULL);
if (status != SAI_STATUS_SUCCESS)
{
SWSS_LOG_THROW("failed to create oid");
}
SWSS_LOG_DEBUG("created oid %s", sai_serialize_object_id(oid).c_str());
return oid;
}
sai_object_id_t create_virtual_router(
_In_ sai_object_id_t switch_id)
{
SWSS_LOG_ENTER();
sai_object_id_t vr;
auto status = g_meta->create(SAI_OBJECT_TYPE_VIRTUAL_ROUTER, &vr, switch_id, 0, NULL);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);
return vr;
}
sai_object_id_t create_rif(
_In_ sai_object_id_t switch_id)
{
SWSS_LOG_ENTER();
sai_object_id_t rif;
sai_attribute_t attrs[9] = { };
auto port = create_port(switch_id);
auto vr = create_virtual_router(switch_id);
attrs[0].id = SAI_ROUTER_INTERFACE_ATTR_VIRTUAL_ROUTER_ID;
attrs[0].value.oid = vr;
attrs[1].id = SAI_ROUTER_INTERFACE_ATTR_TYPE;
attrs[1].value.s32 = SAI_ROUTER_INTERFACE_TYPE_PORT;
attrs[2].id = SAI_ROUTER_INTERFACE_ATTR_PORT_ID;
attrs[2].value.oid = port;
auto status = g_meta->create(SAI_OBJECT_TYPE_ROUTER_INTERFACE, &rif, switch_id, 3, attrs);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);
return rif;
}
sai_object_id_t create_stp(
_In_ sai_object_id_t switch_id)
{
SWSS_LOG_ENTER();
sai_object_id_t stp;
auto status = g_meta->create(SAI_OBJECT_TYPE_STP, &stp, switch_id, 0, NULL);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);
return stp;
}
sai_object_id_t create_next_hop(
_In_ sai_object_id_t switch_id)
{
SWSS_LOG_ENTER();
sai_object_id_t nh;
sai_attribute_t attrs[9] = { };
attrs[0].id = SAI_NEXT_HOP_ATTR_TYPE;
attrs[0].value.s32 = SAI_NEXT_HOP_TYPE_IP;
attrs[1].id = SAI_NEXT_HOP_ATTR_IP;
auto rif = create_rif(switch_id);
attrs[2].id = SAI_NEXT_HOP_ATTR_ROUTER_INTERFACE_ID;
attrs[2].value.oid = rif;
auto status = g_meta->create(SAI_OBJECT_TYPE_NEXT_HOP, &nh, switch_id, 3, attrs);
EXPECT_EQ(SAI_STATUS_SUCCESS, status);
return nh;
}
}