Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import org.sonar.api.config.Settings;
import org.sonar.api.measures.CoreMetrics;
import org.sonar.api.measures.Metric;
import org.sonar.api.resources.Qualifiers;
import org.sonar.api.utils.log.Logger;
import org.sonar.api.utils.log.Loggers;
import org.sonarqube.ws.*;
Expand All @@ -43,6 +44,7 @@
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;

/**
Expand Down Expand Up @@ -265,9 +267,14 @@ private List<Issue> toIssues(Issues.SearchWsResponse issuesSearchWsResponse) {

List<Issues.Component> components = issuesSearchWsResponse.getComponentsList();

Predicate<String> supported = ((Predicate<String>) Qualifiers.FILE::equals).or(Qualifiers.UNIT_TEST_FILE::equals);

List<Issue> res = new ArrayList<>();
for (Issues.Issue issue : issues) {
Optional<Issues.Component> componentOptional = components.stream().filter(c -> c.getKey().equals(issue.getComponent()) && "FIL".equals(c.getQualifier())).findFirst();
Optional<Issues.Component> componentOptional = components.stream()
.filter(c -> supported.test(c.getQualifier()))
.filter(c -> c.getKey().equals(issue.getComponent()))
.findFirst();

File file = null;
if (componentOptional.isPresent()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,13 +268,22 @@ public void testNotEmptyGetNewIssue() throws IOException {

@Test
public void tesFullPageGetNewIssue() throws IOException {
tesFullPageGetNewIssueForQualifier("FIL");
}

@Test
public void tesFullPageGetNewIssueInTest() throws IOException {
tesFullPageGetNewIssueForQualifier("UTS");
}

private void tesFullPageGetNewIssueForQualifier(String qualifier) throws IOException {
Issues.SearchWsResponse.Builder searchWsResponseBuilder = Issues.SearchWsResponse.newBuilder().setTotal(1).setPs(10);
for (int i = 0; i < 10; i++) {
searchWsResponseBuilder.addIssues(
Issues.Issue.newBuilder().setKey("123").setComponent("moi:toto.java").setRule("squid:123").setLine(10).setMessage("Error here").setSeverity(Common.Severity.BLOCKER)
.setProject("moi").build());
}
Issues.SearchWsResponse searchWsResponse = searchWsResponseBuilder.addComponents(Issues.Component.newBuilder().setKey("moi:toto.java").setQualifier("FIL").setPath("toto.java").build())
Issues.SearchWsResponse searchWsResponse = searchWsResponseBuilder.addComponents(Issues.Component.newBuilder().setKey("moi:toto.java").setQualifier(qualifier).setPath("toto.java").build())
.build();
sonar.enqueue(new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/x-protobuf").setBody(toBuffer(searchWsResponse)));

Expand All @@ -289,14 +298,23 @@ public void tesFullPageGetNewIssue() throws IOException {

@Test
public void tesMultiPageGetNewIssue() throws IOException {
tesMultiPageGetNewIssueForQualifier("FIL");
}

@Test
public void tesMultiPageGetNewIssueInTest() throws IOException {
tesMultiPageGetNewIssueForQualifier("UTS");
}

private void tesMultiPageGetNewIssueForQualifier(String qualifier) throws IOException {
for (int j = 0; j < 5; j++) {
Issues.SearchWsResponse.Builder searchWsResponseBuilder = Issues.SearchWsResponse.newBuilder().setTotal(44).setPs(10);
for (int i = 0; i < (j < 4 ? 10 : 4); i++) {
searchWsResponseBuilder.addIssues(
Issues.Issue.newBuilder().setKey("123").setComponent("moi:toto.java").setRule("squid:123").setLine(10).setMessage("Error here").setSeverity(Common.Severity.BLOCKER)
.setProject("moi").build());
}
Issues.SearchWsResponse searchWsResponse = searchWsResponseBuilder.addComponents(Issues.Component.newBuilder().setKey("moi:toto.java").setQualifier("FIL").setPath("toto.java").build())
Issues.SearchWsResponse searchWsResponse = searchWsResponseBuilder.addComponents(Issues.Component.newBuilder().setKey("moi:toto.java").setQualifier(qualifier).setPath("toto.java").build())
.build();
sonar.enqueue(new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/x-protobuf").setBody(toBuffer(searchWsResponse)));

Expand Down Expand Up @@ -345,11 +363,10 @@ public void tesFailed2GetNewIssue() {
Assertions.assertThatThrownBy(() -> sonarFacade.getNewIssues()).isInstanceOf(IllegalStateException.class).hasCauseInstanceOf(FileNotFoundException.class);
}

@Test
public void testNotEmpty2GetNewIssue() throws IOException {
private void testNotEmpty2GetNewIssueForQualifier(String qualifier) throws IOException {
Issues.SearchWsResponse searchWsResponse = Issues.SearchWsResponse.newBuilder().setTotal(1).setPs(10).addIssues(
Issues.Issue.newBuilder().setKey("123").setComponent("moi:ici:toto.java").setRule("squid:123").setLine(10).setMessage("Error here").setSeverity(Common.Severity.BLOCKER)
.setProject("moi").setSubProject("moi:ici").build()).addComponents(Issues.Component.newBuilder().setKey("moi:ici:toto.java").setQualifier("FIL").setPath("toto.java").build())
.setProject("moi").setSubProject("moi:ici").build()).addComponents(Issues.Component.newBuilder().setKey("moi:ici:toto.java").setQualifier(qualifier).setPath("toto.java").build())
.build();
sonar.enqueue(new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/x-protobuf").setBody(toBuffer(searchWsResponse)));

Expand All @@ -364,6 +381,16 @@ public void testNotEmpty2GetNewIssue() throws IOException {
Assertions.assertThat(issues.get(0).getFile().getAbsolutePath()).isEqualTo(new File(projectDir, "toto.java").getAbsolutePath());
}

@Test
public void testNotEmpty2GetNewIssue() throws IOException {
testNotEmpty2GetNewIssueForQualifier("FIL");
}

@Test
public void testNotEmpty2GetNewIssueInTest() throws IOException {
testNotEmpty2GetNewIssueForQualifier("UTS");
}

@Test
public void testNotEmptyGetNewIssueWithComponent() throws IOException {
Issues.SearchWsResponse searchWsResponse = Issues.SearchWsResponse.newBuilder().setTotal(1).setPs(10).addIssues(
Expand All @@ -386,13 +413,37 @@ public void testNotEmptyGetNewIssueWithComponent() throws IOException {
Assertions.assertThat(issues.get(0).getFile().getAbsolutePath()).isEqualTo(new File(projectDir, "client/core/toto.java").getAbsolutePath());
}

@Test
public void testNotEmptyGetNewIssueWithComponentInTest() throws IOException {
Issues.SearchWsResponse searchWsResponse = Issues.SearchWsResponse.newBuilder().setTotal(1).setPs(10).addIssues(
Issues.Issue.newBuilder().setKey("123").setComponent("moi:test.java").setRule("squid:123").setLine(42).setMessage("Error here").setSeverity(Common.Severity.MAJOR).setProject("moi")
.build()).addComponents(Issues.Component.newBuilder().setKey("moi:test.java").setQualifier("UTS").setPath("test.java").build()).build();
sonar.enqueue(new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/x-protobuf").setBody(toBuffer(searchWsResponse)));

WsComponents.ShowWsResponse showWsResponse = WsComponents.ShowWsResponse.newBuilder()
.addAncestors(WsComponents.Component.newBuilder().setQualifier("RTG").build())
.addAncestors(WsComponents.Component.newBuilder().setQualifier("BRC").setPath("core").build())
.addAncestors(WsComponents.Component.newBuilder().setQualifier("BRC").setPath("client").build())
.build();
sonar.enqueue(new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/x-protobuf").setBody(toBuffer(showWsResponse)));

createReportTaskFile();

List<Issue> issues = sonarFacade.getNewIssues();
Assertions.assertThat(issues).isNotNull().isNotEmpty().extracting(Issue::getKey, Issue::getComponentKey, Issue::getSeverity, Issue::getLine, Issue::getMessage, Issue::getRuleKey)
.contains(Tuple.tuple("123", "moi:test.java", Severity.MAJOR, 42, "Error here", "squid:123"));
Assertions.assertThat(issues.get(0).getFile().getAbsolutePath()).isEqualTo(new File(projectDir, "client/core/test.java").getAbsolutePath());
}

@Test
public void testNotEmptyGetNewIssueWithComponents() throws IOException {
Issues.SearchWsResponse searchWsResponse = Issues.SearchWsResponse.newBuilder().setTotal(1).setPs(10)
.addIssues(Issues.Issue.newBuilder().setKey("123").setComponent("moi:toto.java").setRule("squid:123").setLine(10).setMessage("Error here").setSeverity(Common.Severity.BLOCKER).setProject("moi").build())
.addIssues(Issues.Issue.newBuilder().setKey("789").setComponent("moi:toto.java").setRule("squid:123").setLine(10).setMessage("Error here").setSeverity(Common.Severity.BLOCKER).setProject("moi").build())
.addIssues(Issues.Issue.newBuilder().setKey("456").setComponent("rien:tata.java").setRule("squid:123").setLine(10).setMessage("Error here").setSeverity(Common.Severity.BLOCKER).setProject("moi").build())
.addIssues(Issues.Issue.newBuilder().setKey("abc").setComponent("moi:test.java").setRule("squid:234").setLine(5).setMessage("Error here").setSeverity(Common.Severity.MAJOR).setProject("moi").build())
.addComponents(Issues.Component.newBuilder().setKey("moi:toto.java").setQualifier("FIL").setPath("toto.java").build())
.addComponents(Issues.Component.newBuilder().setKey("moi:test.java").setQualifier("UTS").setPath("test.java").build())
.addComponents(Issues.Component.newBuilder().setKey("rien:tata.java").setQualifier("FIL").setPath("tata.java").build())
.build();
sonar.enqueue(new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/x-protobuf").setBody(toBuffer(searchWsResponse)));
Expand All @@ -410,14 +461,27 @@ public void testNotEmptyGetNewIssueWithComponents() throws IOException {
.build();
sonar.enqueue(new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/x-protobuf").setBody(toBuffer(showWsResponse2)));

WsComponents.ShowWsResponse showWsResponseTest = WsComponents.ShowWsResponse.newBuilder()
.addAncestors(WsComponents.Component.newBuilder().setQualifier("RTG").build())
.addAncestors(WsComponents.Component.newBuilder().setQualifier("BRC").setPath("core").build())
.addAncestors(WsComponents.Component.newBuilder().setQualifier("BRC").setPath("client").build())
.build();
sonar.enqueue(new MockResponse().setResponseCode(200).addHeader("Content-Type", "application/x-protobuf").setBody(toBuffer(showWsResponseTest)));

createReportTaskFile();

List<Issue> issues = sonarFacade.getNewIssues();
Assertions.assertThat(issues).isNotNull().isNotEmpty().extracting(Issue::getKey, Issue::getComponentKey, Issue::getSeverity, Issue::getLine, Issue::getMessage, Issue::getRuleKey)
.contains(Tuple.tuple("123", "moi:toto.java", Severity.BLOCKER, 10, "Error here", "squid:123"), Tuple.tuple("789", "moi:toto.java", Severity.BLOCKER, 10, "Error here", "squid:123"), Tuple.tuple("456", "rien:tata.java", Severity.BLOCKER, 10, "Error here", "squid:123"));
.contains(
Tuple.tuple("123", "moi:toto.java", Severity.BLOCKER, 10, "Error here", "squid:123"),
Tuple.tuple("789", "moi:toto.java", Severity.BLOCKER, 10, "Error here", "squid:123"),
Tuple.tuple("456", "rien:tata.java", Severity.BLOCKER, 10, "Error here", "squid:123"),
Tuple.tuple("abc", "moi:test.java", Severity.MAJOR, 5, "Error here", "squid:234")
);
Assertions.assertThat(issues.get(0).getFile().getAbsolutePath()).isEqualTo(new File(projectDir, "client/core/toto.java").getAbsolutePath());
Assertions.assertThat(issues.get(1).getFile().getAbsolutePath()).isEqualTo(new File(projectDir, "client/core/toto.java").getAbsolutePath());
Assertions.assertThat(issues.get(2).getFile().getAbsolutePath()).isEqualTo(new File(projectDir, "core/tata.java").getAbsolutePath());
Assertions.assertThat(issues.get(3).getFile().getAbsolutePath()).isEqualTo(new File(projectDir, "client/core/test.java").getAbsolutePath());
}

@Test
Expand Down