@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(); }
DbFileSources.Data dbData = DbFileSources.Data.newBuilder().addAllLines(Arrays.asList( DbFileSources.Line.newBuilder() .setScmAuthor("john") .setScmDate(123456789L) .setScmRevision("rev-1") .build(), DbFileSources.Line.newBuilder() .setScmDate(223456789L) .build(), DbFileSources.Line.newBuilder() .build())) .build(); setComputedData(dbData);
@Test public void persist_coverage() { DbFileSources.Data dbData = DbFileSources.Data.newBuilder().addLines( DbFileSources.Line.newBuilder() .setConditions(10) .setCoveredConditions(2) .setLineHits(1) .setLine(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(); }
public Builder mergeFrom(org.sonar.db.protobuf.DbFileSources.Line other) { if (other == org.sonar.db.protobuf.DbFileSources.Line.getDefaultInstance()) return this; if (other.hasLine()) { setLine(other.getLine()); onChanged(); onChanged(); onChanged(); setScmDate(other.getScmDate()); setDeprecatedUtLineHits(other.getDeprecatedUtLineHits()); setDeprecatedUtConditions(other.getDeprecatedUtConditions()); setDeprecatedUtCoveredConditions(other.getDeprecatedUtCoveredConditions()); setDeprecatedItLineHits(other.getDeprecatedItLineHits()); setDeprecatedItConditions(other.getDeprecatedItConditions()); setDeprecatedItCoveredConditions(other.getDeprecatedItCoveredConditions()); setDeprecatedOverallLineHits(other.getDeprecatedOverallLineHits()); setDeprecatedOverallConditions(other.getDeprecatedOverallConditions()); setDeprecatedOverallCoveredConditions(other.getDeprecatedOverallCoveredConditions());
@Override public void read(DbFileSources.Line.Builder lineBuilder) { if (scmReport.hasChangesetForLine(lineBuilder.getLine())) { Changeset changeset = scmReport.getChangesetForLine(lineBuilder.getLine()); String author = changeset.getAuthor(); if (author != null) { lineBuilder.setScmAuthor(author); } String revision = changeset.getRevision(); if (revision != null) { lineBuilder.setScmRevision(revision); } lineBuilder.setScmDate(changeset.getDate()); updateLatestChange(changeset); if (revision != null) { updateLatestChangeWithRevision(changeset); } } }
/** * <code>repeated .org.sonar.server.source.db.Line lines = 1;</code> */ public Builder addLines( org.sonar.db.protobuf.DbFileSources.Line.Builder builderForValue) { if (linesBuilder_ == null) { ensureLinesIsMutable(); lines_.add(builderForValue.build()); onChanged(); } else { linesBuilder_.addMessage(builderForValue.build()); } return this; } /**
/** * <code>repeated .org.sonar.server.source.db.Line lines = 1;</code> */ public Builder setLines( int index, org.sonar.db.protobuf.DbFileSources.Line.Builder builderForValue) { if (linesBuilder_ == null) { ensureLinesIsMutable(); lines_.set(index, builderForValue.build()); onChanged(); } else { linesBuilder_.setMessage(index, builderForValue.build()); } return this; } /**
/** * <code>repeated .org.sonar.server.source.db.Line lines = 1;</code> */ public Builder addLines( int index, org.sonar.db.protobuf.DbFileSources.Line.Builder builderForValue) { if (linesBuilder_ == null) { ensureLinesIsMutable(); lines_.add(index, builderForValue.build()); onChanged(); } else { linesBuilder_.addMessage(index, builderForValue.build()); } return this; } /**
private void processHighlightings(DbFileSources.Line.Builder lineBuilder) { int line = lineBuilder.getLine(); StringBuilder highlighting = new StringBuilder(); incrementHighlightingListMatchingLine(line); for (Iterator<ScannerReport.SyntaxHighlightingRule> syntaxHighlightingIterator = highlightingList.iterator(); syntaxHighlightingIterator.hasNext();) { processHighlighting(syntaxHighlightingIterator, highlighting, lineBuilder); } if (highlighting.length() > 0) { lineBuilder.setHighlighting(highlighting.toString()); } }
private static void processCoverage(DbFileSources.Line.Builder lineBuilder, ScannerReport.LineCoverage reportCoverage) { if (reportCoverage.getHasHitsCase() == HasHitsCase.HITS) { lineBuilder.setLineHits(reportCoverage.getHits() ? 1 : 0); } if (reportCoverage.getHasCoveredConditionsCase() == HasCoveredConditionsCase.COVERED_CONDITIONS) { lineBuilder.setConditions(reportCoverage.getConditions()); lineBuilder.setCoveredConditions(reportCoverage.getCoveredConditions()); } }
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); } }
.setSourceData(DbFileSources.Data.newBuilder() .addLines(DbFileSources.Line.newBuilder() .setLine(1) .setSource("old line") .build()) .build()) .setCreatedAt(past) .setLine(1) .setSource("old line") .setScmDate(123456789L) .setScmRevision("rev-1") .setScmAuthor("john") .build()) .build();
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 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(); }
@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 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(); }
@Override public Optional<ReadError> read(DbFileSources.Line.Builder lineBuilder) { if (scmReport.hasChangesetForLine(lineBuilder.getLine())) { Changeset changeset = scmReport.getChangesetForLine(lineBuilder.getLine()); String author = changeset.getAuthor(); if (author != null) { lineBuilder.setScmAuthor(author); } String revision = changeset.getRevision(); if (revision != null) { lineBuilder.setScmRevision(revision); } lineBuilder.setScmDate(changeset.getDate()); updateLatestChange(changeset); if (revision != null) { updateLatestChangeWithRevision(changeset); } } return Optional.empty(); }
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 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(); }
@Test public void nothing_to_do_when_no_coverage_info_for_current_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.Line.Builder line2Builder = DbFileSources.Data.newBuilder().addLinesBuilder().setLine(2); computeCoverageLine.read(line2Builder); assertThat(line2Builder.hasLineHits()).isFalse(); assertThat(line2Builder.hasConditions()).isFalse(); assertThat(line2Builder.hasCoveredConditions()).isFalse(); }