unittest/meta/TestLegacyVlan.cpp (312 lines of code) (raw):

#include "TestLegacy.h" #include <arpa/inet.h> #include <gtest/gtest.h> #include <memory> using namespace TestLegacy; // STATIC HELPERS //static sai_object_id_t create_vlan( // _In_ sai_object_id_t switch_id) //{ // SWSS_LOG_ENTER(); // // sai_object_id_t vlan; // // sai_attribute_t attrs[9] = { }; // // attrs[0].id = SAI_VLAN_ATTR_VLAN_ID; // attrs[0].value.u16 = 1; // // auto status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan, switch_id, 1, attrs); // EXPECT_EQ(SAI_STATUS_SUCCESS, status); // // return vlan; //} // ACTUAL TESTS TEST(LegacyVlan, vlan_create) { SWSS_LOG_ENTER(); clear_local(); sai_status_t status; sai_attribute_t vlan1_att; vlan1_att.id = SAI_VLAN_ATTR_VLAN_ID; vlan1_att.value.u16 = 1; sai_object_id_t vlan1_id; sai_object_id_t switch_id = create_switch(); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan1_id, switch_id, 1, &vlan1_att); EXPECT_EQ(SAI_STATUS_SUCCESS, status); sai_attribute_t vlan; vlan.id = SAI_VLAN_ATTR_VLAN_ID; vlan.value.u16 = 2; sai_object_id_t vlan_id; SWSS_LOG_NOTICE("create tests"); // SWSS_LOG_NOTICE("existing vlan"); // status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan_id, switch_id, 1, &vlan); // EXPECT_NE(SAI_STATUS_SUCCESS, status); vlan.value.u16 = MAXIMUM_VLAN_NUMBER + 1; // SWSS_LOG_NOTICE("vlan outside range"); // status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan_id, switch_id, 1, &vlan); // EXPECT_NE(SAI_STATUS_SUCCESS, status); vlan.value.u16 = 2; SWSS_LOG_NOTICE("correct"); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan_id, switch_id, 1, &vlan); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("existing"); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan_id, switch_id, 1, &vlan); EXPECT_NE(SAI_STATUS_SUCCESS, status); remove_switch(switch_id); } TEST(LegacyVlan, vlan_remove) { SWSS_LOG_ENTER(); clear_local(); sai_status_t status; sai_attribute_t vlan1_att; vlan1_att.id = SAI_VLAN_ATTR_VLAN_ID; vlan1_att.value.u16 = 1; sai_object_id_t vlan1_id; sai_object_id_t switch_id = create_switch(); SWSS_LOG_NOTICE("create"); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan1_id, switch_id, 1, &vlan1_att); EXPECT_EQ(SAI_STATUS_SUCCESS, status); sai_attribute_t vlan; vlan.id = SAI_VLAN_ATTR_VLAN_ID; vlan.value.u16 = 2; sai_object_id_t vlan_id; SWSS_LOG_NOTICE("correct"); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan_id, switch_id, 1, &vlan); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("remove tests"); SWSS_LOG_NOTICE("invalid vlan"); status = g_meta->remove(SAI_OBJECT_TYPE_VLAN, SAI_NULL_OBJECT_ID); EXPECT_NE(SAI_STATUS_SUCCESS, status); // SWSS_LOG_NOTICE("default vlan"); // status = g_meta->remove(SAI_OBJECT_TYPE_VLAN, vlan1_id); // EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("success"); status = g_meta->remove(SAI_OBJECT_TYPE_VLAN, vlan_id); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("non existing"); status = g_meta->remove(SAI_OBJECT_TYPE_VLAN, vlan_id); EXPECT_NE(SAI_STATUS_SUCCESS, status); remove_switch(switch_id); } TEST(LegacyVlan, vlan_set) { SWSS_LOG_ENTER(); clear_local(); sai_status_t status; sai_attribute_t attr; memset(&attr, 0, sizeof(attr)); sai_attribute_t vlan1_att; vlan1_att.id = SAI_VLAN_ATTR_VLAN_ID; vlan1_att.value.u16 = 1; sai_object_id_t vlan1_id; sai_object_id_t switch_id = create_switch(); sai_object_id_t stp = create_stp(switch_id); SWSS_LOG_NOTICE("create"); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan1_id, switch_id, 1, &vlan1_att); EXPECT_EQ(SAI_STATUS_SUCCESS, status); sai_attribute_t vlan; vlan.id = SAI_VLAN_ATTR_VLAN_ID; vlan.value.u16 = 2; sai_object_id_t vlan_id; SWSS_LOG_NOTICE("correct"); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan_id, switch_id, 1, &vlan); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("set tests"); SWSS_LOG_NOTICE("invalid vlan"); status = g_meta->set(SAI_OBJECT_TYPE_VLAN, SAI_NULL_OBJECT_ID, &vlan); EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("set is null"); status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &vlan); EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("attr is null"); status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, NULL); EXPECT_NE(SAI_STATUS_SUCCESS, status); attr.id = -1; SWSS_LOG_NOTICE("invalid attribute"); status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); attr.id = SAI_VLAN_ATTR_MEMBER_LIST; SWSS_LOG_NOTICE("read only"); status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("max learned addresses"); attr.id = SAI_VLAN_ATTR_MAX_LEARNED_ADDRESSES; attr.value.u32 = 1; status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("null stp instance"); attr.id = SAI_VLAN_ATTR_STP_INSTANCE; attr.value.oid = SAI_NULL_OBJECT_ID; status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("wrong type on stp instance"); attr.id = SAI_VLAN_ATTR_STP_INSTANCE; attr.value.oid = create_dummy_object_id(SAI_OBJECT_TYPE_HASH,switch_id); status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("wrong type on stp instance"); attr.id = SAI_VLAN_ATTR_STP_INSTANCE; attr.value.oid = create_dummy_object_id(SAI_OBJECT_TYPE_STP,switch_id); status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("good stp oid"); attr.id = SAI_VLAN_ATTR_STP_INSTANCE; attr.value.oid = stp; status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("learn disable"); attr.id = SAI_VLAN_ATTR_LEARN_DISABLE; attr.value.booldata = false; status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("metadat"); attr.id = SAI_VLAN_ATTR_META_DATA; attr.value.u32 = 1; status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); remove_switch(switch_id); } TEST(LegacyVlan, vlan_get) { SWSS_LOG_ENTER(); clear_local(); sai_object_id_t switch_id = create_switch(); sai_status_t status; sai_attribute_t attr; memset(&attr, 0, sizeof(attr)); sai_attribute_t vlan1_att; vlan1_att.id = SAI_VLAN_ATTR_VLAN_ID; vlan1_att.value.u16 = 1; sai_object_id_t vlan1_id; sai_object_id_t stp = create_stp(switch_id); SWSS_LOG_NOTICE("create"); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan1_id, switch_id, 1, &vlan1_att); EXPECT_EQ(SAI_STATUS_SUCCESS, status); sai_attribute_t vlan; vlan.id = SAI_VLAN_ATTR_VLAN_ID; vlan.value.u16 = 2; sai_object_id_t vlan_id; SWSS_LOG_NOTICE("correct"); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan_id, switch_id, 1, &vlan); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("get tests"); attr.id = SAI_VLAN_ATTR_MAX_LEARNED_ADDRESSES; SWSS_LOG_NOTICE("invalid vlan"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, 0, 1, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); // SWSS_LOG_NOTICE("invalid vlan"); // status = g_meta->get(SAI_OBJECT_TYPE_VLAN, 3, 1, &attr); // EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("attr is null"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, NULL); EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("zero attributes"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 0, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); attr.id = -1; SWSS_LOG_NOTICE("invalid attribute"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); attr.id = SAI_VLAN_ATTR_MEMBER_LIST; attr.value.objlist.count = 1; attr.value.objlist.list = NULL; SWSS_LOG_NOTICE("read only null list"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); sai_object_id_t list[5] = { }; list[0] = SAI_NULL_OBJECT_ID; list[1] = create_dummy_object_id(SAI_OBJECT_TYPE_HASH,switch_id); list[2] = create_dummy_object_id(SAI_OBJECT_TYPE_VLAN_MEMBER,switch_id); list[3] = stp; attr.value.objlist.count = 0; attr.value.objlist.list = list; SWSS_LOG_NOTICE("readonly 0 count and not null"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); // EXPECT_EQ(SAI_STATUS_SUCCESS, status); attr.value.objlist.count = 5; SWSS_LOG_NOTICE("readonly count and not null"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); attr.value.objlist.count = 0; attr.value.objlist.list = NULL; SWSS_LOG_NOTICE("readonly count 0 and null"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("max learned addresses"); attr.id = SAI_VLAN_ATTR_MAX_LEARNED_ADDRESSES; status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("stp instance"); attr.id = SAI_VLAN_ATTR_STP_INSTANCE; status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("learn disable"); attr.id = SAI_VLAN_ATTR_LEARN_DISABLE; status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("metadata"); attr.id = SAI_VLAN_ATTR_META_DATA; status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); remove_switch(switch_id); } TEST(LegacyVlan, vlan_flow) { SWSS_LOG_ENTER(); clear_local(); sai_attribute_t attr; sai_status_t status; sai_object_id_t vlan_id; attr.id = SAI_VLAN_ATTR_VLAN_ID; attr.value.u16 = 2; sai_object_id_t switch_id = create_switch(); sai_object_id_t stp = create_stp(switch_id); SWSS_LOG_NOTICE("create"); attr.id = SAI_VLAN_ATTR_VLAN_ID; attr.value.u16 = 2; SWSS_LOG_NOTICE("correct"); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan_id, switch_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("existing"); status = g_meta->create(SAI_OBJECT_TYPE_VLAN, &vlan_id, switch_id, 1, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("set"); SWSS_LOG_NOTICE("max learned addresses"); attr.id = SAI_VLAN_ATTR_MAX_LEARNED_ADDRESSES; attr.value.u32 = 1; status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("good stp oid"); attr.id = SAI_VLAN_ATTR_STP_INSTANCE; attr.value.oid = stp; status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("learn disable"); attr.id = SAI_VLAN_ATTR_LEARN_DISABLE; attr.value.booldata = false; status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("metadata"); attr.id = SAI_VLAN_ATTR_META_DATA; attr.value.u32 = 1; status = g_meta->set(SAI_OBJECT_TYPE_VLAN, vlan_id, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("get"); sai_object_id_t list[5] = { }; list[0] = SAI_NULL_OBJECT_ID; list[1] = create_dummy_object_id(SAI_OBJECT_TYPE_HASH,switch_id); list[2] = create_dummy_object_id(SAI_OBJECT_TYPE_VLAN_MEMBER,switch_id); list[3] = stp; attr.value.objlist.count = 0; attr.value.objlist.list = list; SWSS_LOG_NOTICE("readonly 0 count and not null"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); attr.value.objlist.count = 5; SWSS_LOG_NOTICE("readonly count and not null"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); attr.value.objlist.count = 0; attr.value.objlist.list = NULL; SWSS_LOG_NOTICE("readonly count 0 and null"); status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("max learned addresses"); attr.id = SAI_VLAN_ATTR_MAX_LEARNED_ADDRESSES; status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("stp instance"); attr.id = SAI_VLAN_ATTR_STP_INSTANCE; status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("learn disable"); attr.id = SAI_VLAN_ATTR_LEARN_DISABLE; status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("metadata"); attr.id = SAI_VLAN_ATTR_META_DATA; status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("remove"); SWSS_LOG_NOTICE("success"); status = g_meta->remove(SAI_OBJECT_TYPE_VLAN, vlan_id); EXPECT_EQ(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("non existing"); status = g_meta->remove(SAI_OBJECT_TYPE_VLAN, vlan_id); EXPECT_NE(SAI_STATUS_SUCCESS, status); SWSS_LOG_NOTICE("learn disable"); attr.id = SAI_VLAN_ATTR_LEARN_DISABLE; status = g_meta->get(SAI_OBJECT_TYPE_VLAN, vlan_id, 1, &attr); EXPECT_NE(SAI_STATUS_SUCCESS, status); remove_switch(switch_id); }