summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authormageshgv <mageshgv@gmail.com>2019-10-04 10:24:19 -0700
committermageshgv <mageshgv@gmail.com>2019-10-04 18:19:05 -0700
commit0da37b02108d79fc902d1d6731c9245ff733dc84 (patch)
treed2191b4f25ff8be1525207352c8f440df8daac78 /test
parent6f3cb401644fcba0353ac06de261dd40100daa84 (diff)
Maintain unique vrf IDs in watchEventBestPath vrf map
Fixes missing route propagation to proper vrfs in zapi
Diffstat (limited to 'test')
-rw-r--r--test/scenario_test/zapi_v3_test.py58
1 files changed, 55 insertions, 3 deletions
diff --git a/test/scenario_test/zapi_v3_test.py b/test/scenario_test/zapi_v3_test.py
index cd6348da..fe116488 100644
--- a/test/scenario_test/zapi_v3_test.py
+++ b/test/scenario_test/zapi_v3_test.py
@@ -13,8 +13,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-
-
import sys
import time
import unittest
@@ -58,7 +56,7 @@ class GoBGPTestBase(unittest.TestCase):
def test_01_neighbor_established(self):
self.g1.wait_for(expected_state=BGP_FSM_ESTABLISHED, peer=self.g2)
- def test_02_create_vrf(self):
+ def test_02_vrf_routes_add(self):
self.g1.local('ip netns add ns01')
self.g1.local('ip netns add ns02')
self.g2.local('ip netns add ns01')
@@ -92,6 +90,60 @@ class GoBGPTestBase(unittest.TestCase):
self.assertEqual(len(lines), 1)
self.assertEqual(lines[0].split(' ')[0], '20.0.0.0/24')
+ def test_03_vrf_routes_del(self):
+ self.g1.local("gobgp vrf vrf01 rib del 10.0.0.0/24 nexthop 127.0.0.1")
+ self.g1.local("gobgp vrf vrf02 rib del 20.0.0.0/24 nexthop 127.0.0.1")
+
+ time.sleep(2)
+ lines = self.g2.local("ip netns exec ns01 ip r", capture=True).split('\n')
+ self.assertEqual(len(lines), 1)
+ self.assertEqual(lines[0], "")
+
+ lines = self.g2.local("ip netns exec ns02 ip r", capture=True).split('\n')
+ self.assertEqual(len(lines), 1)
+ self.assertEqual(lines[0], "")
+
+ def test_04_vrf_import_routes(self):
+ self.g1.local("gobgp vrf del vrf01")
+ # Import vrf2 routes into vrf1
+ self.g1.local("gobgp vrf add vrf01 id 1 rd 1:1 rt import 1:1 2:2 export 1:1")
+
+ self.g1.local("gobgp vrf vrf01 rib add 10.0.0.0/24 nexthop 127.0.0.1")
+ self.g1.local("gobgp vrf vrf02 rib add 20.0.0.0/24 nexthop 127.0.0.1")
+
+ time.sleep(2)
+
+ # g1 has the vrf2 route imported to vrf1 and updated on zebra
+ lines = self.g1.local("ip netns exec ns01 ip r", capture=True).split('\n')
+ self.assertEqual(len(lines), 2)
+ route_destinations = set()
+ route_destinations.add(lines[0].split(' ')[0])
+ route_destinations.add(lines[1].split(' ')[0])
+ self.assertEqual(len(route_destinations.intersection(set(["10.0.0.0/24", "20.0.0.0/24"]))), 2)
+
+ # Ensure other vrf and other neighbors are not impacted
+ lines = self.g1.local("ip netns exec ns02 ip r", capture=True).split('\n')
+ self.assertEqual(len(lines), 1)
+ self.assertEqual(lines[0].split(' ')[0], '20.0.0.0/24')
+
+ lines = self.g2.local("ip netns exec ns01 ip r", capture=True).split('\n')
+ self.assertEqual(len(lines), 1)
+ self.assertEqual(lines[0].split(' ')[0], '10.0.0.0/24')
+
+ lines = self.g2.local("ip netns exec ns02 ip r", capture=True).split('\n')
+ self.assertEqual(len(lines), 1)
+ self.assertEqual(lines[0].split(' ')[0], '20.0.0.0/24')
+
+ # Routes imported from another vrf are cleaned up properly
+ self.g1.local("gobgp vrf vrf02 rib del 20.0.0.0/24 nexthop 127.0.0.1")
+ lines = self.g1.local("ip netns exec ns01 ip r", capture=True).split('\n')
+ self.assertEqual(len(lines), 1)
+ self.assertEqual(lines[0].split(' ')[0], '10.0.0.0/24')
+
+ lines = self.g1.local("ip netns exec ns02 ip r", capture=True).split('\n')
+ self.assertEqual(len(lines), 1)
+ self.assertEqual(lines[0].split(' ')[0], '')
+
if __name__ == '__main__':
output = local("which docker 2>&1 > /dev/null ; echo $?", capture=True)