def test_portchannel_interface_tc2_xfail(duthost, op, name,
        dummy_portchannel_interface_v4, dummy_portchannel_interface_v6):
    """ Test invalid ip address and remove unexited interface

    ("add", "PortChannel0001", "10.0.0.256/31", "FC00::71/126"), ADD Invalid IPv4 address
    ("add", "PortChannel0001", "10.0.0.56/31", "FC00::xyz/126"), ADD Invalid IPv6 address
    ("remove", "PortChannel0001", "10.0.0.57/31", "FC00::71/126"), REMOVE Unexist IPv4 address
    ("remove", "PortChannel0001", "10.0.0.56/31", "FC00::72/126"), REMOVE Unexist IPv6 address
    """

    dummy_portchannel_interface_v4 = name + "|" + dummy_portchannel_interface_v4
    dummy_portchannel_interface_v6 = name + "|" + dummy_portchannel_interface_v6
    json_patch = [
        {
            "op": "{}".format(op),
            "path": create_path(["PORTCHANNEL_INTERFACE", dummy_portchannel_interface_v4]),
            "value": {}
        },
        {
            "op": "{}".format(op),
            "path": create_path(["PORTCHANNEL_INTERFACE", dummy_portchannel_interface_v6]),
            "value": {}
        }
    ]

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

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #2
0
def test_vlan_interface_tc2_xfail(duthost, op, name, dummy_vlan_interface_v4,
                                  dummy_vlan_interface_v6):
    """ Test expect fail testcase

    ("add", "Vlan1000", "587.168.0.1/21", "fc02:1000::1/64"), ADD Invalid IPv4 address
    ("add", "Vlan1000", "192.168.0.1/21", "fc02:1000::xyz/64"), ADD Invalid IPv6 address
    ("remove", "Vlan1000", "192.168.0.2/21", "fc02:1000::1/64"), REMOVE Unexist IPv4 address
    ("remove", "Vlan1000", "192.168.0.1/21", "fc02:1000::2/64") REMOVE Unexist IPv6 address
    """
    dummy_vlan_interface_v4 = name + "|" + dummy_vlan_interface_v4
    dummy_vlan_interface_v6 = name + "|" + dummy_vlan_interface_v6

    json_patch = [{
        "op":
        "{}".format(op),
        "path":
        create_path(["VLAN_INTERFACE", dummy_vlan_interface_v4]),
        "value": {}
    }, {
        "op":
        "{}".format(op),
        "path":
        create_path(["VLAN_INTERFACE", dummy_vlan_interface_v6]),
        "value": {}
    }]

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

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #3
0
def test_tacacs_server_tc11_add_invalid(duthost, tacacs_server_options,
                                        invalid_input):
    """ Test invalid input for tacacs server

    valid input restriction:
        auth_type:[chap, pap, mschap, login]
        passkey: cannot contain space, "#" and ","
        priority: range[1, 64]
        tcp_port: [0, 65535]
        timeout: range[1, 60]
    """
    cleanup_tacacs_server(duthost)

    json_patch = [{
        "op": "add",
        "path": "/TACPLUS_SERVER",
        "value": {
            DEFAULT_TACACS_SERVER: {
                tacacs_server_options: invalid_input
            }
        }
    }]
    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

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

    finally:
        delete_tmpfile(duthost, tmpfile)
def test_pfcwd_interval_config_updates(duthost, ensure_dut_readiness, operation, field_pre_status, is_valid_config_update):
    new_interval = get_new_interval(duthost, is_valid_config_update)

    operation_to_new_value_map = {"add": "{}".format(new_interval), "replace": "{}".format(new_interval), "remove": ""}
    detection_time, restoration_time = get_detection_restoration_times(duthost)
    pre_status = max(detection_time, restoration_time)
    field_pre_status_to_value_map = {"existing": "{}".format(pre_status), "nonexistent": ""}
    
    prepare_pfcwd_interval_config(duthost, field_pre_status_to_value_map[field_pre_status]) 

    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {} created for json patch of pfcwd poll interval and operation: {}".format(tmpfile, operation))
    value = operation_to_new_value_map[operation]
    logger.info("value to be added to json patch: {}".format(value))

    json_patch = [
        {
            "op": "{}".format(operation), 
            "path": "/PFC_WD/GLOBAL/POLL_INTERVAL", 
            "value": "{}".format(value)
        }]
    
    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
    
        if is_valid_config_update:
            expect_op_success(duthost, output)
            ensure_application_of_updated_config(duthost, value)
        else:
            expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #5
0
def test_tacacs_global_tc6_invalid_input(duthost, tacacs_global_type,
                                         invalid_input):
    """ Test tacacs global invalid input

    option restriction:
        auth_type:[chap, pap, mschap, login]
        passkey: cannot contain space, "#" and ","
        timeout: range[1, 60]
    """
    json_patch = [{
        "op": "add",
        "path": "/TACPLUS",
        "value": {
            "global": {
                tacacs_global_type: invalid_input
            }
        }
    }]
    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

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

    finally:
        delete_tmpfile(duthost, tmpfile)
Example #6
0
def test_lo_interface_tc3_xfail(duthost, op, name,
        dummy_lo_interface_v4, dummy_lo_interface_v6):
    """ Test expect fail testcase

    ("add", "Loopback0", "587.1.0.32~132", "FC00:1::32~1128"), ADD Invalid IPv4 address
    ("add", "Loopback0", "10.1.0.32~132", "FC00:1::xyz~1128"), ADD Invalid IPv6 address
    ("remove", "Loopback0", "10.1.0.33~132", "FC00:1::32~1128"), REMOVE Unexist IPv4 address
    ("remove", "Loopback0", "10.1.0.32~132", "FC00:1::33~1128") REMOVE Unexist IPv6 address
    """
    dummy_lo_interface_v4 = name + "|" + dummy_lo_interface_v4
    dummy_lo_interface_v6 = name + "|" + dummy_lo_interface_v6

    json_patch = [
        {
            "op": "{}".format(op),
            "path": "/LOOPBACK_INTERFACE/{}".format(dummy_lo_interface_v4),
            "value": {}
        },
        {
            "op": "{}".format(op),
            "path": "/LOOPBACK_INTERFACE/{}".format(dummy_lo_interface_v6),
            "value": {}
        }
    ]

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

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #7
0
def test_update_speed(duthost, ensure_dut_readiness, speed, is_valid):
    json_patch = [{
        "op": "replace",
        "path": "/PORT/Ethernet0/speed",
        "value": "{}".format(speed)
    }]

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

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        if is_valid:
            expect_op_success(duthost, output)
            current_status_speed = check_interface_status(duthost,
                                                          "Speed").replace(
                                                              "G", "000")
            pytest_assert(
                current_status_speed == speed,
                "Failed to properly configure interface speed to requested value {}"
                .format(speed))
        else:
            expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #8
0
def test_dhcp_relay_tc2_rm_on_empty(duthost, init_dhcp_server_config,
                                    vlan_intfs_list):
    """Test remove dhcp server on no dhcp server setup
    """
    if init_dhcp_server_config != CONFIG_CLEANUP:
        pytest.skip("Unsupported init config")

    logger.info("vlan_intfs_list {}".format(vlan_intfs_list))
    dhcp_rm_on_empty_json = [{
        "op":
        "remove",
        "path":
        "/VLAN/Vlan" + str(vlan_intfs_list[0]) + "/dhcp_servers/1"
    }]

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

    try:
        output = apply_patch(duthost,
                             json_data=dhcp_rm_on_empty_json,
                             dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #9
0
def bgp_prefix_tc1_xfail(duthost, community_table):
    """ Test input with invalid prefixes
    """
    xfail_input = [
        ("add", "10.256.0.0/16", PREFIXES_V6_DUMMY),     # Invalid v4 prefix
        ("add", PREFIXES_V4_DUMMY, "fc01:xyz::/64"),     # Invalid v6 prefix
        ("remove", PREFIXES_V4_DUMMY, PREFIXES_V6_INIT), # Unexisted v4 prefix
        ("remove", PREFIXES_V4_INIT, PREFIXES_V6_DUMMY)  # Unexisted v6 prefix
    ]
    for op, prefixes_v4, prefixes_v6 in xfail_input:
        json_patch = [
            {
                "op": op,
                "path": "/BGP_ALLOWED_PREFIXES/DEPLOYMENT_ID|0{}/prefixes_v6/0".format(community_table),
                "value": prefixes_v6
            },
            {
                "op": op,
                "path": "/BGP_ALLOWED_PREFIXES/DEPLOYMENT_ID|0{}/prefixes_v4/0".format(community_table),
                "value": prefixes_v4
            }
        ]

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

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

        finally:
            delete_tmpfile(duthost, tmpfile)
Example #10
0
def test_syslog_server_tc3_xfail(duthost, init_syslog_config, op,
                                 dummy_syslog_server_v4,
                                 dummy_syslog_server_v6):
    """ Test expect fail testcase

    ("add", "10.0.0.587", "cc98:2008::1"), ADD Invalid IPv4 address
    ("add", "10.0.0.5", "cc98:2008::xyz"), ADD Invalid IPv6 address
    ("remove", "10.0.0.6", "cc98:2008:1"), REMOVE Unexist IPv4 address
    ("remove", "10.0.0.5", "cc98:2008::2") REMOVE Unexist IPv6 address
    """
    if init_syslog_config != CONFIG_ADD_DEFAULT:
        pytest.skip("Unsupported initial config")

    json_patch = [{
        "op": "{}".format(op),
        "path": "/SYSLOG_SERVER/{}".format(dummy_syslog_server_v4),
        "value": {}
    }, {
        "op": "{}".format(op),
        "path": "/SYSLOG_SERVER/{}".format(dummy_syslog_server_v6),
        "value": {}
    }]
    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #11
0
def test_syslog_server_tc3_xfail(duthost, setup_env, op,
                                 dummy_syslog_server_v4,
                                 dummy_syslog_server_v6):
    """ Test expect fail testcase

    ("add", "10.0.0.587", "cc98:2008::1"), ADD Invalid IPv4 address
    ("add", "10.0.0.5", "cc98:2008::xyz"), ADD Invalid IPv6 address
    ("remove", "10.0.0.6", "cc98:2008:1"), REMOVE Unexist IPv4 address
    ("remove", "10.0.0.5", "cc98:2008::2") REMOVE Unexist IPv6 address
    """
    json_patch = [{
        "op": "{}".format(op),
        "path": "/SYSLOG_SERVER/{}".format(dummy_syslog_server_v4),
        "value": {}
    }, {
        "op": "{}".format(op),
        "path": "/SYSLOG_SERVER/{}".format(dummy_syslog_server_v6),
        "value": {}
    }]
    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))

    output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
    expect_op_failure(output)

    delete_tmpfile(duthost, tmpfile)
Example #12
0
def cacl_tc7_remove_unexist_rule(duthost):
    """ Remove unexisted acl rule
    """
    json_patch = [{"op": "remove", "path": "/ACL_RULE/SSH_ONLY|TEST_DROP2"}]
    tmpfile = generate_tmpfile(duthost)
    logger.info("tmpfile {}".format(tmpfile))
    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #13
0
def test_remove_lanes(duthost, ensure_dut_readiness):
    json_patch = [{"op": "remove", "path": "/PORT/Ethernet0/lanes"}]

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

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #14
0
def test_cacl_tc9_remove_table_before_rule(duthost):
    """ Remove acl table before removing acl rule
    """
    json_patch = [{"op": "remove", "path": "/ACL_TABLE"}]

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

    output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
    expect_op_failure(output)

    delete_tmpfile(duthost, tmpfile)
Example #15
0
def test_cacl_tc10_remove_unexist_rule_or_table(duthost,
                                                unexist_rule_or_table):
    """ Remove unexisted acl rule or acl table
    """
    json_patch = [{"op": "remove", "path": "{}".format(unexist_rule_or_table)}]

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

    output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
    expect_op_failure(output)

    delete_tmpfile(duthost, tmpfile)
Example #16
0
def test_invalid_ipv6_neighbor(duthost, ensure_dut_readiness, op,
                               dummy_neighbor_ipv6_address):
    json_patch = [{
        "op":
        "{}".format(op),
        "path":
        "/BGP_NEIGHBOR/{}".format(dummy_neighbor_ipv6_address),
        "value": {}
    }]

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

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #17
0
def test_update_valid_invalid_index(duthost, ensure_dut_readiness, index,
                                    is_valid):
    json_patch = [{
        "op": "replace",
        "path": "/PORT/Ethernet0/index",
        "value": "{}".format(index)
    }]

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

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        if is_valid:
            expect_op_success(duthost, output)
        else:
            expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #18
0
def test_tacacs_server_tc10_add_max(duthost):
    """ Test tacacs server reach maximum 8 servers
    """
    cleanup_tacacs_server(duthost)

    servers = {}
    for i in range(10, 19):  # Add 9 servers
        servers["10.0.0.{}".format(i)] = {}
    json_patch = [{"op": "add", "path": "/TACPLUS_SERVER", "value": servers}]

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

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

    finally:
        delete_tmpfile(duthost, tmpfile)
Example #19
0
def test_replace_lanes(duthost, ensure_dut_readiness):
    cur_lanes = check_interface_status(duthost, "Lanes")
    cur_lanes = cur_lanes.split(",")
    cur_lanes.sort()
    update_lanes = cur_lanes
    update_lanes[-1] = str(int(update_lanes[-1]) + 1)
    update_lanes = ",".join(update_lanes)
    json_patch = [{
        "op": "replace",
        "path": "/PORT/Ethernet0/lanes",
        "value": "{}".format(update_lanes)
    }]

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

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #20
0
def test_cacl_tc4_add_invalid_table(duthost):
    """ Add invalid acl table with wrong type
    """
    json_patch = [{
        "op": "add",
        "path": "/ACL_TABLE/TEST_2",
        "value": {
            "policy_desc": "Test Table 2",
            "services": ["SSH"],
            "stage": "ingress",
            "type": "CONTROLLING PLANE"
        }
    }]

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

    output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
    expect_op_failure(output)

    delete_tmpfile(duthost, tmpfile)
Example #21
0
def test_dhcp_relay_tc4_add_exist(duthost, setup_vlan, init_dhcp_server_config,
                                  vlan_intfs_list):
    """Test add existed dhcp server on default setup
    """
    if init_dhcp_server_config != "default_setup":
        pytest.skip("Unsupported init config")

    dhcp_add_exist_json = [{
        "op": "add",
        "path": "/VLAN/Vlan" + str(vlan_intfs_list[0]) + "/dhcp_servers/2",
        "value": "192.0." + str(vlan_intfs_list[0]) + ".3"
    }]

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

    output = apply_patch(duthost,
                         json_data=dhcp_add_exist_json,
                         dest_file=tmpfile)
    expect_op_failure(output)

    delete_tmpfile(duthost, tmpfile)
Example #22
0
def test_syslog_server_tc6_exceed_max(duthost, setup_env):
    """ Exceed syslog server maximum test
    """
    if SYSLOG_MAX_SERVER == -1 or SYSLOG_MAX_SERVER > SYSLOG_TEST_MAX_UPPER_LIMIT:
        pytest.skip(
            "SYSLOG_MAX_SERVER is not set or is over the test max upper limit")

    json_patch = [{
        "op":
        "add",
        "path":
        "/SYSLOG_SERVER/10.0.0.{}".format(SYSLOG_MAX_SERVER + 1),
        "value": {}
    }]

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

    output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
    expect_op_failure(output)

    delete_tmpfile(duthost, tmpfile)
Example #23
0
def test_cacl_tc4_add_invalid_table(duthost):
    """ Add invalid acl table
    """
    invalid_table = [
        {
            "service": "SSH",
            "stage": "ogress",
            "type": "CTRLPLANE"
        },  # wrong stage
        {
            "service": "SSH",
            "stage": "ingress",
            "type": "TRLPLANE"
        }  # wrong type
    ]

    for ele in invalid_table:
        json_patch = [{
            "op": "add",
            "path": "/ACL_TABLE/TEST_2",
            "value": {
                "policy_desc": "Test_Table_2",
                "services": ["{}".format(ele["service"])],
                "stage": "{}".format(ele["stage"]),
                "type": "{}".format(ele["type"])
            }
        }]

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

        try:
            output = apply_patch(duthost,
                                 json_data=json_patch,
                                 dest_file=tmpfile)
            expect_op_failure(output)
        finally:
            delete_tmpfile(duthost, tmpfile)
Example #24
0
def test_cacl_tc8_add_invalid_rule(duthost):
    """ Add invalid acl rule for test
    """
    json_patch = [{
        "op": "add",
        "path": "/ACL_RULE/TEST_2|TEST_DROP",
        "value": {
            "L4_DST_PORT": "22",
            "IP_PROTOCOL": "6",
            "IP_TYPE": "IP",
            "PACKET_ACTION": "DROP",
            "PRIORITY": "9998",
            "SRC_IP": "9.9.9.9/32"
        }
    }]

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

    output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
    expect_op_failure(output)

    delete_tmpfile(duthost, tmpfile)
Example #25
0
def test_dhcp_relay_tc3_rm_nonexist(duthost, init_dhcp_server_config,
                                    vlan_intfs_list):
    """Test remove nonexisted dhcp server on default setup
    """
    if init_dhcp_server_config != CONFIG_ADD_DEFAULT:
        pytest.skip("Unsupported init config")

    dhcp_rm_nonexist_json = [{
        "op":
        "remove",
        "path":
        "/VLAN/Vlan" + str(vlan_intfs_list[0]) + "/dhcp_servers/5"
    }]

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

    try:
        output = apply_patch(duthost,
                             json_data=dhcp_rm_nonexist_json,
                             dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)
Example #26
0
def cacl_tc7_add_rule_to_unexisted_table(duthost):
    """ Add acl rule to unexisted table
    """
    json_patch = [{
        "op": "add",
        "path": "/ACL_RULE/TEST_2|TEST_DROP",
        "value": {
            "L4_DST_PORT": "22",
            "IP_PROTOCOL": "6",
            "IP_TYPE": "IP",
            "PACKET_ACTION": "DROP",
            "PRIORITY": "9998",
            "SRC_IP": "9.9.9.9/32"
        }
    }]

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

    try:
        output = apply_patch(duthost, json_data=json_patch, dest_file=tmpfile)
        expect_op_failure(output)
    finally:
        delete_tmpfile(duthost, tmpfile)