@@ -349,11 +349,26 @@ class GreTunnelManagerTest : public ::testing::Test
349349
350350P4GreTunnelEntry *GreTunnelManagerTest::AddGreTunnelEntry1 ()
351351{
352- const auto gre_tunnel_key = KeyGenerator::generateTunnelKey (kP4GreTunnelAppDbEntry1 .tunnel_id );
352+ const std::string neighbor_key = KeyGenerator::generateNeighborKey (
353+ kP4GreTunnelAppDbEntry1 .router_interface_id ,
354+ kP4GreTunnelAppDbEntry1 .encap_dst_ip );
355+ EXPECT_TRUE (
356+ p4_oid_mapper_.setDummyOID (SAI_OBJECT_TYPE_NEIGHBOR_ENTRY, neighbor_key));
357+ uint32_t original_neighbor_ref_count;
358+ EXPECT_TRUE (p4_oid_mapper_.getRefCount (SAI_OBJECT_TYPE_NEIGHBOR_ENTRY,
359+ neighbor_key,
360+ &original_neighbor_ref_count));
361+ const std::string rif_key = KeyGenerator::generateRouterInterfaceKey (
362+ kP4GreTunnelAppDbEntry1 .router_interface_id );
353363 EXPECT_TRUE (p4_oid_mapper_.setOID (SAI_OBJECT_TYPE_ROUTER_INTERFACE,
354364 KeyGenerator::generateRouterInterfaceKey (kRouterInterfaceId1 ),
355365 kRouterInterfaceOid1 ));
366+ uint32_t original_rif_ref_count;
367+ EXPECT_TRUE (p4_oid_mapper_.getRefCount (SAI_OBJECT_TYPE_ROUTER_INTERFACE,
368+ rif_key, &original_rif_ref_count));
356369
370+ const std::string gre_tunnel_key =
371+ KeyGenerator::generateTunnelKey (kP4GreTunnelAppDbEntry1 .tunnel_id );
357372 std::vector<sai_status_t > exp_status{SAI_STATUS_SUCCESS};
358373 // Set up mock call.
359374 EXPECT_CALL (
@@ -373,6 +388,10 @@ P4GreTunnelEntry *GreTunnelManagerTest::AddGreTunnelEntry1()
373388 std::vector<P4GreTunnelAppDbEntry>{kP4GreTunnelAppDbEntry1 }),
374389 ArrayEq (std::vector<StatusCode>{StatusCode::SWSS_RC_SUCCESS}));
375390
391+ EXPECT_TRUE (ValidateRefCnt (SAI_OBJECT_TYPE_NEIGHBOR_ENTRY, neighbor_key,
392+ original_neighbor_ref_count + 1 ));
393+ EXPECT_TRUE (ValidateRefCnt (SAI_OBJECT_TYPE_ROUTER_INTERFACE, rif_key,
394+ original_rif_ref_count + 1 ));
376395 return GetGreTunnelEntry (gre_tunnel_key);
377396}
378397
@@ -553,6 +572,11 @@ TEST_F(GreTunnelManagerTest, ValidateGreTunnelAppDbEntryValidSetEntry) {
553572 SAI_OBJECT_TYPE_ROUTER_INTERFACE,
554573 KeyGenerator::generateRouterInterfaceKey (kRouterInterfaceId1 ),
555574 kRouterInterfaceOid1 ));
575+ EXPECT_TRUE (p4_oid_mapper_.setDummyOID (
576+ SAI_OBJECT_TYPE_NEIGHBOR_ENTRY,
577+ KeyGenerator::generateNeighborKey (
578+ kP4GreTunnelAppDbEntry1 .router_interface_id ,
579+ kP4GreTunnelAppDbEntry1 .encap_dst_ip )));
556580
557581 EXPECT_TRUE (
558582 ValidateGreTunnelAppDbEntry (kP4GreTunnelAppDbEntry1 , SET_COMMAND).ok ());
@@ -694,6 +718,10 @@ TEST_F(GreTunnelManagerTest, DrainDeleteRequestShouldSucceedForExistingGreTunnel
694718 kP4GreTunnelAppDbEntry1 .router_interface_id );
695719 EXPECT_TRUE (ValidateRefCnt (SAI_OBJECT_TYPE_ROUTER_INTERFACE,
696720 router_interface_key, 0 ));
721+ const auto neighbor_key = KeyGenerator::generateNeighborKey (
722+ kP4GreTunnelAppDbEntry1 .router_interface_id ,
723+ kP4GreTunnelAppDbEntry1 .encap_dst_ip );
724+ EXPECT_TRUE (ValidateRefCnt (SAI_OBJECT_TYPE_NEIGHBOR_ENTRY, neighbor_key, 0 ));
697725}
698726
699727TEST_F (GreTunnelManagerTest, DrainValidAppEntryShouldSucceed)
@@ -706,6 +734,19 @@ TEST_F(GreTunnelManagerTest, DrainValidAppEntryShouldSucceed)
706734 EXPECT_TRUE (p4_oid_mapper_.setOID (SAI_OBJECT_TYPE_ROUTER_INTERFACE,
707735 router_interface_key,
708736 kRouterInterfaceOid1 ));
737+ uint32_t original_rif_ref_count;
738+ EXPECT_TRUE (p4_oid_mapper_.getRefCount (SAI_OBJECT_TYPE_ROUTER_INTERFACE,
739+ router_interface_key,
740+ &original_rif_ref_count));
741+ const auto neighbor_key = KeyGenerator::generateNeighborKey (
742+ kP4GreTunnelAppDbEntry1 .router_interface_id ,
743+ kP4GreTunnelAppDbEntry1 .encap_dst_ip );
744+ EXPECT_TRUE (
745+ p4_oid_mapper_.setDummyOID (SAI_OBJECT_TYPE_NEIGHBOR_ENTRY, neighbor_key));
746+ uint32_t original_neighbor_ref_count;
747+ EXPECT_TRUE (p4_oid_mapper_.getRefCount (SAI_OBJECT_TYPE_NEIGHBOR_ENTRY,
748+ neighbor_key,
749+ &original_neighbor_ref_count));
709750 std::vector<swss::FieldValueTuple> fvs{
710751 {p4orch::kAction , p4orch::kTunnelAction },
711752 {prependParamField (p4orch::kRouterInterfaceId ), kP4GreTunnelAppDbEntry1 .router_interface_id },
@@ -733,7 +774,9 @@ TEST_F(GreTunnelManagerTest, DrainValidAppEntryShouldSucceed)
733774 EXPECT_TRUE (p4_oid_mapper_.existsOID (SAI_OBJECT_TYPE_TUNNEL, gre_tunnel_key));
734775
735776 EXPECT_TRUE (ValidateRefCnt (SAI_OBJECT_TYPE_ROUTER_INTERFACE,
736- router_interface_key, 1 ));
777+ router_interface_key, original_rif_ref_count + 1 ));
778+ EXPECT_TRUE (ValidateRefCnt (SAI_OBJECT_TYPE_NEIGHBOR_ENTRY, neighbor_key,
779+ original_neighbor_ref_count + 1 ));
737780}
738781
739782TEST_F (GreTunnelManagerTest, DrainInvalidAppEntryShouldFail)
@@ -934,19 +977,45 @@ TEST_F(GreTunnelManagerTest, DrainNotExecuted) {
934977}
935978
936979TEST_F (GreTunnelManagerTest, DrainStopOnFirstFailureCreate) {
980+ EXPECT_TRUE (p4_oid_mapper_.setDummyOID (
981+ SAI_OBJECT_TYPE_NEIGHBOR_ENTRY,
982+ KeyGenerator::generateNeighborKey (
983+ kP4GreTunnelAppDbEntry1 .router_interface_id ,
984+ kP4GreTunnelAppDbEntry1 .encap_dst_ip )));
985+ EXPECT_TRUE (p4_oid_mapper_.setDummyOID (
986+ SAI_OBJECT_TYPE_NEIGHBOR_ENTRY,
987+ KeyGenerator::generateNeighborKey (
988+ kP4GreTunnelAppDbEntry3 .router_interface_id ,
989+ kP4GreTunnelAppDbEntry3 .encap_dst_ip )));
990+ const std::string neighbor_key = KeyGenerator::generateNeighborKey (
991+ kP4GreTunnelAppDbEntry2 .router_interface_id ,
992+ kP4GreTunnelAppDbEntry2 .encap_dst_ip );
993+ EXPECT_TRUE (
994+ p4_oid_mapper_.setDummyOID (SAI_OBJECT_TYPE_NEIGHBOR_ENTRY, neighbor_key));
995+ uint32_t original_neighbor_ref_count;
996+ EXPECT_TRUE (p4_oid_mapper_.getRefCount (SAI_OBJECT_TYPE_NEIGHBOR_ENTRY,
997+ neighbor_key,
998+ &original_neighbor_ref_count));
999+ const std::string router_interface_key_2 =
1000+ KeyGenerator::generateRouterInterfaceKey (kRouterInterfaceId2 );
1001+
9371002 EXPECT_TRUE (p4_oid_mapper_.setOID (
9381003 SAI_OBJECT_TYPE_ROUTER_INTERFACE,
9391004 KeyGenerator::generateRouterInterfaceKey (kRouterInterfaceId1 ),
9401005 kRouterInterfaceOid1 ));
941- EXPECT_TRUE (p4_oid_mapper_.setOID (
942- SAI_OBJECT_TYPE_ROUTER_INTERFACE,
943- KeyGenerator::generateRouterInterfaceKey (kRouterInterfaceId2 ),
944- kRouterInterfaceOid2 ));
1006+ EXPECT_TRUE (p4_oid_mapper_.setOID (SAI_OBJECT_TYPE_ROUTER_INTERFACE,
1007+ router_interface_key_2,
1008+ kRouterInterfaceOid2 ));
9451009 EXPECT_TRUE (p4_oid_mapper_.setOID (
9461010 SAI_OBJECT_TYPE_ROUTER_INTERFACE,
9471011 KeyGenerator::generateRouterInterfaceKey (kRouterInterfaceId3 ),
9481012 kRouterInterfaceOid3 ));
9491013
1014+ uint32_t original_rif_ref_count;
1015+ EXPECT_TRUE (p4_oid_mapper_.getRefCount (SAI_OBJECT_TYPE_ROUTER_INTERFACE,
1016+ router_interface_key_2,
1017+ &original_rif_ref_count));
1018+
9501019 std::vector<swss::FieldValueTuple> fvs1{
9511020 {p4orch::kAction , p4orch::kTunnelAction },
9521021 {prependParamField (p4orch::kRouterInterfaceId ),
@@ -1026,10 +1095,10 @@ TEST_F(GreTunnelManagerTest, DrainStopOnFirstFailureCreate) {
10261095 EXPECT_FALSE (
10271096 p4_oid_mapper_.existsOID (SAI_OBJECT_TYPE_TUNNEL, gre_tunnel_key_2));
10281097
1029- const auto router_interface_key_2 = KeyGenerator::generateRouterInterfaceKey (
1030- kP4GreTunnelAppDbEntry2 .router_interface_id );
10311098 EXPECT_TRUE (ValidateRefCnt (SAI_OBJECT_TYPE_ROUTER_INTERFACE,
1032- router_interface_key_2, 0 ));
1099+ router_interface_key_2, original_rif_ref_count));
1100+ EXPECT_TRUE (ValidateRefCnt (SAI_OBJECT_TYPE_NEIGHBOR_ENTRY, neighbor_key,
1101+ original_neighbor_ref_count));
10331102
10341103 const auto gre_tunnel_key_3 = KeyGenerator::generateTunnelKey (" tunnel-3" );
10351104 EXPECT_EQ (nullptr , GetGreTunnelEntry (gre_tunnel_key_3));
@@ -1043,6 +1112,21 @@ TEST_F(GreTunnelManagerTest, DrainStopOnFirstFailureCreate) {
10431112}
10441113
10451114TEST_F (GreTunnelManagerTest, DrainStopOnFirstFailureDel) {
1115+ EXPECT_TRUE (p4_oid_mapper_.setDummyOID (
1116+ SAI_OBJECT_TYPE_NEIGHBOR_ENTRY,
1117+ KeyGenerator::generateNeighborKey (
1118+ kP4GreTunnelAppDbEntry1 .router_interface_id ,
1119+ kP4GreTunnelAppDbEntry1 .encap_dst_ip )));
1120+ EXPECT_TRUE (p4_oid_mapper_.setDummyOID (
1121+ SAI_OBJECT_TYPE_NEIGHBOR_ENTRY,
1122+ KeyGenerator::generateNeighborKey (
1123+ kP4GreTunnelAppDbEntry2 .router_interface_id ,
1124+ kP4GreTunnelAppDbEntry2 .encap_dst_ip )));
1125+ EXPECT_TRUE (p4_oid_mapper_.setDummyOID (
1126+ SAI_OBJECT_TYPE_NEIGHBOR_ENTRY,
1127+ KeyGenerator::generateNeighborKey (
1128+ kP4GreTunnelAppDbEntry3 .router_interface_id ,
1129+ kP4GreTunnelAppDbEntry3 .encap_dst_ip )));
10461130 EXPECT_TRUE (p4_oid_mapper_.setOID (
10471131 SAI_OBJECT_TYPE_ROUTER_INTERFACE,
10481132 KeyGenerator::generateRouterInterfaceKey (kRouterInterfaceId1 ),
@@ -1188,6 +1272,11 @@ TEST_F(GreTunnelManagerTest, DrainStopOnFirstFailureDel) {
11881272TEST_F (GreTunnelManagerTest, DrainStopOnFirstFailureDifferentTypes) {
11891273 AddGreTunnelEntry1 ();
11901274
1275+ EXPECT_TRUE (p4_oid_mapper_.setDummyOID (
1276+ SAI_OBJECT_TYPE_NEIGHBOR_ENTRY,
1277+ KeyGenerator::generateNeighborKey (
1278+ kP4GreTunnelAppDbEntry2 .router_interface_id ,
1279+ kP4GreTunnelAppDbEntry2 .encap_dst_ip )));
11911280 EXPECT_TRUE (p4_oid_mapper_.setOID (
11921281 SAI_OBJECT_TYPE_ROUTER_INTERFACE,
11931282 KeyGenerator::generateRouterInterfaceKey (kRouterInterfaceId2 ),
0 commit comments