zoukankan      html  css  js  c++  java
  • dts--framework(一)

    dts 大体框架

    framework
        定义类
        定义方法
    tests
        framework调用所需要的函数
    
    ./dpdk/usertools/cpu_layout.py    
    /sys/devices/system/cpu
    环境内核:0    1    2    3    4    5    6    7
    ffff:1111    1111    1111    1111
    ff3e:1111 1111    0011    1110

    dts.py

        01.dts_parse_param(config, section):
        02.dts_parse_config(config, section):
        03.dts_parse_commands(commands):
        04.dts_run_commands(crb, dts_commands):
        05.get_project_obj(project_name, super_class, crbInst, serializer, dut_id):
        06.dts_log_testsuite(duts, tester, suite_obj, log_handler, test_classname):
        07.dts_log_execution(duts, tester, log_handler):
        08.dts_crbs_init(crbInsts, skip_setup, read_cache, project, base_dir, serializer, virttype):
        09.dts_crbs_exit(duts, tester):
        10.dts_run_prerequisties(duts, tester, pkgName, patch, dts_commands, serializer):
        11.dts_run_target(duts, tester, targets, test_suites):
        12.dts_run_suite(duts, tester, test_suites, target):
        13.run_all(config_file, pkgName, git, patch, skip_setup, '''Main process of DTS, it will run all test suites in the config file.'''
                    read_cache, project, suite_dir, test_cases,
                    base_dir, output_dir, verbose, virttype, debug,
                    debugcase, re_run, commands):
        14.show_speedup_options_messages(read_cache, skip_setup):
        15.save_all_results():
        16.quit_execution(duts, tester):

    Main.py

    """
    A test framework for testing DPDK.
    """
    01.def git_build_package(gitLabel, pkgName, depot="dep"):
    dts.run_all(args.config_file, args.snapshot, args.git,                #args = parser.parse_args()
                args.patch, args.skip_setup, args.read_cache,
                args.project, args.suite_dir, args.test_cases,
                args.dir, args.output, args.verbose,args.virttype,
                args.debug, args.debugcase, args.re_run, args.commands)

    Crb.py

    class Crb(object):
        01.send_expect(self, cmds, expected, timeout=TIMEOUT,alt_session=False, verify=False):
        02.create_session(self, name=""):
        03.destroy_session(self, session=None):
        04.reconnect_session(self, alt_session=False):
        05.send_command(self, cmds, timeout=TIMEOUT, alt_session=False):
        06.get_session_output(self, timeout=TIMEOUT):
        07.set_test_types(self, func_tests, perf_tests):
        08.get_total_huge_pages(self):
        09.mount_huge_pages(self):
        10.strip_hugepage_path(self):
        11.set_huge_pages(self, huge_pages, numa=-1):
        12.set_speedup_options(self, read_cache, skip_setup):
        13.set_directory(self, base_dir):
        14.admin_ports(self, port, status):
        15.admin_ports_freebsd(self, port, status):
        16.admin_ports_linux(self, eth, status):
        17.pci_devices_information(self):
        18.pci_devices_information_uncached(self):
        19.pci_devices_information_uncached_linux(self):
        20.pci_devices_information_uncached_freebsd(self):
        21.get_pci_dev_driver(self, domain_id, bus_id, devfun_id):
        22.get_pci_dev_driver_linux(self, domain_id, bus_id, devfun_id):
        23.get_pci_dev_driver_freebsd(self, domain_id, bus_id, devfun_id):
        24.get_pci_dev_id(self, domain_id, bus_id, devfun_id):
        25.get_pci_dev_id_linux(self, domain_id, bus_id, devfun_id):
        26.get_device_numa(self, domain_id, bus_id, devfun_id):
        27.get_device_numa_linux(self, domain_id, bus_id, devfun_id):
        28.get_ipv6_addr(self, intf):
        29.get_ipv6_addr_linux(self, intf):
        30.get_ipv6_addr_freebsd(self, intf):
        31.disable_ipv6(self, intf):
        32.enable_ipv6(self, intf):
        33.create_file(self, contents, fileName):
        34.kill_all(self, alt_session=True):
        35.close(self):
        36.get_os_type(self):
        37.check_os_type(self):
        38.init_core_list(self):
        39.init_core_list_uncached(self):
        40.init_core_list_uncached_freebsd(self):
        41.init_core_list_uncached_linux(self):
        42.get_all_cores(self):
        43.remove_hyper_core(self, core_list, key=None):
        44.init_reserved_core(self):
        45.remove_reserved_cores(self, core_list, args):
        46.get_reserved_core(self, config, socket):
        47.get_core_list(self, config, socket=-1):
        48.get_lcore_id(self, config):
        49.get_port_info(self, pci):
        50.get_port_pci(self, port_id):
        51.enable_promisc(self, intf):

    Dut.py

    """
    A connection to the CRB under test.
    This class sends commands to the CRB and validates the responses. It is
    implemented using either ssh for linuxapp or the terminal server for
    baremetal.
    All operations are in fact delegated to an instance of either CRBLinuxApp
    or CRBBareMetal.
    """
        00.__init__(self, crb, serializer, dut_id)
        01.init_host_session(self, vm_name)
        02.new_session(self, suite="")
        03.close_session(self, session)
        04.set_nic_type(self, nic_type)
        05.set_toolchain(self, target)
        06.mount_procfs(self)
        07.ount_procfs_linux(self)
        08.mount_procfs_freebsd(self)
        09.get_ip_address(self)
        10.get_password(self)
        11.get_username(self)
        12.dut_prerequisites(self)
        13.restore_interfaces(self)
        14.restore_interfaces_freebsd(self)
        15.stop_ports(self)
        16.restore_interfaces_linux(self)
        17.setup_memory(self, hugepages=-1)
        18.setup_memory_linux(self, hugepages=-1)
        19.setup_memory_freebsd(self, hugepages=-1)
        20.taskset(self, core)
        21.is_ssh_session_port(self, pci_bus)
        22.get_dpdk_bind_script(self)
        23.bind_interfaces_linux(self, driver='igb_uio', nics_to_bind=None)
        24.unbind_interfaces_linux(self, nics_to_bind=None)
        25.get_ports(self, nic_type='any', perf=None, socket=None)
        26.get_ports_performance(self, nic_type='any', perf=None, socket=None,
                                      force_same_socket=True,
                                      force_different_nic=True)
        27.get_peer_pci(self, port_num)
        28.get_mac_address(self, port_num)
        29.get_ipv6_address(self, port_num)
        30.get_numa_id(self, port_num)
        31.lcore_table_print(self, horizontal=False)
        32.get_memory_channels(self)
        33.check_ports_available(self, pci_bus, pci_id)
        34.rescan_ports(self)
        35.rescan_ports_uncached(self)
        36.rescan_ports_uncached_linux(self)
        37.rescan_ports_uncached_freebsd(self)
        38.load_serializer_ports(self)
        39.save_serializer_ports(self)
        40.scan_ports(self)
        41.scan_ports_cached(self)
        42.scan_ports_cached_linux(self)
        43.scan_ports_uncached(self)
        44.scan_ports_uncached_linux(self)
        45.scan_ports_uncached_freebsd(self)
        46.setup_virtenv(self, virttype)
        47.generate_sriov_vfs_by_port(self, port_id, vf_num, driver='default')
        48.destroy_sriov_vfs_by_port(self, port_id)
        49.destroy_all_sriov_vfs(self)
        50.destroy_all_sriov_vfs(self)
        51.get_vm_core_list(self)
        52.load_portconf(self)
        53.map_available_ports(self)
        54.map_available_ports_uncached(self)
        55.disable_tester_ipv6(self)
        56.enable_tester_ipv6
        57.check_port_occupied
        58.get_maximal_vnc_num(self)
        59.close(self)
        60.virt_exit(self)
        61.crb_exit(self)

    test_cases.py

    """
    A base class for creating DTF test cases.
    """
    test_cases.py
        01.def __init__(self, duts, tester, target, suitename)
        02.def init_log(self)
        03._check_and_reconnect(self, crb=None)
        04.set_up_all(self)
        05.set_up(self)
        06.tear_down(self)
        07.tear_down_all(self)
        08.verify(self, passed, description)
        09._get_nic_driver(self, nic_name)
        10.set_check_inst(self, check=None)
        11.rst_report(self, *args, **kwargs)
        12.result_table_create(self, header)
        13.result_table_add(self, row)
        14.result_table_print(self)
        15.result_table_getrows(self)
        16._get_functional_cases(self)
        17._get_performance_cases(self)
        18._has_it_been_requested(self, test_case, test_name_regex)
        19.set_requested_cases(self, case_list)
        20._get_test_cases(self, test_name_regex)
        21.execute_setup_all(self)
        22._execute_test_case(self, case_obj)
        23.execute_test_cases(self)
        24.execute_test_case(self, case_obj)
        25.get_result(self)
        26.get_case_cfg(self)
        27.get_suite_cfg(self)
        28.execute_tear_downall(self)
        29.enable_history(self, history)
        30.dump_history(self)
        31.wirespeed(self, nic, frame_size, num_ports)

    CheckCase.py

    """
        Class for check test case running criteria. All information will be loaded
        from conf/test_case_*list.json. Current two files are maintained. One is
        for check whether test case should skip, another one is for check whether
        current environment support test case execution.
    """
    CheckCase.py
    filter_json_file = './conf/test_case_checklist.json'
    support_json_file = './conf/test_case_supportlist.json'
        00.__init__(self)
        01.check_dut(self, dut)
        02._check_os(self, os_type)
        03._check_nic(self, nic_type)
        04._check_target(self, target)
        05._check_host_driver(self, drivers)
        06.case_skip(self, case_name)
        07.case_support(self, case_name)
        
        
    settings.py
    """
    FOLDERS
        'Framework': 'framework',
        'Testscripts': 'tests',
        'Configuration': 'conf',
        'Depends': 'dep',
        'Output': 'output',
        'NicDriver': 'nics',
        
    Nics and its identifiers supported by the framework.
        'kawela': '8086:10e8',
        'kawela_2': '8086:10c9',
        'kawela_4': '8086:1526',
        'bartonhills': '8086:150e',
        'powerville': '8086:1521',
        'powerville_vf': '8086:1520',
        
    DRIVERS
        'kawela': 'igb',
        'kawela_2': 'igb',
        'kawela_4': 'igb',
        'bartonhills': 'igb',
        'powerville': 'igb',
        'powerville_vf': 'igbvf',
        
    List used to translate scapy packets into Ixia TCL commands.
    SCAPY2IXIA 
        'Ether',
        'Dot1Q',
        'IP',
        
    Helpful header sizes.
    HEADER_SIZE 
        'eth': 18,
        'ip': 20,
        'ipv6': 40,
        
    dpdk send protocol packet size.
    PROTOCOL_PACKET_SIZE = {
        'lldp': [110, 100],
    }
    Default session timeout.
    TIMEOUT = 15
    
    Global macro for dts.
    IXIA = "ixia"
    
    The log name seperater.
    LOG_NAME_SEP = '.'
    
    Section name for suite level configuration
    SUITE_SECTION_NAME = "suite"
    
    DTS global environment variable
    DTS_ENV_PAT = r"DTS_*"
    PERF_SETTING = "DTS_PERF_ONLY"
    
    DTS global error table
    DTS_ERR_TBL = {
        "GENERIC_ERR": 1,
        "DPDK_BUILD_ERR" : 2,
        "DUT_SETUP_ERR" : 3,
    
        00.get_nic_name(type)
        01.get_nic_driver(pci_id)
        02.get_netdev(crb, pci)
        03.get_host_ip(address)
        04.save_global_setting(key, value)
        05.load_global_setting(key)
        06.report_error(error)
        07.exit_error()
        08.accepted_nic(pci_id)

    utils.py

    """
        Create thread lock dictionary based on DUTs number
    """
    utils.py
        01.create_parallel_locks(num_duts)
        02.parallel_lock(num=1)
        03.RED(text)
        04.BLUE(text)
        05.GREEN(text)
        06.pprint(some_dict, serialzer=None)
        07.regexp(s, to_match, allString=False)
        08.get_obj_funcs(obj, func_name_regex)
        09.remove_old_rsa_key(crb, ip)
        10.human_read_number(num)
        11.get_subclasses(module, clazz)
        12.copy_instance_attr(from_inst, to_inst)
        13.create_mask(indexes)
        14.convert_int2ip(value, ip_type)
        15.convert_ip2int(ip_str, ip_type)
        16.get_backtrace_object(file_name, obj_name)
  • 相关阅读:
    (算法)Hanoi Problem汉诺塔问题
    (剑指Offer)面试题48:不能被继承的类
    (剑指Offer)面试题47:不用加减乘除做加法
    (剑指Offer)面试题46:求1+2+3+....+n
    (剑指Offer)面试题45:圆圈中最后剩下的数字
    程序员应该知道的15件事 在生活与工作中用他们来警惕自己
    基于REST架构的Web Service设计
    互联网上五个最高级的搜索引擎
    哈佛经济学家关于工作效率的意外发现
    列举一些常见的系统系能瓶颈 Common Bottlenecks
  • 原文地址:https://www.cnblogs.com/eilinge/p/9799265.html
Copyright © 2011-2022 走看看