Skip to content

Commit

Permalink
SONAR-6338 Stream reading / writing coverage message
Browse files Browse the repository at this point in the history
  • Loading branch information
julienlancelot committed Mar 31, 2015
1 parent 0e0368c commit cf4106f
Show file tree
Hide file tree
Showing 9 changed files with 534 additions and 1,228 deletions.
Expand Up @@ -28,8 +28,6 @@
import org.sonar.server.computation.ComputationContext; import org.sonar.server.computation.ComputationContext;
import org.sonar.server.source.db.FileSourceDb; import org.sonar.server.source.db.FileSourceDb;


import javax.annotation.Nullable;

/** /**
* Nothing is persist for the moment. Only Coverage are read and not persist for the moment * Nothing is persist for the moment. Only Coverage are read and not persist for the moment
*/ */
Expand All @@ -53,48 +51,46 @@ private void recursivelyProcessComponent(ComputationContext context, int compone
BatchReportReader reportReader = context.getReportReader(); BatchReportReader reportReader = context.getReportReader();
BatchReport.Component component = reportReader.readComponent(componentRef); BatchReport.Component component = reportReader.readComponent(componentRef);
if (component.getType().equals(Constants.ComponentType.FILE)) { if (component.getType().equals(Constants.ComponentType.FILE)) {
BatchReport.Coverage coverage = reportReader.readFileCoverage(componentRef); Iterable<BatchReport.Coverage> coverageList = reportReader.readFileCoverage(componentRef);
processCoverage(component, coverage); processCoverage(component, coverageList);
} }


for (Integer childRef : component.getChildRefList()) { for (Integer childRef : component.getChildRefList()) {
recursivelyProcessComponent(context, childRef); recursivelyProcessComponent(context, childRef);
} }
} }


private void processCoverage(BatchReport.Component component, @Nullable BatchReport.Coverage coverage) { private void processCoverage(BatchReport.Component component, Iterable<BatchReport.Coverage> coverageList) {
fileSourceData = null; fileSourceData = null;
if (coverage != null) {
FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder(); FileSourceDb.Data.Builder dataBuilder = FileSourceDb.Data.newBuilder();
for (int line = 0; line < coverage.getConditionsByLineCount(); line ++) { for (BatchReport.Coverage coverage : coverageList) {
FileSourceDb.Line.Builder lineBuilder = dataBuilder.addLinesBuilder().setLine(line); FileSourceDb.Line.Builder lineBuilder = dataBuilder.addLinesBuilder().setLine(coverage.getLine());
processLineCoverage(line, lineBuilder, coverage); processLineCoverage(coverage.getLine(), lineBuilder, coverage);
} }
fileSourceData = dataBuilder.build(); fileSourceData = dataBuilder.build();
}
} }


private void processLineCoverage(int line, FileSourceDb.Line.Builder lineBuilder, BatchReport.Coverage coverage){ private void processLineCoverage(int line, FileSourceDb.Line.Builder lineBuilder, BatchReport.Coverage coverage){
// Unit test // Unit test
if (coverage.getUtHitsByLine(line)) { if (coverage.getUtHits()) {
lineBuilder.setUtLineHits(1); lineBuilder.setUtLineHits(1);
} }
lineBuilder.setUtConditions(coverage.getConditionsByLine(line)); lineBuilder.setUtConditions(coverage.getConditions());
lineBuilder.setUtCoveredConditions(coverage.getUtCoveredConditionsByLine(line)); lineBuilder.setUtCoveredConditions(coverage.getUtCoveredConditions());


// Integration test // Integration test
if (coverage.getItHitsByLine(line)) { if (coverage.getItHits()) {
lineBuilder.setItLineHits(1); lineBuilder.setItLineHits(1);
} }
lineBuilder.setItConditions(coverage.getConditionsByLine(line)); lineBuilder.setItConditions(coverage.getConditions());
lineBuilder.setItCoveredConditions(coverage.getItCoveredConditionsByLine(line)); lineBuilder.setItCoveredConditions(coverage.getItCoveredConditions());


// Overall test // Overall test
if (coverage.getUtHitsByLine(line) || coverage.getItHitsByLine(line)) { if (coverage.getUtHits() || coverage.getItHits()) {
lineBuilder.setOverallLineHits(1); lineBuilder.setOverallLineHits(1);
} }
lineBuilder.setOverallConditions(coverage.getConditionsByLine(line)); lineBuilder.setOverallConditions(coverage.getConditions());
lineBuilder.setOverallCoveredConditions(coverage.getOverallCoveredConditionsByLine(line)); lineBuilder.setOverallCoveredConditions(coverage.getOverallCoveredConditions());
} }


@VisibleForTesting @VisibleForTesting
Expand Down
Expand Up @@ -36,8 +36,8 @@


import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays;


import static com.google.common.collect.Lists.newArrayList;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;


Expand Down Expand Up @@ -70,26 +70,28 @@ public void compute_nothing() throws Exception {


step.execute(new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class))); step.execute(new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class)));


assertThat(step.getFileSourceData()).isNull(); assertThat(step.getFileSourceData().getLinesList()).isEmpty();
} }


@Test @Test
public void compute_coverage_from_one_line() throws Exception { public void compute_coverage_from_one_line() throws Exception {
BatchReportWriter writer = initReport(); BatchReportWriter writer = initReport();


writer.writeFileCoverage(BatchReport.Coverage.newBuilder() writer.writeFileCoverage(FILE_REF, newArrayList(BatchReport.Coverage.newBuilder()
.setFileRef(FILE_REF) .setLine(1)
.addAllConditionsByLine(Arrays.asList(10)) .setConditions(10)
.addAllUtHitsByLine(Arrays.asList(true)) .setUtHits(true)
.addAllUtCoveredConditionsByLine(Arrays.asList(2)) .setUtCoveredConditions(2)
.addAllItHitsByLine(Arrays.asList(false)) .setItHits(false)
.addAllItCoveredConditionsByLine(Arrays.asList(3)) .setItCoveredConditions(3)
.addAllOverallCoveredConditionsByLine(Arrays.asList(4)) .setOverallCoveredConditions(4)
.build()); .build()));


step.execute(new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class))); step.execute(new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class)));


FileSourceDb.Data data = step.getFileSourceData(); FileSourceDb.Data data = step.getFileSourceData();
assertThat(data.getLinesList()).hasSize(1);

assertThat(data.getLines(0).getUtLineHits()).isEqualTo(1); assertThat(data.getLines(0).getUtLineHits()).isEqualTo(1);
assertThat(data.getLines(0).getUtConditions()).isEqualTo(10); assertThat(data.getLines(0).getUtConditions()).isEqualTo(10);
assertThat(data.getLines(0).getUtCoveredConditions()).isEqualTo(2); assertThat(data.getLines(0).getUtCoveredConditions()).isEqualTo(2);
Expand All @@ -105,19 +107,40 @@ public void compute_coverage_from_one_line() throws Exception {
public void compute_coverage_from_lines() throws Exception { public void compute_coverage_from_lines() throws Exception {
BatchReportWriter writer = initReport(); BatchReportWriter writer = initReport();


writer.writeFileCoverage(BatchReport.Coverage.newBuilder() writer.writeFileCoverage(FILE_REF, newArrayList(
.setFileRef(FILE_REF) BatchReport.Coverage.newBuilder()
.addAllConditionsByLine(Arrays.asList(10, 0, 4)) .setLine(1)
.addAllUtHitsByLine(Arrays.asList(true, false, false)) .setConditions(10)
.addAllItHitsByLine(Arrays.asList(false, true, true)) .setUtHits(true)
.addAllUtCoveredConditionsByLine(Arrays.asList(1, 0, 4)) .setUtCoveredConditions(1)
.addAllItCoveredConditionsByLine(Arrays.asList(1, 0, 5)) .setItHits(false)
.addAllOverallCoveredConditionsByLine(Arrays.asList(1, 0, 5)) .setItCoveredConditions(1)
.build()); .setOverallCoveredConditions(1)
.build(),
BatchReport.Coverage.newBuilder()
.setLine(2)
.setConditions(0)
.setUtHits(false)
.setUtCoveredConditions(0)
.setItHits(true)
.setItCoveredConditions(0)
.setOverallCoveredConditions(0)
.build(),
BatchReport.Coverage.newBuilder()
.setLine(3)
.setConditions(4)
.setUtHits(false)
.setUtCoveredConditions(4)
.setItHits(true)
.setItCoveredConditions(5)
.setOverallCoveredConditions(5)
.build()));


step.execute(new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class))); step.execute(new ComputationContext(new BatchReportReader(reportDir), mock(ComponentDto.class)));


FileSourceDb.Data data = step.getFileSourceData(); FileSourceDb.Data data = step.getFileSourceData();
assertThat(data.getLinesList()).hasSize(3);

assertThat(data.getLines(0).getUtLineHits()).isEqualTo(1); assertThat(data.getLines(0).getUtLineHits()).isEqualTo(1);
assertThat(data.getLines(0).hasItLineHits()).isFalse(); assertThat(data.getLines(0).hasItLineHits()).isFalse();


Expand Down

0 comments on commit cf4106f

Please sign in to comment.