def test_vara_cs_cleanup_error(self):
     """Test vara-cs cleanup error."""
     runner = CliRunner()
     vara_cfg()["paper_config"]["current_config"] = "test_cleanup_error"
     save_config()
     load_paper_config()
     importlib.reload(driver_casestudy)
     result = runner.invoke(
         driver_casestudy.main, ['cleanup', 'all', '--error']
     )
     self.assertEqual(0, result.exit_code, result.stdout)
     self.assertFalse(
         Path(
             vara_cfg()["result_dir"].value +
             "/brotli/CRE-CR-brotli-all-6c47009892_5d26c7ff-6d27-478f-bcd1"
             "-99e8e8e97f16_cerror.txt"
         ).exists()
     )
     self.assertFalse(
         Path(
             vara_cfg()["result_dir"].value +
             "/brotli/CRE-CR-brotli-all-aaa4424d9b_5d26c7ff-6d27-478f-bcd1-"
             "99e8e8e97f16_failed.txt"
         ).exists()
     )
     self.assertTrue(
         Path(
             vara_cfg()["result_dir"].value +
             "/brotli/CRE-CR-brotli-brotli-21ac39f7c8_34d4d1b5-7212-4244-"
             "9adc-b19bff599cf1_success.yaml"
         ).exists()
     )
Exemplo n.º 2
0
def _pc_create(paper_config: str) -> None:
    """paper_config:
            Path to the new paper config.
             Relative paths are interpreted relative to the current
             `paper_config/folder`."""
    pc_path: Path = Path(paper_config)
    if not pc_path.is_absolute():
        current_folder = vara_cfg()["paper_config"]["folder"].value
        if current_folder is None:
            pc_path = Path(vara_cfg()["config_file"].value
                           ).parent / "paper_configs" / pc_path
        else:
            pc_path = Path(current_folder) / pc_path

    if pc_path.exists():
        LOG.error(f"Cannot create paper config at: {pc_path} "
                  "(Path already exists).")
        return

    folder = pc_path.parent
    current_config = pc_path.name

    LOG.info(
        f"Creating new paper config {current_config} at location {folder}.")
    pc_path.mkdir(parents=True)

    vara_cfg()["paper_config"]["folder"] = str(folder)
    vara_cfg()["paper_config"]["current_config"] = str(current_config)
    save_config()
 def test_vara_cs_gen_to_extend_new_stage(self):
     """Test the extend-functionality of vara-cs gen."""
     runner = CliRunner()
     vara_cfg()["paper_config"]["current_config"] = "test_ext"
     save_config()
     load_paper_config()
     old_commit = 'ef364d3abc5647111c5424ea0d83a567e184a23b'
     new_commit = '6c6da57ae2aa962aabde6892442227063d87e88c'
     result = runner.invoke(
         driver_casestudy.main, [
             'gen', '-p', 'xz', '--new-stage', '--merge-stage', 'test',
             'select_specific', new_commit
         ]
     )
     self.assertEqual(0, result.exit_code, result.exception)
     case_study_path = Path(
         vara_cfg()["paper_config"]["folder"].value +
         "/test_ext/xz_0.case_study"
     )
     self.assertTrue(case_study_path.exists())
     case_study = load_case_study_from_file(case_study_path)
     self.assertTrue(
         case_study.revisions.__contains__(FullCommitHash(old_commit))
     )
     self.assertTrue(
         case_study.revisions.__contains__(FullCommitHash(new_commit))
     )
     self.assertEqual(2, case_study.num_stages)
     self.assertEqual('test', case_study.stages[1].name)
Exemplo n.º 4
0
    def __init__(self) -> None:
        if hasattr(Qt, 'AA_EnableHighDpiScaling'):
            QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
        if hasattr(Qt, 'AA_UseHighDpiPixmaps'):
            QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)

        self.app = QApplication(sys.argv)

        if settings.vara_cfg()["config_file"].value is None:
            err = QMessageBox()
            err.setIcon(QMessageBox.Warning)
            err.setWindowTitle("Missing config file.")
            err.setText(
                "Could not find VaRA config file.\n"
                "Should we create a config file in the current folder?"
            )

            err.setStandardButtons(
                tp.cast(
                    QMessageBox.StandardButtons,
                    QMessageBox.Yes | QMessageBox.No
                )
            )
            answer = err.exec_()
            if answer == QMessageBox.Yes:
                settings.save_config()
            else:
                sys.exit()

        self.main_window = MainWindow()
Exemplo n.º 5
0
    def test_store_artefact(self):
        """Test whether `vara-plot` can store artefacts."""
        # setup config
        vara_cfg()['paper_config']['current_config'] = "test_artefacts_driver"
        load_paper_config()
        save_config()
        artefacts_file_path = get_paper_config().path / "artefacts.yaml"
        artefacts_file_path.unlink()

        # vara-plot
        runner = CliRunner()
        result = runner.invoke(driver_plot.main, [
            "--save-artefact=PC Overview", "--plot-dir=foo",
            "pc-overview-plot", "--report-type=EmptyReport"
        ])

        self.assertEqual(0, result.exit_code, result.exception)
        self.assertTrue(artefacts_file_path.exists())

        # load new artefact file
        load_paper_config()
        artefacts = list(get_paper_config().artefacts)
        self.assertEqual(1, len(artefacts))

        artefact = artefacts[0]
        self.assertIsInstance(artefact, PlotArtefact)
        self.assertEqual("PC Overview", artefact.name)
Exemplo n.º 6
0
    def setup(self, source_folder: tp.Optional[Path], install_prefix: Path,
              version: tp.Optional[int]) -> None:
        """
        Setup the research tool VaRA with it's code base. This method sets up
        all relevant config variables, downloads repositories via the
        ``CodeBase``, checkouts the correct branches and prepares the research
        tool to be built.

        Args:
            source_folder: location to store the code base in
            install_prefix: Installation prefix path
            version: Version to setup
        """
        cfg = vara_cfg()
        if source_folder:
            cfg["vara"]["llvm_source_dir"] = str(source_folder)
        cfg["vara"]["llvm_install_dir"] = str(install_prefix)
        if version:
            version = int(version)
            cfg["vara"]["version"] = version
        else:
            version = int(cfg["vara"]["version"].value)
        save_config()

        print(f"Setting up VaRA in {self.source_location()}")

        use_dev_branches = cfg["vara"]["developer_version"].value

        self.code_base.clone(self.source_location())
        self.code_base.setup_vara_remotes()
        self.code_base.checkout_vara_version(version, use_dev_branches)
        self.code_base.setup_submodules()
        self.code_base.setup_build_link()
Exemplo n.º 7
0
    def setup(self, source_folder: tp.Optional[Path], install_prefix: Path,
              version: tp.Optional[int]) -> None:
        """
        Setup the research tool phasar with it's code base. This method sets up
        all relevant config variables, downloads repositories via the
        ``CodeBase``, checkouts the correct branches and prepares the research
        tool to be built.

        Args:
            source_folder: location to store the code base in
            install_prefix: Installation prefix path
            version: Version to setup
        """
        cfg = vara_cfg()
        if source_folder:
            cfg["phasar"]["source_dir"] = str(source_folder)
        cfg["phasar"]["install_dir"] = str(install_prefix)
        save_config()

        print(f"Setting up phasar in {self.source_location()}")

        use_dev_branch = cfg["phasar"]["developer_version"].value

        self.code_base.clone(self.source_location())
        self.code_base.checkout_phasar_version(use_dev_branch)
        self.code_base.setup_submodules()
Exemplo n.º 8
0
    def test_bb_run_slurm_and_container(self, mock_sbatch,
                                        mock_build_images) -> None:
        runner = CliRunner()
        vara_cfg()['paper_config']['current_config'] = "test_revision_lookup"
        # needed so we see the paper config
        load_paper_config()
        # needed so benchbuild sees the paper config
        save_config()

        bb_cfg()["slurm"]["template"] = str(
            Path(str(vara_cfg()["benchbuild_root"])) /
            "slurm_container.sh.inc")
        save_bb_config()

        # Easiest way to configure slurm + container is 'vara-container'
        # As a side-effect, this command is now even more tested :)
        prepare_result = runner.invoke(driver_container.main,
                                       ["prepare-slurm"])
        self.assertEqual(0, prepare_result.exit_code, prepare_result.exception)
        self.assertTrue(Path(str(bb_cfg()["slurm"]["template"])).exists())

        result = runner.invoke(driver_run.main,
                               ["--slurm", "--container", "-E", "JustCompile"])
        self.assertEqual(0, result.exit_code, result.exception)
        self.assertTrue((Path(str(vara_cfg()["benchbuild_root"])) /
                         "JustCompile-slurm.sh").exists())
Exemplo n.º 9
0
 def test_vara_config_set(self):
     runner = CliRunner()
     vara_cfg()["artefacts"]["artefacts_dir"] = "test"
     save_config()
     runner.invoke(driver_config.main,
                   ["set", "artefacts/artefacts_dir=artefacts"])
     self.assertEqual("artefacts",
                      vara_cfg()["artefacts"]["artefacts_dir"].value)
Exemplo n.º 10
0
def _pc_set(paper_config: tp.Optional[Path]) -> None:
    if not paper_config:
        pc_folder_path = Path(
            get_value_or_default(vara_cfg()["paper_config"], "folder",
                                 str(get_varats_base_folder())))
        if not (pc_folder_path.exists() and pc_folder_path.is_dir()):
            LOG.error(f"Paper config folder not set: {pc_folder_path} "
                      "(Path does not exist or is no directory).")
            return

        paper_configs = _get_paper_configs(pc_folder_path)
        if not paper_configs:
            LOG.error(f"Could not find paper configs in: {pc_folder_path}")
            return

        raw_pc_path = None

        def set_pc_path(choice: str) -> None:
            nonlocal raw_pc_path
            raw_pc_path = choice

        current_config = None
        try:
            current_config = get_paper_config().path.name
        except ConfigurationLookupError:
            # No paper config specified in the varats config file
            pass

        try:
            cli_list_choice(
                "Choose a number to select a paper config", paper_configs,
                lambda x: f"{x} *"
                if current_config and x == current_config else x, set_pc_path)
        except EOFError:
            return
        if raw_pc_path is None:
            raise AssertionError("Choice should always return a value")
        paper_config = Path(raw_pc_path)

    paper_config = Path(paper_config)
    if not paper_config.is_absolute():
        paper_config = Path(
            vara_cfg()["paper_config"]["folder"].value) / paper_config

    if not (paper_config.exists() and paper_config.is_dir()):
        LOG.error(f"Not a paper config: {paper_config} "
                  "(Path does not exist or is no directory).")
        return

    folder = paper_config.parent
    current_config = paper_config.name

    LOG.info(
        f"Current paper config is now {current_config} at location {folder}.")
    vara_cfg()["paper_config"]["folder"] = str(folder)
    vara_cfg()["paper_config"]["current_config"] = str(current_config)
    save_config()
Exemplo n.º 11
0
def main() -> None:
    """
    Main function for working with paper configs.

    `vara-pc`
    """
    initialize_cli_tool()

    if vara_cfg()["paper_config"]["folder"].value is None:
        # Setup default paper config path when none exists
        vara_cfg()["paper_config"]["folder"] = str(
            Path('paper_configs').absolute())
        save_config()
Exemplo n.º 12
0
    def test_bb_run_all(self) -> None:
        runner = CliRunner()
        vara_cfg()['paper_config']['current_config'] = "test_artefacts_driver"
        # needed so we see the paper config
        load_paper_config()
        # needed so benchbuild sees the paper config
        save_config()

        result = runner.invoke(driver_run.main, ["-p", "-E", "JustCompile"])
        self.assertEqual(0, result.exit_code, result.exception)
        match = self.__NUM_ACTIONS_PATTERN.search(result.stdout)
        if not match:
            self.fail("Could not parse benchbuild output")
        self.assertEqual("51", match.group(1))
Exemplo n.º 13
0
    def test_cli_option_converter(self):
        """Test whether CLI option conversion works correctly."""
        # setup config
        vara_cfg()['paper_config']['current_config'] = "test_artefacts_driver"
        load_paper_config()
        save_config()

        plot_generator = CaseStudyOverviewGenerator(
            PlotConfig.from_kwargs(view=False),
            report_type=EmptyReport,
            case_study=get_loaded_paper_config().get_case_studies("xz")[0])
        artefact = PlotArtefact.from_generator("CS Overview", plot_generator,
                                               CommonPlotOptions.from_kwargs())
        artefact_dict = artefact.get_dict()
        self.assertEqual("xz_0", artefact_dict["case_study"])
        self.assertEqual("EmptyReport", artefact_dict["report_type"])
Exemplo n.º 14
0
    def upgrade(self) -> None:
        """Upgrade the research tool to a newer version."""
        new_version = self.find_highest_sub_prj_version("vara-llvm-project")

        if new_version != (math.ceil(
                self.find_highest_sub_prj_version("VaRA") / 10) * 10):
            raise AssertionError(
                "vara-llvm-project and vara tool out of sync.")

        if str(vara_cfg()["vara"]["version"]) != str(new_version):
            self.code_base.checkout_vara_version(new_version, True)

            vara_cfg()["vara"]["version"] = new_version
            save_config()

        self.code_base.pull()
Exemplo n.º 15
0
 def test_vara_cs_cleanup_regex(self):
     """Test vara-cs cleanup regex."""
     runner = CliRunner()
     vara_cfg()["paper_config"]["current_config"] = "test_cleanup_regex"
     save_config()
     load_paper_config()
     importlib.reload(driver_casestudy)
     result = runner.invoke(
         driver_casestudy.main, ['cleanup', 'regex', '-f', '.*'], 'y'
     )
     self.assertEqual(0, result.exit_code, result.exception)
     self.assertFalse(
         Path(
             vara_cfg()["result_dir"].value +
             "/brotli/CRE-CR-brotli-all-6c47009892_5d26c7ff-6d27-478f-bcd1-"
             "99e8e8e97f16_cerror.txt"
         ).exists()
     )
     self.assertFalse(
         Path(
             vara_cfg()["result_dir"].value +
             "/brotli/CRE-CR-brotli-all-aaa4424d9b_5d26c7ff-6d27-478f-bcd1-"
             "99e8e8e97f16_failed.txt"
         ).exists()
     )
     self.assertFalse(
         Path(
             vara_cfg()["result_dir"].value +
             "/brotli/CRE-CR-brotli-brotli-21ac39f7c8_34d4d1b5-7212-4244-"
             "9adc-b19bff599cf1_success.yaml"
         ).exists()
     )
     self.assertFalse(
         Path(
             vara_cfg()["result_dir"].value +
             "/brotli/CRE-CR-brotli-brotli-21ac39f7c8_34d4d1b5-7212-4244-"
             "9adc-b19bff599142_success.yaml"
         ).exists()
     )
     self.assertTrue(
         Path(
             vara_cfg()["result_dir"].value +
             "/gravity/BVRE_NoOptTBAA-BVR_NoOpt_TBAA-gravity-gravity-"
             "b51227de55_8bc2ac4c-b6e3-43d1-aff9-c6b32126b155_success.txt"
         ).exists()
     )
Exemplo n.º 16
0
    def test_plot(self):
        """Test whether `vara-plot` generates a plot."""
        # setup config
        vara_cfg()['paper_config']['current_config'] = "test_artefacts_driver"
        load_paper_config()
        save_config()
        plot_base_dir = Path(str(vara_cfg()['plots']['plot_dir']))

        # vara-plot
        runner = CliRunner()
        result = runner.invoke(driver_plot.main, [
            "--plot-dir=foo", "pc-overview-plot", "--report-type=EmptyReport"
        ])

        self.assertEqual(0, result.exit_code, result.exception)
        self.assertTrue((plot_base_dir / "foo" /
                         "paper_config_overview_plot.svg").exists())
Exemplo n.º 17
0
    def setup(self, source_folder: tp.Optional[Path], install_prefix: Path,
              version: tp.Optional[int]) -> None:
        """
        Setup the research tool SZZUnleashed with it's code base.

        Args:
            source_folder: location to store the code base in
            install_prefix: Installation prefix path
            version: Version to setup
        """
        cfg = vara_cfg()
        if source_folder:
            cfg["szzunleashed"]["source_dir"] = str(source_folder)
        cfg["szzunleashed"]["install_dir"] = str(install_prefix)
        save_config()

        print(f"Setting up SZZUnleashed in {self.source_location()}")

        self.code_base.clone(self.source_location())
Exemplo n.º 18
0
    def __enter__(self) -> Path:
        os.chdir(self.__tmp_dir.name)
        vara_cfg = settings.create_new_varats_config()
        bb_settings.setup_config(vara_cfg)
        # pylint: disable=protected-access
        settings._CFG = vara_cfg
        settings.save_config()

        bb_cfg = create_new_bb_config(settings.vara_cfg(), True)
        # make new bb_cfg point to old tmp to avoid multiple git clones
        bb_cfg["tmp_dir"] = str(self.__old_bb_config["tmp_dir"])

        settings.save_bb_config(bb_cfg)
        # pylint: disable=protected-access
        settings._BB_CFG = bb_cfg

        for test_input in self.__test_inputs:
            test_input.copy_to_env(self.__tmp_path)

        return self.__tmp_path
Exemplo n.º 19
0
    def test_vara_cs_status(self):
        """Test for vara-cs status."""
        runner = CliRunner()
        vara_cfg()["paper_config"]["current_config"] = "test_status"
        save_config()
        load_paper_config()

        result = runner.invoke(driver_casestudy.main, ['status', 'JustCompile'])
        self.assertEqual(0, result.exit_code, result.exception)
        self.assertEqual(
            "CS: xz_0: (  0/5) processed [0/0/0/0/3/2]\n"
            "    c5c7ceb08a [Missing]\n"
            "    ef364d3abc [Missing]\n"
            "    2f0bc9cd40 [Missing]\n"
            "    7521bbdc83 [Blocked]\n"
            "    10437b5b56 [Blocked]\n\n"
            "---------------------------------------------"
            "-----------------------------------\n"
            "Total: (  0/5) processed [0/0/0/0/3/2]\n", result.stdout
        )
Exemplo n.º 20
0
def main(bb_root: tp.Optional[str] = None,
         test_projects: bool = False) -> None:
    """
    Main function for the benchbuild config creator.

    `vara-gen-bbconfig`
    """
    if vara_cfg()["config_file"].value is None:
        if cli_yn_choice("Error! No VaRA config found. Should we create one?"):
            save_config()
        else:
            sys.exit()

    if bb_root is not None:
        if os.path.isabs(str(bb_root)):
            bb_root_path = str(bb_root)
        else:
            bb_root_path = os.path.dirname(str(vara_cfg()["config_file"])) + \
                           "/" + str(bb_root)

        LOG.info(f"Setting BB path to: {bb_root_path}")
        vara_cfg()["benchbuild_root"] = bb_root_path
        save_config()

    if vara_cfg()["benchbuild_root"].value is None:
        vara_cfg()["benchbuild_root"] = os.path.dirname(str(
            vara_cfg()["config_file"])) \
                                        + "/benchbuild"
        LOG.info(f"Setting BB path to: {vara_cfg()['benchbuild_root']}")
        save_config()

    bb_cfg = create_new_bb_config(vara_cfg(), test_projects)
    save_bb_config(bb_cfg)
Exemplo n.º 21
0
def __config_set(config_values: tp.List[str]) -> None:
    """
    KEY=VALUE Key-Value pairs of configuration options and values.

    Specify the config options like paths, e.g., paper_config/folder. Do not put
    spaces before or after the '=' sign; if a value contains spaces, you should
    define it with double quotes: foo="bar baz".
    """
    if config_values:
        rewritten_config_values = {
            e[0].replace('-', '_'): e[1]
            for e in [arg.split("=") for arg in config_values]
        }
    else:
        rewritten_config_values = {}

    for option, value in rewritten_config_values.items():
        option_path = option.split("/")
        config = __get_config_for_path(option_path[:-1])
        config[option_path[-1]] = value

    save_config()
Exemplo n.º 22
0
 def __init__(self, base_dir: Path) -> None:
     super().__init__("phasar", [BuildType.DEV], PhasarCodeBase(base_dir))
     vara_cfg()["phasar"]["source_dir"] = str(base_dir)
     save_config()
Exemplo n.º 23
0
 def __init__(self, base_dir: Path) -> None:
     super().__init__("SZZUnleashed", [BuildType.DEV],
                      SZZUnleashedCodeBase(base_dir))
     vara_cfg()["szzunleashed"]["source_dir"] = str(base_dir)
     save_config()
Exemplo n.º 24
0
 def __init__(self, base_dir: Path) -> None:
     super().__init__("VaRA", [BuildType.DEV], VaRACodeBase(base_dir))
     vara_cfg()["vara"]["llvm_source_dir"] = str(base_dir)
     save_config()
Exemplo n.º 25
0
def config() -> None:
    """Only create a VaRA-TS config file."""
    save_config()
Exemplo n.º 26
0
 def _save_config() -> None:
     """Save current config to file."""
     save_config()