aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHavoc Pennington <havoc.pennington@sonarsource.com>2025-02-23 11:34:43 -0500
committerLukasz Jarocki <lukasz.jarocki@sonarsource.com>2025-02-28 09:57:47 +0100
commit6a080c5018d3179e2ec7ed5f4128f3d4a3f8a1a3 (patch)
tree7fddbd1b120f54adb7f8e3819394a9a1d1efd195
parent312f7b7f9007174eaeb8b5f9ec84100021703db5 (diff)
downloadsonarqube-6a080c5018d3179e2ec7ed5f4128f3d4a3f8a1a3.tar.gz
sonarqube-6a080c5018d3179e2ec7ed5f4128f3d4a3f8a1a3.zip
SCA-56 Run "reformat code" on SCA files
-rw-r--r--server/sonar-ce-common/src/main/java/org/sonar/ce/common/sca/ScaHolder.java8
-rw-r--r--server/sonar-ce-common/src/main/java/org/sonar/ce/common/sca/ScaHolderImpl.java14
-rw-r--r--server/sonar-ce-common/src/test/java/org/sonar/ce/common/sca/ScaHolderImplTest.java50
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/sca/ScaReleasesDaoIT.java1
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/sca/ListOfListOfStringsTypeHandler.java13
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependenciesQuery.java3
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependencyDto.java34
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependencyReleaseDto.java26
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaReleaseDependenciesDto.java3
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaReleaseDto.java31
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/sca/ScaDependenciesQueryTest.java3
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/sca/ScaDependencyReleaseDtoTest.java2
-rw-r--r--server/sonar-db-dao/src/testFixtures/java/org/sonar/db/sca/ScaDependenciesDbTester.java19
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/CliCacheService.java97
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliCacheServiceTest.java7
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliServiceTest.java3
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaExecutorTest.java8
17 files changed, 157 insertions, 165 deletions
diff --git a/server/sonar-ce-common/src/main/java/org/sonar/ce/common/sca/ScaHolder.java b/server/sonar-ce-common/src/main/java/org/sonar/ce/common/sca/ScaHolder.java
index d55d8e97060..c327b3b3197 100644
--- a/server/sonar-ce-common/src/main/java/org/sonar/ce/common/sca/ScaHolder.java
+++ b/server/sonar-ce-common/src/main/java/org/sonar/ce/common/sca/ScaHolder.java
@@ -25,17 +25,15 @@ import org.sonar.db.sca.ScaDependencyDto;
import org.sonar.db.sca.ScaReleaseDto;
public interface ScaHolder {
- void setDependencies(Collection<ScaDependencyDto> dependencies);
-
/**
* Get the dependencies of this ScaHolder. This is an error
* to call if dependencyAnalysisPresent() returns false.
- *
+ *
* @return the dependencies found by the analysis
*/
List<ScaDependencyDto> getDependencies();
- void setReleases(Collection<ScaReleaseDto> releases);
+ void setDependencies(Collection<ScaDependencyDto> dependencies);
/**
* Get the releases of this ScaHolder. This is an error
@@ -45,6 +43,8 @@ public interface ScaHolder {
*/
List<ScaReleaseDto> getReleases();
+ void setReleases(Collection<ScaReleaseDto> releases);
+
/**
* Returns true if we were able to analyze dependencies.
* If we were not able, then the other getters can't return
diff --git a/server/sonar-ce-common/src/main/java/org/sonar/ce/common/sca/ScaHolderImpl.java b/server/sonar-ce-common/src/main/java/org/sonar/ce/common/sca/ScaHolderImpl.java
index 04951578bc4..e25a7d6c724 100644
--- a/server/sonar-ce-common/src/main/java/org/sonar/ce/common/sca/ScaHolderImpl.java
+++ b/server/sonar-ce-common/src/main/java/org/sonar/ce/common/sca/ScaHolderImpl.java
@@ -30,18 +30,13 @@ public class ScaHolderImpl implements ScaHolder {
private List<ScaReleaseDto> releases = null;
@Override
- public void setDependencies(Collection<ScaDependencyDto> dependencies) {
- this.dependencies = List.copyOf(dependencies);
- }
-
- @Override
public List<ScaDependencyDto> getDependencies() {
return Optional.ofNullable(this.dependencies).orElseThrow(() -> new IllegalStateException("SCA dependency analysis was not performed"));
}
@Override
- public void setReleases(Collection<ScaReleaseDto> releases) {
- this.releases = List.copyOf(releases);
+ public void setDependencies(Collection<ScaDependencyDto> dependencies) {
+ this.dependencies = List.copyOf(dependencies);
}
@Override
@@ -50,6 +45,11 @@ public class ScaHolderImpl implements ScaHolder {
}
@Override
+ public void setReleases(Collection<ScaReleaseDto> releases) {
+ this.releases = List.copyOf(releases);
+ }
+
+ @Override
public boolean dependencyAnalysisPresent() {
return this.dependencies != null && this.releases != null;
}
diff --git a/server/sonar-ce-common/src/test/java/org/sonar/ce/common/sca/ScaHolderImplTest.java b/server/sonar-ce-common/src/test/java/org/sonar/ce/common/sca/ScaHolderImplTest.java
index 175945e1980..83b4228d62b 100644
--- a/server/sonar-ce-common/src/test/java/org/sonar/ce/common/sca/ScaHolderImplTest.java
+++ b/server/sonar-ce-common/src/test/java/org/sonar/ce/common/sca/ScaHolderImplTest.java
@@ -29,6 +29,31 @@ import org.sonar.db.sca.ScaReleaseDto;
import static org.assertj.core.api.Assertions.assertThat;
class ScaHolderImplTest {
+ private static ScaDependencyDto newScaDependencyDto() {
+ return new ScaDependencyDto("scaDependencyUuid",
+ "scaReleaseUuid",
+ true,
+ "compile",
+ "some/path",
+ "another/path",
+ List.of(List.of("pkg:npm/foo@1.0.0")),
+ 1L,
+ 2L);
+ }
+
+ private static ScaReleaseDto newScaReleaseDto() {
+ return new ScaReleaseDto("scaReleaseUuid",
+ "componentUuid",
+ "packageUrl",
+ PackageManager.MAVEN,
+ "foo:bar",
+ "1.0.0",
+ "MIT",
+ true,
+ 1L,
+ 2L);
+ }
+
@Test
void test_setAndGetDependencies() {
ScaHolderImpl scaHolderImpl = new ScaHolderImpl();
@@ -62,29 +87,4 @@ class ScaHolderImplTest {
scaHolderImpl.setReleases(releases);
assertThat(scaHolderImpl.dependencyAnalysisPresent()).isTrue();
}
-
- private static ScaDependencyDto newScaDependencyDto() {
- return new ScaDependencyDto("scaDependencyUuid",
- "scaReleaseUuid",
- true,
- "compile",
- "some/path",
- "another/path",
- List.of(List.of("pkg:npm/foo@1.0.0")),
- 1L,
- 2L);
- }
-
- private static ScaReleaseDto newScaReleaseDto() {
- return new ScaReleaseDto("scaReleaseUuid",
- "componentUuid",
- "packageUrl",
- PackageManager.MAVEN,
- "foo:bar",
- "1.0.0",
- "MIT",
- true,
- 1L,
- 2L);
- }
}
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/sca/ScaReleasesDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/sca/ScaReleasesDaoIT.java
index 1acf0ef735e..70394a816eb 100644
--- a/server/sonar-db-dao/src/it/java/org/sonar/db/sca/ScaReleasesDaoIT.java
+++ b/server/sonar-db-dao/src/it/java/org/sonar/db/sca/ScaReleasesDaoIT.java
@@ -162,7 +162,6 @@ class ScaReleasesDaoIT {
log.warn(map.toString());
}
-
@SuppressWarnings("unused")
ScaReleaseDto scaReleaseDto2 = db.getScaReleasesDbTester().insertScaRelease(componentDto.uuid(), "2", PackageManager.MAVEN, "bar.mee");
ScaReleaseDto scaReleaseDto3 = db.getScaReleasesDbTester().insertScaRelease(componentDto.uuid(), "3", PackageManager.MAVEN, "foo.bar.me");
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ListOfListOfStringsTypeHandler.java b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ListOfListOfStringsTypeHandler.java
index c9b5c309647..fd69353635a 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ListOfListOfStringsTypeHandler.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ListOfListOfStringsTypeHandler.java
@@ -19,16 +19,16 @@
*/
package org.sonar.db.sca;
-import org.apache.ibatis.type.BaseTypeHandler;
-import org.apache.ibatis.type.JdbcType;
import com.google.gson.Gson;
-import java.util.List;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
+import java.sql.CallableStatement;
import java.sql.PreparedStatement;
-import java.sql.SQLException;
import java.sql.ResultSet;
-import java.sql.CallableStatement;
+import java.sql.SQLException;
+import java.util.List;
+import org.apache.ibatis.type.BaseTypeHandler;
+import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
@@ -36,7 +36,8 @@ import org.apache.ibatis.type.MappedTypes;
@MappedTypes(List.class)
public class ListOfListOfStringsTypeHandler extends BaseTypeHandler<List<List<String>>> {
private static final Gson GSON = new Gson();
- private static final Type type = new TypeToken<List<List<String>>>() {}.getType();
+ private static final Type type = new TypeToken<List<List<String>>>() {
+ }.getType();
@Override
public void setNonNullParameter(PreparedStatement ps, int i, List<List<String>> parameter, JdbcType jdbcType) throws SQLException {
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependenciesQuery.java b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependenciesQuery.java
index 5a2c3fca89a..459fcf7a50e 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependenciesQuery.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependenciesQuery.java
@@ -31,8 +31,7 @@ public record ScaDependenciesQuery(
String branchUuid,
@Nullable Boolean direct,
@Nullable List<String> packageManagers,
- @Nullable String query
-) {
+ @Nullable String query) {
/**
* Used by MyBatis mapper
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependencyDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependencyDto.java
index 19c9eee9b94..3601b6839d9 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependencyDto.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependencyDto.java
@@ -75,6 +75,12 @@ public record ScaDependencyDto(
}
}
+ private static void checkLength(@Nullable String value, int maxLength, String name) {
+ if (value != null) {
+ checkArgument(value.length() <= maxLength, "Maximum length of %s is %s: %s", name, maxLength, value);
+ }
+ }
+
public String getChainsJson() {
return chains == null ? null : GSON.toJson(chains);
}
@@ -88,10 +94,17 @@ public record ScaDependencyDto(
return userDependencyFilePath != null ? userDependencyFilePath : lockfileDependencyFilePath;
}
- private static void checkLength(@Nullable String value, int maxLength, String name) {
- if (value != null) {
- checkArgument(value.length() <= maxLength, "Maximum length of %s is %s: %s", name, maxLength, value);
- }
+ public Builder toBuilder() {
+ return new Builder()
+ .setUuid(this.uuid)
+ .setScaReleaseUuid(this.scaReleaseUuid)
+ .setDirect(this.direct)
+ .setScope(this.scope)
+ .setUserDependencyFilePath(this.userDependencyFilePath)
+ .setLockfileDependencyFilePath(this.lockfileDependencyFilePath)
+ .setChains(this.chains)
+ .setCreatedAt(this.createdAt)
+ .setUpdatedAt(this.updatedAt);
}
public static class Builder {
@@ -155,17 +168,4 @@ public record ScaDependencyDto(
uuid, scaReleaseUuid, direct, scope, userDependencyFilePath, lockfileDependencyFilePath, chains, createdAt, updatedAt);
}
}
-
- public Builder toBuilder() {
- return new Builder()
- .setUuid(this.uuid)
- .setScaReleaseUuid(this.scaReleaseUuid)
- .setDirect(this.direct)
- .setScope(this.scope)
- .setUserDependencyFilePath(this.userDependencyFilePath)
- .setLockfileDependencyFilePath(this.lockfileDependencyFilePath)
- .setChains(this.chains)
- .setCreatedAt(this.createdAt)
- .setUpdatedAt(this.updatedAt);
- }
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependencyReleaseDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependencyReleaseDto.java
index 95682f5f688..131a84bf1c0 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependencyReleaseDto.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaDependencyReleaseDto.java
@@ -26,20 +26,20 @@ import javax.annotation.Nullable;
* This DTO represents the join of sca_dependencies and sca_releases, and is "read only"
* (it cannot be inserted, it would only be a query result).
*
- * @param dependencyUuid uuid of the sca_dependencies row
- * @param releaseUuid uuid of the sca_releases row
- * @param componentUuid uuid of the component both rows were associated with
- * @param direct is it a direct dep
- * @param scope scope/type of the dep like "compile"
- * @param userDependencyFilePath which manifest file (e.g. package.json)
+ * @param dependencyUuid uuid of the sca_dependencies row
+ * @param releaseUuid uuid of the sca_releases row
+ * @param componentUuid uuid of the component both rows were associated with
+ * @param direct is it a direct dep
+ * @param scope scope/type of the dep like "compile"
+ * @param userDependencyFilePath which manifest file (e.g. package.json)
* @param lockfileDependencyFilePath which lockfile (e.g. package-lock.json)
- * @param chains chains that brought the dependency in, e.g. [["pkg:npm/foo@1.0.0", ...], ...]
- * @param packageUrl PURL specification URL
- * @param packageManager package manager
- * @param packageName name of package
- * @param version version
- * @param licenseExpression SPDX license expression
- * @param known was the package known to Sonar
+ * @param chains chains that brought the dependency in, e.g. [["pkg:npm/foo@1.0.0", ...], ...]
+ * @param packageUrl PURL specification URL
+ * @param packageManager package manager
+ * @param packageName name of package
+ * @param version version
+ * @param licenseExpression SPDX license expression
+ * @param known was the package known to Sonar
*/
public record ScaDependencyReleaseDto(String dependencyUuid,
String releaseUuid,
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaReleaseDependenciesDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaReleaseDependenciesDto.java
index 2340352646f..309d2be61bc 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaReleaseDependenciesDto.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaReleaseDependenciesDto.java
@@ -61,7 +61,6 @@ public record ScaReleaseDependenciesDto(
release.known(),
release.createdAt(),
release.updatedAt(),
- dependencies
- );
+ dependencies);
}
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaReleaseDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaReleaseDto.java
index c07c0cb5270..d2c8eab2891 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaReleaseDto.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/sca/ScaReleaseDto.java
@@ -68,6 +68,20 @@ public record ScaReleaseDto(
checkArgument(value.length() <= maxLength, "Maximum length of %s is %s: %s", name, maxLength, value);
}
+ public Builder toBuilder() {
+ return new Builder()
+ .setUuid(this.uuid)
+ .setComponentUuid(this.componentUuid)
+ .setPackageUrl(this.packageUrl)
+ .setPackageManager(this.packageManager)
+ .setPackageName(this.packageName)
+ .setVersion(this.version)
+ .setLicenseExpression(this.licenseExpression)
+ .setKnown(this.known)
+ .setCreatedAt(this.createdAt)
+ .setUpdatedAt(this.updatedAt);
+ }
+
public static class Builder {
private String uuid;
private String componentUuid;
@@ -132,22 +146,7 @@ public record ScaReleaseDto(
public ScaReleaseDto build() {
return new ScaReleaseDto(
- uuid, componentUuid, packageUrl, packageManager, packageName, version, licenseExpression, known, createdAt, updatedAt
- );
+ uuid, componentUuid, packageUrl, packageManager, packageName, version, licenseExpression, known, createdAt, updatedAt);
}
}
-
- public Builder toBuilder() {
- return new Builder()
- .setUuid(this.uuid)
- .setComponentUuid(this.componentUuid)
- .setPackageUrl(this.packageUrl)
- .setPackageManager(this.packageManager)
- .setPackageName(this.packageName)
- .setVersion(this.version)
- .setLicenseExpression(this.licenseExpression)
- .setKnown(this.known)
- .setCreatedAt(this.createdAt)
- .setUpdatedAt(this.updatedAt);
- }
}
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/sca/ScaDependenciesQueryTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/sca/ScaDependenciesQueryTest.java
index 0f310ff5ef4..7a88e9ba53a 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/sca/ScaDependenciesQueryTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/sca/ScaDependenciesQueryTest.java
@@ -21,7 +21,8 @@ package org.sonar.db.sca;
import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
class ScaDependenciesQueryTest {
diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/sca/ScaDependencyReleaseDtoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/sca/ScaDependencyReleaseDtoTest.java
index b5653cecf99..a0be47c280f 100644
--- a/server/sonar-db-dao/src/test/java/org/sonar/db/sca/ScaDependencyReleaseDtoTest.java
+++ b/server/sonar-db-dao/src/test/java/org/sonar/db/sca/ScaDependencyReleaseDtoTest.java
@@ -23,7 +23,7 @@ import java.util.List;
import javax.annotation.Nullable;
import org.junit.jupiter.api.Test;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
class ScaDependencyReleaseDtoTest {
diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/sca/ScaDependenciesDbTester.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/sca/ScaDependenciesDbTester.java
index 6781bebf8c3..3e4659a2e94 100644
--- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/sca/ScaDependenciesDbTester.java
+++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/sca/ScaDependenciesDbTester.java
@@ -48,16 +48,15 @@ public class ScaDependenciesDbTester {
public ScaDependencyDto newScaDependencyDto(String componentUuid, String scaReleaseUuid, String suffix, boolean direct) {
long now = System.currentTimeMillis();
- return new ScaDependencyDto("scaDependencyUuid" + suffix,
- scaReleaseUuid,
- direct,
- "compile",
- "pom.xml",
- "package-lock.json",
- List.of(List.of("pkg:npm/foo@1.0.0")),
- now,
- now
- );
+ return new ScaDependencyDto("scaDependencyUuid" + suffix,
+ scaReleaseUuid,
+ direct,
+ "compile",
+ "pom.xml",
+ "package-lock.json",
+ List.of(List.of("pkg:npm/foo@1.0.0")),
+ now,
+ now);
}
public ScaDependencyDto insertScaDependency(String componentUuid, String scaReleaseUuid, String suffix, boolean direct) {
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/CliCacheService.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/CliCacheService.java
index 1c89c0b8f77..b0cbcf7f721 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/CliCacheService.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/sca/CliCacheService.java
@@ -51,8 +51,8 @@ import static java.lang.String.format;
* can make use of it.
*/
public class CliCacheService {
- private static final Logger LOG = LoggerFactory.getLogger(CliCacheService.class);
protected static final String CLI_WS_URL = "api/v2/analysis/sca-clis";
+ private static final Logger LOG = LoggerFactory.getLogger(CliCacheService.class);
private final SonarUserHome sonarUserHome;
private final ScannerWsClient wsClient;
private final System2 system2;
@@ -63,6 +63,47 @@ public class CliCacheService {
this.system2 = system2;
}
+ static Path newTempFile(Path tempDir) {
+ try {
+ return Files.createTempFile(tempDir, "scaFileCache", null);
+ } catch (IOException e) {
+ throw new IllegalStateException("Fail to create temp file in " + tempDir, e);
+ }
+ }
+
+ static void moveFile(Path sourceFile, Path targetFile) {
+ try {
+ Files.move(sourceFile, targetFile, StandardCopyOption.ATOMIC_MOVE);
+ } catch (IOException e1) {
+ // Check if the file was cached by another process during download
+ if (!Files.exists(targetFile)) {
+ LOG.warn("Unable to rename {} to {}", sourceFile, targetFile);
+ LOG.warn("A copy/delete will be tempted but with no guarantee of atomicity");
+ try {
+ Files.move(sourceFile, targetFile);
+ } catch (IOException e2) {
+ throw new IllegalStateException("Fail to move " + sourceFile + " to " + targetFile, e2);
+ }
+ }
+ }
+ }
+
+ static void mkdir(Path dir) {
+ try {
+ Files.createDirectories(dir);
+ } catch (IOException e) {
+ throw new IllegalStateException("Fail to create cache directory: " + dir, e);
+ }
+ }
+
+ static void downloadBinaryTo(Path downloadLocation, WsResponse response) {
+ try (InputStream stream = response.contentStream()) {
+ FileUtils.copyInputStreamToFile(stream, downloadLocation.toFile());
+ } catch (IOException e) {
+ throw new IllegalStateException(format("Fail to download SCA CLI into %s", downloadLocation), e);
+ }
+ }
+
public File cacheCli() {
List<CliMetadataResponse> metadataResponses = getLatestMetadata(apiOsName(), apiArch());
@@ -79,7 +120,7 @@ public class CliCacheService {
CliMetadataResponse metadataResponse = metadataResponses.get(0);
String checksum = metadataResponse.sha256();
// If we have a matching checksum dir with the existing CLI file, then we are up to date.
- if(!cachedCliFile(checksum).exists()) {
+ if (!cachedCliFile(checksum).exists()) {
LOG.debug("CLI checksum mismatch");
downloadCli(metadataResponse.id(), checksum);
}
@@ -103,7 +144,8 @@ public class CliCacheService {
LOG.info("Requesting CLI for OS {} and arch {}", osName, arch);
GetRequest getRequest = new GetRequest(CLI_WS_URL).setParam("os", osName).setParam("arch", arch);
try (Reader reader = wsClient.call(getRequest).contentReader()) {
- Type listOfMetadata = new TypeToken<ArrayList<CliMetadataResponse>>() {}.getType();
+ Type listOfMetadata = new TypeToken<ArrayList<CliMetadataResponse>>() {
+ }.getType();
return new Gson().fromJson(reader, listOfMetadata);
} catch (Exception e) {
throw new IllegalStateException("Unable to load CLI metadata", e);
@@ -125,7 +167,7 @@ public class CliCacheService {
// We need to make sure the folder structure exists for the correct cache location before performing the move.
mkdir(destinationFile.toPath().getParent());
moveFile(tempFile, destinationFile.toPath());
- if (!destinationFile.setExecutable(true, false)){
+ if (!destinationFile.setExecutable(true, false)) {
throw new IllegalStateException("Unable to mark CLI as executable");
}
} catch (Exception e) {
@@ -137,7 +179,7 @@ public class CliCacheService {
// We don't want to send the raw OS name because there could be too many combinations of the OS name
// to reliably match up with the correct CLI needed to be downloaded. Instead, we send a subset of
// OS names that should match to the correct CLI here.
- if(system2.isOsWindows()) {
+ if (system2.isOsWindows()) {
return "windows";
} else if (system2.isOsMac()) {
return "mac";
@@ -163,52 +205,11 @@ public class CliCacheService {
}
}
- static Path newTempFile(Path tempDir) {
- try {
- return Files.createTempFile(tempDir, "scaFileCache", null);
- } catch (IOException e) {
- throw new IllegalStateException("Fail to create temp file in " + tempDir, e);
- }
- }
-
- static void moveFile(Path sourceFile, Path targetFile) {
- try {
- Files.move(sourceFile, targetFile, StandardCopyOption.ATOMIC_MOVE);
- } catch (IOException e1) {
- // Check if the file was cached by another process during download
- if (!Files.exists(targetFile)) {
- LOG.warn("Unable to rename {} to {}", sourceFile, targetFile);
- LOG.warn("A copy/delete will be tempted but with no guarantee of atomicity");
- try {
- Files.move(sourceFile, targetFile);
- } catch (IOException e2) {
- throw new IllegalStateException("Fail to move " + sourceFile + " to " + targetFile, e2);
- }
- }
- }
- }
-
- static void mkdir(Path dir) {
- try {
- Files.createDirectories(dir);
- } catch (IOException e) {
- throw new IllegalStateException("Fail to create cache directory: " + dir, e);
- }
- }
-
- static void downloadBinaryTo(Path downloadLocation, WsResponse response) {
- try (InputStream stream = response.contentStream()) {
- FileUtils.copyInputStreamToFile(stream, downloadLocation.toFile());
- } catch (IOException e) {
- throw new IllegalStateException(format("Fail to download SCA CLI into %s", downloadLocation), e);
- }
- }
-
private record CliMetadataResponse(
String id,
String filename,
String sha256,
String os,
- String arch
- ) { }
+ String arch) {
+ }
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliCacheServiceTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliCacheServiceTest.java
index 8189345f0e3..4b26c2a3a9b 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliCacheServiceTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliCacheServiceTest.java
@@ -59,12 +59,10 @@ class CliCacheServiceTest {
private final System2 system2 = mock(System2.class);
private final CliCacheService underTest = new CliCacheService(sonarUserHome, scannerWsClient, system2);
-
- @TempDir
- public Path cacheDir;
-
@RegisterExtension
private final LogTesterJUnit5 logTester = new LogTesterJUnit5();
+ @TempDir
+ public Path cacheDir;
@BeforeEach
void setUp() {
@@ -215,7 +213,6 @@ class CliCacheServiceTest {
assertThatThrownBy(() -> CliCacheService.moveFile(sourceFile, targetFile)).isInstanceOf(IllegalStateException.class)
.hasMessageContaining(format("Fail to move %s to %s", sourceFile, targetFile));
-
assertThat(logTester.logs(Level.WARN)).contains(format("Unable to rename %s to %s", sourceFile, targetFile));
assertThat(logTester.logs(Level.WARN)).contains("A copy/delete will be tempted but with no guarantee of atomicity");
}
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliServiceTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliServiceTest.java
index 3ede78c4284..422f485bd51 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliServiceTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/CliServiceTest.java
@@ -70,8 +70,7 @@ class CliServiceTest {
root.getWorkDir().resolve("dependency-files.zip").toString(),
"--directory",
root.getBaseDir().toString(),
- "--debug"
- );
+ "--debug");
String argumentOutput = "Arguments Passed In: " + String.join(" ", args);
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaExecutorTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaExecutorTest.java
index 3c51220c039..b357bd49619 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaExecutorTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/sca/ScaExecutorTest.java
@@ -47,14 +47,12 @@ class ScaExecutorTest {
private final CliCacheService cliCacheService = mock(CliCacheService.class);
private final ReportPublisher reportPublisher = mock(ReportPublisher.class);
private final FeatureFlagsRepository featureFlagsRepository = mock(FeatureFlagsRepository.class);
- private DefaultInputModule root;
-
@RegisterExtension
private final LogTesterJUnit5 logTester = new LogTesterJUnit5();
-
- @TempDir File rootModuleDir;
-
private final ScaExecutor underTest = new ScaExecutor(cliCacheService, cliService, reportPublisher, featureFlagsRepository);
+ @TempDir
+ File rootModuleDir;
+ private DefaultInputModule root;
@BeforeEach
void before() {