diff options
| author | nguggarigoud <nguggarigoud@vmware.com> | 2021-02-23 10:34:28 +0530 | 
|---|---|---|
| committer | nguggarigoud <nguggarigoud@vmware.com> | 2021-05-17 19:23:15 -0700 | 
| commit | 8694dd78db72e9050f62420da128c437d1039fd3 (patch) | |
| tree | 51131fda004545fa66b0e237bce734da08521818 | |
| parent | 5e6f6c964d70a2afbafeae50cb0ce5c343734973 (diff) | |
tests: adding ospf basic 2  testcases.
Test cases included are 1 ospf cost, 1 ospf mtu.
Signed-off-by: nguggarigoud <nguggarigoud@vmware.com>
| -rw-r--r-- | tests/topotests/lib/common_config.py | 1 | ||||
| -rw-r--r-- | tests/topotests/lib/ospf.py | 12 | ||||
| -rw-r--r-- | tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py | 85 | ||||
| -rw-r--r-- | tests/topotests/ospf_basic_functionality/test_ospf_single_area.py | 148 | 
4 files changed, 244 insertions, 2 deletions
diff --git a/tests/topotests/lib/common_config.py b/tests/topotests/lib/common_config.py index ba6004861e..5a904423c2 100644 --- a/tests/topotests/lib/common_config.py +++ b/tests/topotests/lib/common_config.py @@ -1788,6 +1788,7 @@ def create_interfaces_cfg(tgen, topo, build=False):                      "network",                      "priority",                      "cost", +                    "mtu_ignore"                  ]                  if "ospf" in data:                      interface_data += _create_interfaces_ospf_cfg( diff --git a/tests/topotests/lib/ospf.py b/tests/topotests/lib/ospf.py index 04a12d0eec..7ad64de4a1 100644 --- a/tests/topotests/lib/ospf.py +++ b/tests/topotests/lib/ospf.py @@ -352,6 +352,7 @@ def config_ospf_interface(tgen, topo, input_dict=None, build=False, load_config=              data_ospf_auth = ospf_data.setdefault("authentication", None)              data_ospf_dr_priority = ospf_data.setdefault("priority", None)              data_ospf_cost = ospf_data.setdefault("cost", None) +            data_ospf_mtu = ospf_data.setdefault("mtu_ignore", None)              try:                  intf = topo["routers"][router]["links"][lnk]["interface"] @@ -400,19 +401,26 @@ def config_ospf_interface(tgen, topo, input_dict=None, build=False, load_config=                      config_data.append(cmd)              # interface ospf dr priority -            if data_ospf_dr_priority in ospf_data: +            if data_ospf_dr_priority:                  cmd = "ip ospf priority {}".format(ospf_data["priority"])                  if "del_action" in ospf_data:                      cmd = "no {}".format(cmd)                  config_data.append(cmd)              # interface ospf cost -            if data_ospf_cost in ospf_data: +            if data_ospf_cost:                  cmd = "ip ospf cost {}".format(ospf_data["cost"])                  if "del_action" in ospf_data:                      cmd = "no {}".format(cmd)                  config_data.append(cmd) +            # interface ospf mtu +            if data_ospf_mtu: +                cmd = "ip ospf mtu-ignore" +                if 'del_action' in ospf_data: +                    cmd = "no {}".format(cmd) +                config_data.append(cmd) +              if build:                  return config_data              else: diff --git a/tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py b/tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py index 1432a82b12..9dfde325f6 100644 --- a/tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py +++ b/tests/topotests/ospf_basic_functionality/test_ospf_rte_calc.py @@ -62,6 +62,8 @@ from lib.ospf import (      verify_ospf_rib,      create_router_ospf,      redistribute_ospf, +    config_ospf_interface, +    verify_ospf_interface,  )  # Global variables @@ -576,6 +578,89 @@ def test_ospf_redistribution_tc8_p1(request):      write_test_footer(tc_name) +def test_ospf_cost_tc52_p0(request): +    """OSPF Cost - verifying ospf interface cost functionality""" +    tc_name = request.node.name +    write_test_header(tc_name) +    tgen = get_topogen() +    global topo +    step("Bring up the base config.") +    reset_config_on_routers(tgen) + +    step( +        "Configure ospf cost as 20 on interface between R0 and R1. " +        "Configure ospf cost as 30 between interface between R0 and R2." +    ) + +    r0_ospf_cost = { +        "r0": {"links": {"r1": {"ospf": {"cost": 20}}, "r2": {"ospf": {"cost": 30}}}} +    } +    result = config_ospf_interface(tgen, topo, r0_ospf_cost) +    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) + +    step( +        "Verify that cost is updated in the ospf interface between" +        " r0 and r1 as 30 and r0 and r2 as 20" +    ) +    dut = "r0" +    result = verify_ospf_interface(tgen, topo, dut=dut, input_dict=r0_ospf_cost) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    step( +        "Swap the costs between interfaces on r0, between r0 and r1 to 30" +        ", r0 and r2 to 20" +    ) + +    r0_ospf_cost = { +        "r0": {"links": {"r1": {"ospf": {"cost": 30}}, "r2": {"ospf": {"cost": 20}}}} +    } +    result = config_ospf_interface(tgen, topo, r0_ospf_cost) +    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) + +    step( +        "Verify that cost is updated in the ospf interface between r0 " +        "and r1 as 30 and r0 and r2 as 20." +    ) +    result = verify_ospf_interface(tgen, topo, dut=dut, input_dict=r0_ospf_cost) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    step(" Un configure cost from the interface r0 - r1.") + +    r0_ospf_cost = {"r0": {"links": {"r1": {"ospf": {"cost": 30, "del_action": True}}}}} +    result = config_ospf_interface(tgen, topo, r0_ospf_cost) +    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) + +    input_dict = { +        "r0": {"links": {"r1": {"ospf": {"cost": 10}}, "r2": {"ospf": {"cost": 20}}}} +    } +    step( +        "Verify that cost is updated in the ospf interface between r0" +        " and r1 as 10 and r0 and r2 as 20." +    ) + +    result = verify_ospf_interface(tgen, topo, dut=dut, input_dict=input_dict) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    step(" Un configure cost from the interface r0 - r2.") + +    r0_ospf_cost = {"r0": {"links": {"r2": {"ospf": {"cost": 20, "del_action": True}}}}} +    result = config_ospf_interface(tgen, topo, r0_ospf_cost) +    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) + +    step( +        "Verify that cost is updated in the ospf interface between r0" +        "and r1 as 10 and r0 and r2 as 10" +    ) + +    input_dict = { +        "r0": {"links": {"r1": {"ospf": {"cost": 10}}, "r2": {"ospf": {"cost": 10}}}} +    } +    result = verify_ospf_interface(tgen, topo, dut=dut, input_dict=input_dict) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    write_test_footer(tc_name) + +  if __name__ == "__main__":      args = ["-s"] + sys.argv[1:]      sys.exit(pytest.main(args)) diff --git a/tests/topotests/ospf_basic_functionality/test_ospf_single_area.py b/tests/topotests/ospf_basic_functionality/test_ospf_single_area.py index 6f6b119abc..e94680d974 100644 --- a/tests/topotests/ospf_basic_functionality/test_ospf_single_area.py +++ b/tests/topotests/ospf_basic_functionality/test_ospf_single_area.py @@ -101,6 +101,7 @@ TESTCASES =  2. OSPF Timers - Verify OSPF interface timer hello interval functionality  3. OSPF Timers - Verify OSPF interface timer dead interval functionality  4. Verify ospf show commands with json output. +5. Verify NFSM events when ospf nbr changes with different MTU values.   """ @@ -976,6 +977,153 @@ def test_ospf_dead_tc11_p0(request):      write_test_footer(tc_name) +def test_ospf_tc4_mtu_ignore_p0(request): +    """ +    OSPF NFSM - MTU change + +    Verify NFSM events when ospf nbr changes with different MTU values +    """ +    tc_name = request.node.name +    write_test_header(tc_name) +    tgen = get_topogen() + +    # Don't run this test if we have any failure. +    if tgen.routers_have_failure(): +        pytest.skip(tgen.errors) + +    global topo +    step(" Bring up the base config as per the topology") +    step("Configure OSPF on all the routers of the topology.") +    step("Verify that OSPF neighbors are FULL.") +    reset_config_on_routers(tgen) +    result = verify_ospf_neighbor(tgen, topo) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    step( +        "Modify the MTU to non default Value on R0 to R1 interface. " +        "Reset ospf neighbors on R0." +    ) + +    rtr0 = tgen.routers()["r0"] +    rtr1 = tgen.routers()["r1"] + +    r0_r1_intf = topo["routers"]["r0"]["links"]["r1"]["interface"] +    r1_r0_intf = topo["routers"]["r1"]["links"]["r0"]["interface"] + +    rtr0.run("ifconfig {} mtu 1200".format(r0_r1_intf)) + +    clear_ospf(tgen, "r0") + +    step( +        "Verify that OSPF neighborship between R0 and R1 is stuck in Exstart" " State." +    ) +    result = verify_ospf_neighbor(tgen, topo, expected=False) +    assert result is not True, ( +        "Testcase {} : Failed \n OSPF nbrs are Full " +        "instead of Exstart. Error: {}".format(tc_name, result) +    ) + +    step( +        "Verify that configured MTU value is updated in the show ip " "ospf interface." +    ) + +    dut = "r0" +    input_dict = {"r0": {"links": {"r1": {"ospf": {"mtuBytes": 1200}}}}} +    result = verify_ospf_interface(tgen, topo, dut=dut, input_dict=input_dict) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    step( +        "Modify the MTU to non default Value on R0 to R1 interface. " +        "Reset ospf neighbors on R0." +    ) +    rtr0.run("ifconfig {} mtu 1500".format(r0_r1_intf)) + +    clear_ospf(tgen, "r0") + +    step("Verify that OSPF neighborship between R0 and R1 becomes full.") +    result = verify_ospf_neighbor(tgen, topo) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    step( +        "Configure mtu ignore and change the value of the mtu to non default" +        " on R0 to R1 interface. Reset ospf neighbors on R0." +    ) +    r0_ospf_mtu = {"r0": {"links": {"r1": {"ospf": {"mtu_ignore": True}}}}} +    result = config_ospf_interface(tgen, topo, r0_ospf_mtu) +    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) + +    dut = "r0" +    input_dict = {"r0": {"links": {"r1": {"ospf": {"mtuMismatchDetect": True}}}}} +    result = verify_ospf_interface(tgen, topo, dut=dut, input_dict=input_dict) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    r1_ospf_mtu = {"r1": {"links": {"r0": {"ospf": {"mtu_ignore": True}}}}} +    result = config_ospf_interface(tgen, topo, r1_ospf_mtu) +    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) + +    rtr0.run("ifconfig {} mtu 1200".format(r0_r1_intf)) + +    clear_ospf(tgen, "r0") + +    step("Verify that OSPF neighborship between R0 and R1 becomes full.") +    result = verify_ospf_neighbor(tgen, topo) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    step( +        "Unconfigure mtu-ignore command from the interface. " +        "Reset ospf neighbors on R0." +    ) + +    r1_ospf_mtu = { +        "r1": {"links": {"r0": {"ospf": {"mtu_ignore": True, "delete": True}}}} +    } +    result = config_ospf_interface(tgen, topo, r1_ospf_mtu) +    assert result is True, "Testcase {} :Failed \n Error: {}".format(tc_name, result) + +    clear_ospf(tgen, "r0") + +    step( +        "Verify that OSPF neighborship between R0 and R1 is stuck in Exstart" " State." +    ) +    result = verify_ospf_neighbor(tgen, topo, expected=False) +    assert result is not True, ( +        "Testcase {} : Failed \n OSPF nbrs are Full " +        "instead of Exstart. Error: {}".format(tc_name, result) +    ) + +    step("Modify the MTU to again default valaue on R0 to R1 interface.") + +    rtr0.run("ifconfig {} mtu 1500".format(r0_r1_intf)) + +    clear_ospf(tgen, "r0") + +    step("Verify that OSPF neighborship between R0 and R1 becomes full.") +    result = verify_ospf_neighbor(tgen, topo) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    step( +        "Configure ospf interface with jumbo MTU (9216)." "Reset ospf neighbors on R0." +    ) + +    rtr0.run("ifconfig {} mtu 9216".format(r0_r1_intf)) +    rtr1.run("ifconfig {} mtu 9216".format(r1_r0_intf)) + +    clear_ospf(tgen, "r0") +    clear_ospf(tgen, "r1") + +    step("Verify that OSPF neighborship between R0 and R1 becomes full.") +    result = verify_ospf_neighbor(tgen, topo) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    step("Verify that jumbo MTU is updated in the show ip ospf interface.") +    dut = "r0" +    input_dict = {"r0": {"links": {"r1": {"ospf": {"mtuBytes": 9216}}}}} +    result = verify_ospf_interface(tgen, topo, dut=dut, input_dict=input_dict) +    assert result is True, "Testcase {} : Failed \n Error: {}".format(tc_name, result) + +    write_test_footer(tc_name) + +  if __name__ == "__main__":      args = ["-s"] + sys.argv[1:]      sys.exit(pytest.main(args))  | 
