@@ -752,3 +752,307 @@ TEST(Meta, quad_bulk_nat_entry)
752
752
753
753
EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkRemove (2 , e, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
754
754
}
755
+
756
+ TEST (Meta, getStats)
757
+ {
758
+ Meta m (std::make_shared<MetaTestSaiInterface>());
759
+
760
+ sai_object_id_t switchId = 0 ;
761
+
762
+ sai_attribute_t attr;
763
+
764
+ attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
765
+ attr.value .booldata = true ;
766
+
767
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , &attr));
768
+
769
+ sai_stat_id_t counter_ids[2 ];
770
+
771
+ counter_ids[0 ] = SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_0_DROPPED_PKTS;
772
+ counter_ids[1 ] = SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS;
773
+
774
+ uint64_t counters[2 ];
775
+
776
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.getStats (SAI_OBJECT_TYPE_SWITCH, switchId, 2 , counter_ids, counters));
777
+ }
778
+
779
+ TEST (Meta, getStatsExt)
780
+ {
781
+ Meta m (std::make_shared<MetaTestSaiInterface>());
782
+
783
+ sai_object_id_t switchId = 0 ;
784
+
785
+ sai_attribute_t attr;
786
+
787
+ attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
788
+ attr.value .booldata = true ;
789
+
790
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , &attr));
791
+
792
+ sai_stat_id_t counter_ids[2 ];
793
+
794
+ counter_ids[0 ] = SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_0_DROPPED_PKTS;
795
+ counter_ids[1 ] = SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS;
796
+
797
+ uint64_t counters[2 ];
798
+
799
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.getStatsExt (SAI_OBJECT_TYPE_SWITCH, switchId, 2 , counter_ids, SAI_STATS_MODE_READ, counters));
800
+ }
801
+
802
+ TEST (Meta, clearStats)
803
+ {
804
+ Meta m (std::make_shared<MetaTestSaiInterface>());
805
+
806
+ sai_object_id_t switchId = 0 ;
807
+
808
+ sai_attribute_t attr;
809
+
810
+ attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
811
+ attr.value .booldata = true ;
812
+
813
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , &attr));
814
+
815
+ sai_stat_id_t counter_ids[2 ];
816
+
817
+ counter_ids[0 ] = SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_0_DROPPED_PKTS;
818
+ counter_ids[1 ] = SAI_SWITCH_STAT_IN_CONFIGURED_DROP_REASONS_1_DROPPED_PKTS;
819
+
820
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.clearStats (SAI_OBJECT_TYPE_SWITCH, switchId, 2 , counter_ids));
821
+ }
822
+
823
+ TEST (Meta, quad_bulk_my_sid_entry)
824
+ {
825
+ Meta m (std::make_shared<MetaTestSaiInterface>());
826
+
827
+ sai_object_id_t switchId = 0 ;
828
+
829
+ sai_attribute_t attr;
830
+
831
+ attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
832
+ attr.value .booldata = true ;
833
+
834
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , &attr));
835
+
836
+ sai_object_id_t vlanId = 0 ;
837
+
838
+ attr.id = SAI_VLAN_ATTR_VLAN_ID;
839
+ attr.value .u16 = 2 ;
840
+
841
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_VLAN, &vlanId, switchId, 1 , &attr));
842
+
843
+ sai_object_id_t vrId = 0 ;
844
+
845
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_VIRTUAL_ROUTER, &vrId, switchId, 0 , &attr));
846
+
847
+ // create
848
+
849
+ sai_my_sid_entry_t e[2 ];
850
+
851
+ memset (e, 0 , sizeof (e));
852
+
853
+ e[0 ].switch_id = switchId;
854
+ e[1 ].switch_id = switchId;
855
+
856
+ e[0 ].vr_id = vrId;
857
+ e[1 ].vr_id = vrId;
858
+
859
+ e[0 ].locator_block_len = 1 ;
860
+ e[1 ].locator_block_len = 2 ;
861
+
862
+ uint32_t attr_count[2 ];
863
+
864
+ attr_count[0 ] = 1 ;
865
+ attr_count[1 ] = 1 ;
866
+
867
+ sai_attribute_t list1[2 ];
868
+ sai_attribute_t list2[2 ];
869
+
870
+ list1[0 ].id = SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR;
871
+ list1[0 ].value .s32 = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E;
872
+
873
+ list2[0 ].id = SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR;
874
+ list2[0 ].value .s32 = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E;
875
+
876
+ std::vector<const sai_attribute_t *> alist;
877
+
878
+ alist.push_back (list1);
879
+ alist.push_back (list2);
880
+
881
+ const sai_attribute_t **attr_list = alist.data ();
882
+
883
+ sai_status_t statuses[2 ];
884
+
885
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkCreate (2 , e, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
886
+
887
+ // set
888
+
889
+ sai_attribute_t setlist[2 ];
890
+
891
+ setlist[0 ].id = SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR;
892
+ setlist[0 ].value .s32 = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_X;
893
+
894
+ setlist[1 ].id = SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR;
895
+ setlist[1 ].value .s32 = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_X;
896
+
897
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkSet (2 , e, setlist, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
898
+
899
+ // remove
900
+
901
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkRemove (2 , e, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
902
+ }
903
+
904
+ TEST (Meta, quad_bulk_inseg_entry)
905
+ {
906
+ Meta m (std::make_shared<MetaTestSaiInterface>());
907
+
908
+ sai_object_id_t switchId = 0 ;
909
+
910
+ sai_attribute_t attr;
911
+
912
+ attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
913
+ attr.value .booldata = true ;
914
+
915
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , &attr));
916
+
917
+ sai_object_id_t vlanId = 0 ;
918
+
919
+ attr.id = SAI_VLAN_ATTR_VLAN_ID;
920
+ attr.value .u16 = 2 ;
921
+
922
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_VLAN, &vlanId, switchId, 1 , &attr));
923
+
924
+ sai_object_id_t vrId = 0 ;
925
+
926
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_VIRTUAL_ROUTER, &vrId, switchId, 0 , &attr));
927
+
928
+ // create
929
+
930
+ sai_inseg_entry_t e[2 ];
931
+
932
+ memset (e, 0 , sizeof (e));
933
+
934
+ e[0 ].switch_id = switchId;
935
+ e[1 ].switch_id = switchId;
936
+
937
+ e[0 ].label = 1 ;
938
+ e[1 ].label = 2 ;
939
+
940
+ uint32_t attr_count[2 ];
941
+
942
+ attr_count[0 ] = 1 ;
943
+ attr_count[1 ] = 1 ;
944
+
945
+ sai_attribute_t list1[2 ];
946
+ sai_attribute_t list2[2 ];
947
+
948
+ list1[0 ].id = SAI_L2MC_ENTRY_ATTR_PACKET_ACTION;
949
+ list1[0 ].value .s32 = SAI_PACKET_ACTION_FORWARD;
950
+
951
+ list2[0 ].id = SAI_L2MC_ENTRY_ATTR_PACKET_ACTION;
952
+ list2[0 ].value .s32 = SAI_PACKET_ACTION_FORWARD;
953
+
954
+ std::vector<const sai_attribute_t *> alist;
955
+
956
+ alist.push_back (list1);
957
+ alist.push_back (list2);
958
+
959
+ const sai_attribute_t **attr_list = alist.data ();
960
+
961
+ sai_status_t statuses[2 ];
962
+
963
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkCreate (2 , e, attr_count, attr_list, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
964
+
965
+ // set
966
+
967
+ sai_attribute_t setlist[2 ];
968
+
969
+ setlist[0 ].id = SAI_L2MC_ENTRY_ATTR_PACKET_ACTION;
970
+ setlist[0 ].value .s32 = SAI_PACKET_ACTION_DROP;
971
+
972
+ setlist[1 ].id = SAI_L2MC_ENTRY_ATTR_PACKET_ACTION;
973
+ setlist[1 ].value .s32 = SAI_PACKET_ACTION_DROP;
974
+
975
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkSet (2 , e, setlist, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
976
+
977
+ // remove
978
+
979
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.bulkRemove (2 , e, SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses));
980
+ }
981
+
982
+ TEST (Meta, logSet)
983
+ {
984
+ Meta m (std::make_shared<MetaTestSaiInterface>());
985
+
986
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.logSet (SAI_API_SWITCH, SAI_LOG_LEVEL_NOTICE));
987
+
988
+ #pragma GCC diagnostic push
989
+ #pragma GCC diagnostic ignored "-Wconversion"
990
+ EXPECT_EQ (SAI_STATUS_INVALID_PARAMETER, m.logSet ((sai_api_t )1000 , SAI_LOG_LEVEL_NOTICE));
991
+
992
+ EXPECT_EQ (SAI_STATUS_INVALID_PARAMETER, m.logSet (SAI_API_SWITCH, (sai_log_level_t )1000 ));
993
+ #pragma GCC diagnostic pop
994
+
995
+ }
996
+
997
+ TEST (Meta, meta_sai_on_switch_shutdown_request)
998
+ {
999
+ Meta m (std::make_shared<MetaTestSaiInterface>());
1000
+
1001
+ sai_object_id_t switchId = 0 ;
1002
+
1003
+ sai_attribute_t attr;
1004
+
1005
+ attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
1006
+ attr.value .booldata = true ;
1007
+
1008
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , &attr));
1009
+
1010
+ m.meta_sai_on_switch_shutdown_request (0 );
1011
+ m.meta_sai_on_switch_shutdown_request (switchId);
1012
+ m.meta_sai_on_switch_shutdown_request (0x21000000000001 );
1013
+ }
1014
+
1015
+ TEST (Meta, meta_sai_on_switch_state_change)
1016
+ {
1017
+ Meta m (std::make_shared<MetaTestSaiInterface>());
1018
+
1019
+ sai_object_id_t switchId = 0 ;
1020
+
1021
+ sai_attribute_t attr;
1022
+
1023
+ attr.id = SAI_SWITCH_ATTR_INIT_SWITCH;
1024
+ attr.value .booldata = true ;
1025
+
1026
+ EXPECT_EQ (SAI_STATUS_SUCCESS, m.create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , &attr));
1027
+
1028
+ m.meta_sai_on_switch_state_change (0 , SAI_SWITCH_OPER_STATUS_UP);
1029
+ m.meta_sai_on_switch_state_change (switchId, SAI_SWITCH_OPER_STATUS_UP);
1030
+ m.meta_sai_on_switch_state_change (0x21000000000001 , SAI_SWITCH_OPER_STATUS_UP);
1031
+
1032
+ #pragma GCC diagnostic push
1033
+ #pragma GCC diagnostic ignored "-Wconversion"
1034
+ m.meta_sai_on_switch_state_change (0 , (sai_switch_oper_status_t )1000 );
1035
+ m.meta_sai_on_switch_state_change (switchId, (sai_switch_oper_status_t )1000 );
1036
+ m.meta_sai_on_switch_state_change (0x21000000000001 , (sai_switch_oper_status_t )1000 );
1037
+ #pragma GCC diagnostic pop
1038
+ }
1039
+
1040
+ TEST (Meta, populate)
1041
+ {
1042
+ Meta m (std::make_shared<MetaTestSaiInterface>());
1043
+
1044
+ swss::TableDump dump;
1045
+
1046
+ dump[" SAI_OBJECT_TYPE_ACL_TABLE:oid:0x7000000000626" ][" SAI_ACL_TABLE_ATTR_FIELD_ACL_IP_TYPE" ] = " true" ;
1047
+ dump[" SAI_OBJECT_TYPE_ROUTE_ENTRY:{\" dest\" :\" 10.0.0.0/32\" ,\" switch_id\" :\" oid:0x21000000000000\" ,\" vr\" :\" oid:0x3000000000022\" }" ]
1048
+ [" SAI_ROUTE_ENTRY_ATTR_NEXT_HOP_ID" ] = " oid:0x60000000005cf" ;
1049
+ dump[" SAI_OBJECT_TYPE_VLAN:oid:0x2600000000002f" ][" SAI_VLAN_ATTR_VLAN_ID" ] = " 2" ;
1050
+ dump[" SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000" ][" SAI_SWITCH_ATTR_PORT_LIST" ] =
1051
+ " 2:oid:0x1000000000002,oid:0x1000000000003" ;
1052
+ dump[" SAI_OBJECT_TYPE_ACL_ENTRY:oid:0x8000000000635" ][" SAI_ACL_ENTRY_ATTR_FIELD_SRC_PORT" ] = " oid:0x1000000000003" ;
1053
+ dump[" SAI_OBJECT_TYPE_ACL_ENTRY:oid:0x8000000000635" ][" SAI_ACL_ENTRY_ATTR_FIELD_OUT_PORTS" ] = " 2:oid:0x1000000000002,oid:0x1000000000003" ;
1054
+ dump[" SAI_OBJECT_TYPE_ACL_ENTRY:oid:0x8000000000635" ][" SAI_ACL_ENTRY_ATTR_ACTION_REDIRECT" ] = " oid:0x1000000000003" ;
1055
+ dump[" SAI_OBJECT_TYPE_ACL_ENTRY:oid:0x8000000000635" ][" SAI_ACL_ENTRY_ATTR_ACTION_REDIRECT_LIST" ] = " 2:oid:0x1000000000002,oid:0x1000000000003" ;
1056
+
1057
+ m.populate (dump);
1058
+ }
0 commit comments