def setUpClass(cls) -> None: """Setup case study from yaml doc.""" with NamedTemporaryFile('w') as yaml_file: yaml_file.write(YAML_CASE_STUDY) yaml_file.seek(0) cls.case_study = CS.load_case_study_from_file(Path(yaml_file.name))
def test_vara_cs_gen_sample_start_end_timestamp(self): """Check if vara-cs gen select_sample with start and end timestamps selects the right revisiosn.""" runner = CliRunner() Path(vara_cfg()["paper_config"]["folder"].value + "/" + "test_gen").mkdir() vara_cfg()["paper_config"]["current_config"] = "test_gen" result = runner.invoke( driver_casestudy.main, [ 'gen', '-p', 'brotli', 'select_sample', '--num-rev', '6', '--start', '2021-08-17', '--end', '2021-09-09', 'UniformSamplingMethod' ] ) self.assertEqual(0, result.exit_code, result.exception) case_study_path = Path( vara_cfg()["paper_config"]["folder"].value + "/test_gen/brotli_0.case_study" ) self.assertTrue(case_study_path.exists()) case_study = load_case_study_from_file(case_study_path) self.assertEqual(len(case_study.revisions), 5) self.assertTrue( FullCommitHash('68f1b90ad0d204907beb58304d0bd06391001a4d') in case_study.revisions ) self.assertTrue( FullCommitHash('62662f87cdd96deda90ac817de94e3c4af75226a') in case_study.revisions )
def test_vara_cs_gen_sample_only_code(self): """Check if vara-cs gen select_sample with --only-code-commits only selects revisions that contain code.""" runner = CliRunner() Path(vara_cfg()["paper_config"]["folder"].value + "/" + "test_gen").mkdir() vara_cfg()["paper_config"]["current_config"] = "test_gen" result = runner.invoke( driver_casestudy.main, [ 'gen', '-p', 'brotli', 'select_sample', '--num-rev', '10', '--start', '68f1b90ad0d204907beb58304d0bd06391001a4d', '--end', 'f4153a09f87cbb9c826d8fc12c74642bb2d879ea', '--only-code-commits', 'UniformSamplingMethod' ] ) self.assertEqual(0, result.exit_code, result.exception) case_study_path = Path( vara_cfg()["paper_config"]["folder"].value + "/test_gen/brotli_0.case_study" ) self.assertTrue(case_study_path.exists()) case_study = load_case_study_from_file(case_study_path) self.assertEqual(len(case_study.revisions), 5)
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)
def test_vara_cs_gen_specific(self): """Test for vara-cs gen select_specific.""" runner = CliRunner() Path(vara_cfg()["paper_config"]["folder"].value + "/" + "test_gen").mkdir() vara_cfg()["paper_config"]["current_config"] = "test_gen" result = runner.invoke( driver_casestudy.main, [ 'gen', '-p', 'gravity', 'select_specific', '8820d0e08d1b389fc1e4ac2a17ad9f5418b21dfc', 'f9e95a41c18ed995f2c7cee7498c1a2313427c08' ] ) self.assertEqual(0, result.exit_code, result.exception) case_study_path = Path( vara_cfg()["paper_config"]["folder"].value + "/test_gen/gravity_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('8820d0e08d1b389fc1e4ac2a17ad9f5418b21dfc') ) ) self.assertTrue( case_study.revisions.__contains__( FullCommitHash('f9e95a41c18ed995f2c7cee7498c1a2313427c08') ) ) self.assertEqual(len(case_study.revisions), 2)
def test_vara_cs_gen_sample_start_before_initial_commit(self): """Check if vara-cs gen select_sample with start timestamp before the initial commit selects the right revisiosn.""" runner = CliRunner() Path(vara_cfg()["paper_config"]["folder"].value + "/" + "test_gen").mkdir() vara_cfg()["paper_config"]["current_config"] = "test_gen" result = runner.invoke( driver_casestudy.main, [ 'gen', '-p', 'brotli', '--allow-blocked', 'select_sample', '--num-rev', '6', '--start', '1991-01-01', '--end', '2013-10-20', 'UniformSamplingMethod' ] ) self.assertEqual(0, result.exit_code, result.exception) case_study_path = Path( vara_cfg()["paper_config"]["folder"].value + "/test_gen/brotli_0.case_study" ) self.assertTrue(case_study_path.exists()) case_study = load_case_study_from_file(case_study_path) self.assertEqual(len(case_study.revisions), 1) self.assertTrue( FullCommitHash('e0346c826249368f0f4a68a2b95f4ab5cf1e235b') in case_study.revisions )
def __init__(self, folder_path: Path) -> None: self.__path = Path(folder_path) self.__case_studies: tp.Dict[str, tp.List[CaseStudy]] = {} for case_study_path in \ [x for x in self.__path.iterdir() if x.suffix == ".case_study"]: case_study = load_case_study_from_file(case_study_path) if case_study.project_name in self.__case_studies.keys(): self.__case_studies[case_study.project_name].append(case_study) else: self.__case_studies[case_study.project_name] = [case_study] self.__artefacts: tp.Optional[Artefacts] = None
def test_vara_cs_gen_latest(self): """Test for vara-cs gen select_latest.""" runner = CliRunner() Path(vara_cfg()["paper_config"]["folder"].value + "/" + "test_gen").mkdir() vara_cfg()["paper_config"]["current_config"] = "test_gen" result = runner.invoke( driver_casestudy.main, ['gen', '-p', 'gravity', 'select_latest'] ) self.assertEqual(0, result.exit_code, result.exception) case_study_path = Path( vara_cfg()["paper_config"]["folder"].value + "/test_gen/gravity_0.case_study" ) self.assertTrue(case_study_path.exists()) case_study = load_case_study_from_file(case_study_path) self.assertEqual(len(case_study.revisions), 1)
def setUp(cls) -> None: """Initialize projects and set up report paths, a case study, and a commit map.""" initialize_projects() cls.br_paths_list = [ TEST_INPUTS_DIR / Path( "results/xz/BRE-BR-xz-xz-2f0bc9cd40" "_9e238675-ee7c-4325-8e9f-8ccf6fd3f05c_success.yaml" ), TEST_INPUTS_DIR / Path( "results/xz/BRE-BR-xz-xz-c5c7ceb08a" "_77a6c5bc-e5c7-4532-8814-70dbcc6b5dda_success.yaml" ), TEST_INPUTS_DIR / Path( "results/xz/BRE-BR-xz-xz-ef364d3abc" "_feeeecb2-1826-49e5-a188-d4d883f06d00_success.yaml" ), TEST_INPUTS_DIR / Path( "results/TwoLibsOneProjectInteractionDiscreteLibsSingleProject/" "BRE-BR-TwoLibsOneProjectInteractionDiscreteLibsSingleProject-" "elementalist-5e8fe1616d_11ca651c-2d41-42bd-aa4e-8c37ba67b75f" "_success.yaml" ), TEST_INPUTS_DIR / Path( "results/TwoLibsOneProjectInteractionDiscreteLibsSingleProject/" "BRE-BR-TwoLibsOneProjectInteractionDiscreteLibsSingleProject-" "elementalist-e64923e69e_0b22c10c-4adb-4885-b3d2-416749b53aa8" "_success.yaml" ) ] cls.case_study = load_case_study_from_file( TEST_INPUTS_DIR / Path( "paper_configs/test_blame_diff_metrics_database/" "TwoLibsOneProjectInteractionDiscreteLibsSingleProject_0." "case_study" ) ) cls.commit_map = get_commit_map( "TwoLibsOneProjectInteractionDiscreteLibsSingleProject" )
def __casestudy_gen(ctx: click.Context, project: str, override: bool, version: int, ignore_blocked: bool, merge_stage: tp.Optional[str], new_stage: bool, update: bool) -> None: """Generate or extend a CaseStudy Sub commands can be chained to for example sample revisions but also add the latest.""" ctx.ensure_object(dict) ctx.obj['project'] = project ctx.obj['ignore_blocked'] = ignore_blocked ctx.obj['version'] = version paper_config = vara_cfg()["paper_config"]["current_config"].value if not paper_config: click.echo("You need to create a paper config first" " using vara-pc create") raise click.Abort() ctx.obj['path'] = Path(vara_cfg()["paper_config"]["folder"].value) / ( paper_config + f"/{project}_{version}.case_study") ctx.obj['git_path'] = get_local_project_git_path(project) if update: pull_current_branch(ctx.obj['git_path']) if override or not ctx.obj['path'].exists(): case_study = CaseStudy(ctx.obj['project'], version) if merge_stage: case_study.insert_empty_stage(0) case_study.name_stage(0, merge_stage) ctx.obj["merge_stage"] = 0 else: case_study = load_case_study_from_file(ctx.obj['path']) ctx.obj['custom_stage'] = bool(merge_stage) if merge_stage: if new_stage: stage_index = case_study.num_stages case_study.insert_empty_stage(stage_index) case_study.name_stage(stage_index, merge_stage) else: stage_index_opt = case_study \ .get_stage_index_by_name(merge_stage) if not stage_index_opt: selected_stage = CSStage(merge_stage) def set_merge_stage(stage: CSStage) -> None: nonlocal selected_stage selected_stage = stage stage_choices = [selected_stage] stage_choices.extend( [stage for stage in case_study.stages if stage.name]) cli_list_choice( f"The given stage({merge_stage}) does not exist," f" do you want to create it or select an existing one", stage_choices, lambda x: x.name if x.name else "", set_merge_stage) if selected_stage.name == merge_stage: stage_index = case_study.num_stages case_study.insert_empty_stage(stage_index) case_study.name_stage(stage_index, selected_stage.name) else: stage_index = case_study.stages.index(selected_stage) else: stage_index = stage_index_opt ctx.obj['merge_stage'] = stage_index else: if new_stage: ctx.obj['merge_stage'] = max(case_study.num_stages, 0) else: ctx.obj['merge_stage'] = max(case_study.num_stages - 1, 0) ctx.obj['case_study'] = case_study