]> git.proxmox.com Git - mirror_frr.git/commitdiff
tests: improve vxlan test determinism
authorChristian Hopps <chopps@labn.net>
Sun, 18 Jul 2021 18:03:53 +0000 (18:03 +0000)
committerChristian Hopps <chopps@labn.net>
Sat, 4 Sep 2021 08:47:20 +0000 (04:47 -0400)
Signed-off-by: Christian Hopps <chopps@labn.net>
tests/topotests/bgp_evpn_vxlan_topo1/PE1/evpn.vni.json
tests/topotests/bgp_evpn_vxlan_topo1/PE2/evpn.vni.json
tests/topotests/bgp_evpn_vxlan_topo1/test_bgp_evpn_vxlan.py

index e500a1d85c4d7b784e0ab384f962eaa82c99390b..ce7915c4af69417a9976f067466a4481ea1b7270 100644 (file)
@@ -6,8 +6,6 @@
   "vtepIp":"10.10.10.10",
   "mcastGroup":"0.0.0.0",
   "advertiseGatewayMacip":"No",
-  "numMacs":6,
-  "numArpNd":6,
   "numRemoteVteps":[
     "10.30.30.30"
   ]
index 0a56a235bd3475d72f80a5250fa66b0c54d8d64c..6c692026429d4e4bb1a4adf7c03a34c9e008a9fe 100644 (file)
@@ -6,8 +6,6 @@
   "vtepIp":"10.30.30.30",
   "mcastGroup":"0.0.0.0",
   "advertiseGatewayMacip":"No",
-  "numMacs":6,
-  "numArpNd":6,
   "numRemoteVteps":[
     "10.10.10.10"
   ]
index fd5bb38b988530135e260363eabf016d6d7a2593..763cf9c156c635383d185dfc7303a6732bf99bdf 100755 (executable)
@@ -28,6 +28,7 @@ test_bgp_evpn_vxlan.py: Test VXLAN EVPN MAC a route signalling over BGP.
 import os
 import sys
 import json
+import re
 from functools import partial
 from time import sleep
 import pytest
@@ -156,6 +157,17 @@ def show_vni_json_elide_ifindex(pe, vni, expected):
     return topotest.json_cmp(output_json, expected)
 
 
+def check_vni_macs_present(tgen, router, vni, maclist):
+    result = router.vtysh_cmd("show evpn mac vni {} json".format(vni), isjson=True)
+    for rname, ifname in maclist:
+        m = tgen.net.macs[(rname, ifname)]
+        if m not in result["macs"]:
+            return "MAC ({}) for interface {} on {} missing on {} from {}".format(
+                m, ifname, rname, router.name, json.dumps(result, indent=4)
+            )
+    return None
+
+
 def test_pe1_converge_evpn():
     "Wait for protocol convergence"
 
@@ -169,10 +181,17 @@ def test_pe1_converge_evpn():
     expected = json.loads(open(json_file).read())
 
     test_func = partial(show_vni_json_elide_ifindex, pe1, 101, expected)
-    _, result = topotest.run_and_expect(test_func, None, count=125, wait=1)
+    _, result = topotest.run_and_expect(test_func, None, count=45, wait=1)
     assertmsg = '"{}" JSON output mismatches'.format(pe1.name)
-    assert result is None, assertmsg
-    # tgen.mininet_cli()
+
+    test_func = partial(check_vni_macs_present, tgen, pe1, 101, (
+        ("host1", "host1-eth0"),
+        ("host2", "host2-eth0")
+    ))
+    _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+    if result:
+        logger.warning("%s", result)
+        assert None, '"{}" missing expected MACs'.format(pe1.name)
 
 
 def test_pe2_converge_evpn():
@@ -188,10 +207,18 @@ def test_pe2_converge_evpn():
     expected = json.loads(open(json_file).read())
 
     test_func = partial(show_vni_json_elide_ifindex, pe2, 101, expected)
-    _, result = topotest.run_and_expect(test_func, None, count=125, wait=1)
+    _, result = topotest.run_and_expect(test_func, None, count=45, wait=1)
     assertmsg = '"{}" JSON output mismatches'.format(pe2.name)
     assert result is None, assertmsg
-    # tgen.mininet_cli()
+
+    test_func = partial(check_vni_macs_present, tgen, pe2, 101, (
+        ("host1", "host1-eth0"),
+        ("host2", "host2-eth0")
+    ))
+    _, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
+    if result:
+        logger.warning("%s", result)
+        assert None, '"{}" missing expected MACs'.format(pe2.name)
 
 
 def mac_learn_test(host, local):