Skip to content

Commit 812f7a5

Browse files
authored
[unittest] Add more Meta tests (#948)
1 parent 5863ed3 commit 812f7a5

File tree

2 files changed

+210
-32
lines changed

2 files changed

+210
-32
lines changed

meta/Meta.cpp

+10-32
Original file line numberDiff line numberDiff line change
@@ -389,19 +389,13 @@ sai_status_t Meta::remove(
389389

390390
sai_status_t status = meta_sai_validate_my_sid_entry(my_sid_entry, false);
391391

392-
if (status != SAI_STATUS_SUCCESS)
393-
{
394-
return status;
395-
}
392+
CHECK_STATUS_SUCCESS(status);
396393

397394
sai_object_meta_key_t meta_key = { .objecttype = SAI_OBJECT_TYPE_MY_SID_ENTRY, .objectkey = { .key = { .my_sid_entry = *my_sid_entry } } };
398395

399396
status = meta_generic_validation_remove(meta_key);
400397

401-
if (status != SAI_STATUS_SUCCESS)
402-
{
403-
return status;
404-
}
398+
CHECK_STATUS_SUCCESS(status);
405399

406400
status = m_implementation->remove(my_sid_entry);
407401

@@ -655,19 +649,13 @@ sai_status_t Meta::create(
655649

656650
sai_status_t status = meta_sai_validate_my_sid_entry(my_sid_entry, true);
657651

658-
if (status != SAI_STATUS_SUCCESS)
659-
{
660-
return status;
661-
}
652+
CHECK_STATUS_SUCCESS(status);
662653

663654
sai_object_meta_key_t meta_key = { .objecttype = SAI_OBJECT_TYPE_MY_SID_ENTRY, .objectkey = { .key = { .my_sid_entry = *my_sid_entry } } };
664655

665656
status = meta_generic_validation_create(meta_key, my_sid_entry->switch_id, attr_count, attr_list);
666657

667-
if (status != SAI_STATUS_SUCCESS)
668-
{
669-
return status;
670-
}
658+
CHECK_STATUS_SUCCESS(status);
671659

672660
status = m_implementation->create(my_sid_entry, attr_count, attr_list);
673661

@@ -911,19 +899,13 @@ sai_status_t Meta::set(
911899
SWSS_LOG_ENTER();
912900
sai_status_t status = meta_sai_validate_my_sid_entry(my_sid_entry, false);
913901

914-
if (status != SAI_STATUS_SUCCESS)
915-
{
916-
return status;
917-
}
902+
CHECK_STATUS_SUCCESS(status);
918903

919904
sai_object_meta_key_t meta_key = { .objecttype = SAI_OBJECT_TYPE_MY_SID_ENTRY, .objectkey = { .key = { .my_sid_entry = *my_sid_entry } } };
920905

921906
status = meta_generic_validation_set(meta_key, attr);
922907

923-
if (status != SAI_STATUS_SUCCESS)
924-
{
925-
return status;
926-
}
908+
CHECK_STATUS_SUCCESS(status);
927909

928910
status = m_implementation->set(my_sid_entry, attr);
929911

@@ -1166,19 +1148,13 @@ sai_status_t Meta::get(
11661148

11671149
sai_status_t status = meta_sai_validate_my_sid_entry(my_sid_entry, false);
11681150

1169-
if (status != SAI_STATUS_SUCCESS)
1170-
{
1171-
return status;
1172-
}
1151+
CHECK_STATUS_SUCCESS(status);
11731152

11741153
sai_object_meta_key_t meta_key = { .objecttype = SAI_OBJECT_TYPE_MY_SID_ENTRY, .objectkey = { .key = { .my_sid_entry = *my_sid_entry } } };
11751154

11761155
status = meta_generic_validation_get(meta_key, attr_count, attr_list);
11771156

1178-
if (status != SAI_STATUS_SUCCESS)
1179-
{
1180-
return status;
1181-
}
1157+
CHECK_STATUS_SUCCESS(status);
11821158

11831159
status = m_implementation->get(my_sid_entry, attr_count, attr_list);
11841160

@@ -2644,6 +2620,8 @@ sai_status_t Meta::bulkCreate(
26442620

26452621
std::vector<sai_object_meta_key_t> vmk;
26462622

2623+
// TODO handle case when two 2 identical routes are created - it will throw, should return fail
2624+
26472625
for (uint32_t idx = 0; idx < object_count; idx++)
26482626
{
26492627
sai_status_t status = meta_sai_validate_route_entry(&route_entry[idx], true);

unittest/meta/TestMeta.cpp

+200
Original file line numberDiff line numberDiff line change
@@ -552,3 +552,203 @@ TEST(Meta, meta_validate_stats)
552552

553553
EXPECT_EQ(SAI_STATUS_INVALID_PARAMETER, m.call_meta_validate_stats(SAI_OBJECT_TYPE_VIRTUAL_ROUTER, vrId, 2, counter_ids, counters, SAI_STATS_MODE_READ));
554554
}
555+
556+
TEST(Meta, quad_my_sid_entry)
557+
{
558+
Meta m(std::make_shared<MetaTestSaiInterface>());
559+
560+
sai_object_id_t switchId = 0;
561+
562+
sai_attribute_t attr;
563+
564+
attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
565+
attr.value.booldata = true;
566+
567+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.create(SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1, &attr));
568+
569+
sai_object_id_t vlanId = 0;
570+
571+
attr.id = SAI_VLAN_ATTR_VLAN_ID;
572+
attr.value.u16 = 2;
573+
574+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.create(SAI_OBJECT_TYPE_VLAN, &vlanId, switchId, 1, &attr));
575+
576+
sai_object_id_t vrId = 0;
577+
578+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.create(SAI_OBJECT_TYPE_VIRTUAL_ROUTER, &vrId, switchId, 0, &attr));
579+
580+
sai_attribute_t attrs[2];
581+
582+
attrs[0].id = SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR;
583+
attrs[0].value.s32 = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E;
584+
585+
sai_my_sid_entry_t e;
586+
587+
memset(&e, 0, sizeof(e));
588+
589+
e.switch_id = switchId;
590+
e.vr_id = vrId;
591+
592+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.create(&e, 1, attrs));
593+
594+
attr.id = SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR;
595+
attr.value.s32 = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_X;
596+
597+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.set(&e, &attr));
598+
599+
attr.id = SAI_MCAST_FDB_ENTRY_ATTR_GROUP_ID;
600+
601+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.get(&e, 1, &attr));
602+
603+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.remove(&e));
604+
}
605+
606+
TEST(Meta, quad_bulk_route_entry)
607+
{
608+
Meta m(std::make_shared<MetaTestSaiInterface>());
609+
610+
sai_object_id_t switchId = 0;
611+
612+
sai_attribute_t attr;
613+
614+
attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
615+
attr.value.booldata = true;
616+
617+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.create(SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1, &attr));
618+
619+
sai_object_id_t vlanId = 0;
620+
621+
attr.id = SAI_VLAN_ATTR_VLAN_ID;
622+
attr.value.u16 = 2;
623+
624+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.create(SAI_OBJECT_TYPE_VLAN, &vlanId, switchId, 1, &attr));
625+
626+
sai_object_id_t vrId = 0;
627+
628+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.create(SAI_OBJECT_TYPE_VIRTUAL_ROUTER, &vrId, switchId, 0, &attr));
629+
630+
// create
631+
632+
sai_route_entry_t e[2];
633+
634+
memset(e, 0, sizeof(e));
635+
636+
e[0].switch_id = switchId;
637+
e[1].switch_id = switchId;
638+
639+
e[0].vr_id = vrId;
640+
e[1].vr_id = vrId;
641+
642+
e[0].destination.addr.ip4 = 1;
643+
e[1].destination.addr.ip4 = 2;
644+
645+
uint32_t attr_count[2];
646+
647+
attr_count[0] = 0;
648+
attr_count[1] = 0;
649+
650+
sai_attribute_t list1[2];
651+
sai_attribute_t list2[2];
652+
653+
std::vector<const sai_attribute_t*> alist;
654+
655+
alist.push_back(list1);
656+
alist.push_back(list2);
657+
658+
const sai_attribute_t **attr_list = alist.data();
659+
660+
sai_status_t statuses[2];
661+
662+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.bulkCreate(2, e, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
663+
664+
// set
665+
666+
sai_attribute_t setlist[2];
667+
668+
setlist[0].id = SAI_ROUTE_ENTRY_ATTR_PACKET_ACTION;
669+
setlist[0].value.s32 = SAI_PACKET_ACTION_DROP;
670+
671+
setlist[1].id = SAI_ROUTE_ENTRY_ATTR_PACKET_ACTION;
672+
setlist[1].value.s32 = SAI_PACKET_ACTION_DROP;
673+
674+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.bulkSet(2, e, setlist, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
675+
676+
// remove
677+
678+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.bulkRemove(2, e, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
679+
}
680+
681+
TEST(Meta, quad_bulk_nat_entry)
682+
{
683+
Meta m(std::make_shared<MetaTestSaiInterface>());
684+
685+
sai_object_id_t switchId = 0;
686+
687+
sai_attribute_t attr;
688+
689+
attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
690+
attr.value.booldata = true;
691+
692+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.create(SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1, &attr));
693+
694+
sai_object_id_t vlanId = 0;
695+
696+
attr.id = SAI_VLAN_ATTR_VLAN_ID;
697+
attr.value.u16 = 2;
698+
699+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.create(SAI_OBJECT_TYPE_VLAN, &vlanId, switchId, 1, &attr));
700+
701+
sai_object_id_t vrId = 0;
702+
703+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.create(SAI_OBJECT_TYPE_VIRTUAL_ROUTER, &vrId, switchId, 0, &attr));
704+
705+
// create
706+
707+
sai_nat_entry_t e[2];
708+
709+
memset(e, 0, sizeof(e));
710+
711+
e[0].switch_id = switchId;
712+
e[1].switch_id = switchId;
713+
714+
e[0].vr_id = vrId;
715+
e[1].vr_id = vrId;
716+
717+
e[0].nat_type = SAI_NAT_TYPE_SOURCE_NAT;
718+
e[1].nat_type = SAI_NAT_TYPE_DESTINATION_NAT;
719+
720+
uint32_t attr_count[2];
721+
722+
attr_count[0] = 0;
723+
attr_count[1] = 0;
724+
725+
sai_attribute_t list1[2];
726+
sai_attribute_t list2[2];
727+
728+
std::vector<const sai_attribute_t*> alist;
729+
730+
alist.push_back(list1);
731+
alist.push_back(list2);
732+
733+
const sai_attribute_t **attr_list = alist.data();
734+
735+
sai_status_t statuses[2];
736+
737+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.bulkCreate(2, e, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
738+
739+
// set
740+
741+
sai_attribute_t setlist[2];
742+
743+
setlist[0].id = SAI_NAT_ENTRY_ATTR_NAT_TYPE;
744+
setlist[0].value.s32 = SAI_NAT_TYPE_NONE;
745+
746+
setlist[1].id = SAI_NAT_ENTRY_ATTR_NAT_TYPE;
747+
setlist[1].value.s32 = SAI_NAT_TYPE_NONE;
748+
749+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.bulkSet(2, e, setlist, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
750+
751+
// remove
752+
753+
EXPECT_EQ(SAI_STATUS_SUCCESS, m.bulkRemove(2, e, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
754+
}

0 commit comments

Comments
 (0)