]> git.puffer.fish Git - mirror/frr.git/commitdiff
tests: add BGPLU label sanity test 7756/head
authorPat Ruddy <pat@voltanet.io>
Wed, 16 Dec 2020 17:02:53 +0000 (17:02 +0000)
committerPat Ruddy <pat@voltanet.io>
Mon, 4 Jan 2021 14:29:44 +0000 (14:29 +0000)
This test checks the interactions between the BGP label requesting
code and the labelpool code to ensure the correct number of labels
and label chunks are requested and those labels are freed back into
the pool when the corresponding prefix is removed.

Signed-off-by: Pat Ruddy <pat@voltanet.io>
tests/topotests/bgp_lu_topo1/R1/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_lu_topo1/R1/labelpool.summ.json [new file with mode: 0644]
tests/topotests/bgp_lu_topo1/R1/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_lu_topo1/R2/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_lu_topo1/R2/labelpool.summ.json [new file with mode: 0644]
tests/topotests/bgp_lu_topo1/R2/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_lu_topo1/R3/bgpd.conf [new file with mode: 0644]
tests/topotests/bgp_lu_topo1/R3/zebra.conf [new file with mode: 0644]
tests/topotests/bgp_lu_topo1/test_bgp_lu.py [new file with mode: 0644]

diff --git a/tests/topotests/bgp_lu_topo1/R1/bgpd.conf b/tests/topotests/bgp_lu_topo1/R1/bgpd.conf
new file mode 100644 (file)
index 0000000..1bdb4c7
--- /dev/null
@@ -0,0 +1,21 @@
+!
+debug bgp labelpool
+debug bgp zebra
+!
+router bgp 1
+ bgp router-id 10.0.0.1
+ timers bgp 3 9
+ no bgp ebgp-requires-policy
+ no bgp network import-check
+ neighbor 10.0.0.2 remote-as 2
+ neighbor 10.0.0.2 solo
+ neighbor 10.0.0.2 timers connect 10
+!
+ address-family ipv4 unicast
+  no neighbor 10.0.0.2 activate
+ exit-address-family
+ !
+ address-family ipv4 labeled-unicast
+  neighbor 10.0.0.2 activate
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_lu_topo1/R1/labelpool.summ.json b/tests/topotests/bgp_lu_topo1/R1/labelpool.summ.json
new file mode 100644 (file)
index 0000000..29e6c2c
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "Ledger":506,
+  "InUse":506,
+  "Requests":0,
+  "LabelChunks":11,
+  "Pending":0,
+  "Reconnects":0
+}
diff --git a/tests/topotests/bgp_lu_topo1/R1/zebra.conf b/tests/topotests/bgp_lu_topo1/R1/zebra.conf
new file mode 100644 (file)
index 0000000..4f6fee5
--- /dev/null
@@ -0,0 +1,6 @@
+debug zebra events
+debug zebra dplane
+debug zebra mpls
+!
+interface R1-eth0
+ ip address 10.0.0.1/24
diff --git a/tests/topotests/bgp_lu_topo1/R2/bgpd.conf b/tests/topotests/bgp_lu_topo1/R2/bgpd.conf
new file mode 100644 (file)
index 0000000..bac608e
--- /dev/null
@@ -0,0 +1,23 @@
+debug bgp labelpool
+debug bgp zebra
+!
+router bgp 2
+ bgp router-id 10.0.0.2
+ timers bgp 3 9
+ no bgp ebgp-requires-policy
+ no bgp network import-check
+ neighbor 10.0.1.3 remote-as 2
+ neighbor 10.0.1.3 update-source 10.0.1.2
+ neighbor 10.0.1.3 timers connect 10
+ neighbor 10.0.0.1 remote-as 1
+ neighbor 10.0.0.1 timers connect 10
+!
+ address-family ipv4 unicast
+  neighbor 10.0.1.3 activate
+  no neighbor 10.0.0.1 activate
+ exit-address-family
+ !
+ address-family ipv4 labeled-unicast
+  neighbor 10.0.0.1 activate
+ exit-address-family
+!
diff --git a/tests/topotests/bgp_lu_topo1/R2/labelpool.summ.json b/tests/topotests/bgp_lu_topo1/R2/labelpool.summ.json
new file mode 100644 (file)
index 0000000..29e6c2c
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "Ledger":506,
+  "InUse":506,
+  "Requests":0,
+  "LabelChunks":11,
+  "Pending":0,
+  "Reconnects":0
+}
diff --git a/tests/topotests/bgp_lu_topo1/R2/zebra.conf b/tests/topotests/bgp_lu_topo1/R2/zebra.conf
new file mode 100644 (file)
index 0000000..33ee53e
--- /dev/null
@@ -0,0 +1,11 @@
+!
+debug zebra events
+debug zebra dplane
+debug zebra mpls
+!
+interface R2-eth0
+ ip address 10.0.0.2/24
+!
+interface R2-eth1
+ ip address 10.0.1.2/24
+!
\ No newline at end of file
diff --git a/tests/topotests/bgp_lu_topo1/R3/bgpd.conf b/tests/topotests/bgp_lu_topo1/R3/bgpd.conf
new file mode 100644 (file)
index 0000000..b42df02
--- /dev/null
@@ -0,0 +1,523 @@
+log file /tmp/bgpd.log
+!
+debug bgp updates
+!
+router bgp 2
+ bgp router-id 10.0.1.3
+ timers bgp 3 9
+ no bgp ebgp-requires-policy
+ no bgp network import-check
+ neighbor 10.0.1.2 remote-as 2
+ neighbor 10.0.1.2 timers connect 10
+ !
+ address-family ipv4 unicast
+  neighbor 10.0.1.2 activate
+  network 11.0.0.1/32
+  network 11.0.0.2/32
+  network 11.0.0.3/32
+  network 11.0.0.4/32
+  network 11.0.0.5/32
+  network 11.0.0.6/32
+  network 11.0.0.7/32
+  network 11.0.0.8/32
+  network 11.0.0.9/32
+  network 11.0.0.10/32
+  network 11.0.0.11/32
+  network 11.0.0.12/32
+  network 11.0.0.13/32
+  network 11.0.0.14/32
+  network 11.0.0.15/32
+  network 11.0.0.16/32
+  network 11.0.0.17/32
+  network 11.0.0.18/32
+  network 11.0.0.19/32
+  network 11.0.0.20/32
+  network 11.0.0.21/32
+  network 11.0.0.22/32
+  network 11.0.0.23/32
+  network 11.0.0.24/32
+  network 11.0.0.25/32
+  network 11.0.0.26/32
+  network 11.0.0.27/32
+  network 11.0.0.28/32
+  network 11.0.0.29/32
+  network 11.0.0.30/32
+  network 11.0.0.31/32
+  network 11.0.0.32/32
+  network 11.0.0.33/32
+  network 11.0.0.34/32
+  network 11.0.0.35/32
+  network 11.0.0.36/32
+  network 11.0.0.37/32
+  network 11.0.0.38/32
+  network 11.0.0.39/32
+  network 11.0.0.40/32
+  network 11.0.0.41/32
+  network 11.0.0.42/32
+  network 11.0.0.43/32
+  network 11.0.0.44/32
+  network 11.0.0.45/32
+  network 11.0.0.46/32
+  network 11.0.0.47/32
+  network 11.0.0.48/32
+  network 11.0.0.49/32
+  network 11.0.0.50/32
+  network 11.0.0.51/32
+  network 11.0.0.52/32
+  network 11.0.0.53/32
+  network 11.0.0.54/32
+  network 11.0.0.55/32
+  network 11.0.0.56/32
+  network 11.0.0.57/32
+  network 11.0.0.58/32
+  network 11.0.0.59/32
+  network 11.0.0.60/32
+  network 11.0.0.61/32
+  network 11.0.0.62/32
+  network 11.0.0.63/32
+  network 11.0.0.64/32
+  network 11.0.0.65/32
+  network 11.0.0.66/32
+  network 11.0.0.67/32
+  network 11.0.0.68/32
+  network 11.0.0.69/32
+  network 11.0.0.70/32
+  network 11.0.0.71/32
+  network 11.0.0.72/32
+  network 11.0.0.73/32
+  network 11.0.0.74/32
+  network 11.0.0.75/32
+  network 11.0.0.76/32
+  network 11.0.0.77/32
+  network 11.0.0.78/32
+  network 11.0.0.79/32
+  network 11.0.0.80/32
+  network 11.0.0.81/32
+  network 11.0.0.82/32
+  network 11.0.0.83/32
+  network 11.0.0.84/32
+  network 11.0.0.85/32
+  network 11.0.0.86/32
+  network 11.0.0.87/32
+  network 11.0.0.88/32
+  network 11.0.0.89/32
+  network 11.0.0.90/32
+  network 11.0.0.91/32
+  network 11.0.0.92/32
+  network 11.0.0.93/32
+  network 11.0.0.94/32
+  network 11.0.0.95/32
+  network 11.0.0.96/32
+  network 11.0.0.97/32
+  network 11.0.0.98/32
+  network 11.0.0.99/32
+  network 11.0.0.100/32
+  network 11.0.0.101/32
+  network 11.0.0.102/32
+  network 11.0.0.103/32
+  network 11.0.0.104/32
+  network 11.0.0.105/32
+  network 11.0.0.106/32
+  network 11.0.0.107/32
+  network 11.0.0.108/32
+  network 11.0.0.109/32
+  network 11.0.0.110/32
+  network 11.0.0.111/32
+  network 11.0.0.112/32
+  network 11.0.0.113/32
+  network 11.0.0.114/32
+  network 11.0.0.115/32
+  network 11.0.0.116/32
+  network 11.0.0.117/32
+  network 11.0.0.118/32
+  network 11.0.0.119/32
+  network 11.0.0.120/32
+  network 11.0.0.121/32
+  network 11.0.0.122/32
+  network 11.0.0.123/32
+  network 11.0.0.124/32
+  network 11.0.0.125/32
+  network 11.0.0.126/32
+  network 11.0.0.127/32
+  network 11.0.0.128/32
+  network 11.0.0.129/32
+  network 11.0.0.130/32
+  network 11.0.0.131/32
+  network 11.0.0.132/32
+  network 11.0.0.133/32
+  network 11.0.0.134/32
+  network 11.0.0.135/32
+  network 11.0.0.136/32
+  network 11.0.0.137/32
+  network 11.0.0.138/32
+  network 11.0.0.139/32
+  network 11.0.0.140/32
+  network 11.0.0.141/32
+  network 11.0.0.142/32
+  network 11.0.0.143/32
+  network 11.0.0.144/32
+  network 11.0.0.145/32
+  network 11.0.0.146/32
+  network 11.0.0.147/32
+  network 11.0.0.148/32
+  network 11.0.0.149/32
+  network 11.0.0.150/32
+  network 11.0.0.151/32
+  network 11.0.0.152/32
+  network 11.0.0.153/32
+  network 11.0.0.154/32
+  network 11.0.0.155/32
+  network 11.0.0.156/32
+  network 11.0.0.157/32
+  network 11.0.0.158/32
+  network 11.0.0.159/32
+  network 11.0.0.160/32
+  network 11.0.0.161/32
+  network 11.0.0.162/32
+  network 11.0.0.163/32
+  network 11.0.0.164/32
+  network 11.0.0.165/32
+  network 11.0.0.166/32
+  network 11.0.0.167/32
+  network 11.0.0.168/32
+  network 11.0.0.169/32
+  network 11.0.0.170/32
+  network 11.0.0.171/32
+  network 11.0.0.172/32
+  network 11.0.0.173/32
+  network 11.0.0.174/32
+  network 11.0.0.175/32
+  network 11.0.0.176/32
+  network 11.0.0.177/32
+  network 11.0.0.178/32
+  network 11.0.0.179/32
+  network 11.0.0.180/32
+  network 11.0.0.181/32
+  network 11.0.0.182/32
+  network 11.0.0.183/32
+  network 11.0.0.184/32
+  network 11.0.0.185/32
+  network 11.0.0.186/32
+  network 11.0.0.187/32
+  network 11.0.0.188/32
+  network 11.0.0.189/32
+  network 11.0.0.190/32
+  network 11.0.0.191/32
+  network 11.0.0.192/32
+  network 11.0.0.193/32
+  network 11.0.0.194/32
+  network 11.0.0.195/32
+  network 11.0.0.196/32
+  network 11.0.0.197/32
+  network 11.0.0.198/32
+  network 11.0.0.199/32
+  network 11.0.0.200/32
+  network 11.0.0.201/32
+  network 11.0.0.202/32
+  network 11.0.0.203/32
+  network 11.0.0.204/32
+  network 11.0.0.205/32
+  network 11.0.0.206/32
+  network 11.0.0.207/32
+  network 11.0.0.208/32
+  network 11.0.0.209/32
+  network 11.0.0.210/32
+  network 11.0.0.211/32
+  network 11.0.0.212/32
+  network 11.0.0.213/32
+  network 11.0.0.214/32
+  network 11.0.0.215/32
+  network 11.0.0.216/32
+  network 11.0.0.217/32
+  network 11.0.0.218/32
+  network 11.0.0.219/32
+  network 11.0.0.220/32
+  network 11.0.0.221/32
+  network 11.0.0.222/32
+  network 11.0.0.223/32
+  network 11.0.0.224/32
+  network 11.0.0.225/32
+  network 11.0.0.226/32
+  network 11.0.0.227/32
+  network 11.0.0.228/32
+  network 11.0.0.229/32
+  network 11.0.0.230/32
+  network 11.0.0.231/32
+  network 11.0.0.232/32
+  network 11.0.0.233/32
+  network 11.0.0.234/32
+  network 11.0.0.235/32
+  network 11.0.0.236/32
+  network 11.0.0.237/32
+  network 11.0.0.238/32
+  network 11.0.0.239/32
+  network 11.0.0.240/32
+  network 11.0.0.241/32
+  network 11.0.0.242/32
+  network 11.0.0.243/32
+  network 11.0.0.244/32
+  network 11.0.0.245/32
+  network 11.0.0.246/32
+  network 11.0.0.247/32
+  network 11.0.0.248/32
+  network 11.0.0.249/32
+  network 11.0.0.250/32
+  network 11.0.0.251/32
+  network 11.0.0.252/32
+  network 11.0.0.253/32
+  network 11.0.1.1/32
+  network 11.0.1.2/32
+  network 11.0.1.3/32
+  network 11.0.1.4/32
+  network 11.0.1.5/32
+  network 11.0.1.6/32
+  network 11.0.1.7/32
+  network 11.0.1.8/32
+  network 11.0.1.9/32
+  network 11.0.1.10/32
+  network 11.0.1.11/32
+  network 11.0.1.12/32
+  network 11.0.1.13/32
+  network 11.0.1.14/32
+  network 11.0.1.15/32
+  network 11.0.1.16/32
+  network 11.0.1.17/32
+  network 11.0.1.18/32
+  network 11.0.1.19/32
+  network 11.0.1.20/32
+  network 11.0.1.21/32
+  network 11.0.1.22/32
+  network 11.0.1.23/32
+  network 11.0.1.24/32
+  network 11.0.1.25/32
+  network 11.0.1.26/32
+  network 11.0.1.27/32
+  network 11.0.1.28/32
+  network 11.0.1.29/32
+  network 11.0.1.30/32
+  network 11.0.1.31/32
+  network 11.0.1.32/32
+  network 11.0.1.33/32
+  network 11.0.1.34/32
+  network 11.0.1.35/32
+  network 11.0.1.36/32
+  network 11.0.1.37/32
+  network 11.0.1.38/32
+  network 11.0.1.39/32
+  network 11.0.1.40/32
+  network 11.0.1.41/32
+  network 11.0.1.42/32
+  network 11.0.1.43/32
+  network 11.0.1.44/32
+  network 11.0.1.45/32
+  network 11.0.1.46/32
+  network 11.0.1.47/32
+  network 11.0.1.48/32
+  network 11.0.1.49/32
+  network 11.0.1.50/32
+  network 11.0.1.51/32
+  network 11.0.1.52/32
+  network 11.0.1.53/32
+  network 11.0.1.54/32
+  network 11.0.1.55/32
+  network 11.0.1.56/32
+  network 11.0.1.57/32
+  network 11.0.1.58/32
+  network 11.0.1.59/32
+  network 11.0.1.60/32
+  network 11.0.1.61/32
+  network 11.0.1.62/32
+  network 11.0.1.63/32
+  network 11.0.1.64/32
+  network 11.0.1.65/32
+  network 11.0.1.66/32
+  network 11.0.1.67/32
+  network 11.0.1.68/32
+  network 11.0.1.69/32
+  network 11.0.1.70/32
+  network 11.0.1.71/32
+  network 11.0.1.72/32
+  network 11.0.1.73/32
+  network 11.0.1.74/32
+  network 11.0.1.75/32
+  network 11.0.1.76/32
+  network 11.0.1.77/32
+  network 11.0.1.78/32
+  network 11.0.1.79/32
+  network 11.0.1.80/32
+  network 11.0.1.81/32
+  network 11.0.1.82/32
+  network 11.0.1.83/32
+  network 11.0.1.84/32
+  network 11.0.1.85/32
+  network 11.0.1.86/32
+  network 11.0.1.87/32
+  network 11.0.1.88/32
+  network 11.0.1.89/32
+  network 11.0.1.90/32
+  network 11.0.1.91/32
+  network 11.0.1.92/32
+  network 11.0.1.93/32
+  network 11.0.1.94/32
+  network 11.0.1.95/32
+  network 11.0.1.96/32
+  network 11.0.1.97/32
+  network 11.0.1.98/32
+  network 11.0.1.99/32
+  network 11.0.1.100/32
+  network 11.0.1.101/32
+  network 11.0.1.102/32
+  network 11.0.1.103/32
+  network 11.0.1.104/32
+  network 11.0.1.105/32
+  network 11.0.1.106/32
+  network 11.0.1.107/32
+  network 11.0.1.108/32
+  network 11.0.1.109/32
+  network 11.0.1.110/32
+  network 11.0.1.111/32
+  network 11.0.1.112/32
+  network 11.0.1.113/32
+  network 11.0.1.114/32
+  network 11.0.1.115/32
+  network 11.0.1.116/32
+  network 11.0.1.117/32
+  network 11.0.1.118/32
+  network 11.0.1.119/32
+  network 11.0.1.120/32
+  network 11.0.1.121/32
+  network 11.0.1.122/32
+  network 11.0.1.123/32
+  network 11.0.1.124/32
+  network 11.0.1.125/32
+  network 11.0.1.126/32
+  network 11.0.1.127/32
+  network 11.0.1.128/32
+  network 11.0.1.129/32
+  network 11.0.1.130/32
+  network 11.0.1.131/32
+  network 11.0.1.132/32
+  network 11.0.1.133/32
+  network 11.0.1.134/32
+  network 11.0.1.135/32
+  network 11.0.1.136/32
+  network 11.0.1.137/32
+  network 11.0.1.138/32
+  network 11.0.1.139/32
+  network 11.0.1.140/32
+  network 11.0.1.141/32
+  network 11.0.1.142/32
+  network 11.0.1.143/32
+  network 11.0.1.144/32
+  network 11.0.1.145/32
+  network 11.0.1.146/32
+  network 11.0.1.147/32
+  network 11.0.1.148/32
+  network 11.0.1.149/32
+  network 11.0.1.150/32
+  network 11.0.1.151/32
+  network 11.0.1.152/32
+  network 11.0.1.153/32
+  network 11.0.1.154/32
+  network 11.0.1.155/32
+  network 11.0.1.156/32
+  network 11.0.1.157/32
+  network 11.0.1.158/32
+  network 11.0.1.159/32
+  network 11.0.1.160/32
+  network 11.0.1.161/32
+  network 11.0.1.162/32
+  network 11.0.1.163/32
+  network 11.0.1.164/32
+  network 11.0.1.165/32
+  network 11.0.1.166/32
+  network 11.0.1.167/32
+  network 11.0.1.168/32
+  network 11.0.1.169/32
+  network 11.0.1.170/32
+  network 11.0.1.171/32
+  network 11.0.1.172/32
+  network 11.0.1.173/32
+  network 11.0.1.174/32
+  network 11.0.1.175/32
+  network 11.0.1.176/32
+  network 11.0.1.177/32
+  network 11.0.1.178/32
+  network 11.0.1.179/32
+  network 11.0.1.180/32
+  network 11.0.1.181/32
+  network 11.0.1.182/32
+  network 11.0.1.183/32
+  network 11.0.1.184/32
+  network 11.0.1.185/32
+  network 11.0.1.186/32
+  network 11.0.1.187/32
+  network 11.0.1.188/32
+  network 11.0.1.189/32
+  network 11.0.1.190/32
+  network 11.0.1.191/32
+  network 11.0.1.192/32
+  network 11.0.1.193/32
+  network 11.0.1.194/32
+  network 11.0.1.195/32
+  network 11.0.1.196/32
+  network 11.0.1.197/32
+  network 11.0.1.198/32
+  network 11.0.1.199/32
+  network 11.0.1.200/32
+  network 11.0.1.201/32
+  network 11.0.1.202/32
+  network 11.0.1.203/32
+  network 11.0.1.204/32
+  network 11.0.1.205/32
+  network 11.0.1.206/32
+  network 11.0.1.207/32
+  network 11.0.1.208/32
+  network 11.0.1.209/32
+  network 11.0.1.210/32
+  network 11.0.1.211/32
+  network 11.0.1.212/32
+  network 11.0.1.213/32
+  network 11.0.1.214/32
+  network 11.0.1.215/32
+  network 11.0.1.216/32
+  network 11.0.1.217/32
+  network 11.0.1.218/32
+  network 11.0.1.219/32
+  network 11.0.1.220/32
+  network 11.0.1.221/32
+  network 11.0.1.222/32
+  network 11.0.1.223/32
+  network 11.0.1.224/32
+  network 11.0.1.225/32
+  network 11.0.1.226/32
+  network 11.0.1.227/32
+  network 11.0.1.228/32
+  network 11.0.1.229/32
+  network 11.0.1.230/32
+  network 11.0.1.231/32
+  network 11.0.1.232/32
+  network 11.0.1.233/32
+  network 11.0.1.234/32
+  network 11.0.1.235/32
+  network 11.0.1.236/32
+  network 11.0.1.237/32
+  network 11.0.1.238/32
+  network 11.0.1.239/32
+  network 11.0.1.240/32
+  network 11.0.1.241/32
+  network 11.0.1.242/32
+  network 11.0.1.243/32
+  network 11.0.1.244/32
+  network 11.0.1.245/32
+  network 11.0.1.246/32
+  network 11.0.1.247/32
+  network 11.0.1.248/32
+  network 11.0.1.249/32
+  network 11.0.1.250/32
+  network 11.0.1.251/32
+  network 11.0.1.252/32
+  network 11.0.1.253/32
+ exit-address-family
+ !
+!
diff --git a/tests/topotests/bgp_lu_topo1/R3/zebra.conf b/tests/topotests/bgp_lu_topo1/R3/zebra.conf
new file mode 100644 (file)
index 0000000..524978b
--- /dev/null
@@ -0,0 +1,9 @@
+log file /tmp/zebra.log
+!
+debug zebra events
+debug zebra packet detail
+debug zebra mpls
+!
+interface R3-eth0
+ ip address 10.0.1.3/24
+!
diff --git a/tests/topotests/bgp_lu_topo1/test_bgp_lu.py b/tests/topotests/bgp_lu_topo1/test_bgp_lu.py
new file mode 100644 (file)
index 0000000..61418d7
--- /dev/null
@@ -0,0 +1,178 @@
+#!/usr/bin/env python
+
+#
+# test_bgp_lu.py
+# Part of NetDEF Topology Tests
+#
+# Copyright (c) 2020 by Volta Networks
+#
+# Permission to use, copy, modify, and/or distribute this software
+# for any purpose with or without fee is hereby granted, provided
+# that the above copyright notice and this permission notice appear
+# in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
+# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+# OF THIS SOFTWARE.
+#
+
+"""
+test_bgp_lu.py: Test BGP LU label allocation
+"""
+
+import os
+import sys
+import json
+from functools import partial
+from time import sleep
+import pytest
+
+# Save the Current Working Directory to find configuration files.
+CWD = os.path.dirname(os.path.realpath(__file__))
+sys.path.append(os.path.join(CWD, "../"))
+
+# pylint: disable=C0413
+# Import topogen and topotest helpers
+from lib import topotest
+from lib.topogen import Topogen, TopoRouter, get_topogen
+from lib.topolog import logger
+
+# Required to instantiate the topology builder class.
+from mininet.topo import Topo
+
+#Basic scenario for BGP-LU. Nodes are directly connected.
+#Node 3 is advertising many routes to 2, which advertises them
+#as BGP-LU to 1; this way we get routes with actual labels, as
+#opposed to implicit-null routes in the 2-node case.
+#
+#  AS1      BGP-LU        AS2         iBGP        AS2
+#+-----+                +-----+                 +-----+
+#|     |.1            .2|     |.2             .3|     |
+#|  1  +----------------+  2  +-----------------+  3  |
+#|     |   10.0.0.0/24  |     |   10.0.1.0/24   |     |
+#+-----+                +-----+                 +-----+
+
+class TemplateTopo(Topo):
+    "Test topology builder"
+
+    def build(self, *_args, **_opts):
+        "Build function"
+        tgen = get_topogen(self)
+
+        # This function only purpose is to define allocation and relationship
+        # between routers, switches and hosts.
+        #
+        #
+        # Create routers
+        tgen.add_router("R1")
+        tgen.add_router("R2")
+        tgen.add_router("R3")
+
+        # R1-R2
+        switch = tgen.add_switch("s1")
+        switch.add_link(tgen.gears["R1"])
+        switch.add_link(tgen.gears["R2"])
+
+        # R2-R3
+        switch = tgen.add_switch("s2")
+        switch.add_link(tgen.gears["R2"])
+        switch.add_link(tgen.gears["R3"])
+
+
+
+def setup_module(mod):
+    "Sets up the pytest environment"
+    # This function initiates the topology build with Topogen...
+    tgen = Topogen(TemplateTopo, mod.__name__)
+    # ... and here it calls Mininet initialization functions.
+    tgen.start_topology()
+
+    # This is a sample of configuration loading.
+    router_list = tgen.routers()
+
+    # For all registred routers, load the zebra configuration file
+    for rname, router in router_list.items():
+        router.load_config(
+            TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname))
+        )
+        router.load_config(
+            TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname))
+        )
+
+    # After loading the configurations, this function loads configured daemons.
+    tgen.start_router()
+
+
+def teardown_module(mod):
+    "Teardown the pytest environment"
+    tgen = get_topogen()
+
+    # This function tears down the whole topology.
+    tgen.stop_topology()
+
+def check_labelpool(router):
+    json_file = "{}/{}/labelpool.summ.json".format(CWD, router.name)
+    expected = json.loads(open(json_file).read())
+
+    test_func = partial(topotest.router_json_cmp, router, "show bgp labelpool summary json", expected)
+    _, result = topotest.run_and_expect(test_func, None, count=20, wait=1)
+    assertmsg = '"{}" JSON output mismatches - Did not converge'.format(router.name)
+    assert result is None, assertmsg
+    
+def test_converge_bgplu():
+    "Wait for protocol convergence"
+
+    tgen = get_topogen()
+    # Don't run this test if we have any failure.
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    #tgen.mininet_cli();
+    r1 = tgen.gears["R1"]
+    r2 = tgen.gears["R2"]
+
+    check_labelpool(r1)
+    check_labelpool(r2)
+
+def test_clear_bgplu():
+    "Wait for protocol convergence"
+
+    tgen = get_topogen()
+    # Don't run this test if we have any failure.
+    if tgen.routers_have_failure():
+        pytest.skip(tgen.errors)
+
+    #tgen.mininet_cli();
+    r1 = tgen.gears["R1"]
+    r2 = tgen.gears["R2"]
+
+    r1.vtysh_cmd("clear bgp 10.0.0.2")
+    check_labelpool(r1)
+    check_labelpool(r2)
+
+    r2.vtysh_cmd("clear bgp 10.0.1.3")
+    check_labelpool(r1)
+    check_labelpool(r2)
+
+    r1.vtysh_cmd("clear bgp 10.0.0.2")
+    r2.vtysh_cmd("clear bgp 10.0.1.3")
+    check_labelpool(r1)
+    check_labelpool(r2)
+
+def test_memory_leak():
+    "Run the memory leak test and report results."
+    tgen = get_topogen()
+    if not tgen.is_memleak_enabled():
+        pytest.skip("Memory leak test/report is disabled")
+
+    tgen.report_memory_leaks()
+
+
+if __name__ == "__main__":
+    args = ["-s"] + sys.argv[1:]
+    sys.exit(pytest.main(args))