@@ -683,4 +683,308 @@ TEST_F(SyncdBrcmTest, portBufferBulkSet)
683
683
684
684
status = m_sairedis->set (SAI_OBJECT_TYPE_SWITCH, SAI_NULL_OBJECT_ID, attrs);
685
685
ASSERT_EQ (status, SAI_STATUS_SUCCESS);
686
+ }
687
+
688
+ TEST_F (SyncdBrcmTest, portBulkSetInInitView)
689
+ {
690
+ sai_object_id_t switchId;
691
+ sai_attribute_t attrs[1 ];
692
+
693
+ struct
694
+ {
695
+ std::vector<sai_object_id_t > oids;
696
+ std::vector<sai_attribute_t > attrs;
697
+ std::vector<sai_status_t > statuses;
698
+
699
+ void resize (size_t size)
700
+ {
701
+ SWSS_LOG_ENTER ();
702
+
703
+ oids.resize (size);
704
+ attrs.resize (size);
705
+ statuses.resize (size, SAI_STATUS_NOT_EXECUTED);
706
+ }
707
+ } ports;
708
+
709
+ // init view
710
+
711
+ attrs[0 ].id = SAI_REDIS_SWITCH_ATTR_NOTIFY_SYNCD;
712
+ attrs[0 ].value .s32 = SAI_REDIS_NOTIFY_SYNCD_INIT_VIEW;
713
+
714
+ auto status = m_sairedis->set (SAI_OBJECT_TYPE_SWITCH, SAI_NULL_OBJECT_ID, attrs);
715
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
716
+
717
+ // create switch
718
+
719
+ attrs[0 ].id = SAI_SWITCH_ATTR_INIT_SWITCH;
720
+ attrs[0 ].value .booldata = true ;
721
+
722
+ status = m_sairedis->create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , attrs);
723
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
724
+
725
+ // apply view
726
+
727
+ attrs[0 ].id = SAI_REDIS_SWITCH_ATTR_NOTIFY_SYNCD;
728
+ attrs[0 ].value .s32 = SAI_REDIS_NOTIFY_SYNCD_APPLY_VIEW;
729
+
730
+ status = m_sairedis->set (SAI_OBJECT_TYPE_SWITCH, SAI_NULL_OBJECT_ID, attrs);
731
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
732
+
733
+ // init view
734
+
735
+ attrs[0 ].id = SAI_REDIS_SWITCH_ATTR_NOTIFY_SYNCD;
736
+ attrs[0 ].value .s32 = SAI_REDIS_NOTIFY_SYNCD_INIT_VIEW;
737
+
738
+ status = m_sairedis->set (SAI_OBJECT_TYPE_SWITCH, SAI_NULL_OBJECT_ID, attrs);
739
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
740
+
741
+ // create switch
742
+
743
+ attrs[0 ].id = SAI_SWITCH_ATTR_INIT_SWITCH;
744
+ attrs[0 ].value .booldata = true ;
745
+
746
+ status = m_sairedis->create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , attrs);
747
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
748
+
749
+ attrs[0 ].id = SAI_SWITCH_ATTR_PORT_NUMBER;
750
+ status = m_sairedis->get (SAI_OBJECT_TYPE_SWITCH, switchId, 1 , attrs);
751
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
752
+
753
+ ports.resize (attrs[0 ].value .u32 );
754
+
755
+ ASSERT_TRUE (ports.oids .size () > 1 );
756
+
757
+ attrs[0 ].id = SAI_SWITCH_ATTR_PORT_LIST;
758
+ attrs[0 ].value .objlist .count = static_cast <uint32_t >(ports.oids .size ());
759
+ attrs[0 ].value .objlist .list = ports.oids .data ();
760
+ status = m_sairedis->get (SAI_OBJECT_TYPE_SWITCH, switchId, 1 , attrs);
761
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
762
+
763
+ // Set port admin status in bulk
764
+
765
+ for (size_t i = 0 ; i < ports.oids .size (); i++)
766
+ {
767
+ ports.attrs [i].id = SAI_PORT_ATTR_ADMIN_STATE;
768
+ ports.attrs [i].value .booldata = true ;
769
+ }
770
+
771
+ status = m_sairedis->bulkSet (SAI_OBJECT_TYPE_PORT, static_cast <uint32_t >(ports.oids .size ()), ports.oids .data (),
772
+ ports.attrs .data (), SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, ports.statuses .data ());
773
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
774
+
775
+ for (size_t i = 0 ; i < ports.oids .size (); i++)
776
+ {
777
+ ASSERT_EQ (ports.statuses [i], SAI_STATUS_SUCCESS);
778
+ }
779
+ }
780
+
781
+ TEST_F (SyncdBrcmTest, pgBulkSetInInitView)
782
+ {
783
+ sai_object_id_t switchId;
784
+ sai_attribute_t attrs[1 ];
785
+
786
+ std::vector<sai_object_id_t > portOids;
787
+
788
+ struct
789
+ {
790
+ std::vector<sai_object_id_t > oids;
791
+ std::vector<sai_attribute_t > attrs;
792
+ std::vector<sai_status_t > statuses;
793
+
794
+ void resize (size_t size)
795
+ {
796
+ SWSS_LOG_ENTER ();
797
+
798
+ oids.resize (size);
799
+ attrs.resize (size);
800
+ statuses.resize (size, SAI_STATUS_NOT_EXECUTED);
801
+ }
802
+ } pgs;
803
+
804
+ // init view
805
+
806
+ attrs[0 ].id = SAI_REDIS_SWITCH_ATTR_NOTIFY_SYNCD;
807
+ attrs[0 ].value .s32 = SAI_REDIS_NOTIFY_SYNCD_INIT_VIEW;
808
+
809
+ auto status = m_sairedis->set (SAI_OBJECT_TYPE_SWITCH, SAI_NULL_OBJECT_ID, attrs);
810
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
811
+
812
+ // create switch
813
+
814
+ attrs[0 ].id = SAI_SWITCH_ATTR_INIT_SWITCH;
815
+ attrs[0 ].value .booldata = true ;
816
+
817
+ status = m_sairedis->create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , attrs);
818
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
819
+
820
+ // apply view
821
+
822
+ attrs[0 ].id = SAI_REDIS_SWITCH_ATTR_NOTIFY_SYNCD;
823
+ attrs[0 ].value .s32 = SAI_REDIS_NOTIFY_SYNCD_APPLY_VIEW;
824
+
825
+ status = m_sairedis->set (SAI_OBJECT_TYPE_SWITCH, SAI_NULL_OBJECT_ID, attrs);
826
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
827
+
828
+ // init view
829
+
830
+ attrs[0 ].id = SAI_REDIS_SWITCH_ATTR_NOTIFY_SYNCD;
831
+ attrs[0 ].value .s32 = SAI_REDIS_NOTIFY_SYNCD_INIT_VIEW;
832
+
833
+ status = m_sairedis->set (SAI_OBJECT_TYPE_SWITCH, SAI_NULL_OBJECT_ID, attrs);
834
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
835
+
836
+ // create switch
837
+
838
+ attrs[0 ].id = SAI_SWITCH_ATTR_INIT_SWITCH;
839
+ attrs[0 ].value .booldata = true ;
840
+
841
+ status = m_sairedis->create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , attrs);
842
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
843
+
844
+ attrs[0 ].id = SAI_SWITCH_ATTR_PORT_NUMBER;
845
+ status = m_sairedis->get (SAI_OBJECT_TYPE_SWITCH, switchId, 1 , attrs);
846
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
847
+
848
+ portOids.resize (attrs[0 ].value .u32 );
849
+
850
+ ASSERT_TRUE (portOids.size () > 1 );
851
+
852
+ attrs[0 ].id = SAI_SWITCH_ATTR_PORT_LIST;
853
+ attrs[0 ].value .objlist .count = static_cast <uint32_t >(portOids.size ());
854
+ attrs[0 ].value .objlist .list = portOids.data ();
855
+ status = m_sairedis->get (SAI_OBJECT_TYPE_SWITCH, switchId, 1 , attrs);
856
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
857
+
858
+ attrs[0 ].id = SAI_SWITCH_ATTR_PORT_LIST;
859
+ attrs[0 ].value .objlist .count = static_cast <uint32_t >(portOids.size ());
860
+ attrs[0 ].value .objlist .list = portOids.data ();
861
+ status = m_sairedis->get (SAI_OBJECT_TYPE_SWITCH, switchId, 1 , attrs);
862
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
863
+
864
+ // Create buffer pool
865
+
866
+ std::array<sai_attribute_t , 4 > buffer_pool_attrs;
867
+ sai_object_id_t buffer_pool;
868
+
869
+ buffer_pool_attrs[0 ].id = SAI_BUFFER_POOL_ATTR_THRESHOLD_MODE;
870
+ buffer_pool_attrs[0 ].value .u32 = SAI_BUFFER_POOL_THRESHOLD_MODE_DYNAMIC;
871
+
872
+ buffer_pool_attrs[1 ].id = SAI_BUFFER_POOL_ATTR_SIZE;
873
+ buffer_pool_attrs[1 ].value .u32 = 47218432 ;
874
+
875
+ buffer_pool_attrs[2 ].id = SAI_BUFFER_POOL_ATTR_TYPE;
876
+ buffer_pool_attrs[2 ].value .u32 = SAI_BUFFER_POOL_TYPE_INGRESS;
877
+
878
+ buffer_pool_attrs[3 ].id = SAI_BUFFER_POOL_ATTR_XOFF_SIZE;
879
+ buffer_pool_attrs[3 ].value .u32 = 17708800 ;
880
+
881
+ status = m_sairedis->create (SAI_OBJECT_TYPE_BUFFER_POOL, &buffer_pool, switchId,
882
+ static_cast <uint32_t >(buffer_pool_attrs.size ()), buffer_pool_attrs.data ());
883
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
884
+
885
+ // Create buffer profile
886
+
887
+ std::array<sai_attribute_t , 4 > buffer_profile_attrs;
888
+ sai_object_id_t buffer_profile;
889
+
890
+ buffer_profile_attrs[0 ].id = SAI_BUFFER_PROFILE_ATTR_POOL_ID;
891
+ buffer_profile_attrs[0 ].value .oid = buffer_pool;
892
+
893
+ buffer_profile_attrs[1 ].id = SAI_BUFFER_PROFILE_ATTR_THRESHOLD_MODE;
894
+ buffer_profile_attrs[1 ].value .u32 = SAI_BUFFER_PROFILE_THRESHOLD_MODE_DYNAMIC;
895
+
896
+ buffer_profile_attrs[2 ].id = SAI_BUFFER_PROFILE_ATTR_SHARED_DYNAMIC_TH;
897
+ buffer_profile_attrs[2 ].value .s8 = -8 ;
898
+
899
+ buffer_profile_attrs[3 ].id = SAI_BUFFER_PROFILE_ATTR_RESERVED_BUFFER_SIZE;
900
+ buffer_profile_attrs[3 ].value .u64 = 6755399441055744 ;
901
+
902
+ status = m_sairedis->create (SAI_OBJECT_TYPE_BUFFER_PROFILE, &buffer_profile, switchId,
903
+ static_cast <uint32_t >(buffer_profile_attrs.size ()), buffer_profile_attrs.data ());
904
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
905
+
906
+ // Priority group configuration
907
+
908
+ attrs[0 ].id = SAI_PORT_ATTR_NUMBER_OF_INGRESS_PRIORITY_GROUPS;
909
+ status = m_sairedis->get (SAI_OBJECT_TYPE_PORT, portOids[0 ], 1 , attrs);
910
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
911
+
912
+ pgs.resize (attrs[0 ].value .u32 );
913
+
914
+ attrs[0 ].id = SAI_PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST;
915
+ attrs[0 ].value .objlist .count = static_cast <uint32_t >(pgs.oids .size ());
916
+ attrs[0 ].value .objlist .list = pgs.oids .data ();
917
+
918
+ status = m_sairedis->get (SAI_OBJECT_TYPE_PORT, portOids[0 ], 1 , attrs);
919
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
920
+
921
+ for (size_t i = 0 ; i < pgs.oids .size (); i++)
922
+ {
923
+ pgs.attrs [i].id = SAI_INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE;
924
+ pgs.attrs [i].value .oid = buffer_profile;
925
+ }
926
+
927
+ status = m_sairedis->bulkSet (SAI_OBJECT_TYPE_INGRESS_PRIORITY_GROUP, static_cast <uint32_t >(pgs.oids .size ()), pgs.oids .data (),
928
+ pgs.attrs .data (), SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, pgs.statuses .data ());
929
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
930
+
931
+ for (size_t i = 0 ; i < pgs.oids .size (); i++)
932
+ {
933
+ ASSERT_EQ (pgs.statuses [i], SAI_STATUS_SUCCESS);
934
+ }
935
+ }
936
+
937
+ TEST_F (SyncdBrcmTest, bulkSetInInitViewForUnsupportedObjects)
938
+ {
939
+ sai_object_id_t switchId;
940
+ sai_attribute_t attrs[1 ];
941
+
942
+ // init view
943
+
944
+ attrs[0 ].id = SAI_REDIS_SWITCH_ATTR_NOTIFY_SYNCD;
945
+ attrs[0 ].value .s32 = SAI_REDIS_NOTIFY_SYNCD_INIT_VIEW;
946
+
947
+ auto status = m_sairedis->set (SAI_OBJECT_TYPE_SWITCH, SAI_NULL_OBJECT_ID, attrs);
948
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
949
+
950
+ // create switch
951
+
952
+ attrs[0 ].id = SAI_SWITCH_ATTR_INIT_SWITCH;
953
+ attrs[0 ].value .booldata = true ;
954
+
955
+ status = m_sairedis->create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , attrs);
956
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
957
+
958
+ // apply view
959
+
960
+ attrs[0 ].id = SAI_REDIS_SWITCH_ATTR_NOTIFY_SYNCD;
961
+ attrs[0 ].value .s32 = SAI_REDIS_NOTIFY_SYNCD_APPLY_VIEW;
962
+
963
+ status = m_sairedis->set (SAI_OBJECT_TYPE_SWITCH, SAI_NULL_OBJECT_ID, attrs);
964
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
965
+
966
+ // init view
967
+
968
+ attrs[0 ].id = SAI_REDIS_SWITCH_ATTR_NOTIFY_SYNCD;
969
+ attrs[0 ].value .s32 = SAI_REDIS_NOTIFY_SYNCD_INIT_VIEW;
970
+
971
+ status = m_sairedis->set (SAI_OBJECT_TYPE_SWITCH, SAI_NULL_OBJECT_ID, attrs);
972
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
973
+
974
+ // create switch
975
+
976
+ attrs[0 ].id = SAI_SWITCH_ATTR_INIT_SWITCH;
977
+ attrs[0 ].value .booldata = true ;
978
+
979
+ status = m_sairedis->create (SAI_OBJECT_TYPE_SWITCH, &switchId, SAI_NULL_OBJECT_ID, 1 , attrs);
980
+ ASSERT_EQ (status, SAI_STATUS_SUCCESS);
981
+
982
+ attrs[0 ].id = SAI_SWITCH_ATTR_UNINIT_DATA_PLANE_ON_REMOVAL;
983
+ attrs[0 ].value .booldata = true ;
984
+
985
+ sai_object_id_t oids[1 ] = {switchId};
986
+ sai_status_t statuses[1 ] = {SAI_STATUS_NOT_EXECUTED};
987
+
988
+ ASSERT_THROW (m_sairedis->bulkSet (SAI_OBJECT_TYPE_SWITCH, 1 , oids, attrs,
989
+ SAI_BULK_OP_ERROR_MODE_IGNORE_ERROR, statuses), std::runtime_error);
686
990
}
0 commit comments