Ejemplo n.º 1
0
def run_tests(args, iut_config, tty):
    """Run test cases
    :param args: AutoPTS arguments
    :param iut_config: IUT configuration
    :param tty path
    :return: tuple of (status, results) dictionaries
    """
    results = {}
    status = {}
    descriptions = {}
    total_regressions = []
    _args = {}

    config_default = "prj.conf"
    _args[config_default] = PtsInitArgs(args)

    for config, value in list(iut_config.items()):
        if 'test_cases' not in value:
            # Rename default config
            _args[config] = _args.pop(config_default)
            config_default = config
            continue

        if config != config_default:
            _args[config] = PtsInitArgs(args)

        _args[config].test_cases = value.get('test_cases', [])

        if 'overlay' in value:
            _args[config_default].excluded += _args[config].test_cases

    while True:
        try:
            ptses = autoptsclient.init_pts(_args[config_default],
                                           "zephyr_" + str(args["board"]))

            btp.init(get_iut)

            # Main instance of PTS
            pts = ptses[0]

            # Read PTS Version and keep it for later use
            args['pts_ver'] = "%s" % pts.get_version()
        except Exception as exc:
            if _args[config_default].recovery:
                ptses = exc.args[1]
                for pts in ptses:
                    autoptsclient.recover_autoptsserver(pts)
                time.sleep(20)
                continue
            else:
                raise exc
        break

    stack.init_stack()
    stack_inst = stack.get_stack()
    stack_inst.synch_init([pts.callback_thread for pts in ptses])

    for config, value in list(iut_config.items()):
        if 'overlay' in value:
            apply_overlay(args["project_path"], config_default, config,
                          value['overlay'])

        build_and_flash(args["project_path"], autopts2board[args["board"]],
                        tty, config)
        logging.debug("TTY path: %s" % tty)

        flush_serial(tty)
        time.sleep(10)

        autoprojects.iutctl.init(args["kernel_image"], tty, args["board"])

        # Setup project PIXITS
        autoprojects.gap.set_pixits(ptses[0])
        autoprojects.gatt.set_pixits(ptses)
        autoprojects.sm.set_pixits(ptses[0])
        autoprojects.l2cap.set_pixits(ptses[0])
        autoprojects.mesh.set_pixits(ptses)

        test_cases = get_test_cases(ptses)

        status_count, results_dict, regressions = autoptsclient.run_test_cases(
            ptses, test_cases, _args[config])
        total_regressions += regressions

        for k, v in list(status_count.items()):
            if k in list(status.keys()):
                status[k] += v
            else:
                status[k] = v

        results.update(results_dict)
        autoprojects.iutctl.cleanup()

    for test_case_name in list(results.keys()):
        project_name = test_case_name.split('/')[0]
        descriptions[test_case_name] = \
            pts.get_test_case_description(project_name, test_case_name)

    for pts in ptses:
        pts.unregister_xmlrpc_ptscallback()

    return status, results, descriptions, total_regressions
    # not the cleanest but the easiest way to exit the server thread
    os._exit(0)


if __name__ == "__main__":
    while True:
        try:
            main()
            break

        # os._exit: not the cleanest but the easiest way to exit the server thread
        except KeyboardInterrupt:  # Ctrl-C
            os._exit(14)

        # SystemExit is thrown in arg_parser.parse_args and in sys.exit
        except SystemExit:
            raise  # let the default handlers do the work

        except Exception as exc:
            traceback.print_exc()
            try:
                ptses = exc.args[1]
                for pts in ptses:
                    autoptsclient.recover_autoptsserver(pts)
                time.sleep(20)
            except:
                traceback.print_exc()

        except:
            os._exit(16)