def test_portchannel_interface_tc2_add_duplicate(duthost):
    """ Test adding duplicate portchannel interface
    """
    json_patch = [
        {
            "op": "add",
            "path": create_path(["PORTCHANNEL_INTERFACE", "PortChannel0001|10.0.0.56/31"]),
            "value": {}
        },
        {
            "op": "add",
            "path": create_path(["PORTCHANNEL_INTERFACE", "PortChannel0001|FC00::71/126"]),
            "value": {}
        }
    ]

    logger.info("json patch {}".format(json_patch))

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost, "PortChannel0001", ["10.0.0.56/31"], [], is_ipv4=True)
        check_show_ip_intf(duthost, "PortChannel0001", ["fc00::71/126"], [], is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #2
0
def test_lo_interface_tc6_vrf_change(duthost):
    """ Replace lo interface vrf

    admin@vlab-01:~$ show ip interfaces | grep Loopback0
    Loopback0        Vrf_02    10.1.0.32/32         up/up         N/A             N/A
    admin@vlab-01:~$ show ipv6 interfaces | grep Loopback0
    Loopback0        Vrf_02           fc00:1::32/128                              up/up         N/A             N/A
                                      fe80::a8cb:e8ff:fe6e:df6e%Loopback0/64                    N/A             N/A
    admin@vlab-01:~$ show ip route vrf Vrf_02
    VRF Vrf_02:
    C>* 10.1.0.32/32 is directly connected, Loopback0, 00:00:17
    """
    setup_vrf_config(duthost)
    json_patch = [
        {
            "op": "replace",
            "path": "/LOOPBACK_INTERFACE/Loopback0/vrf_name",
            "value": "Vrf_02"
        }
    ]

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost, "Loopback0", ["10.1.0.32/32", "Vrf_02"], [], is_ipv4=True)
        check_show_ip_intf(duthost, "Loopback0", ["fc00:1::32/128", "Vrf_02"], [], is_ipv4=False)

        check_vrf_route_for_intf(duthost, "Vrf_02", "Loopback0", is_ipv4=True)
        check_vrf_route_for_intf(duthost, "Vrf_02", "Loopback0", is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #3
0
def test_lo_interface_tc2_add_duplicate(duthost):
    """ Add v4 and v6 duplicate lo intf to config

    Note: the Identifier '/' as changed to '~1'
    Initial Loopback setup in t0
    "LOOPBACK_INTERFACE": {
        "Loopback0": {},
        "Loopback0|10.1.0.32/32": {},
        "Loopback0|FC00:1::32/128": {}
    }
    """
    json_patch = [
        {
            "op": "add",
            "path": "/LOOPBACK_INTERFACE/Loopback0|10.1.0.32~132",
            "value": {}
        },
        {
            "op": "add",
            "path": "/LOOPBACK_INTERFACE/Loopback0|FC00:1::32~1128",
            "value": {}
        }
    ]

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost, "Loopback0", ["10.1.0.32/32"], [], is_ipv4=True)
        check_show_ip_intf(duthost, "Loopback0", ["fc00:1::32/128"], [], is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #4
0
def test_portchannel_interface_tc1_add_new_portchannel(duthost):
    """ Clean up original portchannel intf and apply-patch to default config

    Expected output
    admin@vlab-01:~$ show ip interfaces
    Interface        Master    IPv4 address/mask    Admin/Oper    BGP Neighbor    Neighbor IP
    ---------------  --------  -------------------  ------------  --------------  -------------
    ...
    PortChannel0005            10.0.0.64/31         up/down       N/A             N/A
    admin@vlab-01:~$ show ipv6 interfaces
    Interface        Master           IPv4 address/mask                           Admin/Oper    BGP Neighbor    Neighbor IP
    ---------------  ---------------  ------------------------------------------  ------------  --------------  -------------
    ...
    PortChannel0005                   fc00::81/126                                up/down       N/A             N/A
    """

    json_patch = [{
        "op": "add",
        "path": "/PORTCHANNEL/PortChannel0005",
        "value": {
            "admin_status": "up"
        }
    }, {
        "op": "add",
        "path": "/PORTCHANNEL_INTERFACE/PortChannel0005",
        "value": {}
    }, {
        "op":
        "add",
        "path":
        create_path(["PORTCHANNEL_INTERFACE", "PortChannel0005|10.0.0.64/31"]),
        "value": {}
    }, {
        "op":
        "add",
        "path":
        create_path(["PORTCHANNEL_INTERFACE", "PortChannel0005|FC00::81/126"]),
        "value": {}
    }]

    logger.info("json patch {}".format(json_patch))

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost,
                           "PortChannel0005", ["10.0.0.64/31"], [],
                           is_ipv4=True)
        check_show_ip_intf(duthost,
                           "PortChannel0005", ["fc00::81/126"], [],
                           is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #5
0
def check_portchannel_table(duthost, portchannel_table):
    """This is to check if portchannel interfaces are the same as t0 initial setup
    """
    for portchannel_name, ips in portchannel_table.items():
        check_show_ip_intf(duthost,
                           portchannel_name, [ips['ip']], [],
                           is_ipv4=True)
        check_show_ip_intf(duthost,
                           portchannel_name, [ips['ipv6']], [],
                           is_ipv4=False)
Пример #6
0
def test_portchannel_interface_tc3_replace(duthost, portchannel_table):
    """ Test portchannel interface replace ip address
    """
    org_ip = portchannel_table["PortChannel101"]["ip"]
    org_ipv6 = portchannel_table["PortChannel101"]["ipv6"]
    rep_ip = "10.0.0.156/31"
    rep_ipv6 = "fc00::171/126"
    json_patch = [{
        "op":
        "remove",
        "path":
        create_path(
            ["PORTCHANNEL_INTERFACE", "PortChannel101|{}".format(org_ip)])
    }, {
        "op":
        "remove",
        "path":
        create_path([
            "PORTCHANNEL_INTERFACE",
            "PortChannel101|{}".format(org_ipv6.upper())
        ])
    }, {
        "op":
        "add",
        "path":
        create_path(
            ["PORTCHANNEL_INTERFACE", "PortChannel101|{}".format(rep_ip)]),
        "value": {}
    }, {
        "op":
        "add",
        "path":
        create_path(
            ["PORTCHANNEL_INTERFACE", "PortChannel101|{}".format(rep_ipv6)]),
        "value": {}
    }]

    logger.info("json patch {}".format(json_patch))

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost,
                           "PortChannel101", [rep_ip], [org_ip],
                           is_ipv4=True)
        check_show_ip_intf(duthost,
                           "PortChannel101", [rep_ipv6], [org_ipv6],
                           is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #7
0
def test_vlan_interface_tc4_replace(duthost):
    """ Test replace testcase

    Expected output
        "VLAN_INTERFACE": {
        "Vlan1000": {},
        "Vlan1000|192.168.0.2/21": {},
        "Vlan1000|fc02:1000::2/64": {}
    }
    """
    json_patch = [{
        "op":
        "remove",
        "path":
        create_path(["VLAN_INTERFACE", "Vlan1000|fc02:1000::1/64"]),
    }, {
        "op":
        "remove",
        "path":
        create_path(["VLAN_INTERFACE", "Vlan1000|192.168.0.1/21"]),
    }, {
        "op":
        "add",
        "path":
        create_path(["VLAN_INTERFACE", "Vlan1000|192.168.0.2/21"]),
        "value": {}
    }, {
        "op":
        "add",
        "path":
        create_path(["VLAN_INTERFACE", "Vlan1000|fc02:1000::2/64"]),
        "value": {}
    }]

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost,
                           "Vlan1000", ["192.168.0.2/21"], ["192.168.0.1/21"],
                           is_ipv4=True)
        check_show_ip_intf(duthost,
                           "Vlan1000", ["fc02:1000::2/64"],
                           ["fc02:1000::1/64"],
                           is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #8
0
def test_lo_interface_tc4_replace(duthost):
    """ Replace v4 and v6 loopback intf ip
    Expected output
    "LOOPBACK_INTERFACE": {
        "Loopback0": {},
        "Loopback0|10.1.0.33/32": {},
        "Loopback0|FC00:1::33/128": {}
    }
    admin@vlab-01:~$ show ip interfaces | grep Loopback0
    Loopback0                  10.1.0.33/32         up/up         N/A             N/A
    admin@vlab-01:~$ show ipv6 interfaces | grep Loopback0
    Loopback0                         fc00:1::33/128                              up/up         N/A             N/A
                                      fe80::a8cb:e8ff:fe6e:df6e%Loopback0/64                    N/A             N/A
    """
    json_patch = [
        {
            "op": "remove",
            "path": "/LOOPBACK_INTERFACE/Loopback0|FC00:1::32~1128"
        },
        {
            "op": "remove",
            "path": "/LOOPBACK_INTERFACE/Loopback0|10.1.0.32~132"
        },
        {
            "op": "add",
            "path": "/LOOPBACK_INTERFACE/Loopback0|10.1.0.33~132",
            "value": {}
        },
        {
            "op": "add",
            "path": "/LOOPBACK_INTERFACE/Loopback0|FC00:1::33~1128",
            "value": {}
        }
    ]

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost, "Loopback0", ["10.1.0.33/32"], ["10.1.0.32/32"], is_ipv4=True)
        check_show_ip_intf(duthost, "Loopback0", ["fc00:1::33/128"], ["fc00:1::32/128"], is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #9
0
def test_vlan_interface_tc5_remove(duthost):
    """ Remove all VLAN intf
    """
    json_patch = [{"op": "remove", "path": "/VLAN_INTERFACE"}]

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost,
                           "Vlan1000", [], ["192.168.0.1/21"],
                           is_ipv4=True)
        check_show_ip_intf(duthost,
                           "Vlan1000", [], ["fc02:1000::1/64"],
                           is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #10
0
def test_vlan_interface_tc1_add_duplicate(duthost):
    """ Add duplicate v4 and v6 lo intf to config

    Sample output
        "VLAN_INTERFACE": {
        "Vlan1000": {},
        "Vlan1000|192.168.0.1/21": {},
        "Vlan1000|fc02:1000::1/64": {}
    }
    """
    json_patch = [{
        "op":
        "add",
        "path":
        create_path(["VLAN_INTERFACE", "Vlan1000|192.168.0.1/21"]),
        "value": {}
    }, {
        "op":
        "add",
        "path":
        create_path(["VLAN_INTERFACE", "Vlan1000|fc02:1000::1/64"]),
        "value": {}
    }]

    logger.info("json patch {}".format(json_patch))

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost,
                           "Vlan1000", ["192.168.0.1/21"], [],
                           is_ipv4=True)
        check_show_ip_intf(duthost,
                           "Vlan1000", ["fc02:1000::1/64"], [],
                           is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #11
0
def setup_vrf_config(duthost):
    """Create two vrf and bind Loopback0 to Vrf_01

    admin@vlab-01:~$ show ip interfaces | grep Loopback0
    Loopback0        Vrf_01    10.1.0.32/32         up/up         N/A             N/A
    admin@vlab-01:~$ show ipv6 interfaces | grep Loopback0
    Loopback0        Vrf_01           fc00:1::32/128                              up/up         N/A             N/A
                                      fe80::a8cb:e8ff:fe6e:df6e%Loopback0/64                    N/A             N/A
    admin@vlab-01:~$ show ip route vrf Vrf_01
    VRF Vrf_01:
    C>* 10.1.0.32/32 is directly connected, Loopback0, 00:00:13

    """
    cmds = []
    cmds.append("config vrf add Vrf_01")
    cmds.append("config vrf add Vrf_02")

    output = duthost.shell_cmds(cmds=cmds)

    json_patch = [
        {
            "op": "add",
            "path": "/LOOPBACK_INTERFACE/Loopback0/vrf_name",
            "value": "Vrf_01"
        }
    ]

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost, "Loopback0", ["10.1.0.32/32", "Vrf_01"], [], is_ipv4=True)
        check_show_ip_intf(duthost, "Loopback0", ["fc00:1::32/128", "Vrf_01"], [], is_ipv4=False)

        check_vrf_route_for_intf(duthost, "Vrf_01", "Loopback0", is_ipv4=True)
        check_vrf_route_for_intf(duthost, "Vrf_01", "Loopback0", is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #12
0
def test_portchannel_interface_tc4_remove(duthost, portchannel_table):
    """ Test remove all portchannel intf
    """
    json_patch = [{"op": "remove", "path": "/PORTCHANNEL_INTERFACE"}]

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        for portchannel_name, ips in portchannel_table.items():
            check_show_ip_intf(duthost,
                               portchannel_name, [], [ips['ip']],
                               is_ipv4=True)
            check_show_ip_intf(duthost,
                               portchannel_name, [], [ips['ipv6']],
                               is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #13
0
def setup_env(duthosts, rand_one_dut_hostname):
    """
    Setup/teardown fixture for each loopback interface test.
    rollback to check if it goes back to starting config without vrf set

    Args:
        duthosts: list of DUTs.
        rand_selected_dut: The fixture returns a randomly selected DuT.
    """
    duthost = duthosts[rand_one_dut_hostname]
    create_checkpoint(duthost)

    yield

    try:
        logger.info("Rolled back to original checkpoint")
        rollback_or_reload(duthost)
        check_show_ip_intf(duthost, "Loopback0", ["10.1.0.32/32"], ["Vrf"], is_ipv4=True)
        check_show_ip_intf(duthost, "Loopback0", ["fc00:1::32/128"], ["Vrf"], is_ipv4=False)
    finally:
        delete_checkpoint(duthost)
Пример #14
0
def test_lo_interface_tc5_remove(duthost):
    """ Remove v4 and v6 loopback intf config
    """
    json_patch = [
        {
            "op": "remove",
            "path": "/LOOPBACK_INTERFACE"
        }
    ]

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost, "Loopback0", [], ["10.1.0.32/32"], is_ipv4=True)
        check_show_ip_intf(duthost, "Loopback0", [], ["fc00:1::32/128"], is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #15
0
def test_portchannel_interface_tc2_add_duplicate(duthost, portchannel_table):
    """ Test adding duplicate portchannel interface
    """
    dup_ip = portchannel_table["PortChannel101"]["ip"]
    dup_ipv6 = portchannel_table["PortChannel101"]["ipv6"]
    json_patch = [{
        "op":
        "add",
        "path":
        create_path(
            ["PORTCHANNEL_INTERFACE", "PortChannel101|{}".format(dup_ip)]),
        "value": {}
    }, {
        "op":
        "add",
        "path":
        create_path([
            "PORTCHANNEL_INTERFACE",
            "PortChannel101|{}".format(dup_ipv6.upper())
        ]),
        "value": {}
    }]

    logger.info("json patch {}".format(json_patch))

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost,
                           "PortChannel101", [dup_ip], [],
                           is_ipv4=True)
        check_show_ip_intf(duthost,
                           "PortChannel101", [dup_ipv6], [],
                           is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #16
0
def cleanup_test_env(duthosts, rand_one_dut_hostname):
    """
    Setup/teardown fixture for VLAN interface config
    Args:
        duthosts: list of DUTs.
        rand_selected_dut: The fixture returns a randomly selected DuT.
    """
    duthost = duthosts[rand_one_dut_hostname]
    create_checkpoint(duthost)

    yield

    try:
        logger.info("Rolled back to original checkpoint")
        rollback_or_reload(duthost)
        check_show_ip_intf(duthost,
                           "Vlan1000", ["192.168.0.1/21"], [],
                           is_ipv4=True)
        check_show_ip_intf(duthost,
                           "Vlan1000", ["fc02:1000::1/64"], [],
                           is_ipv4=False)
    finally:
        delete_checkpoint(duthost)
Пример #17
0
def test_lo_interface_tc1_add_init(duthost, cfg_facts):
    """ Clean up orig lo interface and test initial addion of v4 and v6 lo intf

    Expected output
    "LOOPBACK_INTERFACE": {
        "Loopback0": {},
        "Loopback0|10.1.0.32/32": {},
        "Loopback0|FC00:1::32/128": {}
    }
    """
    cleanup_lo_interface_config(duthost, cfg_facts)

    json_patch = [
        {
            "op": "add",
            "path": "/LOOPBACK_INTERFACE",
            "value": {
                "Loopback0": {},
                "Loopback0|10.1.0.32/32": {},
                "Loopback0|FC00:1::32/128": {}
            }
        }
    ]

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost, "Loopback0", ["10.1.0.32/32"], [], is_ipv4=True)
        check_show_ip_intf(duthost, "Loopback0", ["fc00:1::32/128"], [], is_ipv4=False)

    finally:
        delete_tmpfile(duthost, tmpfile)
Пример #18
0
def test_vlan_interface_tc3_add_new(duthost):
    """ Add an brand new vlan interface Vlan2000

    Sample output:
    "VLAN": {
        "Vlan1000": {
            "dhcp_servers": [
                "192.0.0.1",
                "192.0.0.2",
                "192.0.0.3",
                "192.0.0.4"
            ],
            "vlanid": "1000"
        },
        "Vlan2000": {
            "vlanid": "2000"
        }
    },
    "VLAN_INTERFACE": {
        "Vlan1000": {},
        "Vlan2000": {},
        "Vlan1000|192.168.0.1/21": {},
        "Vlan1000|fc02:1000::1/64": {},
        "Vlan2000|192.168.8.1/21": {},
        "Vlan2000|fc02:2000::1/64": {}
    }

    admin@vlab-01:~/vlan$ show ip interfaces | grep -w Vlan2000
    Vlan2000                   192.168.8.1/21       up/up         N/A             N/A
    admin@vlab-01:~/vlan$ show ipv6 interfaces | grep -w Vlan2000
    Vlan2000                          fc02:2000::1/64                             up/up         N/A             N/A
                                      fe80::5054:ff:feda:c6af%Vlan2000/64                       N/A             N/A

    """
    json_patch = [{
        "op": "add",
        "path": "/VLAN_INTERFACE/Vlan2000",
        "value": {}
    }, {
        "op":
        "add",
        "path":
        create_path(["VLAN_INTERFACE", "Vlan2000|192.168.8.1/21"]),
        "value": {}
    }, {
        "op":
        "add",
        "path":
        create_path(["VLAN_INTERFACE", "Vlan2000|fc02:2000::1/64"]),
        "value": {}
    }, {
        "op": "add",
        "path": "/VLAN/Vlan2000",
        "value": {
            "vlanid": "2000"
        }
    }]

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_success(duthost, output)

        check_show_ip_intf(duthost,
                           "Vlan2000", ["192.168.8.1/21"], [],
                           is_ipv4=True)
        check_show_ip_intf(duthost,
                           "Vlan2000", ["fc02:2000::1/64"], [],
                           is_ipv4=False)
    finally:
        delete_tmpfile(duthost, tmpfile)