Beispiel #1
0
    def start_system_test_file(self):
        if self.verbose:
            print("  Writing testcase xml file:        {}".format(
                self.unit_report_name))

        #self.fh = open(self.unit_report_name, "w")
        errors = 0
        failed = 0
        success = 0

        from vector.apps.DataAPI.vcproject_api import VCProjectApi
        api = VCProjectApi(self.FullManageProjectName)

        for env in api.Environment.all():
            if env.compiler.name == self.compiler and env.testsuite.name == self.testsuite and env.name == self.env and env.system_tests:
                for st in env.system_tests:
                    if st.passed == st.total:
                        success += 1
                    else:
                        failed += 1
                        errors += 1
                        self.failed_count += 1
        api.close()

        self.fh_data = ""
        self.fh_data += ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
        self.fh_data += ("<testsuites>\n")
        self.fh_data += (
            "    <testsuite errors=\"%d\" tests=\"%d\" failures=\"%d\" name=\"%s\" id=\"1\">\n"
            % (errors, success + failed + errors, failed,
               escape(self.env, quote=False)))
def generate_full_status(manageProject): 

    mpName = os.path.splitext(os.path.basename(manageProject))[0]
    report_name = mpName + "_full_report.html"
    try:
        from vector.apps.DataAPI.vcproject_api import VCProjectApi
        api = VCProjectApi(manageProject)
        from vector.apps.ReportBuilder.custom_report import CustomReport
        
        CustomReport.report_from_api(api, report_type="MANAGE_STATUS_FULL_REPORT", formats=["HTML"], output_file=report_name, environments=api.Environment.all(), levels = [] )
        shutil.copy(report_name,report_name + "_tmp")
        fixup_reports.fixup_2020_reports(report_name + "_tmp")
        api.close()
        
    except:
        from managewait import ManageWait

        cmd = "--project " + manageProject + " --full-status=" + report_name
        manageWait = ManageWait(False, cmd, 30, 1)
        out_mgt = manageWait.exec_manage(True)
        shutil.copy(report_name,report_name + "_tmp")
        return out_mgt
    def __init__(self):
        self.manageProject = None
        self.lock = Lock()

        parser = argparse.ArgumentParser()

        parser.add_argument('--project', '-p', help='Manager Project Name')
        parser.add_argument('--dryrun',
                            help='Dry Run without build/execute',
                            action="store_true")
        parser.add_argument('--jobs',
                            '-j',
                            help='Number of concurrent jobs',
                            default="1")
        parser.add_argument('--verbose',
                            help='Dry Run without build/execute',
                            action="store_true")
        parser.add_argument('--ci',
                            help='Use CI Licenses',
                            action="store_true",
                            default=False)
        args = parser.parse_args()

        if args.ci:
            self.useCI = " --ci "
        else:
            self.useCI = ""

        try:
            self.manageProject = os.environ['VCV_ENVIRONMENT_FILE']
        except:
            self.manageProject = args.project

        self.dryrun = args.dryrun

        if self.manageProject is None:
            print(
                "\n** Use either --project [Manage Project Name] or enviroment variable VCV_ENVIRONMENT_FILE to specify the manage project name"
            )
            sys.exit()

        if not os.path.isfile(
                self.manageProject) and not os.path.isfile(self.manageProject +
                                                           ".vcm"):
            raise IOError(self.manageProject + ' does not exist')
            return

        if args.verbose:
            self.verbose = True
        else:
            self.verbose = False

        self.mpName = self.manageProject.replace(".vcm", "")
        self.reportName = os.path.basename(self.manageProject).replace(
            ".vcm", "")
        self.buildSemaphore = Semaphore(int(args.jobs))

        print("Disabling range check globally")

        try:
            self.api = VCProjectApi(self.manageProject)
        except:
            statusCmd = VCD + "/manage --project " + self.manageProject + self.useCI + " --status"
            self.runManageCmd(statusCmd)
            self.api = VCProjectApi(self.manageProject)

        self.oldRangeCheck = self.api.project.options["enums"]["RANGE_CHECK"][
            0]
        self.api.close()

        buildCmd = VCD + "/manage --project " + self.manageProject + self.useCI + " --config=RANGE_CHECK=NONE"
        self.runManageCmd(buildCmd)

        self.api = VCProjectApi(self.manageProject)
class ParallelBuild(object):
    def __init__(self):
        self.manageProject = None
        self.lock = Lock()

        parser = argparse.ArgumentParser()

        parser.add_argument('--project', '-p', help='Manager Project Name')
        parser.add_argument('--dryrun',
                            help='Dry Run without build/execute',
                            action="store_true")
        parser.add_argument('--jobs',
                            '-j',
                            help='Number of concurrent jobs',
                            default="1")
        parser.add_argument('--verbose',
                            help='Dry Run without build/execute',
                            action="store_true")
        parser.add_argument('--ci',
                            help='Use CI Licenses',
                            action="store_true",
                            default=False)
        args = parser.parse_args()

        if args.ci:
            self.useCI = " --ci "
        else:
            self.useCI = ""

        try:
            self.manageProject = os.environ['VCV_ENVIRONMENT_FILE']
        except:
            self.manageProject = args.project

        self.dryrun = args.dryrun

        if self.manageProject is None:
            print(
                "\n** Use either --project [Manage Project Name] or enviroment variable VCV_ENVIRONMENT_FILE to specify the manage project name"
            )
            sys.exit()

        if not os.path.isfile(
                self.manageProject) and not os.path.isfile(self.manageProject +
                                                           ".vcm"):
            raise IOError(self.manageProject + ' does not exist')
            return

        if args.verbose:
            self.verbose = True
        else:
            self.verbose = False

        self.mpName = self.manageProject.replace(".vcm", "")
        self.reportName = os.path.basename(self.manageProject).replace(
            ".vcm", "")
        self.buildSemaphore = Semaphore(int(args.jobs))

        print("Disabling range check globally")

        try:
            self.api = VCProjectApi(self.manageProject)
        except:
            statusCmd = VCD + "/manage --project " + self.manageProject + self.useCI + " --status"
            self.runManageCmd(statusCmd)
            self.api = VCProjectApi(self.manageProject)

        self.oldRangeCheck = self.api.project.options["enums"]["RANGE_CHECK"][
            0]
        self.api.close()

        buildCmd = VCD + "/manage --project " + self.manageProject + self.useCI + " --config=RANGE_CHECK=NONE"
        self.runManageCmd(buildCmd)

        self.api = VCProjectApi(self.manageProject)

    def __enter__(self):
        return self

    def __exit__(self, exct_type, exce_value, traceback):
        self.api.close()

        print("Clearing disable of range check globally")
        buildCmd = VCD + "/manage --project " + self.manageProject + self.useCI + " --config=RANGE_CHECK=" + self.oldRangeCheck
        self.runManageCmd(buildCmd)
        build_log_data = ""

        for file in glob.glob("build*.log"):
            build_log_data += " ".join(open(file, "r").readlines())
            os.remove(file)

        try:
            open("complete_build.log", "w",
                 encoding="utf-8").write(unicode(build_log_data))
        except:
            open("complete_build.log", "w").write(build_log_data)

        print(build_log_data)

    def th_Print(self, str):
        self.lock.acquire()
        print(str)
        self.lock.release()

    def runManageCmd(self, cmd, env=None):
        if self.verbose:
            self.th_Print(cmd)

        if self.dryrun:
            return

        if env:
            logName = "build_" + self.reportName + "_" + env.compiler.name + "_" + env.testsuite.name + "_" + env.name + ".log"
            build_log = open(logName, "w")
            process = subprocess.Popen(cmd,
                                       shell=True,
                                       stdout=build_log,
                                       stderr=build_log)
            process.wait()
            build_log.close()
        else:
            process = subprocess.Popen(cmd, shell=True)
            process.wait()

    def build_env(self, env):
        if not self.verbose:
            self.th_Print("Building: " + env.compiler.name + "/" +
                          env.testsuite.name + "/" + env.name)
        buildCmd = VCD + "/manage --project " + self.manageProject + self.useCI + " --build --level " + env.compiler.name + "/" + env.testsuite.name + " --environment " + env.name
        self.runManageCmd(buildCmd, env)

        self.buildSemaphore.release()

    def doit(self):
        buildingList = []

        for env in self.api.Environment.all():
            if env.system_tests:
                print("Building System Test: " + env.compiler.name + "/" +
                      env.testsuite.name + "/" + env.name)
                buildCmd = VCD + "/manage --project " + self.manageProject + self.useCI + " --build --level " + env.compiler.name + "/" + env.testsuite.name + " --environment " + env.name
                self.runManageCmd(buildCmd, env)
                continue

            self.buildSemaphore.acquire()
            t = Thread(target=self.build_env, args=[env])
            t.daemon = True  # thread dies with the program
            t.start()
            buildingList.append(t)

        checkThreads = True
        while checkThreads:
            checkThreads = False
            for t in buildingList:
                if t.is_alive():
                    time.sleep(1)
                    checkThreads = True
                    break
Beispiel #5
0
    def generate_unit(self):

        if isinstance(self.api, CoverApi):
            try:
                from vector.apps.DataAPI.vcproject_api import VCProjectApi
                self.start_system_test_file()
                api = VCProjectApi(self.FullManageProjectName)

                for env in api.Environment.all():
                    if env.compiler.name == self.compiler and env.testsuite.name == self.testsuite and env.name == self.env and env.system_tests:
                        for st in env.system_tests:
                            #pprint(vars(st))
                            pass_fail_rerun = ""
                            if st.run_needed and st.type == 2:  #SystemTestType.MANUAL:
                                pass_fail_rerun = ": Manual system tests can't be run in Jenkins"
                            elif st.run_needed:
                                pass_fail_rerun = ": Needs to be executed"
                            elif st.passed:
                                pass_fail_rerun = ": Passed"
                            else:
                                pass_fail_rerun = ": Failed"

                            level = env.compiler.name + "/" + env.testsuite.name + "/" + env.name
                            if self.verbose:
                                print(level, st.name, pass_fail_rerun)
                            self.write_testcase(st, level, st.name)
                from generate_qa_results_xml import saveQATestStatus
                saveQATestStatus(self.FullManageProjectName)

                api.close()

            except ImportError as e:
                from generate_qa_results_xml import genQATestResults
                self.failed_count += genQATestResults(
                    self.FullManageProjectName,
                    self.compiler + "/" + self.testsuite, self.env, True)
                return

        else:
            try:
                self.start_unit_test_file()
                self.add_compound_tests()
                self.add_init_tests()
                for unit in self.api.Unit.all():
                    if unit.is_uut:
                        for func in unit.functions:
                            if not func.is_non_testable_stub:
                                for tc in func.testcases:
                                    try:
                                        vctMap = tc.is_vct_map
                                    except:
                                        vctMap = False
                                    if not tc.is_csv_map and not vctMap:
                                        if not tc.for_compound_only or tc.testcase_status == "TCR_STRICT_IMPORT_FAILED":
                                            self.write_testcase(
                                                tc, tc.function.unit.name,
                                                tc.function.display_name)

            except AttributeError as e:
                parse_traceback.parse(traceback.format_exc(), self.verbose,
                                      self.compiler, self.testsuite, self.env,
                                      self.build_dir)

        self.end_test_results_file()
    if args.incremental:
        useCBT = "--incremental"
    else:
        useCBT = ""

    yaml_start = """stages: [build-execute, reporting, check-logs]
    
variables:
    GIT_CLEAN_FLAGS: none
    VC_Manage_Project: "%s"
    VC_UseCILicense: "%s"
    VC_useCBT: "%s"

""" % (args.ManageProject.replace("\\", "/"), useCI, useCBT)

    api = VCProjectApi(args.ManageProject)

    # individual build stages
    build_stage_template = """%s:
  stage: build-execute
  script: """ + script_cmds + """
  tags:
    - %s

"""
    build_stage = ""
    for env in api.Environment.all():
        if env.compiler.is_enabled:
            jobName = "build-execute-" + env.compiler.name.lower(
            ) + "-" + env.testsuite.name.lower() + "-" + env.name.lower()
            build_stage += build_stage_template % (jobName, env.compiler.name,