From: Lukasz Jarocki Date: Tue, 14 Mar 2023 10:30:05 +0000 (+0100) Subject: SONAR-18679 moved unit test to integration test in sonar-scanner-protocol X-Git-Tag: 10.0.0.68432~132 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=83e185826c57a1d287d0f622fc50f80017fad944;p=sonarqube.git SONAR-18679 moved unit test to integration test in sonar-scanner-protocol --- diff --git a/sonar-scanner-protocol/src/it/java/org/sonar/scanner/protocol/output/ScannerReportReaderIT.java b/sonar-scanner-protocol/src/it/java/org/sonar/scanner/protocol/output/ScannerReportReaderIT.java new file mode 100644 index 00000000000..497b131bc46 --- /dev/null +++ b/sonar-scanner-protocol/src/it/java/org/sonar/scanner/protocol/output/ScannerReportReaderIT.java @@ -0,0 +1,376 @@ +/* + * SonarQube + * Copyright (C) 2009-2023 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.scanner.protocol.output; + +import com.google.common.collect.Lists; +import com.google.protobuf.ByteString; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.LinkedList; +import java.util.List; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.sonar.core.util.CloseableIterator; +import org.sonar.core.util.Protobuf; +import org.sonar.scanner.protocol.internal.ScannerInternal.SensorCacheEntry; +import org.sonar.scanner.protocol.output.ScannerReport.Measure.StringValue; +import org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType; + +import static java.nio.charset.StandardCharsets.UTF_8; +import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThat; + +public class ScannerReportReaderIT { + + private static final int UNKNOWN_COMPONENT_REF = 123; + + @Rule + public TemporaryFolder temp = new TemporaryFolder(); + + private FileStructure fileStructure; + private ScannerReportReader underTest; + + @Before + public void setUp() throws Exception { + File dir = temp.newFolder(); + fileStructure = new FileStructure(dir); + underTest = new ScannerReportReader(fileStructure); + } + + @Test + public void read_metadata() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + 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()).isOne(); + assertThat(readMetadata.getCrossProjectDuplicationActivated()).isTrue(); + } + + @Test(expected = IllegalStateException.class) + public void fail_if_missing_metadata_file() { + underTest.readMetadata(); + } + + @Test + public void read_components() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + ScannerReport.Component.Builder component = ScannerReport.Component.newBuilder() + .setRef(1) + .setProjectRelativePath("src/main/java/Foo.java"); + writer.writeComponent(component.build()); + + assertThat(underTest.readComponent(1).getProjectRelativePath()).isEqualTo("src/main/java/Foo.java"); + } + + @Test(expected = IllegalStateException.class) + public void fail_if_missing_file_on_component() { + underTest.readComponent(UNKNOWN_COMPONENT_REF); + } + + @Test + public void read_issues() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + ScannerReport.Issue issue = ScannerReport.Issue.newBuilder() + .build(); + writer.writeComponentIssues(1, asList(issue)); + + assertThat(underTest.readComponentIssues(1)).toIterable().hasSize(1); + assertThat(underTest.readComponentIssues(200)).isExhausted(); + } + + @Test + public void read_external_issues() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + ScannerReport.ExternalIssue issue = ScannerReport.ExternalIssue.newBuilder() + .build(); + writer.appendComponentExternalIssue(1, issue); + + assertThat(underTest.readComponentExternalIssues(1)).toIterable().hasSize(1); + assertThat(underTest.readComponentExternalIssues(200)).toIterable().isEmpty(); + } + + @Test + public void empty_list_if_no_issue_found() { + assertThat(underTest.readComponentIssues(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); + } + + @Test + public void read_measures() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + ScannerReport.Measure.Builder measure = ScannerReport.Measure.newBuilder() + .setStringValue(StringValue.newBuilder().setValue("value_a")); + writer.appendComponentMeasure(1, measure.build()); + + assertThat(underTest.readComponentMeasures(1)).toIterable().hasSize(1); + } + + @Test + public void empty_list_if_no_measure_found() { + assertThat(underTest.readComponentMeasures(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); + } + + @Test + public void read_changesets() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + ScannerReport.Changesets.Builder scm = ScannerReport.Changesets.newBuilder() + .setComponentRef(1) + .addChangeset(ScannerReport.Changesets.Changeset.newBuilder().setDate(123_456_789).setAuthor("jack.daniels").setRevision("123-456-789")); + writer.writeComponentChangesets(scm.build()); + + assertThat(underTest.readChangesets(1).getChangesetList()).hasSize(1); + assertThat(underTest.readChangesets(1).getChangeset(0).getDate()).isEqualTo(123_456_789L); + } + + @Test + public void null_if_no_changeset_found() { + assertThat(underTest.readChangesets(UNKNOWN_COMPONENT_REF)).isNull(); + } + + @Test + public void read_duplications() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + writer.writeMetadata(ScannerReport.Metadata.newBuilder() + .setRootComponentRef(1).build()); + writer.writeComponent(ScannerReport.Component.newBuilder() + .setRef(1).build()); + + ScannerReport.Duplication duplication = ScannerReport.Duplication.newBuilder() + .setOriginPosition(ScannerReport.TextRange.newBuilder() + .setStartLine(1) + .setEndLine(5) + .build()) + .addDuplicate(ScannerReport.Duplicate.newBuilder() + .setOtherFileRef(2) + .setRange(ScannerReport.TextRange.newBuilder() + .setStartLine(6) + .setEndLine(10) + .build()) + .build()) + .build(); + writer.writeComponentDuplications(1, asList(duplication)); + + ScannerReportReader sut = new ScannerReportReader(fileStructure); + assertThat(sut.readComponentDuplications(1)).toIterable().hasSize(1); + } + + @Test + public void empty_list_if_no_duplication_found() { + assertThat(underTest.readComponentDuplications(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); + } + + @Test + public void read_duplication_blocks() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + 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(fileStructure); + assertThat(sut.readCpdTextBlocks(1)).toIterable().hasSize(1); + } + + @Test + public void read_analysis_cache() throws IOException { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + + SensorCacheEntry entry1 = SensorCacheEntry.newBuilder() + .setKey("key") + .setData(ByteString.copyFrom("data", UTF_8)) + .build(); + SensorCacheEntry entry2 = SensorCacheEntry.newBuilder() + .setKey("key") + .setData(ByteString.copyFrom("data", UTF_8)) + .build(); + + Protobuf.writeStream(List.of(entry1, entry2), fileStructure.analysisCache(), false); + ScannerReportReader reader = new ScannerReportReader(fileStructure); + + CloseableIterator it = Protobuf.readStream(reader.getAnalysisCache(), SensorCacheEntry.parser()); + List data = new LinkedList<>(); + it.forEachRemaining(data::add); + assertThat(data).containsExactly(entry1, entry2); + } + + @Test + public void read_analysis_cache_returns_null_if_no_file_exists() { + ScannerReportReader reader = new ScannerReportReader(fileStructure); + assertThat(reader.getAnalysisCache()).isNull(); + } + + @Test + public void empty_list_if_no_duplication_block_found() { + assertThat(underTest.readComponentDuplications(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); + } + + @Test + public void read_syntax_highlighting() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + 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 it = underTest.readComponentSyntaxHighlighting(1)) { + ScannerReport.SyntaxHighlightingRule syntaxHighlighting = it.next(); + assertThat(syntaxHighlighting.getRange()).isNotNull(); + assertThat(syntaxHighlighting.getRange().getStartLine()).isOne(); + assertThat(syntaxHighlighting.getRange().getEndLine()).isEqualTo(10); + assertThat(syntaxHighlighting.getType()).isEqualTo(HighlightingType.ANNOTATION); + } + } + + @Test + public void return_empty_if_no_highlighting_found() { + assertThat(underTest.readComponentSyntaxHighlighting(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); + } + + @Test + public void read_symbols() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + writer.writeMetadata(ScannerReport.Metadata.newBuilder() + .setRootComponentRef(1) + .build()); + writer.writeComponent(ScannerReport.Component.newBuilder() + .setRef(1).build()); + + writer.writeComponentSymbols(1, asList(ScannerReport.Symbol.newBuilder() + .setDeclaration(ScannerReport.TextRange.newBuilder() + .setStartLine(1) + .setStartOffset(3) + .setEndLine(1) + .setEndOffset(5) + .build()) + .addReference(ScannerReport.TextRange.newBuilder() + .setStartLine(10) + .setStartOffset(15) + .setEndLine(11) + .setEndOffset(2) + .build()) + .build())); + + underTest = new ScannerReportReader(fileStructure); + assertThat(underTest.readComponentSymbols(1)).toIterable().hasSize(1); + } + + @Test + public void empty_list_if_no_symbol_found() { + assertThat(underTest.readComponentSymbols(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); + } + + @Test + public void read_coverage() { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + writer.writeMetadata(ScannerReport.Metadata.newBuilder() + .setRootComponentRef(1) + .build()); + writer.writeComponent(ScannerReport.Component.newBuilder() + .setRef(1).build()); + + writer.writeComponentCoverage(1, asList( + ScannerReport.LineCoverage.newBuilder() + .setLine(1) + .setConditions(1) + .setHits(true) + .setCoveredConditions(1) + .build(), + ScannerReport.LineCoverage.newBuilder() + .setLine(2) + .setConditions(5) + .setHits(false) + .setCoveredConditions(4) + .build())); + + underTest = new ScannerReportReader(fileStructure); + try (CloseableIterator it = new ScannerReportReader(fileStructure).readComponentCoverage(1)) { + ScannerReport.LineCoverage coverage = it.next(); + assertThat(coverage.getLine()).isOne(); + assertThat(coverage.getConditions()).isOne(); + assertThat(coverage.getHits()).isTrue(); + assertThat(coverage.getCoveredConditions()).isOne(); + } + } + + @Test + public void return_empty_iterator_if_no_coverage_found() { + assertThat(underTest.readComponentCoverage(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); + } + + @Test + public void read_source_lines() throws Exception { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + File file = writer.getFileStructure().fileFor(FileStructure.Domain.SOURCE, 1); + FileUtils.writeLines(file, Lists.newArrayList("line1", "line2")); + + File sourceFile = new ScannerReportReader(fileStructure).readFileSource(1); + assertThat(sourceFile).isEqualTo(file); + } + + @Test + public void read_file_source() throws Exception { + ScannerReportWriter writer = new ScannerReportWriter(fileStructure); + try (FileOutputStream outputStream = new FileOutputStream(writer.getSourceFile(1))) { + IOUtils.write("line1\nline2", outputStream); + } + + try (InputStream inputStream = FileUtils.openInputStream(underTest.readFileSource(1))) { + assertThat(IOUtils.readLines(inputStream)).containsOnly("line1", "line2"); + } + } + + @Test + public void return_null_when_no_file_source() { + assertThat(underTest.readFileSource(UNKNOWN_COMPONENT_REF)).isNull(); + } +} diff --git a/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/input/ProjectRepositoriesTest.java b/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/input/ProjectRepositoriesTest.java index 2918a438acc..c9c0cf8a66b 100644 --- a/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/input/ProjectRepositoriesTest.java +++ b/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/input/ProjectRepositoriesTest.java @@ -20,7 +20,6 @@ package org.sonar.scanner.protocol.input; import com.google.common.collect.Maps; -import org.junit.Before; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; diff --git a/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportReaderTest.java b/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportReaderTest.java deleted file mode 100644 index ac686857cbb..00000000000 --- a/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportReaderTest.java +++ /dev/null @@ -1,376 +0,0 @@ -/* - * SonarQube - * Copyright (C) 2009-2023 SonarSource SA - * mailto:info AT sonarsource DOT com - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.scanner.protocol.output; - -import com.google.common.collect.Lists; -import com.google.protobuf.ByteString; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.LinkedList; -import java.util.List; -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import org.sonar.core.util.CloseableIterator; -import org.sonar.core.util.Protobuf; -import org.sonar.scanner.protocol.internal.ScannerInternal.SensorCacheEntry; -import org.sonar.scanner.protocol.output.ScannerReport.Measure.StringValue; -import org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType; - -import static java.nio.charset.StandardCharsets.UTF_8; -import static java.util.Arrays.asList; -import static java.util.Collections.singletonList; -import static org.assertj.core.api.Assertions.assertThat; - -public class ScannerReportReaderTest { - - private static final int UNKNOWN_COMPONENT_REF = 123; - - @Rule - public TemporaryFolder temp = new TemporaryFolder(); - - private FileStructure fileStructure; - private ScannerReportReader underTest; - - @Before - public void setUp() throws Exception { - File dir = temp.newFolder(); - fileStructure = new FileStructure(dir); - underTest = new ScannerReportReader(fileStructure); - } - - @Test - public void read_metadata() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - 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()).isOne(); - assertThat(readMetadata.getCrossProjectDuplicationActivated()).isTrue(); - } - - @Test(expected = IllegalStateException.class) - public void fail_if_missing_metadata_file() { - underTest.readMetadata(); - } - - @Test - public void read_components() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - ScannerReport.Component.Builder component = ScannerReport.Component.newBuilder() - .setRef(1) - .setProjectRelativePath("src/main/java/Foo.java"); - writer.writeComponent(component.build()); - - assertThat(underTest.readComponent(1).getProjectRelativePath()).isEqualTo("src/main/java/Foo.java"); - } - - @Test(expected = IllegalStateException.class) - public void fail_if_missing_file_on_component() { - underTest.readComponent(UNKNOWN_COMPONENT_REF); - } - - @Test - public void read_issues() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - ScannerReport.Issue issue = ScannerReport.Issue.newBuilder() - .build(); - writer.writeComponentIssues(1, asList(issue)); - - assertThat(underTest.readComponentIssues(1)).toIterable().hasSize(1); - assertThat(underTest.readComponentIssues(200)).isExhausted(); - } - - @Test - public void read_external_issues() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - ScannerReport.ExternalIssue issue = ScannerReport.ExternalIssue.newBuilder() - .build(); - writer.appendComponentExternalIssue(1, issue); - - assertThat(underTest.readComponentExternalIssues(1)).toIterable().hasSize(1); - assertThat(underTest.readComponentExternalIssues(200)).toIterable().isEmpty(); - } - - @Test - public void empty_list_if_no_issue_found() { - assertThat(underTest.readComponentIssues(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); - } - - @Test - public void read_measures() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - ScannerReport.Measure.Builder measure = ScannerReport.Measure.newBuilder() - .setStringValue(StringValue.newBuilder().setValue("value_a")); - writer.appendComponentMeasure(1, measure.build()); - - assertThat(underTest.readComponentMeasures(1)).toIterable().hasSize(1); - } - - @Test - public void empty_list_if_no_measure_found() { - assertThat(underTest.readComponentMeasures(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); - } - - @Test - public void read_changesets() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - ScannerReport.Changesets.Builder scm = ScannerReport.Changesets.newBuilder() - .setComponentRef(1) - .addChangeset(ScannerReport.Changesets.Changeset.newBuilder().setDate(123_456_789).setAuthor("jack.daniels").setRevision("123-456-789")); - writer.writeComponentChangesets(scm.build()); - - assertThat(underTest.readChangesets(1).getChangesetList()).hasSize(1); - assertThat(underTest.readChangesets(1).getChangeset(0).getDate()).isEqualTo(123_456_789L); - } - - @Test - public void null_if_no_changeset_found() { - assertThat(underTest.readChangesets(UNKNOWN_COMPONENT_REF)).isNull(); - } - - @Test - public void read_duplications() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - writer.writeMetadata(ScannerReport.Metadata.newBuilder() - .setRootComponentRef(1).build()); - writer.writeComponent(ScannerReport.Component.newBuilder() - .setRef(1).build()); - - ScannerReport.Duplication duplication = ScannerReport.Duplication.newBuilder() - .setOriginPosition(ScannerReport.TextRange.newBuilder() - .setStartLine(1) - .setEndLine(5) - .build()) - .addDuplicate(ScannerReport.Duplicate.newBuilder() - .setOtherFileRef(2) - .setRange(ScannerReport.TextRange.newBuilder() - .setStartLine(6) - .setEndLine(10) - .build()) - .build()) - .build(); - writer.writeComponentDuplications(1, asList(duplication)); - - ScannerReportReader sut = new ScannerReportReader(fileStructure); - assertThat(sut.readComponentDuplications(1)).toIterable().hasSize(1); - } - - @Test - public void empty_list_if_no_duplication_found() { - assertThat(underTest.readComponentDuplications(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); - } - - @Test - public void read_duplication_blocks() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - 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(fileStructure); - assertThat(sut.readCpdTextBlocks(1)).toIterable().hasSize(1); - } - - @Test - public void read_analysis_cache() throws IOException { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - - SensorCacheEntry entry1 = SensorCacheEntry.newBuilder() - .setKey("key") - .setData(ByteString.copyFrom("data", UTF_8)) - .build(); - SensorCacheEntry entry2 = SensorCacheEntry.newBuilder() - .setKey("key") - .setData(ByteString.copyFrom("data", UTF_8)) - .build(); - - Protobuf.writeStream(List.of(entry1, entry2), fileStructure.analysisCache(), false); - ScannerReportReader reader = new ScannerReportReader(fileStructure); - - CloseableIterator it = Protobuf.readStream(reader.getAnalysisCache(), SensorCacheEntry.parser()); - List data = new LinkedList<>(); - it.forEachRemaining(data::add); - assertThat(data).containsExactly(entry1, entry2); - } - - @Test - public void read_analysis_cache_returns_null_if_no_file_exists() { - ScannerReportReader reader = new ScannerReportReader(fileStructure); - assertThat(reader.getAnalysisCache()).isNull(); - } - - @Test - public void empty_list_if_no_duplication_block_found() { - assertThat(underTest.readComponentDuplications(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); - } - - @Test - public void read_syntax_highlighting() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - 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 it = underTest.readComponentSyntaxHighlighting(1)) { - ScannerReport.SyntaxHighlightingRule syntaxHighlighting = it.next(); - assertThat(syntaxHighlighting.getRange()).isNotNull(); - assertThat(syntaxHighlighting.getRange().getStartLine()).isOne(); - assertThat(syntaxHighlighting.getRange().getEndLine()).isEqualTo(10); - assertThat(syntaxHighlighting.getType()).isEqualTo(HighlightingType.ANNOTATION); - } - } - - @Test - public void return_empty_if_no_highlighting_found() { - assertThat(underTest.readComponentSyntaxHighlighting(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); - } - - @Test - public void read_symbols() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - writer.writeMetadata(ScannerReport.Metadata.newBuilder() - .setRootComponentRef(1) - .build()); - writer.writeComponent(ScannerReport.Component.newBuilder() - .setRef(1).build()); - - writer.writeComponentSymbols(1, asList(ScannerReport.Symbol.newBuilder() - .setDeclaration(ScannerReport.TextRange.newBuilder() - .setStartLine(1) - .setStartOffset(3) - .setEndLine(1) - .setEndOffset(5) - .build()) - .addReference(ScannerReport.TextRange.newBuilder() - .setStartLine(10) - .setStartOffset(15) - .setEndLine(11) - .setEndOffset(2) - .build()) - .build())); - - underTest = new ScannerReportReader(fileStructure); - assertThat(underTest.readComponentSymbols(1)).toIterable().hasSize(1); - } - - @Test - public void empty_list_if_no_symbol_found() { - assertThat(underTest.readComponentSymbols(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); - } - - @Test - public void read_coverage() { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - writer.writeMetadata(ScannerReport.Metadata.newBuilder() - .setRootComponentRef(1) - .build()); - writer.writeComponent(ScannerReport.Component.newBuilder() - .setRef(1).build()); - - writer.writeComponentCoverage(1, asList( - ScannerReport.LineCoverage.newBuilder() - .setLine(1) - .setConditions(1) - .setHits(true) - .setCoveredConditions(1) - .build(), - ScannerReport.LineCoverage.newBuilder() - .setLine(2) - .setConditions(5) - .setHits(false) - .setCoveredConditions(4) - .build())); - - underTest = new ScannerReportReader(fileStructure); - try (CloseableIterator it = new ScannerReportReader(fileStructure).readComponentCoverage(1)) { - ScannerReport.LineCoverage coverage = it.next(); - assertThat(coverage.getLine()).isOne(); - assertThat(coverage.getConditions()).isOne(); - assertThat(coverage.getHits()).isTrue(); - assertThat(coverage.getCoveredConditions()).isOne(); - } - } - - @Test - public void return_empty_iterator_if_no_coverage_found() { - assertThat(underTest.readComponentCoverage(UNKNOWN_COMPONENT_REF)).toIterable().isEmpty(); - } - - @Test - public void read_source_lines() throws Exception { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - File file = writer.getFileStructure().fileFor(FileStructure.Domain.SOURCE, 1); - FileUtils.writeLines(file, Lists.newArrayList("line1", "line2")); - - File sourceFile = new ScannerReportReader(fileStructure).readFileSource(1); - assertThat(sourceFile).isEqualTo(file); - } - - @Test - public void read_file_source() throws Exception { - ScannerReportWriter writer = new ScannerReportWriter(fileStructure); - try (FileOutputStream outputStream = new FileOutputStream(writer.getSourceFile(1))) { - IOUtils.write("line1\nline2", outputStream); - } - - try (InputStream inputStream = FileUtils.openInputStream(underTest.readFileSource(1))) { - assertThat(IOUtils.readLines(inputStream)).containsOnly("line1", "line2"); - } - } - - @Test - public void return_null_when_no_file_source() { - assertThat(underTest.readFileSource(UNKNOWN_COMPONENT_REF)).isNull(); - } -} diff --git a/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportWriterTest.java b/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportWriterTest.java index ca35d3c7b93..d0853ac4ba1 100644 --- a/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportWriterTest.java +++ b/sonar-scanner-protocol/src/test/java/org/sonar/scanner/protocol/output/ScannerReportWriterTest.java @@ -21,6 +21,7 @@ package org.sonar.scanner.protocol.output; import com.google.common.collect.Iterators; import java.io.File; +import java.util.List; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -32,21 +33,17 @@ import org.sonar.scanner.protocol.output.ScannerReport.Component.ComponentType; import org.sonar.scanner.protocol.output.ScannerReport.Measure.DoubleValue; import org.sonar.scanner.protocol.output.ScannerReport.SyntaxHighlightingRule.HighlightingType; -import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; public class ScannerReportWriterTest { @Rule public TemporaryFolder temp = new TemporaryFolder(); - File dir; - private FileStructure fileStructure; private ScannerReportWriter underTest; @Before public void setUp() throws Exception { - fileStructure = new FileStructure(temp.newFolder()); - underTest = new ScannerReportWriter(fileStructure); + underTest = new ScannerReportWriter(new FileStructure(temp.newFolder())); } @Test @@ -99,7 +96,7 @@ public class ScannerReportWriterTest { .setMsg("the message") .build(); - underTest.writeComponentIssues(1, asList(issue)); + underTest.writeComponentIssues(1, List.of(issue)); assertThat(underTest.hasComponentData(FileStructure.Domain.ISSUES, 1)).isTrue(); File file = underTest.getFileStructure().fileFor(FileStructure.Domain.ISSUES, 1); @@ -227,7 +224,7 @@ public class ScannerReportWriterTest { .build()) .build()) .build(); - underTest.writeComponentDuplications(1, asList(duplication)); + underTest.writeComponentDuplications(1, List.of(duplication)); assertThat(underTest.hasComponentData(FileStructure.Domain.DUPLICATIONS, 1)).isTrue(); File file = underTest.getFileStructure().fileFor(FileStructure.Domain.DUPLICATIONS, 1); @@ -250,7 +247,7 @@ public class ScannerReportWriterTest { .setStartTokenIndex(10) .setEndTokenIndex(15) .build(); - underTest.writeCpdTextBlocks(1, asList(duplicationBlock)); + underTest.writeCpdTextBlocks(1, List.of(duplicationBlock)); assertThat(underTest.hasComponentData(FileStructure.Domain.CPD_TEXT_BLOCKS, 1)).isTrue(); File file = underTest.getFileStructure().fileFor(FileStructure.Domain.CPD_TEXT_BLOCKS, 1); @@ -286,7 +283,7 @@ public class ScannerReportWriterTest { .build()) .build(); - underTest.writeComponentSymbols(1, asList(symbol)); + underTest.writeComponentSymbols(1, List.of(symbol)); assertThat(underTest.hasComponentData(FileStructure.Domain.SYMBOLS, 1)).isTrue(); @@ -302,7 +299,7 @@ public class ScannerReportWriterTest { // no data yet assertThat(underTest.hasComponentData(FileStructure.Domain.SYNTAX_HIGHLIGHTINGS, 1)).isFalse(); - underTest.writeComponentSyntaxHighlighting(1, asList( + underTest.writeComponentSyntaxHighlighting(1, List.of( ScannerReport.SyntaxHighlightingRule.newBuilder() .setRange(ScannerReport.TextRange.newBuilder() .setStartLine(1) @@ -319,7 +316,7 @@ public class ScannerReportWriterTest { // no data yet assertThat(underTest.hasComponentData(FileStructure.Domain.SGNIFICANT_CODE, 1)).isFalse(); - underTest.writeComponentSignificantCode(1, asList( + underTest.writeComponentSignificantCode(1, List.of( ScannerReport.LineSgnificantCode.newBuilder() .setLine(1) .setStartOffset(2) @@ -334,7 +331,7 @@ public class ScannerReportWriterTest { // no data yet assertThat(underTest.hasComponentData(FileStructure.Domain.COVERAGES, 1)).isFalse(); - underTest.writeComponentCoverage(1, asList( + underTest.writeComponentCoverage(1, List.of( ScannerReport.LineCoverage.newBuilder() .setLine(1) .setConditions(1) diff --git a/sonar-scanner-protocol/src/test/resources/org/sonar/scanner/protocol/output/component/ReportComponentsTest/expected.json b/sonar-scanner-protocol/src/test/resources/org/sonar/scanner/protocol/output/component/ReportComponentsTest/expected.json deleted file mode 100644 index 581bbc5ea23..00000000000 --- a/sonar-scanner-protocol/src/test/resources/org/sonar/scanner/protocol/output/component/ReportComponentsTest/expected.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "analysisDate": "2012-12-12T00:00:00+0100", - "root": { - "batchId": 1, - "id": 11, - "snapshotId": 111, - "name": "Root project", - "type": "PRJ", - "children": [ - { - "batchId": 2, - "id": 22, - "snapshotId": 222, - "path": "module1", - "name": "Module", - "type": "MOD", - "children": [ - { - "batchId": 3, - "id": 33, - "snapshotId": 333, - "path": "src", - "name": "src", - "type": "DIR", - "children": [ - { - "batchId": 4, - "id": 44, - "snapshotId": 444, - "path": "Foo.java", - "name": "Foo.java", - "type": "FIL", - "languageKey": "java", - "isTest": true, - "children": [] - } - ] - } - ] - } - ] - } -} \ No newline at end of file