From: Rafael Zalamena Date: Mon, 8 Jun 2020 19:14:41 +0000 (-0300) Subject: topotests: stabilize ospf-sr-topo1 run X-Git-Tag: base_7.5~305^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=19d4fe65661037adaa0a1f5d9fd15056c56e71a5;p=mirror%2Ffrr.git topotests: stabilize ospf-sr-topo1 run Use `json_cmp` instead of raw text comparison. It should fix some of the ordering problems we are seeing in CI runs. Signed-off-by: Rafael Zalamena --- diff --git a/tests/topotests/ospf-sr-topo1/r1/ospf_srdb.json b/tests/topotests/ospf-sr-topo1/r1/ospf_srdb.json index 652978aff8..0416bd6ce2 100644 --- a/tests/topotests/ospf-sr-topo1/r1/ospf_srdb.json +++ b/tests/topotests/ospf-sr-topo1/r1/ospf_srdb.json @@ -113,32 +113,32 @@ "extendedLink":[ { "prefix":"10.0.0.1\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r1-eth0", "nexthop":"10.0.0.2" }, { "prefix":"10.0.0.1\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r1-eth0", "nexthop":"10.0.0.2" }, { "prefix":"10.0.1.1\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r1-eth1", "nexthop":"10.0.1.2" }, { "prefix":"10.0.1.1\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r1-eth1", "nexthop":"10.0.1.2" diff --git a/tests/topotests/ospf-sr-topo1/r1/zebra_mpls.json b/tests/topotests/ospf-sr-topo1/r1/zebra_mpls.json index 88ba28da42..a0059e625e 100644 --- a/tests/topotests/ospf-sr-topo1/r1/zebra_mpls.json +++ b/tests/topotests/ospf-sr-topo1/r1/zebra_mpls.json @@ -71,8 +71,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-1":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -84,8 +84,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-2":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -97,8 +97,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-3":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -110,8 +110,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-4":{ + "inLabel":"*", "installed":true, "nexthops":[ { diff --git a/tests/topotests/ospf-sr-topo1/r2/ospf_srdb.json b/tests/topotests/ospf-sr-topo1/r2/ospf_srdb.json index 13437c9cf5..eb202b82cd 100644 --- a/tests/topotests/ospf-sr-topo1/r2/ospf_srdb.json +++ b/tests/topotests/ospf-sr-topo1/r2/ospf_srdb.json @@ -27,64 +27,64 @@ "extendedLink":[ { "prefix":"10.0.4.2\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r2-eth3", "nexthop":"10.0.4.1" }, { "prefix":"10.0.4.2\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r2-eth3", "nexthop":"10.0.4.1" }, { "prefix":"10.0.0.2\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r2-eth0", "nexthop":"10.0.0.1" }, { "prefix":"10.0.0.2\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r2-eth0", "nexthop":"10.0.0.1" }, { "prefix":"10.0.1.2\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r2-eth1", "nexthop":"10.0.1.1" }, { "prefix":"10.0.1.2\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r2-eth1", "nexthop":"10.0.1.1" }, { "prefix":"10.0.3.2\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r2-eth2", "nexthop":"10.0.3.1" }, { "prefix":"10.0.3.2\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r2-eth2", "nexthop":"10.0.3.1" diff --git a/tests/topotests/ospf-sr-topo1/r2/zebra_mpls.json b/tests/topotests/ospf-sr-topo1/r2/zebra_mpls.json index 2931b7dc34..a6dd22b5b7 100644 --- a/tests/topotests/ospf-sr-topo1/r2/zebra_mpls.json +++ b/tests/topotests/ospf-sr-topo1/r2/zebra_mpls.json @@ -45,8 +45,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-1":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -58,8 +58,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-2":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -71,8 +71,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-3":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -84,8 +84,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-4":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -97,8 +97,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-5":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -110,8 +110,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-6":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -123,8 +123,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-7":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -136,8 +136,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-8":{ + "inLabel":"*", "installed":true, "nexthops":[ { diff --git a/tests/topotests/ospf-sr-topo1/r3/ospf_srdb.json b/tests/topotests/ospf-sr-topo1/r3/ospf_srdb.json index d070aafb1e..b36fe674ad 100644 --- a/tests/topotests/ospf-sr-topo1/r3/ospf_srdb.json +++ b/tests/topotests/ospf-sr-topo1/r3/ospf_srdb.json @@ -77,16 +77,16 @@ "extendedLink":[ { "prefix":"10.0.3.1\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r3-eth0", "nexthop":"10.0.3.2" }, { "prefix":"10.0.3.1\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r3-eth0", "nexthop":"10.0.3.2" diff --git a/tests/topotests/ospf-sr-topo1/r3/zebra_mpls.json b/tests/topotests/ospf-sr-topo1/r3/zebra_mpls.json index c9264d8a42..6900f30502 100644 --- a/tests/topotests/ospf-sr-topo1/r3/zebra_mpls.json +++ b/tests/topotests/ospf-sr-topo1/r3/zebra_mpls.json @@ -38,8 +38,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-1":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -51,8 +51,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-2":{ + "inLabel":"*", "installed":true, "nexthops":[ { diff --git a/tests/topotests/ospf-sr-topo1/r4/ospf_srdb.json b/tests/topotests/ospf-sr-topo1/r4/ospf_srdb.json index 17c0ea276e..d92ec91c72 100644 --- a/tests/topotests/ospf-sr-topo1/r4/ospf_srdb.json +++ b/tests/topotests/ospf-sr-topo1/r4/ospf_srdb.json @@ -49,16 +49,16 @@ "extendedLink":[ { "prefix":"10.0.4.1\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r4-eth0", "nexthop":"10.0.4.2" }, { "prefix":"10.0.4.1\/32", - "sid":"XX", - "inputLabel":"XX", + "sid":"*", + "inputLabel":"*", "outputLabel":3, "interface":"r4-eth0", "nexthop":"10.0.4.2" diff --git a/tests/topotests/ospf-sr-topo1/r4/zebra_mpls.json b/tests/topotests/ospf-sr-topo1/r4/zebra_mpls.json index 3a829fa858..1fff699b58 100644 --- a/tests/topotests/ospf-sr-topo1/r4/zebra_mpls.json +++ b/tests/topotests/ospf-sr-topo1/r4/zebra_mpls.json @@ -50,8 +50,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-1":{ + "inLabel":"*", "installed":true, "nexthops":[ { @@ -63,8 +63,8 @@ } ] }, - "XX":{ - "inLabel":"XX", + "label-2":{ + "inLabel":"*", "installed":true, "nexthops":[ { diff --git a/tests/topotests/ospf-sr-topo1/test_ospf_sr_topo1.py b/tests/topotests/ospf-sr-topo1/test_ospf_sr_topo1.py index ac97ee7ebd..abf3bf3c02 100755 --- a/tests/topotests/ospf-sr-topo1/test_ospf_sr_topo1.py +++ b/tests/topotests/ospf-sr-topo1/test_ospf_sr_topo1.py @@ -29,6 +29,7 @@ test_ospf_sr_topo1.py: Test the FRR OSPF routing daemon with Segment Routing. import os import re import sys +import json from functools import partial # Save the Current Working Directory to find configuration files. @@ -113,37 +114,6 @@ def teardown_module(mod): logger.info("\n\n---- OSPF Segment Routing tests End ----\n") -# Shared test function to validate expected output. -def compare_ospf_srdb(rname, expected): - """ - Calls 'show ip ospf database segment-routing json' for router `rname` - and compare the obtained result with the expected output. - """ - tgen = get_topogen() - current = tgen.gears[rname].vtysh_cmd("show ip ospf database segment-routing json") - # Filter Adjacency SID allocation - current = re.sub(r'"sid":5000[0-9],', '"sid":"XX",', current) - current = re.sub(r'"inputLabel":5000[0-9],', '"inputLabel":"XX",', current) - return topotest.difflines( - current, expected, title1="Current output", title2="Expected output" - ) - - -def compare_mpls_table(rname, expected): - """ - Calls 'show mpls table json' for router `rname` and compare the obtained - result with the expected output. - """ - tgen = get_topogen() - current = tgen.gears[rname].vtysh_cmd("show mpls table json") - # Filter Adjacency SID allocation - current = re.sub(r'"5000[0-9]":', '"XX":', current) - current = re.sub(r'"inLabel":5000[0-9],', '"inLabel":"XX",', current) - return topotest.difflines( - current, expected, title1="Current output", title2="Expected output" - ) - - def test_ospf_sr(): "Test OSPF daemon Segment Routing" tgen = get_topogen() @@ -159,12 +129,15 @@ def test_ospf_sr(): # Load expected results from the command reffile = os.path.join(CWD, "{}/ospf_srdb.json".format(router)) - expected = open(reffile).read() + expected = json.loads(open(reffile).read()) # Run test function until we get an result. Wait at most 60 seconds. - test_func = partial(compare_ospf_srdb, router, expected) - result, diff = topotest.run_and_expect(test_func, "", count=25, wait=3) - assert result, ("OSPF did not start Segment Routing on {}:\n{}").format( + rt = tgen.gears[router] + test_func = partial( + topotest.router_json_cmp, rt, 'show ip ospf database segment-routing json', expected + ) + rv, diff = topotest.run_and_expect(test_func, None, count=25, wait=3) + assert rv, "OSPF did not start Segment Routing on {}:\n{}".format( router, diff ) @@ -177,6 +150,20 @@ def test_ospf_kernel_route(): logger.info("--- test OSPF Segment Routing MPLS tables ---") + def show_mpls_table_json_cmp(rt, expected): + "Removes random label and use `label-X` instead." + text = rt.vtysh_cmd('show mpls table json') + + # Substitue random labels with fixed label value. + for label in range(1, 10): + text = re.sub(r'"5000[0-9]"', '"label-{}"'.format(label), text, + count=1) + + print '\n{}\n'.format(text) + + output = json.loads(text) + return topotest.json_cmp(output, expected) + for rnum in range(1, 5): router = "r{}".format(rnum) @@ -184,12 +171,13 @@ def test_ospf_kernel_route(): # Load expected results from the command reffile = os.path.join(CWD, "{}/zebra_mpls.json".format(router)) - expected = open(reffile).read() + expected = json.loads(open(reffile).read()) # Run test function until we get an result. Wait at most 60 seconds. - test_func = partial(compare_mpls_table, router, expected) - result, diff = topotest.run_and_expect(test_func, "", count=25, wait=3) - assert result, ("OSPF did not properly instal MPLS table on {}:\n{}").format( + rt = tgen.gears[router] + test_func = partial(show_mpls_table_json_cmp, rt, expected) + rv, diff = topotest.run_and_expect(test_func, None, count=25, wait=3) + assert rv, "OSPF did not properly instal MPLS table on {}:\n{}".format( router, diff )