From 0051929f34969d1ed16aef55d712d9871ab5c0e6 Mon Sep 17 00:00:00 2001 From: Nischal Sheth Date: Tue, 29 Mar 2016 16:52:41 -0700 Subject: [PATCH] Add a couple of new tests for evpn table replication Change-Id: Ib8704c8ebd88639aa34feae55e1873f7b96d5d51 Partial-Bug: 1548570 --- src/bgp/evpn/test/evpn_table_test.cc | 80 ++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 5 deletions(-) diff --git a/src/bgp/evpn/test/evpn_table_test.cc b/src/bgp/evpn/test/evpn_table_test.cc index 0b6b66713e3..c27b7b83c5e 100644 --- a/src/bgp/evpn/test/evpn_table_test.cc +++ b/src/bgp/evpn/test/evpn_table_test.cc @@ -34,7 +34,11 @@ static const int kRouteCount = 255; class EvpnTableTest : public ::testing::Test { protected: EvpnTableTest() - : server_(&evm_), master_(NULL) { + : server_(&evm_), + master_(NULL), + blue_(NULL), + blue_si_(NULL), + tid_(DBTableBase::kInvalidId) { } virtual void SetUp() { @@ -45,19 +49,28 @@ class EvpnTableTest : public ::testing::Test { master_cfg_.reset(BgpTestUtil::CreateBgpInstanceConfig( BgpConfigManager::kMasterInstance)); - blue_cfg_.reset(BgpTestUtil::CreateBgpInstanceConfig( - "blue", "target:64512:1", "target:64512:1", "blue", 1)); + blue_cfg_.reset(BgpTestUtil::CreateBgpInstanceConfig("blue", + "target:64512:1 target:64512:2", "target:64512:1", "blue", 1)); + blue_si_cfg_.reset(BgpTestUtil::CreateBgpInstanceConfig("blue-si", + "target:64512:2 target:64512:1", "target:64512:2", "blue", 1)); TaskScheduler *scheduler = TaskScheduler::GetInstance(); scheduler->Stop(); - server_.routing_instance_mgr()->CreateRoutingInstance(master_cfg_.get()); - server_.routing_instance_mgr()->CreateRoutingInstance(blue_cfg_.get()); + server_.routing_instance_mgr()->CreateRoutingInstance( + master_cfg_.get()); + server_.routing_instance_mgr()->CreateRoutingInstance( + blue_cfg_.get()); + server_.routing_instance_mgr()->CreateRoutingInstance( + blue_si_cfg_.get()); scheduler->Start(); task_util::WaitForIdle(); blue_ = static_cast( server_.database()->FindTable("blue.evpn.0")); TASK_UTIL_EXPECT_EQ(Address::EVPN, blue_->family()); + blue_si_ = static_cast( + server_.database()->FindTable("blue-si.evpn.0")); + TASK_UTIL_EXPECT_EQ(Address::EVPN, blue_si_->family()); master_ = static_cast( server_.database()->FindTable("bgp.evpn.0")); TASK_UTIL_EXPECT_EQ(Address::EVPN, master_->family()); @@ -113,6 +126,11 @@ class EvpnTableTest : public ::testing::Test { table->Enqueue(&addReq); } + void AddRoute(EvpnTable *table, string prefix_str, + string rtarget_str, int virtual_network_index) { + AddRoute(table, prefix_str, rtarget_str, "", virtual_network_index); + } + void DelRoute(EvpnTable *table, string prefix_str) { EvpnPrefix prefix(EvpnPrefix::FromString(prefix_str)); @@ -177,9 +195,11 @@ class EvpnTableTest : public ::testing::Test { BgpServer server_; EvpnTable *master_; EvpnTable *blue_; + EvpnTable *blue_si_; DBTableBase::ListenerId tid_; scoped_ptr master_cfg_; scoped_ptr blue_cfg_; + scoped_ptr blue_si_cfg_; tbb::atomic adc_notification_; tbb::atomic del_notification_; @@ -689,6 +709,28 @@ TEST_F(EvpnTableMacAdvertisementTest, ReplicateRouteFromVPN4) { TASK_UTIL_EXPECT_EQ(0, master_->Size()); } +// +// Route is not replicated to VRF if origin vn is different. +// +TEST_F(EvpnTableMacAdvertisementTest, ReplicateRouteFromVPN5) { + ostringstream repr1, repr2; + repr1 << "2-10.1.1.1:65535-0-11:12:13:14:15:16,192.168.1.1"; + repr2 << "2-0:0-0-11:12:13:14:15:16,192.168.1.1"; + AddRoute(master_, repr1.str(), "target:64512:1", 2); + task_util::WaitForIdle(); + VerifyRouteExists(master_, repr1.str()); + TASK_UTIL_EXPECT_EQ(1, master_->Size()); + VerifyRouteNoExists(blue_, repr2.str()); + TASK_UTIL_EXPECT_EQ(0, blue_->Size()); + + DelRoute(master_, repr1.str()); + task_util::WaitForIdle(); + VerifyRouteNoExists(master_, repr1.str()); + TASK_UTIL_EXPECT_EQ(0, master_->Size()); + VerifyRouteNoExists(blue_, repr2.str()); + TASK_UTIL_EXPECT_EQ(0, blue_->Size()); +} + // // Basic - RD of VPN route is set to provided source RD. // @@ -795,6 +837,34 @@ TEST_F(EvpnTableMacAdvertisementTest, ReplicateRouteToVPN4) { TASK_UTIL_EXPECT_EQ(0, master_->Size()); } +// +// Route is not replicated from one VRF to another. +// +TEST_F(EvpnTableMacAdvertisementTest, ReplicateRouteVRFToVRF) { + ostringstream repr1, repr2; + repr1 << "2-0:0-0-11:12:13:14:15:16,192.168.1.1"; + repr2 << "2-10.1.1.1:65535-0-11:12:13:14:15:16,192.168.1.1"; + AddRoute(blue_, repr1.str(), "", "10.1.1.1:65535"); + task_util::WaitForIdle(); + VerifyRouteExists(blue_, repr1.str()); + TASK_UTIL_EXPECT_EQ(1, blue_->Size()); + VerifyRouteExists(master_, repr2.str()); + TASK_UTIL_EXPECT_EQ(1, master_->Size()); + VerifyRouteNoExists(blue_si_, repr1.str()); + VerifyRouteNoExists(blue_si_, repr2.str()); + TASK_UTIL_EXPECT_EQ(0, blue_si_->Size()); + + DelRoute(blue_, repr1.str()); + task_util::WaitForIdle(); + VerifyRouteNoExists(blue_, repr1.str()); + TASK_UTIL_EXPECT_EQ(0, blue_->Size()); + VerifyRouteNoExists(master_, repr2.str()); + TASK_UTIL_EXPECT_EQ(0, master_->Size()); + VerifyRouteNoExists(blue_si_, repr1.str()); + VerifyRouteNoExists(blue_si_, repr2.str()); + TASK_UTIL_EXPECT_EQ(0, blue_si_->Size()); +} + class EvpnTableInclusiveMulticastTest : public EvpnTableTest { };