@Test public void regular_analysis_of_project_is_enabled_if_delegate_is_absent() { ScannerReport.Metadata metadata = ScannerReport.Metadata.newBuilder() .build(); new BranchLoader(metadataHolder).load(metadata); assertThat(metadataHolder.getBranch()).isNotNull(); Branch branch = metadataHolder.getBranch(); assertThat(branch.isMain()).isTrue(); assertThat(branch.getName()).isEqualTo(BranchDto.DEFAULT_MAIN_BRANCH_NAME); }
@Test public void default_support_of_branches_is_enabled_if_delegate_is_absent() { ScannerReport.Metadata metadata = ScannerReport.Metadata.newBuilder() .setDeprecatedBranch("foo") .build(); new BranchLoader(metadataHolder).load(metadata); assertThat(metadataHolder.getBranch()).isNotNull(); Branch branch = metadataHolder.getBranch(); assertThat(branch.isMain()).isTrue(); assertThat(branch.getName()).isEqualTo("foo"); }
@Test public void execute_fails_with_MessageException_if_projectKey_is_null_in_CE_task() { CeTask res = mock(CeTask.class); Optional<CeTask.Component> component = Optional.of(new CeTask.Component("prj_uuid", null, null)); when(res.getComponent()).thenReturn(component); when(res.getMainComponent()).thenReturn(Optional.of(new CeTask.Component("main_prj_uuid", "main_prj_key", null))); when(res.getOrganizationUuid()).thenReturn(defaultOrganizationProvider.get().getUuid()); reportReader.setMetadata(ScannerReport.Metadata.newBuilder().build()); ComputationStep underTest = createStep(res); expectedException.expect(MessageException.class); expectedException.expectMessage("Compute Engine task component key is null. Project with UUID prj_uuid must have been deleted since report was uploaded. Can not proceed."); underTest.execute(new TestComputationStepContext()); }
@Test public void read_syntax_highlighting() { ScannerReportWriter writer = new ScannerReportWriter(dir); writer.writeMetadata(ScannerReport.Metadata.newBuilder() .setRootComponentRef(1) .build()); writer.writeComponent(ScannerReport.Component.newBuilder() .setRef(1).build()); writer.writeComponentSyntaxHighlighting(1, asList( ScannerReport.SyntaxHighlightingRule.newBuilder() .setRange(ScannerReport.TextRange.newBuilder() .setStartLine(1) .setEndLine(10) .build()) .setType(HighlightingType.ANNOTATION) .build())); try (CloseableIterator<ScannerReport.SyntaxHighlightingRule> it = underTest.readComponentSyntaxHighlighting(1)) { ScannerReport.SyntaxHighlightingRule syntaxHighlighting = it.next(); assertThat(syntaxHighlighting.getRange()).isNotNull(); assertThat(syntaxHighlighting.getRange().getStartLine()).isEqualTo(1); assertThat(syntaxHighlighting.getRange().getEndLine()).isEqualTo(10); assertThat(syntaxHighlighting.getType()).isEqualTo(HighlightingType.ANNOTATION); } }
@Test public void return_existing_uuids_with_modules() { setAnalysisMetadataHolder(); OrganizationDto organizationDto = dbTester.organizations().insert(); ComponentDto project = insertComponent(newPrivateProjectDto(organizationDto, "ABCD").setDbKey(REPORT_PROJECT_KEY)); ComponentDto module = insertComponent(newModuleDto("BCDE", project).setDbKey(REPORT_MODULE_KEY)); ComponentDto directory = newDirectory(module, "CDEF", REPORT_DIR_PATH_1); insertComponent(directory.setDbKey(REPORT_MODULE_KEY + ":" + REPORT_DIR_PATH_1)); insertComponent(newFileDto(module, directory, "DEFG") .setDbKey(REPORT_MODULE_KEY + ":" + REPORT_FILE_PATH_1) .setPath(REPORT_FILE_PATH_1)); // new structure, without modules reportReader.putComponent(component(ROOT_REF, PROJECT, REPORT_PROJECT_KEY, DIR_REF_1)); reportReader.putComponent(componentWithPath(DIR_REF_1, DIRECTORY, "module/" + REPORT_DIR_PATH_1, FILE_1_REF)); reportReader.putComponent(componentWithPath(FILE_1_REF, FILE, "module/" + REPORT_FILE_PATH_1)); reportReader.setMetadata(ScannerReport.Metadata.newBuilder().putModulesProjectRelativePathByKey(REPORT_MODULE_KEY, "module").build()); underTest.execute(new TestComputationStepContext()); verifyComponentByRef(ROOT_REF, REPORT_PROJECT_KEY, analysisMetadataHolder.getProject().getName(), "ABCD"); verifyComponentByKey(REPORT_PROJECT_KEY + ":module/" + REPORT_DIR_PATH_1, REPORT_PROJECT_KEY + ":module/" + REPORT_DIR_PATH_1, "module/" + REPORT_DIR_PATH_1, "CDEF"); verifyComponentByRef(FILE_1_REF, REPORT_PROJECT_KEY + ":module/" + REPORT_FILE_PATH_1, REPORT_FILE_NAME_1, "DEFG"); }
@Test public void read_duplication_blocks() { ScannerReportWriter writer = new ScannerReportWriter(dir); writer.writeMetadata(ScannerReport.Metadata.newBuilder() .setRootComponentRef(1).build()); writer.writeComponent(ScannerReport.Component.newBuilder() .setRef(1).build()); ScannerReport.CpdTextBlock duplicationBlock = ScannerReport.CpdTextBlock.newBuilder() .setHash("abcdefghijklmnop") .setStartLine(1) .setEndLine(2) .setStartTokenIndex(10) .setEndTokenIndex(15) .build(); writer.writeCpdTextBlocks(1, singletonList(duplicationBlock)); ScannerReportReader sut = new ScannerReportReader(dir); assertThat(sut.readCpdTextBlocks(1)).hasSize(1); }
@Test public void read_metadata() { ScannerReportWriter writer = new ScannerReportWriter(dir); ScannerReport.Metadata.Builder metadata = ScannerReport.Metadata.newBuilder() .setAnalysisDate(15000000L) .setProjectKey("PROJECT_A") .setRootComponentRef(1) .setCrossProjectDuplicationActivated(true); writer.writeMetadata(metadata.build()); ScannerReport.Metadata readMetadata = underTest.readMetadata(); assertThat(readMetadata.getAnalysisDate()).isEqualTo(15000000L); assertThat(readMetadata.getProjectKey()).isEqualTo("PROJECT_A"); assertThat(readMetadata.getRootComponentRef()).isEqualTo(1); assertThat(readMetadata.getCrossProjectDuplicationActivated()).isTrue(); }
@Before public void setUp() throws Exception { qualityGateHolder.setQualityGate(new QualityGate(QUALITY_GATE_ID, QUALITY_GATE_NAME, of(CONDITION_1, CONDITION_2))); qualityGateStatusHolder.setStatus(QualityGateStatus.OK, ImmutableMap.of( CONDITION_1, ConditionStatus.create(ConditionStatus.EvaluationStatus.OK, "value"), CONDITION_2, ConditionStatus.NO_VALUE_STATUS)); Branch branch = mock(Branch.class); when(branch.getType()).thenReturn(BranchType.LONG); analysisMetadataHolder .setBranch(branch) .setOrganizationsEnabled(new Random().nextBoolean()) .setOrganization(Organization.from( new OrganizationDto().setKey(organizationKey).setName(organizationName).setUuid(organizationUuid).setDefaultQualityGateUuid("foo"))); reportReader.setMetadata(ScannerReport.Metadata.newBuilder().build()); }
@Test public void execute_sets_branch_even_if_MessageException_is_thrown_because_projectKey_in_report_is_different_from_componentKey_in_CE_task() { OrganizationDto organization = db.organizations().insert(); ComponentDto otherProject = db.components().insertPublicProject(organization); reportReader.setMetadata( ScannerReport.Metadata.newBuilder() .setProjectKey(otherProject.getDbKey()) .build()); try { underTest.execute(new TestComputationStepContext()); } catch (MessageException e) { assertThat(analysisMetadataHolder.getBranch()).isNotNull(); } }
@Test public void should_read_hierarchy_if_metadata_not_available() { when(reader.readMetadata()).thenReturn(ScannerReport.Metadata.newBuilder().setRootComponentRef(1).build()); addComponent(2, "project:module1", ScannerReport.Component.ComponentType.MODULE, "path1", 3); addComponent(3, "project:module1:module2", ScannerReport.Component.ComponentType.MODULE, "path1/path2", 4); addComponent(4, "project:module1:module2:dir", ScannerReport.Component.ComponentType.DIRECTORY, "path1/path2/dir"); Map<String, String> pathByModuleKey = reportModulesPath.get(); assertThat(pathByModuleKey).containsOnly( entry("project:module1", "path1"), entry("project:module1:module2", "path1/path2")); verify(reader).readMetadata(); verify(reader).readComponent(1); verify(reader).readComponent(2); verify(reader).readComponent(3); verify(reader).readComponent(4); verifyNoMoreInteractions(reader); }
@Test public void execute_fails_with_MessageException_when_projectKey_in_report_is_different_from_componentKey_in_CE_task() { OrganizationDto organization = db.organizations().insert(); ComponentDto otherProject = db.components().insertPublicProject(organization); reportReader.setMetadata( ScannerReport.Metadata.newBuilder() .setProjectKey(otherProject.getDbKey()) .build()); expectedException.expect(MessageException.class); expectedException .expectMessage("ProjectKey in report (" + otherProject.getDbKey() + ") is not consistent with projectKey under which the report has been submitted (" + PROJECT_KEY + ")"); underTest.execute(new TestComputationStepContext()); }
@Test public void execute_sets_analysis_date_even_if_MessageException_is_thrown_because_projectKey_is_different_from_componentKey_in_CE_task() { OrganizationDto organization = db.organizations().insert(); ComponentDto otherProject = db.components().insertPublicProject(organization); reportReader.setMetadata( ScannerReport.Metadata.newBuilder() .setProjectKey(otherProject.getDbKey()) .setAnalysisDate(ANALYSIS_DATE) .build()); try { underTest.execute(new TestComputationStepContext()); } catch (MessageException e) { assertThat(analysisMetadataHolder.getAnalysisDate()).isEqualTo(ANALYSIS_DATE); } }
@Test public void should_not_read_hierarchy_if_metadata_available() { when(reader.readMetadata()).thenReturn(ScannerReport.Metadata.newBuilder() .putModulesProjectRelativePathByKey("module1", "path1") .setRootComponentRef(1) .build()); Map<String, String> pathByModuleKey = reportModulesPath.get(); assertThat(pathByModuleKey).containsExactly(entry("module1", "path1")); verify(reader).readMetadata(); verifyNoMoreInteractions(reader); }
@Test public void execute_fails_with_ISE_if_component_is_null_in_CE_task() { CeTask res = mock(CeTask.class); when(res.getComponent()).thenReturn(Optional.empty()); when(res.getOrganizationUuid()).thenReturn(defaultOrganizationProvider.get().getUuid()); reportReader.setMetadata(ScannerReport.Metadata.newBuilder().build()); ComputationStep underTest = createStep(res); expectedException.expect(IllegalStateException.class); expectedException.expectMessage("component missing on ce task"); underTest.execute(new TestComputationStepContext()); }
@Test public void throw_ME_if_both_branch_properties_are_set() { ScannerReport.Metadata metadata = ScannerReport.Metadata.newBuilder() .setDeprecatedBranch("foo") .setBranchName("bar") .build(); expectedException.expect(MessageException.class); expectedException.expectMessage("Properties sonar.branch and sonar.branch.name can't be set together"); new BranchLoader(metadataHolder).load(metadata); }
private static ScannerReport.Metadata.Builder newBatchReportBuilder() { return ScannerReport.Metadata.newBuilder() .setProjectKey(PROJECT_KEY); }
@Test public void readMetadata_result_is_cached() { ScannerReport.Metadata metadata = ScannerReport.Metadata.newBuilder().build(); writer.writeMetadata(metadata); ScannerReport.Metadata res = underTest.readMetadata(); assertThat(res).isEqualTo(metadata); assertThat(underTest.readMetadata()).isSameAs(res); }
@Test public void write_metadata() { ScannerReport.Metadata.Builder metadata = ScannerReport.Metadata.newBuilder() .setAnalysisDate(15000000L) .setProjectKey("PROJECT_A") .setRootComponentRef(1); underTest.writeMetadata(metadata.build()); ScannerReport.Metadata read = Protobuf.read(underTest.getFileStructure().metadataFile(), ScannerReport.Metadata.parser()); assertThat(read.getAnalysisDate()).isEqualTo(15000000L); assertThat(read.getProjectKey()).isEqualTo("PROJECT_A"); assertThat(read.getRootComponentRef()).isEqualTo(1); }
@Test public void default_support_of_branches_is_enabled_if_delegate_is_present() { ScannerReport.Metadata metadata = ScannerReport.Metadata.newBuilder() .setDeprecatedBranch("foo") .build(); FakeDelegate delegate = new FakeDelegate(); new BranchLoader(metadataHolder, delegate).load(metadata); assertThat(metadataHolder.getBranch()).isNotNull(); Branch branch = metadataHolder.getBranch(); assertThat(branch.isMain()).isTrue(); assertThat(branch.getName()).isEqualTo("foo"); }
@Test public void execute_fails_with_MessageException_if_main_projectKey_is_null_in_CE_task() { CeTask res = mock(CeTask.class); Optional<CeTask.Component> component = Optional.of(new CeTask.Component("main_prj_uuid", null, null)); when(res.getComponent()).thenReturn(component); when(res.getMainComponent()).thenReturn(component); when(res.getOrganizationUuid()).thenReturn(defaultOrganizationProvider.get().getUuid()); reportReader.setMetadata(ScannerReport.Metadata.newBuilder().build()); ComputationStep underTest = createStep(res); expectedException.expect(MessageException.class); expectedException.expectMessage("Compute Engine task main component key is null. Project with UUID main_prj_uuid must have been deleted since report was uploaded. Can not proceed."); underTest.execute(new TestComputationStepContext()); }