@Test public void does_not_set_deprecated_coverage_fields() { CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList(ScannerReport.LineCoverage.newBuilder() .setLine(1) .setConditions(10) .setHits(true) .setCoveredConditions(2) .build()).iterator()); DbFileSources.Line.Builder lineBuilder = DbFileSources.Data.newBuilder().addLinesBuilder().setLine(1); assertThat(computeCoverageLine.read(lineBuilder)).isEmpty(); assertThat(lineBuilder.hasDeprecatedUtLineHits()).isFalse(); assertThat(lineBuilder.hasDeprecatedUtConditions()).isFalse(); assertThat(lineBuilder.hasDeprecatedUtCoveredConditions()).isFalse(); assertThat(lineBuilder.hasDeprecatedOverallLineHits()).isFalse(); assertThat(lineBuilder.hasDeprecatedOverallConditions()).isFalse(); assertThat(lineBuilder.hasDeprecatedOverallCoveredConditions()).isFalse(); assertThat(lineBuilder.hasDeprecatedItLineHits()).isFalse(); assertThat(lineBuilder.hasDeprecatedItConditions()).isFalse(); assertThat(lineBuilder.hasDeprecatedItCoveredConditions()).isFalse(); }
@Test public void persist_scm_some_lines() { DbFileSources.Data dbData = DbFileSources.Data.newBuilder().addAllLines(Arrays.asList( DbFileSources.Line.newBuilder() .setScmAuthor("john") DbFileSources.Line.newBuilder() .build())) .build(); setComputedData(dbData);
@Test public void update_sources_when_revision_is_missing() { DbFileSources.Data sourceData = DbFileSources.Data.newBuilder() .addLines(DbFileSources.Line.newBuilder() .setLine(1) .setSource("line") .build()) .build(); dbClient.fileSourceDao().insert(dbTester.getSession(), createDto(dto -> dto.setRevision(null))); dbTester.getSession().commit(); Changeset changeset = Changeset.newChangesetBuilder().setDate(1L).setRevision("revision").build(); setComputedData(sourceData, Collections.singletonList("137f72c3708c6bd0de00a0e5a69c699b"), "29f25900140c94db38035128cb6de6a2", changeset); underTest.execute(new TestComputationStepContext()); assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectByFileUuid(session, FILE1_UUID); assertThat(fileSourceDto.getCreatedAt()).isEqualTo(PAST); assertThat(fileSourceDto.getUpdatedAt()).isEqualTo(NOW); assertThat(fileSourceDto.getRevision()).isEqualTo("revision"); verify(fileSourceDataWarnings).commitWarnings(); }
public org.sonar.db.protobuf.DbFileSources.Data build() { org.sonar.db.protobuf.DbFileSources.Data result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } return result; }
@java.lang.Override protected Builder newBuilderForType( com.google.protobuf.GeneratedMessage.BuilderParent parent) { Builder builder = new Builder(parent); return builder; } /**
private void read(DbFileSources.Data.Builder fileSourceBuilder, int currentLine, String lineSource, boolean hasNextLine) { sourceHashComputer.addLine(lineSource, hasNextLine); lineHashesComputer.addLine(lineSource); DbFileSources.Line.Builder lineBuilder = fileSourceBuilder .addLinesBuilder() .setSource(lineSource) .setLine(currentLine); for (LineReader lineReader : lineReaders) { lineReader.read(lineBuilder); } }
public Data compute() { DbFileSources.Data.Builder fileSourceBuilder = DbFileSources.Data.newBuilder(); int currentLine = 0; while (linesIterator.hasNext()) { currentLine++; read(fileSourceBuilder, currentLine, linesIterator.next(), linesIterator.hasNext()); } return new Data(fileSourceBuilder.build(), lineHashesComputer.getResult(), sourceHashComputer.getHash()); }
.setDataHash("6cad150e3d065976c230cddc5a09efaa") .setSourceData(DbFileSources.Data.newBuilder() .addLines(DbFileSources.Line.newBuilder() .setLine(1) .setSource("old line") .build()) .build()) .setCreatedAt(past) .setUpdatedAt(past) .addLines(DbFileSources.Line.newBuilder() .setLine(1) .setSource("old line") .setScmAuthor("john") .build()) .build();
@Test public void persist_sources() { List<String> lineHashes = Arrays.asList("137f72c3708c6bd0de00a0e5a69c699b", "e6251bcf1a7dc3ba5e7933e325bbe605"); String sourceHash = "ee5a58024a155466b43bc559d953e018"; DbFileSources.Data fileSourceData = DbFileSources.Data.newBuilder() .addAllLines(Arrays.asList( DbFileSources.Line.newBuilder().setSource("line1").setLine(1).build(), DbFileSources.Line.newBuilder().setSource("line2").setLine(2).build())) .build(); when(fileSourceDataComputer.compute(fileComponent().build(), fileSourceDataWarnings)) .thenReturn(new FileSourceDataComputer.Data(fileSourceData, lineHashes, sourceHash, null)); underTest.execute(new TestComputationStepContext()); assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectByFileUuid(session, FILE1_UUID); assertThat(fileSourceDto.getProjectUuid()).isEqualTo(PROJECT_UUID); assertThat(fileSourceDto.getFileUuid()).isEqualTo(FILE1_UUID); assertThat(fileSourceDto.getBinaryData()).isNotEmpty(); assertThat(fileSourceDto.getDataHash()).isNotEmpty(); assertThat(fileSourceDto.getLineHashesVersion()).isEqualTo(LineHashVersion.WITHOUT_SIGNIFICANT_CODE.getDbValue()); assertThat(fileSourceDto.getLineHashes()).isNotEmpty(); assertThat(fileSourceDto.getCreatedAt()).isEqualTo(NOW); assertThat(fileSourceDto.getUpdatedAt()).isEqualTo(NOW); DbFileSources.Data data = fileSourceDto.getSourceData(); assertThat(data.getLinesCount()).isEqualTo(2); assertThat(data.getLines(0).getLine()).isEqualTo(1); assertThat(data.getLines(0).getSource()).isEqualTo("line1"); assertThat(data.getLines(1).getLine()).isEqualTo(2); assertThat(data.getLines(1).getSource()).isEqualTo("line2"); verify(fileSourceDataWarnings).commitWarnings(); }
public Data compute(Component file, FileSourceDataWarnings fileSourceDataWarnings) { try (CloseableIterator<String> linesIterator = sourceLinesRepository.readLines(file); SourceLineReadersFactory.LineReaders lineReaders = sourceLineReadersFactory.getLineReaders(file)) { SourceLinesHashRepositoryImpl.LineHashesComputer lineHashesComputer = sourceLinesHash.getLineHashesComputerToPersist(file); DbFileSources.Data.Builder fileSourceBuilder = DbFileSources.Data.newBuilder(); int currentLine = 0; while (linesIterator.hasNext()) { currentLine++; String lineSource = linesIterator.next(); boolean hasNextLine = linesIterator.hasNext(); sourceHashComputer.addLine(lineSource, hasNextLine); lineHashesComputer.addLine(lineSource); DbFileSources.Line.Builder lineBuilder = fileSourceBuilder .addLinesBuilder() .setSource(lineSource) .setLine(currentLine); lineReaders.read(lineBuilder, readError -> fileSourceDataWarnings.addWarning(file, readError)); } Changeset latestChangeWithRevision = lineReaders.getLatestChangeWithRevision(); return new Data(fileSourceBuilder.build(), lineHashesComputer.getResult(), sourceHashComputer.getHash(), latestChangeWithRevision); } }
@Test public void branch() throws Exception { ComponentDto project = db.components().insertMainBranch(); userSession.addProjectPermission(UserRole.USER, project); ComponentDto branch = db.components().insertProjectBranch(project); ComponentDto file = db.components().insertComponent(newFileDto(branch)); db.getDbClient().fileSourceDao().insert(db.getSession(), new FileSourceDto() .setProjectUuid(branch.uuid()) .setFileUuid(file.uuid()) .setSourceData(FileSourceTesting.newFakeData(3).build())); db.commit(); userSession.logIn("login") .addMembership(db.getDefaultOrganization()) .addProjectPermission(UserRole.CODEVIEWER, project, file); wsTester.newGetRequest("api/sources", "lines") .setParam("key", file.getKey()) .setParam("branch", file.getBranch()) .execute() .assertJson(getClass(), "show_source.json"); }
private void addFileSourceInDb(@Nullable String author, @Nullable Long date, @Nullable String revision, String srcHash, String fileUuid) { DbFileSources.Data.Builder fileDataBuilder = DbFileSources.Data.newBuilder(); DbFileSources.Line.Builder builder = fileDataBuilder.addLinesBuilder() .setLine(1); if (author != null) { builder.setScmAuthor(author); } if (date != null) { builder.setScmDate(date); } if (revision != null) { builder.setScmRevision(revision); } dbTester.getDbClient().fileSourceDao().insert(dbTester.getSession(), new FileSourceDto() .setFileUuid(fileUuid) .setProjectUuid("PROJECT_UUID") .setSourceData(fileDataBuilder.build()) .setSrcHash(srcHash)); dbTester.commit(); }
@Test public void pull_request() throws Exception { ComponentDto project = db.components().insertMainBranch(); userSession.addProjectPermission(UserRole.USER, project); ComponentDto branch = db.components().insertProjectBranch(project, b -> b.setBranchType(PULL_REQUEST)); ComponentDto file = db.components().insertComponent(newFileDto(branch)); db.getDbClient().fileSourceDao().insert(db.getSession(), new FileSourceDto() .setProjectUuid(branch.uuid()) .setFileUuid(file.uuid()) .setSourceData(FileSourceTesting.newFakeData(3).build())); db.commit(); userSession.logIn("login") .addMembership(db.getDefaultOrganization()) .addProjectPermission(UserRole.CODEVIEWER, project, file); wsTester.newGetRequest("api/sources", "lines") .setParam("key", file.getKey()) .setParam("pullRequest", file.getPullRequest()) .execute() .assertJson(getClass(), "show_source.json"); }
@Test public void nothing_to_do_when_no_coverage_info_for_next_line() { CoverageLineReader computeCoverageLine = new CoverageLineReader(newArrayList( ScannerReport.LineCoverage.newBuilder() .setLine(1) .setConditions(10) .setHits(true) .setCoveredConditions(2) .build() // No coverage info on line 2 ).iterator()); DbFileSources.Data.Builder fileSourceBuilder = DbFileSources.Data.newBuilder(); DbFileSources.Line.Builder line1Builder = fileSourceBuilder.addLinesBuilder().setLine(1); DbFileSources.Line.Builder line2Builder = fileSourceBuilder.addLinesBuilder().setLine(2); computeCoverageLine.read(line1Builder); computeCoverageLine.read(line2Builder); assertThat(line2Builder.hasLineHits()).isFalse(); assertThat(line2Builder.hasConditions()).isFalse(); assertThat(line2Builder.hasCoveredConditions()).isFalse(); }
private static DbFileSources.Data.Builder newRandomData(int numberOfLines) { DbFileSources.Data.Builder dataBuilder = DbFileSources.Data.newBuilder(); for (int i = 1; i <= numberOfLines; i++) { dataBuilder.addLinesBuilder() .setLine(i) .setScmRevision(randomAlphanumeric(15)) .setScmAuthor(randomAlphanumeric(10)) .setScmDate(RandomUtils.nextLong()) .setSource(randomAlphanumeric(20)) .setLineHits(RandomUtils.nextInt(4)) .setConditions(RandomUtils.nextInt(4)) .setCoveredConditions(RandomUtils.nextInt(4)) .setHighlighting(randomAlphanumeric(40)) .setSymbols(randomAlphanumeric(30)) .addAllDuplication(Arrays.asList(RandomUtils.nextInt(200), RandomUtils.nextInt(200))) .build(); } return dataBuilder; } }
@Test public void use_deprecated_overall_coverage_fields_if_exists() throws Exception { DbFileSources.Data.Builder dataBuilder = DbFileSources.Data.newBuilder(); ComponentDto file = insertFileWithData(dataBuilder.addLines(newLineBuilder() .setDeprecatedOverallLineHits(1) .setDeprecatedOverallConditions(2) .setDeprecatedOverallCoveredConditions(3) .setDeprecatedUtLineHits(1) .setDeprecatedUtConditions(2) .setDeprecatedUtCoveredConditions(3) .setDeprecatedItLineHits(1) .setDeprecatedItConditions(2) .setDeprecatedItCoveredConditions(3)).build(), privateProject); setUserWithValidPermission(file); wsTester .newGetRequest("api/sources", "lines") .setParam("uuid", file.uuid()) .execute() .assertJson(getClass(), "convert_deprecated_data.json"); }
@Test public void not_group_lines_by_commit() throws Exception { userSessionRule.addProjectPermission(UserRole.CODEVIEWER, project, file); // lines 1 and 2 are the same commit, but not 3 (different date) dbTester.getDbClient().fileSourceDao().insert(dbSession, new FileSourceDto() .setProjectUuid(PROJECT_UUID) .setFileUuid(FILE_UUID) .setSourceData(DbFileSources.Data.newBuilder() .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 1)) .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 2)) .addLines(newSourceLine("julien", "456-789-101", DateUtils.parseDateTime("2015-03-27T12:34:56+0000"), 3)) .addLines(newSourceLine("simon", "789-101-112", DateUtils.parseDateTime("2015-03-31T12:34:56+0000"), 4)) .build())); dbSession.commit(); WsTester.TestRequest request = tester.newGetRequest("api/sources", "scm").setParam("key", FILE_KEY).setParam("commits_by_line", "true"); request.execute().assertJson(getClass(), "not_group_lines_by_commit.json"); }
@Test public void group_lines_by_commit() throws Exception { userSessionRule.addProjectPermission(UserRole.CODEVIEWER, project, file); // lines 1 and 2 are the same commit, but not 3 (different date) dbTester.getDbClient().fileSourceDao().insert(dbSession, new FileSourceDto() .setProjectUuid(PROJECT_UUID) .setFileUuid(FILE_UUID) .setSourceData(DbFileSources.Data.newBuilder() .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 1)) .addLines(newSourceLine("julien", "123-456-789", DateUtils.parseDateTime("2015-03-30T12:34:56+0000"), 2)) .addLines(newSourceLine("julien", "456-789-101", DateUtils.parseDateTime("2015-03-27T12:34:56+0000"), 3)) .addLines(newSourceLine("simon", "789-101-112", DateUtils.parseDateTime("2015-03-31T12:34:56+0000"), 4)) .build())); dbSession.commit(); WsTester.TestRequest request = tester.newGetRequest("api/sources", "scm").setParam("key", FILE_KEY).setParam("commits_by_line", "false"); request.execute().assertJson(getClass(), "group_lines_by_commit.json"); }
@Test public void persist_symbols() { DbFileSources.Data dbData = DbFileSources.Data.newBuilder().addAllLines(Arrays.asList( DbFileSources.Line.newBuilder() .setSymbols("2,4,1") .build(), DbFileSources.Line.newBuilder().build(), DbFileSources.Line.newBuilder() .setSymbols("1,3,1") .build())) .build(); setComputedData(dbData); underTest.execute(new TestComputationStepContext()); assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectByFileUuid(session, FILE1_UUID); assertThat(fileSourceDto.getSourceData()).isEqualTo(dbData); verify(fileSourceDataWarnings).commitWarnings(); }