Skip to content

Commit

Permalink
Support analysis property sonar.ws.timeout
Browse files Browse the repository at this point in the history
  • Loading branch information
reda-alaoui committed Jun 4, 2024
1 parent 3f35372 commit 9bf1cbe
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package org.jenkinsci.plugins.sonargerrit.sonar;

import hudson.plugins.sonar.SonarInstallation;
import java.time.Duration;
import java.time.temporal.TemporalUnit;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;

/** @author Réda Housni Alaoui */
@Restricted(NoExternalUse.class)
public class SonarInstallationAdditionalAnalysisProperties {

private final Map<String, String> properties;

private SonarInstallationAdditionalAnalysisProperties(SonarInstallation sonarInstallation) {
String additionalAnalysisProperties = sonarInstallation.getAdditionalAnalysisProperties();
if (additionalAnalysisProperties == null) {

Check warning on line 23 in src/main/java/org/jenkinsci/plugins/sonargerrit/sonar/SonarInstallationAdditionalAnalysisProperties.java

View check run for this annotation

ci.jenkins.io / Code Coverage

Partially covered line

Line 23 is only partially covered, one branch is missing
properties = Collections.emptyMap();
return;

Check warning on line 25 in src/main/java/org/jenkinsci/plugins/sonargerrit/sonar/SonarInstallationAdditionalAnalysisProperties.java

View check run for this annotation

ci.jenkins.io / Code Coverage

Not covered lines

Lines 24-25 are not covered by tests
}

properties =
Stream.of(StringUtils.split(additionalAnalysisProperties))
.map(property -> StringUtils.split(property, "="))
.filter(keyValue -> keyValue.length == 2)
.collect(
Collectors.toMap(
keyValue -> keyValue[0],
keyValue -> keyValue[1],
(firstValue, secondValue) -> secondValue));
}

public static SonarInstallationAdditionalAnalysisProperties parse(
SonarInstallation sonarInstallation) {
return new SonarInstallationAdditionalAnalysisProperties(sonarInstallation);
}

public Optional<Duration> getDuration(String key, TemporalUnit temporalUnit) {
return Optional.ofNullable(properties.get(key))
.map(
stringValue -> {
try {
return Long.parseLong(stringValue);
} catch (NumberFormatException e) {
return null;

Check warning on line 51 in src/main/java/org/jenkinsci/plugins/sonargerrit/sonar/SonarInstallationAdditionalAnalysisProperties.java

View check run for this annotation

ci.jenkins.io / Code Coverage

Not covered lines

Lines 50-51 are not covered by tests
}
})
.map(longValue -> Duration.of(longValue, temporalUnit));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import hudson.plugins.sonar.action.SonarAnalysisAction;
import hudson.plugins.sonar.utils.SonarUtils;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
Expand All @@ -27,6 +28,7 @@
import org.jenkinsci.plugins.sonargerrit.TaskListenerLogger;
import org.jenkinsci.plugins.sonargerrit.sonar.Components;
import org.jenkinsci.plugins.sonargerrit.sonar.Issue;
import org.jenkinsci.plugins.sonargerrit.sonar.SonarInstallationAdditionalAnalysisProperties;

/** @author Réda Housni Alaoui */
class PullRequestAnalysisTask {
Expand Down Expand Up @@ -95,10 +97,18 @@ private static Optional<PullRequestAnalysisTask> tryCreate(
SonarUtils.getAuthenticationToken(
run, sonarInstallation, sonarInstallation.getCredentialsId());

WsClient sonarClient =
WsClientFactories.getDefault()
.newClient(
HttpConnector.newBuilder().url(serverUrl).token(authenticationToken).build());
HttpConnector.Builder httpConnectorBuilder =
HttpConnector.newBuilder().url(serverUrl).token(authenticationToken);

httpConnectorBuilder =
SonarInstallationAdditionalAnalysisProperties.parse(sonarInstallation)
.getDuration("sonar.ws.timeout", ChronoUnit.SECONDS)
.map(Duration::toMillis)
.map(Long::intValue)
.map(httpConnectorBuilder::readTimeoutMilliseconds)
.orElse(httpConnectorBuilder);

WsClient sonarClient = WsClientFactories.getDefault().newClient(httpConnectorBuilder.build());

Check warning on line 111 in src/main/java/org/jenkinsci/plugins/sonargerrit/sonar/pull_request_analysis/PullRequestAnalysisTask.java

View check run for this annotation

ci.jenkins.io / Code Coverage

Not covered lines

Lines 101-111 are not covered by tests

Ce.Task ceTask = sonarClient.ce().task(new TaskRequest().setId(ceTaskId)).getTask();
String componentKey = ceTask.getComponentKey();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.jenkinsci.plugins.sonargerrit.sonar;

import static org.assertj.core.api.Assertions.assertThat;

import hudson.plugins.sonar.SonarInstallation;
import java.time.Duration;
import java.time.temporal.ChronoUnit;
import java.util.UUID;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

/** @author Réda Housni Alaoui */
class SonarInstallationAdditionalAnalysisPropertiesTest {

@Test
@DisplayName("Get duration")
void test1() {
assertThat(
SonarInstallationAdditionalAnalysisProperties.parse(
createSonarInstallation(
"foo=bar sonar.ws.timeout=6 bar=foo sonar.ws.timeout=600"))
.getDuration("sonar.ws.timeout", ChronoUnit.SECONDS))
.contains(Duration.of(600, ChronoUnit.SECONDS));
}

@Test
@DisplayName("Get empty duration")
void test2() {
assertThat(
SonarInstallationAdditionalAnalysisProperties.parse(
createSonarInstallation("sonar.ws.timeout= =foo"))
.getDuration("sonar.ws.timeout", ChronoUnit.SECONDS))
.isEmpty();
}

private SonarInstallation createSonarInstallation(String additionalAnalysisProperties) {
return new SonarInstallation(
UUID.randomUUID().toString(),
UUID.randomUUID().toString(),
null,
null,
null,
null,
null,
additionalAnalysisProperties,
null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ public String addInstallation(String url, String token) throws IOException {

String name = UUID.randomUUID().toString();
SonarInstallation sonarInstallation =
new SonarInstallation(name, url, credentialsId, null, null, null, null, null, null);
new SonarInstallation(
name, url, credentialsId, null, null, null, null, "sonar.ws.timeout=600", null);
globalConfiguration.setInstallations(
ArrayUtils.add(globalConfiguration.getInstallations(), sonarInstallation));

Expand Down

0 comments on commit 9bf1cbe

Please sign in to comment.